[tbb] 31/64: Imported Upstream version 4.0+r233+update5

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

    Imported Upstream version 4.0+r233+update5
---
 CHANGES                                            |  174 +-
 Makefile                                           |    4 +-
 build/AIX.gcc.inc                                  |    2 +-
 build/AIX.inc                                      |    4 +-
 build/FreeBSD.gcc.inc                              |    2 +-
 build/FreeBSD.inc                                  |    4 +-
 build/Makefile.rml                                 |   12 +-
 build/Makefile.tbb                                 |    9 +-
 build/Makefile.tbbmalloc                           |   30 +-
 build/Makefile.tbbproxy                            |    2 +-
 build/Makefile.test                                |   96 +-
 build/SunOS.gcc.inc                                |    2 +-
 build/SunOS.inc                                    |    4 +-
 build/SunOS.suncc.inc                              |    2 +-
 build/big_iron.inc                                 |    4 +-
 build/common.inc                                   |    3 +-
 build/common_rules.inc                             |   16 +-
 build/detect.js                                    |   67 +-
 build/generate_tbbvars.bat                         |    2 +-
 build/generate_tbbvars.sh                          |    2 +-
 build/index.html                                   |    2 +-
 build/linux.gcc.inc                                |   18 +-
 build/linux.icc.inc                                |   35 +-
 build/linux.inc                                    |    8 +-
 build/linux.xl.inc                                 |    2 +-
 build/macos.clang.inc                              |  109 +
 build/macos.gcc.inc                                |    2 +-
 build/macos.icc.inc                                |   13 +-
 build/macos.inc                                    |    8 +-
 build/test_launcher.bat                            |    2 +-
 build/test_launcher.sh                             |    2 +-
 build/version_info_aix.sh                          |   22 +-
 build/version_info_linux.sh                        |   22 +-
 build/version_info_macos.sh                        |   18 +-
 build/version_info_sunos.sh                        |   18 +-
 build/version_info_windows.js                      |   20 +-
 build/vsproject/index.html                         |    2 +-
 build/vsproject/tbbmalloc.vcproj                   |   18 +-
 build/vsproject/tbbmalloc_proxy.vcproj             |   16 +-
 build/vsproject/version_string.tmp                 |    1 -
 build/vsproject/version_string.ver                 |    1 +
 build/windows.cl.inc                               |    2 +-
 build/windows.gcc.inc                              |   13 +-
 build/windows.icl.inc                              |   21 +-
 build/windows.inc                                  |    4 +-
 build/xbox360.cl.inc                               |    2 +-
 build/xbox360.inc                                  |    4 +-
 doc/Release_Notes.txt                              |    2 +-
 doc/html/a00001.html                               |   34 -
 doc/html/a00002.html                               |   34 -
 doc/html/a00003.html                               |   34 -
 doc/html/a00004.html                               |   45 -
 doc/html/a00005.html                               |   16 +-
 doc/html/a00006.html                               |   20 +-
 doc/html/a00007.html                               |   23 +-
 doc/html/a00008.html                               |   34 +
 doc/html/a00009.html                               |    9 +-
 doc/html/a00010.html                               |   45 +
 doc/html/a00011.html                               |   23 +-
 doc/html/a00012.html                               |   17 +-
 doc/html/a00013.html                               |   83 +-
 doc/html/a00015.html                               |   11 +-
 doc/html/a00016.html                               |   44 -
 doc/html/a00017.html                               |   24 +-
 doc/html/a00018.html                               |   25 +-
 doc/html/a00019.html                               |   95 +
 doc/html/a00021.html                               |   36 +
 doc/html/a00022.html                               |   39 +-
 doc/html/a00023.html                               |   41 +-
 doc/html/a00025.html                               |   68 -
 doc/html/a00031.html                               |   93 +-
 doc/html/a00035.html                               |   55 +
 doc/html/a00036.html                               |   66 +-
 doc/html/a00038.html                               |   69 +
 doc/html/a00039.html                               |   33 -
 doc/html/a00041.html                               |   41 -
 doc/html/a00042.html                               |   38 -
 doc/html/a00043.html                               |   49 -
 doc/html/a00044.html                               |   82 +-
 doc/html/a00047.html                               |   47 -
 doc/html/a00048.html                               |   41 -
 doc/html/a00049.html                               |   49 +-
 doc/html/a00050.html                               |   37 -
 doc/html/a00052.html                               |   40 -
 doc/html/a00053.html                               |   41 +
 doc/html/a00054.html                               |   20 +-
 doc/html/a00055.html                               |   49 +
 doc/html/a00057.html                               |   43 +-
 doc/html/a00058.html                               |   83 -
 doc/html/a00060.html                               |   65 +-
 doc/html/a00061.html                               |   80 +-
 doc/html/a00062.html                               |   74 +-
 doc/html/a00063.html                               |   43 +-
 doc/html/a00064.html                               |   41 +
 doc/html/a00066.html                               |   44 +
 doc/html/a00068.html                               |   41 +-
 doc/html/a00070.html                               |   43 -
 doc/html/a00071.html                               |   54 +
 doc/html/a00072.html                               |   61 +-
 doc/html/a00074.html                               |   79 +-
 doc/html/a00075.html                               |   72 +-
 doc/html/a00076.html                               |   67 +-
 doc/html/a00077.html                               |   37 +-
 doc/html/a00078.html                               |   36 -
 doc/html/a00079.html                               |   40 -
 doc/html/a00080.html                               |   34 -
 doc/html/a00082.html                               |   26 +-
 doc/html/a00083.html                               |   33 -
 doc/html/a00084.html                               |   20 +-
 doc/html/a00085.html                               |   34 -
 doc/html/a00086.html                               |   11 +-
 doc/html/a00087.html                               |   37 -
 doc/html/a00088.html                               |   49 +
 doc/html/a00089.html                               |   16 +-
 doc/html/a00090.html                               |   15 +-
 doc/html/a00091.html                               |   32 +-
 doc/html/a00092.html                               |   35 +-
 doc/html/a00093.html                               |   24 +-
 doc/html/a00094.html                               |    8 +-
 doc/html/a00095.html                               |   41 -
 doc/html/a00096.html                               |   10 +-
 doc/html/a00097.html                               |   11 +-
 doc/html/a00098.html                               |   16 +-
 doc/html/a00099.html                               |   14 +-
 doc/html/a00100.html                               |   23 +-
 doc/html/a00101.html                               |   14 +-
 doc/html/a00102.html                               |   37 -
 doc/html/a00103.html                               |   21 +-
 doc/html/a00104.html                               |   18 +-
 doc/html/a00105.html                               |   42 +-
 doc/html/a00106.html                               |   59 +
 doc/html/a00107.html                               |   33 +-
 doc/html/a00108.html                               |   34 +
 doc/html/a00109.html                               |   16 +-
 doc/html/a00110.html                               |   37 +
 doc/html/a00111.html                               |   19 +-
 doc/html/a00112.html                               |   17 +-
 doc/html/a00113.html                               |   22 +-
 doc/html/a00114.html                               |   28 +-
 doc/html/a00115.html                               |   37 +
 doc/html/a00116.html                               |    9 +-
 doc/html/a00117.html                               |   44 +
 doc/html/a00118.html                               |   39 +
 doc/html/a00119.html                               |   78 +-
 doc/html/a00120.html                               |   88 -
 doc/html/a00121.html                               |   28 +-
 doc/html/a00123.html                               |   35 +
 doc/html/a00125.html                               |   41 +
 doc/html/a00126.html                               |   39 +
 doc/html/a00127.html                               |   42 +
 doc/html/a00128.html                               |   23 +-
 doc/html/a00130.html                               |   25 +-
 doc/html/a00132.html                               |   35 -
 doc/html/a00133.html                               |   90 +
 doc/html/a00134.html                               |   72 +-
 doc/html/a00135.html                               |   40 +
 doc/html/a00136.html                               |   36 -
 doc/html/a00138.html                               |   34 -
 doc/html/a00139.html                               |   33 -
 doc/html/a00140.html                               |   33 -
 doc/html/a00141.html                               |   33 -
 doc/html/a00142.html                               |   19 +-
 doc/html/a00143.html                               |   44 -
 doc/html/a00144.html                               |   36 +-
 doc/html/a00145.html                               |   37 -
 doc/html/a00146.html                               |   35 +
 doc/html/a00148.html                               |   44 +
 doc/html/a00150.html                               |   12 +-
 doc/html/a00152.html                               |   34 +
 doc/html/a00153.html                               |   33 +
 doc/html/a00154.html                               |    7 +-
 doc/html/a00155.html                               |    7 +-
 doc/html/a00156.html                               |   33 +
 doc/html/a00157.html                               |   38 +
 doc/html/a00158.html                               |   44 +
 doc/html/a00159.html                               |   45 +
 doc/html/a00160.html                               |   37 +
 doc/html/a00164.html                               |   33 -
 doc/html/a00165.html                               |   36 +
 doc/html/a00168.html                               |   35 -
 doc/html/a00169.html                               |   15 +-
 doc/html/a00170.html                               |   34 +
 doc/html/a00179.html                               |   33 +
 doc/html/a00183.html                               |   35 +
 doc/html/a00184.html                               |   41 +
 doc/html/a00225.html                               |   64 -
 doc/html/a00225.png                                |  Bin 674 -> 0 bytes
 doc/html/a00226.html                               |   58 -
 doc/html/a00227.html                               |   63 -
 doc/html/a00228.html                               |   61 -
 doc/html/a00229.html                               |   56 -
 doc/html/a00230.html                               |   59 -
 doc/html/a00231.html                               |   64 -
 doc/html/a00232.html                               |   50 -
 doc/html/a00233.html                               |  224 --
 doc/html/a00234.html                               |   86 -
 doc/html/a00235.html                               |   93 -
 doc/html/a00236.html                               |   89 -
 doc/html/a00237.html                               |  411 ---
 doc/html/a00237.png                                |  Bin 2898 -> 0 bytes
 doc/html/a00238.html                               |  114 -
 doc/html/a00239.html                               |   65 -
 doc/html/a00240.html                               |  157 --
 doc/html/a00240.png                                |  Bin 472 -> 0 bytes
 doc/html/a00241.html                               |   84 -
 doc/html/a00242.html                               |  306 ---
 doc/html/a00243.html                               |  646 -----
 doc/html/a00244.html                               |   68 -
 doc/html/a00245.html                               |   65 -
 doc/html/a00246.html                               |  102 -
 doc/html/a00247.html                               |  348 ---
 doc/html/a00248.html                               |  169 --
 doc/html/a00249.html                               |  132 +-
 doc/html/a00249.png                                |  Bin 720 -> 674 bytes
 doc/html/a00250.html                               |  572 +----
 doc/html/{a00226.png => a00250.png}                |  Bin
 doc/html/a00251.html                               |   51 +-
 doc/html/a00251.png                                |  Bin 0 -> 792 bytes
 doc/html/a00252.html                               |  114 +-
 doc/html/a00252.png                                |  Bin 777 -> 787 bytes
 doc/html/a00253.html                               |  145 +-
 doc/html/a00254.html                               |   39 +-
 doc/html/a00255.html                               |  171 +-
 doc/html/a00256.html                               |  209 +-
 doc/html/a00257.html                               |   56 +-
 doc/html/a00258.html                               |   27 +-
 doc/html/a00259.html                               |  194 +-
 doc/html/a00260.html                               |   76 +-
 doc/html/a00260.png                                |  Bin 942 -> 0 bytes
 doc/html/a00261.html                               |   88 +-
 doc/html/a00261.png                                |  Bin 1016 -> 0 bytes
 doc/html/a00262.html                               |  221 +-
 doc/html/{a00236.png => a00262.png}                |  Bin
 doc/html/a00263.html                               |  394 ++-
 doc/html/a00263.png                                |  Bin 4876 -> 2898 bytes
 doc/html/a00264.html                               |   81 +-
 doc/html/a00265.html                               |   37 +-
 doc/html/a00266.html                               |  162 +-
 doc/html/a00266.png                                |  Bin 1209 -> 472 bytes
 doc/html/a00267.html                               |   61 +-
 doc/html/a00268.html                               |  287 ++-
 doc/html/{a00242.png => a00268.png}                |  Bin
 doc/html/a00269.html                               |  620 ++++-
 doc/html/a00270.html                               |  115 +-
 doc/html/{a00244.png => a00270.png}                |  Bin
 doc/html/a00271.html                               |   72 +-
 doc/html/a00272.html                               |   72 +-
 doc/html/{a00246.png => a00272.png}                |  Bin
 doc/html/a00273.html                               |  305 ++-
 doc/html/a00274.html                               |  150 +-
 doc/html/a00274.png                                |  Bin 943 -> 0 bytes
 doc/html/a00275.html                               |  146 +-
 doc/html/{a00249.png => a00275.png}                |  Bin
 doc/html/a00276.html                               |  577 ++++-
 doc/html/a00277.html                               |   35 +-
 doc/html/a00278.html                               |   67 +-
 doc/html/{a00252.png => a00278.png}                |  Bin
 doc/html/a00279.html                               |  147 +-
 doc/html/{a00253.png => a00279.png}                |  Bin
 doc/html/a00280.html                               |   43 +-
 doc/html/{a00254.png => a00280.png}                |  Bin
 doc/html/a00281.html                               |  172 +-
 doc/html/a00282.html                               |  216 +-
 doc/html/{a00256.png => a00282.png}                |  Bin
 doc/html/a00283.html                               |   50 +-
 doc/html/a00284.html                               |   86 +-
 doc/html/a00285.html                               |   31 +-
 doc/html/a00286.html                               |  119 +-
 doc/html/a00286.png                                |  Bin 2103 -> 942 bytes
 doc/html/a00287.html                               |  113 +-
 doc/html/a00287.png                                |  Bin 2251 -> 1016 bytes
 doc/html/a00288.html                               |  255 +-
 doc/html/a00289.html                               |   84 +-
 doc/html/a00289.png                                |  Bin 0 -> 5357 bytes
 doc/html/a00290.html                               |   51 +-
 doc/html/a00291.html                               |   93 +-
 doc/html/a00292.html                               |  218 +-
 doc/html/{a00266.png => a00292.png}                |  Bin
 doc/html/a00293.html                               |   46 +-
 doc/html/a00294.html                               |   44 +-
 doc/html/a00295.html                               |   60 +-
 doc/html/a00296.html                               |  138 +-
 doc/html/a00297.html                               |   80 +-
 doc/html/a00298.html                               |  295 +--
 doc/html/a00299.html                               |  177 +-
 doc/html/{a00273.png => a00299.png}                |  Bin
 doc/html/a00300.html                               |   48 +-
 doc/html/a00300.png                                |  Bin 0 -> 982 bytes
 doc/html/a00301.html                               |  131 +-
 doc/html/a00302.html                               |   97 +-
 doc/html/a00303.html                               |   42 +-
 doc/html/a00304.html                               |  108 +-
 doc/html/a00305.html                               |  100 +-
 doc/html/a00306.html                               |   70 +-
 doc/html/a00307.html                               |  110 +-
 doc/html/a00308.html                               |  139 +-
 doc/html/a00309.html                               |   37 +-
 doc/html/a00310.html                               |   96 +-
 doc/html/a00310.png                                |  Bin 3064 -> 0 bytes
 doc/html/a00311.html                               |  598 +----
 doc/html/a00312.html                               |  105 +-
 doc/html/{a00286.png => a00312.png}                |  Bin
 doc/html/a00313.html                               |  121 +
 doc/html/{a00287.png => a00313.png}                |  Bin
 doc/html/a00314.html                               |   44 +-
 doc/html/a00315.html                               |   85 +-
 doc/html/a00316.html                               |  149 +-
 doc/html/a00317.html                               |  155 +-
 doc/html/a00318.html                               |  194 +-
 doc/html/a00319.html                               |  145 +-
 doc/html/a00320.html                               |   66 +-
 doc/html/a00321.html                               |   62 +-
 doc/html/{a00295.png => a00321.png}                |  Bin
 doc/html/a00322.html                               |  113 +-
 doc/html/a00323.html                               |   59 +-
 doc/html/a00324.html                               |  314 ++-
 doc/html/a00325.html                               |   85 +-
 doc/html/a00326.html                               |   64 +-
 doc/html/a00327.html                               |   71 +-
 doc/html/{a00301.png => a00327.png}                |  Bin
 doc/html/a00328.html                               |  112 +
 doc/html/{a00302.png => a00328.png}                |  Bin
 doc/html/a00329.html                               |   67 +
 doc/html/a00330.html                               |  135 +
 doc/html/{a00304.png => a00330.png}                |  Bin
 doc/html/a00331.html                               |  131 +
 doc/html/a00332.html                               |   97 +
 doc/html/a00333.html                               |  133 +
 doc/html/a00334.html                               |  149 ++
 doc/html/a00335.html                               |   51 +
 doc/html/a00336.html                               |   75 +
 doc/html/a00336.png                                |  Bin 0 -> 3005 bytes
 doc/html/a00337.html                               |  625 +++++
 doc/html/{a00311.png => a00337.png}                |  Bin
 doc/html/a00338.html                               |   48 +
 doc/html/a00339.html                               |   43 +
 doc/html/a00341.html                               |   83 +
 doc/html/a00342.html                               |  168 ++
 doc/html/a00343.html                               |  176 +-
 doc/html/a00344.html                               |   67 +-
 doc/html/a00345.html                               |  168 ++
 doc/html/{a00319.png => a00345.png}                |  Bin
 doc/html/a00346.html                               |   89 +
 doc/html/a00347.html                               |   56 +
 doc/html/a00348.html                               |  123 +
 doc/html/{a00322.png => a00348.png}                |  Bin
 doc/html/a00349.html                               |   68 +
 doc/html/a00350.html                               |   83 +
 doc/html/a00351.html                               |   50 +
 doc/html/a00352.html                               |   55 +
 doc/html/a00353.html                               |   93 +
 doc/html/a00354.html                               |   68 +
 doc/html/a00363.html                               |  106 -
 doc/html/a00372.html                               |  152 ++
 doc/html/a00373.html                               |   66 +
 doc/html/a00383.html                               |  714 ------
 doc/html/a00392.html                               |  119 +
 doc/html/a00395.html                               |  364 ---
 doc/html/a00396.html                               |   50 -
 doc/html/a00397.html                               |  319 ---
 doc/html/a00398.html                               |   59 -
 doc/html/a00399.html                               |   32 -
 doc/html/a00400.html                               |   44 -
 doc/html/a00401.html                               |   73 -
 doc/html/a00403.html                               |  433 ----
 doc/html/a00411.html                               |   83 +
 doc/html/a00412.html                               |  127 -
 doc/html/a00413.html                               |  113 -
 doc/html/a00414.html                               |  752 +++++-
 doc/html/a00415.html                               |  140 --
 doc/html/a00417.html                               |   98 -
 doc/html/a00418.html                               | 1219 ---------
 doc/html/a00426.html                               |  364 +++
 doc/html/a00427.html                               |   50 +
 doc/html/a00428.html                               |  319 +++
 doc/html/a00429.html                               |  345 +--
 doc/html/a00430.html                               |   32 +
 doc/html/a00431.html                               |   44 +
 doc/html/a00432.html                               |  476 ++--
 doc/html/a00436.html                               |  250 --
 doc/html/a00440.html                               |  176 +-
 doc/html/a00441.html                               |  452 ++++
 doc/html/a00443.html                               |  927 -------
 doc/html/a00449.html                               |  127 +
 doc/html/a00450.html                               |  113 +
 doc/html/a00451.html                               |  131 +
 doc/html/a00452.html                               |  216 +-
 doc/html/a00454.html                               |   98 +
 doc/html/a00455.html                               | 2073 +++++++++-------
 doc/html/a00466.html                               |  260 ++
 doc/html/a00468.html                               | 1479 -----------
 doc/html/a00473.html                               |  327 +++
 doc/html/a00476.html                               |  371 +++
 doc/html/a00480.html                               |  399 ++-
 doc/html/a00484.html                               |  199 ++
 doc/html/a00487.html                               | 1060 ++++++--
 doc/html/a00489.html                               |   81 -
 doc/html/a00490.html                               |   83 -
 doc/html/a00491.html                               |  480 ----
 doc/html/a00496.html                               |  163 ++
 doc/html/a00499.html                               |  964 ++++++++
 doc/html/a00500.html                               |  256 --
 doc/html/a00504.html                               |   92 -
 doc/html/a00506.html                               |  386 ---
 doc/html/a00511.html                               | 1655 +++++++++++++
 doc/html/a00512.html                               |  473 ----
 doc/html/a00518.html                               |  341 ---
 doc/html/a00523.html                               |  229 --
 doc/html/a00524.html                               |  269 ++
 doc/html/a00527.html                               |  196 --
 doc/html/a00531.html                               |  642 ++---
 doc/html/a00533.html                               |   81 +
 doc/html/a00534.html                               |   83 +
 doc/html/a00535.html                               |  480 ++++
 doc/html/a00543.html                               |  585 -----
 doc/html/a00544.html                               |  256 ++
 doc/html/a00548.html                               |   92 +
 doc/html/a00550.html                               |  386 +++
 doc/html/a00556.html                               |  476 ++++
 doc/html/a00557.html                               |  134 -
 doc/html/a00558.html                               |  168 --
 doc/html/a00559.html                               |  179 --
 doc/html/a00560.html                               |  241 --
 doc/html/a00561.html                               |  137 -
 doc/html/a00562.html                               |  470 ++--
 doc/html/a00565.html                               |  192 --
 doc/html/a00566.html                               |  217 --
 doc/html/a00567.html                               |  852 ++-----
 doc/html/a00571.html                               |  196 ++
 doc/html/a00575.html                               |  500 ++++
 doc/html/a00577.html                               |  274 --
 doc/html/a00584.html                               |  117 -
 doc/html/a00585.html                               |   90 -
 doc/html/a00587.html                               |  613 ++++-
 doc/html/a00588.html                               |  212 --
 doc/html/a00592.html                               |  253 --
 doc/html/a00593.html                               |  316 ---
 doc/html/a00594.html                               |  748 ------
 doc/html/a00600.html                               |  225 --
 doc/html/a00601.html                               |  272 --
 doc/html/a00603.html                               |  136 +
 doc/html/a00604.html                               |  166 ++
 doc/html/a00605.html                               |  179 ++
 doc/html/a00606.html                               |  241 ++
 doc/html/a00607.html                               |  137 +
 doc/html/a00608.html                               |  473 ++--
 doc/html/a00611.html                               |  192 ++
 doc/html/a00612.html                               |  216 ++
 doc/html/a00613.html                               |  733 ++++++
 doc/html/a00616.html                               |   96 -
 doc/html/a00618.html                               |  164 --
 doc/html/a00623.html                               |  274 ++
 doc/html/a00630.html                               |  117 +
 doc/html/a00631.html                               |   90 +
 doc/html/a00633.html                               |   98 +
 doc/html/a00634.html                               |  225 ++
 doc/html/a00638.html                               |  323 +++
 doc/html/a00639.html                               |  322 +++
 doc/html/a00640.html                               |  782 ++++++
 doc/html/a00647.html                               |  225 ++
 doc/html/a00648.html                               |  302 +++
 doc/html/a00655.html                               |  298 +++
 doc/html/a00663.html                               |   96 +
 doc/html/a00665.html                               |  164 ++
 doc/html/annotated.html                            |  211 +-
 doc/html/concepts.html                             |    2 +-
 doc/html/deprecated.html                           |    4 +-
 doc/html/files.html                                |  108 +-
 doc/html/functions.html                            |   35 +-
 doc/html/functions_0x62.html                       |   12 +-
 doc/html/functions_0x63.html                       |   48 +-
 doc/html/functions_0x64.html                       |   20 +-
 doc/html/functions_0x65.html                       |   43 +-
 doc/html/functions_0x66.html                       |   22 +-
 doc/html/functions_0x67.html                       |   16 +-
 doc/html/functions_0x69.html                       |   48 +-
 doc/html/functions_0x6c.html                       |   14 +-
 doc/html/functions_0x6d.html                       |   16 +-
 doc/html/functions_0x6e.html                       |   10 +-
 doc/html/functions_0x6f.html                       |   26 +-
 doc/html/functions_0x70.html                       |   35 +-
 doc/html/functions_0x71.html                       |    8 +-
 doc/html/functions_0x72.html                       |   60 +-
 doc/html/functions_0x73.html                       |   54 +-
 doc/html/functions_0x74.html                       |   38 +-
 doc/html/functions_0x75.html                       |    8 +-
 doc/html/functions_0x76.html                       |    4 +-
 doc/html/functions_0x77.html                       |    6 +-
 doc/html/functions_0x7e.html                       |   52 +-
 doc/html/functions_enum.html                       |   12 +-
 doc/html/functions_eval.html                       |   32 +-
 doc/html/functions_func.html                       |   28 +-
 doc/html/functions_func_0x62.html                  |   12 +-
 doc/html/functions_func_0x63.html                  |   44 +-
 doc/html/functions_func_0x64.html                  |   14 +-
 doc/html/functions_func_0x65.html                  |   17 +-
 doc/html/functions_func_0x66.html                  |   12 +-
 doc/html/functions_func_0x67.html                  |   16 +-
 doc/html/functions_func_0x69.html                  |   46 +-
 doc/html/functions_func_0x6c.html                  |   14 +-
 doc/html/functions_func_0x6d.html                  |   10 +-
 doc/html/functions_func_0x6e.html                  |    8 +-
 doc/html/functions_func_0x6f.html                  |   20 +-
 doc/html/functions_func_0x70.html                  |   31 +-
 doc/html/functions_func_0x71.html                  |    8 +-
 doc/html/functions_func_0x72.html                  |   50 +-
 doc/html/functions_func_0x73.html                  |   46 +-
 doc/html/functions_func_0x74.html                  |   38 +-
 doc/html/functions_func_0x75.html                  |    8 +-
 doc/html/functions_func_0x77.html                  |    6 +-
 doc/html/functions_func_0x7e.html                  |   52 +-
 doc/html/functions_rela.html                       |    8 +-
 doc/html/functions_type.html                       |   32 +-
 doc/html/functions_vars.html                       |   24 +-
 doc/html/globals.html                              |   20 +-
 doc/html/globals_func.html                         |   20 +-
 doc/html/hierarchy.html                            |  255 +-
 doc/html/index.html                                |    2 +-
 doc/html/modules.html                              |   14 +-
 doc/html/namespacemembers.html                     |   40 +-
 doc/html/namespacemembers_enum.html                |    7 +-
 doc/html/namespacemembers_eval.html                |   11 +-
 doc/html/namespacemembers_func.html                |   27 +-
 doc/html/namespacemembers_type.html                |   44 -
 doc/html/namespaces.html                           |    5 +-
 doc/html/pages.html                                |    2 +-
 doc/html/parallel_do_body_req.html                 |    2 +-
 doc/html/parallel_for_body_req.html                |    2 +-
 doc/html/parallel_reduce_body_req.html             |    2 +-
 doc/html/parallel_reduce_lambda_req.html           |    2 +-
 doc/html/parallel_scan_body_req.html               |    2 +-
 doc/html/parallel_sort_iter_req.html               |    2 +-
 doc/html/range_req.html                            |    2 +-
 examples/GettingStarted/index.html                 |    4 +-
 examples/GettingStarted/sub_string_finder/Makefile |   30 +-
 .../sub_string_finder/Makefile.windows             |    2 +-
 .../GettingStarted/sub_string_finder/index.html    |   22 +-
 .../sub_string_finder/sub_string_finder.cpp        |    2 +-
 .../sub_string_finder_extended.cpp                 |   40 +-
 .../sub_string_finder/sub_string_finder_pretty.cpp |    2 +-
 examples/Makefile                                  |    2 +-
 examples/common/copy_libraries.bat                 |    4 +-
 examples/common/gui/Makefile.gmake                 |   18 +-
 examples/common/gui/Makefile.win                   |    2 +-
 examples/common/gui/convideo.cpp                   |    2 +-
 examples/common/gui/d2dvideo.cpp                   |  209 ++
 examples/common/gui/ddvideo.cpp                    |   11 +-
 examples/common/gui/dxcheck.bat                    |    2 +-
 examples/common/gui/gdivideo.cpp                   |    2 +-
 examples/common/gui/macvideo.cpp                   | 1469 +----------
 examples/common/gui/video.h                        |    8 +-
 examples/common/gui/winvideo.h                     |   19 +-
 examples/common/gui/xcode/tbbExample/Info.plist    |   59 +
 examples/common/gui/xcode/tbbExample/OpenGLView.h  |   35 +
 examples/common/gui/xcode/tbbExample/OpenGLView.m  |  106 +
 examples/common/gui/xcode/tbbExample/PkgInfo       |    1 +
 .../xcode/tbbExample/en.lproj/InfoPlist.strings    |    2 +
 .../gui/xcode/tbbExample/en.lproj/MainMenu.nib     |  Bin 0 -> 3312 bytes
 .../gui/xcode/tbbExample/en.lproj/MainMenu.xib     |  291 +++
 examples/common/gui/xcode/tbbExample/main.m        |   27 +
 .../common/gui/xcode/tbbExample/tbbAppDelegate.h   |   33 +
 .../common/gui/xcode/tbbExample/tbbAppDelegate.m   |   51 +
 .../gui/xcode/tbbExample/tbbExample-Info.plist     |   45 +
 .../gui/xcode/tbbExample/tbbExample-Prefix.pch     |   27 +
 examples/common/gui/xvideo.cpp                     |    8 +-
 examples/common/index.html                         |    8 +-
 examples/common/utility/fast_random.h              |    2 +-
 examples/common/utility/utility.h                  |    2 +-
 .../concurrent_hash_map/count_strings/Makefile     |    2 +-
 .../count_strings/Makefile.windows                 |    2 +-
 .../count_strings/count_strings.cpp                |    2 +-
 .../concurrent_hash_map/count_strings/index.html   |    6 +-
 examples/concurrent_hash_map/index.html            |    2 +-
 .../concurrent_priority_queue/shortpath/Makefile   |    4 +-
 .../shortpath/Makefile.windows                     |    2 +-
 .../concurrent_priority_queue/shortpath/index.html |    6 +-
 .../shortpath/shortpath.cpp                        |   10 +-
 .../xcode/shortpath.xcodeproj/project.pbxproj      |  634 +++--
 examples/graph/binpack/Makefile                    |    2 +-
 examples/graph/binpack/Makefile.windows            |    2 +-
 examples/graph/binpack/binpack.cpp                 |    7 +-
 examples/graph/binpack/index.html                  |    6 +-
 .../xcode/binpack.xcodeproj/project.pbxproj        |  634 +++--
 examples/graph/dining_philosophers/Makefile        |    6 +-
 .../graph/dining_philosophers/Makefile.windows     |    6 +-
 .../dining_philosophers/dining_philosophers.cpp    |  324 +++
 examples/graph/dining_philosophers/index.html      |   15 +-
 .../msvs/dining_philosophers.vcproj                |    2 +-
 .../src/dining_philosophers.cpp                    |  318 ---
 .../dining_philosophers.xcodeproj/project.pbxproj  |    2 +-
 examples/graph/index.html                          |    4 +-
 examples/graph/logic_sim/D_latch.h                 |   64 +
 examples/graph/logic_sim/Makefile                  |   57 +
 examples/graph/logic_sim/Makefile.windows          |   61 +
 examples/graph/logic_sim/basics.h                  |  543 ++++
 examples/graph/logic_sim/four_bit_adder.h          |   70 +
 examples/graph/logic_sim/index.html                |   67 +
 examples/graph/logic_sim/msvs/logic_sim_cl.sln     |   52 +
 examples/graph/logic_sim/msvs/logic_sim_icl.sln    |  132 +
 examples/graph/logic_sim/msvs/test_all.icproj      |   11 +
 examples/graph/logic_sim/msvs/test_all.vcproj      |  356 +++
 examples/graph/logic_sim/one_bit_adder.h           |   82 +
 examples/graph/logic_sim/test_all.cpp              |  580 +++++
 examples/index.html                                |  105 +-
 examples/parallel_do/index.html                    |    2 +-
 examples/parallel_do/parallel_preorder/Graph.cpp   |    2 +-
 examples/parallel_do/parallel_preorder/Graph.h     |    2 +-
 examples/parallel_do/parallel_preorder/Makefile    |    2 +-
 .../parallel_do/parallel_preorder/Makefile.windows |    2 +-
 examples/parallel_do/parallel_preorder/Matrix.h    |    2 +-
 examples/parallel_do/parallel_preorder/index.html  |    6 +-
 examples/parallel_do/parallel_preorder/main.cpp    |    2 +-
 .../parallel_preorder/parallel_preorder.cpp        |    2 +-
 examples/parallel_for/game_of_life/Makefile        |    2 +-
 .../parallel_for/game_of_life/Makefile.windows     |    2 +-
 examples/parallel_for/game_of_life/index.html      |    6 +-
 .../parallel_for/game_of_life/src/AssemblyInfo.cpp |    2 +-
 examples/parallel_for/game_of_life/src/Board.h     |    2 +-
 .../parallel_for/game_of_life/src/Evolution.cpp    |    2 +-
 examples/parallel_for/game_of_life/src/Evolution.h |    3 +-
 examples/parallel_for/game_of_life/src/Form1.h     |    2 +-
 .../parallel_for/game_of_life/src/Game_of_life.cpp |    2 +-
 .../parallel_for/game_of_life/src/Update_state.cpp |    2 +-
 examples/parallel_for/index.html                   |    2 +-
 examples/parallel_for/polygon_overlay/Makefile     |   21 +-
 .../parallel_for/polygon_overlay/Makefile.windows  |    2 +-
 examples/parallel_for/polygon_overlay/index.html   |   17 +-
 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/English.lproj/main.nib/classes.nib       |    4 -
 .../xcode/English.lproj/main.nib/info.nib          |   26 -
 .../xcode/English.lproj/main.nib/objects.xib       |  183 --
 .../parallel_for/polygon_overlay/xcode/Info.plist  |   26 -
 .../polygon_overlay/xcode/PolygonOverlay.pch       |    5 -
 .../xcode/PolygonOverlay.xcodeproj/project.pbxproj |  317 ---
 .../polygon_overlay.xcodeproj/project.pbxproj      |  355 +++
 .../xcshareddata/xcschemes/tbbExample.xcscheme     |   93 +
 examples/parallel_for/seismic/Makefile             |   52 +-
 examples/parallel_for/seismic/Makefile.windows     |    2 +-
 examples/parallel_for/seismic/index.html           |   29 +-
 examples/parallel_for/seismic/main.cpp             |   36 +-
 examples/parallel_for/seismic/seismic_video.cpp    |    2 +-
 examples/parallel_for/seismic/seismic_video.h      |    2 +-
 examples/parallel_for/seismic/universe.cpp         |    5 +-
 examples/parallel_for/seismic/universe.h           |    2 +-
 .../xcode/English.lproj/main.nib/classes.nib       |    4 -
 .../seismic/xcode/English.lproj/main.nib/info.nib  |   26 -
 .../xcode/English.lproj/main.nib/objects.xib       |  183 --
 examples/parallel_for/seismic/xcode/Info.plist     |   26 -
 .../seismic/xcode/SeismicSimulation.pch            |    5 -
 .../SeismicSimulation.xcodeproj/project.pbxproj    |  303 ---
 .../xcode/seismic.xcodeproj/project.pbxproj        |  345 +++
 .../xcshareddata/xcschemes/tbbExample.xcscheme     |   93 +
 examples/parallel_for/tachyon/Makefile             |   14 +-
 examples/parallel_for/tachyon/Makefile.windows     |    2 +-
 examples/parallel_for/tachyon/index.html           |   48 +-
 .../tachyon/msvs/tachyon.serial.vcproj             |    8 +-
 .../parallel_for/tachyon/msvs/tachyon.tbb.vcproj   |    8 +-
 .../parallel_for/tachyon/msvs/tachyon.tbb1d.vcproj |    8 +-
 examples/parallel_for/tachyon/msvs/tachyon.vcproj  |   16 +-
 examples/parallel_for/tachyon/msvs/tachyon_cl.sln  |   68 +-
 examples/parallel_for/tachyon/msvs/tachyon_icl.sln |   32 +-
 examples/parallel_for/tachyon/src/api.cpp          |    4 +-
 examples/parallel_for/tachyon/src/api.h            |    4 +-
 examples/parallel_for/tachyon/src/apigeom.cpp      |    4 +-
 examples/parallel_for/tachyon/src/apitrigeom.cpp   |    4 +-
 examples/parallel_for/tachyon/src/apitrigeom.h     |    2 +-
 examples/parallel_for/tachyon/src/bndbox.cpp       |    4 +-
 examples/parallel_for/tachyon/src/bndbox.h         |    4 +-
 examples/parallel_for/tachyon/src/box.cpp          |    4 +-
 examples/parallel_for/tachyon/src/box.h            |    4 +-
 examples/parallel_for/tachyon/src/camera.cpp       |    4 +-
 examples/parallel_for/tachyon/src/camera.h         |    4 +-
 examples/parallel_for/tachyon/src/coordsys.cpp     |    4 +-
 examples/parallel_for/tachyon/src/coordsys.h       |    4 +-
 examples/parallel_for/tachyon/src/cylinder.cpp     |    4 +-
 examples/parallel_for/tachyon/src/cylinder.h       |    4 +-
 examples/parallel_for/tachyon/src/extvol.cpp       |    4 +-
 examples/parallel_for/tachyon/src/extvol.h         |    4 +-
 examples/parallel_for/tachyon/src/global.cpp       |    4 +-
 examples/parallel_for/tachyon/src/global.h         |    4 +-
 examples/parallel_for/tachyon/src/grid.cpp         |    4 +-
 examples/parallel_for/tachyon/src/grid.h           |    4 +-
 examples/parallel_for/tachyon/src/imageio.cpp      |    4 +-
 examples/parallel_for/tachyon/src/imageio.h        |    4 +-
 examples/parallel_for/tachyon/src/imap.cpp         |    4 +-
 examples/parallel_for/tachyon/src/imap.h           |    4 +-
 examples/parallel_for/tachyon/src/intersect.cpp    |    4 +-
 examples/parallel_for/tachyon/src/intersect.h      |    4 +-
 examples/parallel_for/tachyon/src/jpeg.cpp         |    4 +-
 examples/parallel_for/tachyon/src/jpeg.h           |    4 +-
 examples/parallel_for/tachyon/src/light.cpp        |    4 +-
 examples/parallel_for/tachyon/src/light.h          |    4 +-
 examples/parallel_for/tachyon/src/machine.h        |    4 +-
 examples/parallel_for/tachyon/src/macros.h         |    4 +-
 examples/parallel_for/tachyon/src/main.cpp         |   28 +-
 examples/parallel_for/tachyon/src/objbound.cpp     |    4 +-
 examples/parallel_for/tachyon/src/objbound.h       |    4 +-
 examples/parallel_for/tachyon/src/parse.cpp        |    5 +-
 examples/parallel_for/tachyon/src/parse.h          |    4 +-
 examples/parallel_for/tachyon/src/plane.cpp        |    4 +-
 examples/parallel_for/tachyon/src/plane.h          |    4 +-
 examples/parallel_for/tachyon/src/ppm.cpp          |    5 +-
 examples/parallel_for/tachyon/src/ppm.h            |    4 +-
 examples/parallel_for/tachyon/src/pthread.cpp      |    2 +-
 examples/parallel_for/tachyon/src/pthread.h        |    2 +-
 examples/parallel_for/tachyon/src/quadric.cpp      |    4 +-
 examples/parallel_for/tachyon/src/quadric.h        |    4 +-
 examples/parallel_for/tachyon/src/render.cpp       |    2 +-
 examples/parallel_for/tachyon/src/render.h         |    4 +-
 examples/parallel_for/tachyon/src/ring.cpp         |    4 +-
 examples/parallel_for/tachyon/src/ring.h           |    4 +-
 examples/parallel_for/tachyon/src/shade.cpp        |    4 +-
 examples/parallel_for/tachyon/src/shade.h          |    4 +-
 examples/parallel_for/tachyon/src/sphere.cpp       |    4 +-
 examples/parallel_for/tachyon/src/sphere.h         |    4 +-
 .../parallel_for/tachyon/src/tachyon_video.cpp     |   65 +-
 examples/parallel_for/tachyon/src/tachyon_video.h  |    9 +-
 examples/parallel_for/tachyon/src/texture.cpp      |    4 +-
 examples/parallel_for/tachyon/src/texture.h        |    4 +-
 examples/parallel_for/tachyon/src/tgafile.cpp      |    4 +-
 examples/parallel_for/tachyon/src/tgafile.h        |    4 +-
 examples/parallel_for/tachyon/src/trace.h          |    4 +-
 examples/parallel_for/tachyon/src/trace.serial.cpp |    2 +-
 examples/parallel_for/tachyon/src/trace.tbb.cpp    |   78 +-
 examples/parallel_for/tachyon/src/trace.tbb1d.cpp  |   16 +-
 examples/parallel_for/tachyon/src/trace_rest.cpp   |    4 +-
 examples/parallel_for/tachyon/src/triangle.cpp     |    4 +-
 examples/parallel_for/tachyon/src/triangle.h       |    4 +-
 examples/parallel_for/tachyon/src/types.h          |    4 +-
 examples/parallel_for/tachyon/src/ui.cpp           |    4 +-
 examples/parallel_for/tachyon/src/ui.h             |    4 +-
 examples/parallel_for/tachyon/src/util.cpp         |    2 +-
 examples/parallel_for/tachyon/src/util.h           |    4 +-
 examples/parallel_for/tachyon/src/vector.cpp       |    4 +-
 examples/parallel_for/tachyon/src/vector.h         |    4 +-
 examples/parallel_for/tachyon/src/vol.cpp          |    2 +-
 examples/parallel_for/tachyon/src/vol.h            |    4 +-
 .../xcode/English.lproj/main.nib/classes.nib       |    4 -
 .../tachyon/xcode/English.lproj/main.nib/info.nib  |   26 -
 .../xcode/English.lproj/main.nib/objects.xib       |  183 --
 examples/parallel_for/tachyon/xcode/Info.plist     |   26 -
 examples/parallel_for/tachyon/xcode/tachyon.pch    |    5 -
 .../xcode/tachyon.xcodeproj/project.pbxproj        | 1354 +++++-----
 .../xcshareddata/xcschemes/tachyon.serial.xcscheme |   98 +
 .../xcshareddata/xcschemes/tachyon.tbb.xcscheme    |   99 +
 .../xcshareddata/xcschemes/tachyon.tbb1d.xcscheme  |   99 +
 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    |   10 +-
 examples/parallel_reduce/index.html                |    2 +-
 examples/parallel_reduce/primes/Makefile           |   18 +-
 examples/parallel_reduce/primes/Makefile.windows   |    2 +-
 examples/parallel_reduce/primes/index.html         |   16 +-
 examples/parallel_reduce/primes/main.cpp           |   21 +-
 examples/parallel_reduce/primes/primes.cpp         |    5 +-
 examples/parallel_reduce/primes/primes.h           |    8 +-
 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                |   10 +-
 examples/pipeline/square/square.cpp                |    2 +-
 examples/task/index.html                           |    2 +-
 examples/task/tree_sum/Makefile                    |    2 +-
 examples/task/tree_sum/Makefile.windows            |    2 +-
 .../task/tree_sum/OptimizedParallelSumTree.cpp     |    6 +-
 examples/task/tree_sum/SerialSumTree.cpp           |    2 +-
 examples/task/tree_sum/SimpleParallelSumTree.cpp   |    2 +-
 examples/task/tree_sum/TreeMaker.h                 |    2 +-
 examples/task/tree_sum/common.h                    |    2 +-
 examples/task/tree_sum/index.html                  |   16 +-
 examples/task/tree_sum/main.cpp                    |    2 +-
 examples/task_group/index.html                     |    2 +-
 examples/task_group/sudoku/Makefile                |   22 +-
 examples/task_group/sudoku/Makefile.windows        |    2 +-
 examples/task_group/sudoku/index.html              |   11 +-
 examples/task_group/sudoku/sudoku.cpp              |   42 +-
 examples/task_priority/fractal/Makefile            |   21 +-
 examples/task_priority/fractal/Makefile.windows    |    2 +-
 examples/task_priority/fractal/fractal.cpp         |   11 +-
 examples/task_priority/fractal/fractal.h           |    2 +-
 examples/task_priority/fractal/fractal_video.h     |    2 +-
 examples/task_priority/fractal/index.html          |    7 +-
 examples/task_priority/fractal/main.cpp            |    4 +-
 .../xcode/English.lproj/main.nib/classes.nib       |    8 -
 .../fractal/xcode/English.lproj/main.nib/info.nib  |   18 -
 .../xcode/English.lproj/main.nib/objects.xib       |   36 -
 examples/task_priority/fractal/xcode/Info.plist    |   26 -
 examples/task_priority/fractal/xcode/fractal.pch   |    5 -
 .../xcode/fractal.xcodeproj/project.pbxproj        |  363 +--
 .../xcshareddata/xcschemes/tbbExample.xcscheme     |   93 +
 examples/task_priority/index.html                  |    2 +-
 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             |   12 +-
 examples/test_all/index.html                       |    4 +-
 include/index.html                                 |    6 +-
 include/serial/tbb/parallel_for.h                  |    2 +-
 include/serial/tbb/tbb_annotate.h                  |    2 +-
 include/tbb/aggregator.h                           |  210 ++
 include/tbb/aligned_space.h                        |    2 +-
 include/tbb/atomic.h                               |   64 +-
 include/tbb/blocked_range.h                        |    2 +-
 include/tbb/blocked_range2d.h                      |    2 +-
 include/tbb/blocked_range3d.h                      |    2 +-
 include/tbb/cache_aligned_allocator.h              |   15 +-
 include/tbb/combinable.h                           |    2 +-
 include/tbb/compat/condition_variable              |    7 +-
 include/tbb/compat/ppl.h                           |    2 +-
 include/tbb/compat/thread                          |    2 +-
 include/tbb/compat/tuple                           |  220 +-
 include/tbb/concurrent_hash_map.h                  |   56 +-
 include/tbb/concurrent_lru_cache.h                 |  238 ++
 include/tbb/concurrent_priority_queue.h            |    5 +-
 include/tbb/concurrent_queue.h                     |    9 +-
 include/tbb/concurrent_unordered_map.h             |    2 +-
 include/tbb/concurrent_unordered_set.h             |    2 +-
 include/tbb/concurrent_vector.h                    |   69 +-
 include/tbb/critical_section.h                     |    2 +-
 include/tbb/enumerable_thread_specific.h           |   12 +-
 include/tbb/flow_graph.h                           |  831 ++++---
 include/tbb/index.html                             |   10 +-
 include/tbb/internal/_aggregator_impl.h            |    8 +-
 include/tbb/internal/_concurrent_queue_impl.h      |   69 +-
 include/tbb/internal/_concurrent_unordered_impl.h  |    8 +-
 include/tbb/internal/_flow_graph_impl.h            |   20 +-
 .../tbb/internal/_flow_graph_item_buffer_impl.h    |    2 +-
 include/tbb/internal/_flow_graph_join_impl.h       |  443 +---
 include/tbb/internal/_flow_graph_node_impl.h       |   37 +-
 include/tbb/internal/_flow_graph_or_impl.h         |   20 +-
 .../tbb/internal/_flow_graph_tagged_buffer_impl.h  |   13 +-
 include/tbb/internal/_flow_graph_types_impl.h      |   12 +-
 include/tbb/internal/_tbb_windef.h                 |    4 +-
 include/tbb/machine/gcc_generic.h                  |   76 +-
 include/tbb/machine/ibm_aix51.h                    |   15 +-
 include/tbb/machine/linux_common.h                 |    2 +-
 include/tbb/machine/linux_ia32.h                   |   40 +-
 include/tbb/machine/linux_ia64.h                   |    7 +-
 include/tbb/machine/linux_intel64.h                |   20 +-
 include/tbb/machine/mac_ppc.h                      |   24 +-
 include/tbb/machine/macos_common.h                 |   25 +-
 include/tbb/machine/sunos_sparc.h                  |   66 +-
 include/tbb/machine/windows_api.h                  |    2 +-
 include/tbb/machine/windows_ia32.h                 |   32 +-
 include/tbb/machine/windows_intel64.h              |   30 +-
 include/tbb/machine/xbox360_ppc.h                  |   15 +-
 include/tbb/memory_pool.h                          |   36 +-
 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                         |    2 +-
 include/tbb/parallel_for_each.h                    |    2 +-
 include/tbb/parallel_invoke.h                      |    8 +-
 include/tbb/parallel_reduce.h                      |   44 +-
 include/tbb/parallel_scan.h                        |   18 +-
 include/tbb/parallel_sort.h                        |    2 +-
 include/tbb/parallel_while.h                       |    2 +-
 include/tbb/partitioner.h                          |   24 +-
 include/tbb/pipeline.h                             |   39 +-
 include/tbb/queuing_mutex.h                        |    6 +-
 include/tbb/queuing_rw_mutex.h                     |   16 +-
 include/tbb/reader_writer_lock.h                   |   40 +-
 include/tbb/recursive_mutex.h                      |    2 +-
 include/tbb/runtime_loader.h                       |    2 +-
 include/tbb/scalable_allocator.h                   |   62 +-
 include/tbb/spin_mutex.h                           |    2 +-
 include/tbb/spin_rw_mutex.h                        |   19 +-
 include/tbb/task.h                                 |   13 +-
 include/tbb/task_group.h                           |    2 +-
 include/tbb/task_scheduler_init.h                  |    2 +-
 include/tbb/task_scheduler_observer.h              |    2 +-
 include/tbb/tbb.h                                  |    7 +-
 include/tbb/tbb_allocator.h                        |   15 +-
 include/tbb/tbb_config.h                           |  107 +-
 include/tbb/tbb_exception.h                        |    9 +-
 include/tbb/tbb_machine.h                          |  143 +-
 include/tbb/tbb_profiling.h                        |   14 +-
 include/tbb/tbb_stddef.h                           |  101 +-
 include/tbb/tbb_thread.h                           |    2 +-
 include/tbb/tbbmalloc_proxy.h                      |    2 +-
 include/tbb/tick_count.h                           |    2 +-
 index.html                                         |   12 +-
 src/Makefile                                       |    2 +-
 src/index.html                                     |    2 +-
 src/old/concurrent_queue_v2.cpp                    |   62 +-
 src/old/concurrent_queue_v2.h                      |   10 +-
 src/old/concurrent_vector_v2.cpp                   |   29 +-
 src/old/concurrent_vector_v2.h                     |  105 +-
 src/old/spin_rw_mutex_v2.cpp                       |   41 +-
 src/old/spin_rw_mutex_v2.h                         |   28 +-
 src/old/task_v2.cpp                                |    2 +-
 src/old/test_concurrent_queue_v2.cpp               |   20 +-
 src/old/test_concurrent_vector_v2.cpp              |   71 +-
 src/old/test_mutex_v2.cpp                          |  118 +-
 src/perf/coarse_grained_raii_lru_cache.h           |  153 ++
 src/perf/fibonacci_cutoff.cpp                      |    2 +-
 src/perf/fibonacci_impl_tbb.cpp                    |    2 +-
 src/perf/perf.cpp                                  |    9 +-
 src/perf/perf.h                                    |    2 +-
 src/perf/perf_sched.cpp                            |    2 +-
 src/perf/run_statistics.sh                         |    2 +-
 src/perf/statistics.cpp                            |    2 +-
 src/perf/statistics.h                              |    9 +-
 src/perf/statistics_xml.h                          |    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_hash_map_fill.html                   |    2 +-
 src/perf/time_locked_work.cpp                      |    2 +-
 src/perf/time_lru_cache_throughput.cpp             |  224 ++
 src/perf/time_sandbox.h                            |    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                       |    2 +-
 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                      |    2 +-
 src/rml/perfor/omp_simple.cpp                      |    2 +-
 src/rml/perfor/tbb_multi_omp.cpp                   |    2 +-
 src/rml/perfor/tbb_simple.cpp                      |    2 +-
 src/rml/perfor/thread_level.h                      |    2 +-
 src/rml/server/index.html                          |    2 +-
 src/rml/server/irml.rc                             |    4 +-
 src/rml/server/job_automaton.h                     |    2 +-
 src/rml/server/lin-rml-export.def                  |    2 +-
 src/rml/server/rml_server.cpp                      |  326 +--
 src/rml/server/thread_monitor.h                    |    4 +-
 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                      |    2 +-
 src/rml/test/test_job_automaton.cpp                |    2 +-
 src/rml/test/test_rml_mixed.cpp                    |   53 +-
 src/rml/test/test_rml_omp.cpp                      |   14 +-
 src/rml/test/test_rml_omp_c_linkage.c              |    2 +-
 src/rml/test/test_rml_tbb.cpp                      |    2 +-
 src/rml/test/test_server.h                         |    2 +-
 src/rml/test/test_thread_monitor.cpp               |    4 +-
 src/tbb/arena.cpp                                  |   28 +-
 src/tbb/arena.h                                    |   71 +-
 src/tbb/cache_aligned_allocator.cpp                |   28 +-
 src/tbb/cilk-tbb-interop.h                         |    2 +-
 src/tbb/concurrent_hash_map.cpp                    |    2 +-
 src/tbb/concurrent_monitor.cpp                     |   52 +-
 src/tbb/concurrent_monitor.h                       |   77 +-
 src/tbb/concurrent_queue.cpp                       |  162 +-
 src/tbb/concurrent_vector.cpp                      |   19 +-
 src/tbb/condition_variable.cpp                     |    2 +-
 src/tbb/critical_section.cpp                       |    2 +-
 src/tbb/custom_scheduler.h                         |   23 +-
 src/tbb/dynamic_link.cpp                           |  133 +-
 src/tbb/dynamic_link.h                             |    2 +-
 src/tbb/governor.cpp                               |   21 +-
 src/tbb/governor.h                                 |   16 +-
 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                            |    3 +-
 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/intel64-masm/intel64_misc.asm              |    2 +-
 src/tbb/intrusive_list.h                           |    2 +-
 src/tbb/itt_notify.cpp                             |   25 +-
 src/tbb/itt_notify.h                               |    7 +-
 src/tbb/lin32-tbb-export.def                       |    2 +-
 src/tbb/lin32-tbb-export.lst                       |    9 +-
 src/tbb/lin64-tbb-export.def                       |    2 +-
 src/tbb/lin64-tbb-export.lst                       |   10 +-
 src/tbb/lin64ipf-tbb-export.def                    |    2 +-
 src/tbb/lin64ipf-tbb-export.lst                    |    9 +-
 src/tbb/mac32-tbb-export.def                       |    2 +-
 src/tbb/mac32-tbb-export.lst                       |    9 +-
 src/tbb/mac64-tbb-export.def                       |    2 +-
 src/tbb/mac64-tbb-export.lst                       |   10 +-
 src/tbb/mailbox.h                                  |    7 +-
 src/tbb/market.cpp                                 |   64 +-
 src/tbb/market.h                                   |   10 +-
 src/tbb/mutex.cpp                                  |    2 +-
 src/tbb/observer_proxy.cpp                         |    2 +-
 src/tbb/observer_proxy.h                           |    2 +-
 src/tbb/pipeline.cpp                               |   92 +-
 src/tbb/private_server.cpp                         |    6 +-
 src/tbb/queuing_mutex.cpp                          |    5 +-
 src/tbb/queuing_rw_mutex.cpp                       |   36 +-
 src/tbb/reader_writer_lock.cpp                     |   89 +-
 src/tbb/recursive_mutex.cpp                        |    2 +-
 src/tbb/scheduler.cpp                              |   75 +-
 src/tbb/scheduler.h                                |   12 +-
 src/tbb/scheduler_common.h                         |   20 +-
 src/tbb/scheduler_utility.h                        |   16 +-
 src/tbb/semaphore.cpp                              |    2 +-
 src/tbb/semaphore.h                                |    2 +-
 src/tbb/spin_mutex.cpp                             |    2 +-
 src/tbb/spin_rw_mutex.cpp                          |   30 +-
 src/tbb/task.cpp                                   |    2 +-
 src/tbb/task_group_context.cpp                     |   38 +-
 src/tbb/task_stream.h                              |    4 +-
 src/tbb/tbb_assert_impl.h                          |   15 +-
 src/tbb/tbb_main.cpp                               |   11 +-
 src/tbb/tbb_main.h                                 |    2 +-
 src/tbb/tbb_misc.cpp                               |   16 +-
 src/tbb/tbb_misc.h                                 |   27 +-
 src/tbb/tbb_misc_ex.cpp                            |   15 +-
 src/tbb/tbb_resource.rc                            |    4 +-
 src/tbb/tbb_statistics.cpp                         |   11 +-
 src/tbb/tbb_statistics.h                           |    2 +-
 src/tbb/tbb_thread.cpp                             |    2 +-
 src/tbb/tbb_version.h                              |   61 +-
 src/tbb/tls.h                                      |    2 +-
 src/tbb/tools_api/disable_warnings.h               |    2 +-
 src/tbb/tools_api/internal/ittnotify.h             |    2 +-
 src/tbb/tools_api/ittnotify.h                      | 2614 +++++++++++++++++---
 src/tbb/tools_api/ittnotify_config.h               |  379 ++-
 src/tbb/tools_api/ittnotify_static.c               | 1033 +++++---
 src/tbb/tools_api/ittnotify_static.h               |  194 +-
 src/tbb/tools_api/ittnotify_types.h                |   72 +-
 src/tbb/tools_api/legacy/ittnotify.h               |  256 +-
 src/tbb/tools_api/prototype/ittnotify.h            |    2 +-
 src/tbb/win32-tbb-export.def                       |    2 +-
 src/tbb/win32-tbb-export.lst                       |    4 +-
 src/tbb/win64-gcc-tbb-export.def                   |    2 +-
 src/tbb/win64-gcc-tbb-export.lst                   |    9 +-
 src/tbb/win64-tbb-export.def                       |    2 +-
 src/tbb/win64-tbb-export.lst                       |    4 +-
 src/tbb/xbox360-tbb-export.def                     |    2 +-
 src/tbbmalloc/Customize.h                          |   17 +-
 src/tbbmalloc/MapMemory.h                          |   23 +-
 src/tbbmalloc/Statistics.h                         |    6 +-
 src/tbbmalloc/TypeDefinitions.h                    |   15 +-
 src/tbbmalloc/backend.cpp                          |  633 +++--
 src/tbbmalloc/backref.cpp                          |  100 +-
 src/tbbmalloc/frontend.cpp                         |  627 +++--
 src/tbbmalloc/large_objects.cpp                    |  168 +-
 src/tbbmalloc/lin32-proxy-export.def               |    2 +-
 src/tbbmalloc/lin32-tbbmalloc-export.def           |    5 +-
 src/tbbmalloc/lin64-proxy-export.def               |    2 +-
 src/tbbmalloc/lin64-tbbmalloc-export.def           |    5 +-
 src/tbbmalloc/lin64ipf-proxy-export.def            |    2 +-
 src/tbbmalloc/lin64ipf-tbbmalloc-export.def        |    8 +-
 src/tbbmalloc/mac32-tbbmalloc-export.def           |    5 +-
 src/tbbmalloc/mac64-tbbmalloc-export.def           |    5 +-
 src/tbbmalloc/proxy.cpp                            |   26 +-
 src/tbbmalloc/proxy.h                              |    2 +-
 src/tbbmalloc/tbb_function_replacement.cpp         |    2 +-
 src/tbbmalloc/tbb_function_replacement.h           |    3 +-
 src/tbbmalloc/tbbmalloc.cpp                        |   77 +-
 src/tbbmalloc/tbbmalloc.rc                         |    4 +-
 src/tbbmalloc/tbbmalloc_internal.h                 |  307 ++-
 src/tbbmalloc/tbbmalloc_internal_api.h             |   45 +
 src/tbbmalloc/win32-gcc-tbbmalloc-export.def       |    5 +-
 src/tbbmalloc/win32-tbbmalloc-export.def           |    6 +-
 src/tbbmalloc/win64-gcc-tbbmalloc-export.def       |    5 +-
 src/tbbmalloc/win64-tbbmalloc-export.def           |    5 +-
 src/tbbmalloc/xbox360-tbbmalloc-export.def         |    2 +-
 src/tbbproxy/tbbproxy-windows.asm                  |    2 +-
 src/tbbproxy/tbbproxy.cpp                          |    4 +-
 src/test/harness.h                                 |   34 +-
 src/test/harness_allocator.h                       |    2 +-
 src/test/harness_assert.h                          |    2 +-
 src/test/harness_bad_expr.h                        |    2 +-
 src/test/harness_barrier.h                         |    4 +-
 src/test/harness_concurrency_tracker.h             |    2 +-
 src/test/harness_cpu.h                             |    2 +-
 src/test/harness_defs.h                            |   50 +
 src/test/harness_dynamic_libs.h                    |   85 +
 src/test/harness_eh.h                              |    2 +-
 src/test/harness_graph.h                           |   42 +-
 src/test/harness_inject_scheduler.h                |    8 +-
 src/test/harness_iterator.h                        |    2 +-
 src/test/harness_m128.h                            |    2 +-
 src/test/harness_memory.h                          |    2 +-
 src/test/harness_report.h                          |   10 +-
 src/test/harness_task.h                            |    2 +-
 src/test/harness_tbb_independence.h                |   21 +-
 src/test/harness_test_cases_framework.h            |  243 ++
 src/test/test_ScalableAllocator.cpp                |   63 +-
 src/test/test_ScalableAllocator_STL.cpp            |    2 +-
 src/test/test_aggregator.cpp                       |  193 ++
 src/test/test_aligned_space.cpp                    |    2 +-
 src/test/test_allocator.h                          |    5 +-
 src/test/test_allocator_STL.h                      |    4 +-
 src/test/test_assembly.cpp                         |   12 +-
 src/test/test_atomic.cpp                           |  244 +-
 src/test/test_blocked_range.cpp                    |    2 +-
 src/test/test_blocked_range2d.cpp                  |    2 +-
 src/test/test_blocked_range3d.cpp                  |    2 +-
 src/test/test_broadcast_node.cpp                   |   12 +-
 src/test/test_buffer_node.cpp                      |    4 +-
 src/test/test_cache_aligned_allocator.cpp          |    2 +-
 src/test/test_cache_aligned_allocator_STL.cpp      |    2 +-
 src/test/test_cilk_common.h                        |    2 +-
 src/test/test_cilk_dynamic_load.cpp                |   54 +-
 src/test/test_cilk_interop.cpp                     |    2 +-
 src/test/test_combinable.cpp                       |    2 +-
 src/test/test_concurrent_hash_map.cpp              |    2 +-
 src/test/test_concurrent_lru_cache.cpp             |  412 +++
 src/test/test_concurrent_monitor.cpp               |  148 +-
 src/test/test_concurrent_priority_queue.cpp        |    2 +-
 src/test/test_concurrent_queue.cpp                 |  725 ++++--
 src/test/test_concurrent_queue.h                   |   98 +
 src/test/test_concurrent_unordered.cpp             |    2 +-
 src/test/test_concurrent_vector.cpp                |   63 +-
 src/test/test_condition_variable.h                 |   26 +-
 src/test/test_continue_node.cpp                    |   25 +-
 src/test/test_critical_section.cpp                 |    2 +-
 src/test/test_eh_algorithms.cpp                    |  329 +--
 src/test/test_eh_flow_graph.cpp                    |  113 +
 src/test/test_eh_tasks.cpp                         |    6 +-
 src/test/test_enumerable_thread_specific.cpp       |    2 +-
 src/test/test_fast_random.cpp                      |    4 +-
 src/test/test_flow_graph.cpp                       |   93 +-
 src/test/test_fp.cpp                               |    2 +-
 src/test/test_function_node.cpp                    |    4 +-
 src/test/test_halt.cpp                             |    2 +-
 src/test/test_handle_perror.cpp                    |    2 +-
 src/test/test_hw_concurrency.cpp                   |   13 +-
 src/test/test_inits_loop.cpp                       |    2 +-
 src/test/test_intrusive_list.cpp                   |    2 +-
 src/test/test_ittnotify.cpp                        |    2 +-
 src/test/test_join_node.cpp                        |  252 +-
 src/test/test_lambda.cpp                           |   21 +-
 src/test/test_limiter_node.cpp                     |    2 +-
 src/test/test_malloc_atexit.cpp                    |    2 +-
 src/test/test_malloc_compliance.cpp                |   76 +-
 src/test/test_malloc_init_shutdown.cpp             |   58 +-
 src/test/test_malloc_lib_unload.cpp                |   49 +-
 src/test/test_malloc_overload.cpp                  |    2 +-
 src/test/test_malloc_pools.cpp                     |  166 +-
 src/test/test_malloc_pure_c.c                      |    2 +-
 src/test/test_malloc_regression.cpp                |    2 +-
 src/test/test_malloc_used_by_lib.cpp               |  173 ++
 src/test/test_malloc_whitebox.cpp                  |  177 +-
 src/test/test_model_plugin.cpp                     |   70 +-
 src/test/test_multifunction_node.cpp               |  470 ++++
 src/test/test_multioutput_function_node.cpp        |  471 ----
 src/test/test_mutex.cpp                            |  128 +-
 src/test/test_mutex_native_threads.cpp             |    6 +-
 src/test/test_openmp.cpp                           |    8 +-
 src/test/test_or_node.cpp                          |    6 +-
 src/test/test_overwrite_node.cpp                   |    8 +-
 src/test/test_parallel_do.cpp                      |    2 +-
 src/test/test_parallel_for.cpp                     |    2 +-
 src/test/test_parallel_for_each.cpp                |    2 +-
 src/test/test_parallel_invoke.cpp                  |    2 +-
 src/test/test_parallel_pipeline.cpp                |  253 +-
 src/test/test_parallel_reduce.cpp                  |   10 +-
 src/test/test_parallel_scan.cpp                    |    2 +-
 src/test/test_parallel_sort.cpp                    |    2 +-
 src/test/test_parallel_while.cpp                   |    2 +-
 src/test/test_pipeline.cpp                         |    2 +-
 src/test/test_pipeline_with_tbf.cpp                |    2 +-
 src/test/test_priority_queue_node.cpp              |    2 +-
 src/test/test_queue_node.cpp                       |    4 +-
 src/test/test_reader_writer_lock.cpp               |   37 +-
 src/test/test_runtime_loader.cpp                   |    2 +-
 src/test/test_rwm_upgrade_downgrade.cpp            |    2 +-
 src/test/test_semaphore.cpp                        |   10 +-
 src/test/test_sequencer_node.cpp                   |    2 +-
 src/test/test_source_node.cpp                      |    2 +-
 src/test/test_split_node.cpp                       |    2 +-
 src/test/test_std_thread.cpp                       |    2 +-
 src/test/test_task.cpp                             |   78 +-
 src/test/test_task_assertions.cpp                  |    4 +-
 src/test/test_task_auto_init.cpp                   |   14 +-
 src/test/test_task_enqueue.cpp                     |   80 +-
 src/test/test_task_group.cpp                       |    2 +-
 src/test/test_task_leaks.cpp                       |    6 +-
 src/test/test_task_priority.cpp                    |   59 +-
 src/test/test_task_scheduler_init.cpp              |    2 +-
 src/test/test_task_scheduler_observer.cpp          |    2 +-
 src/test/test_task_steal_limit.cpp                 |   81 +
 src/test/test_tbb_condition_variable.cpp           |   12 +-
 src/test/test_tbb_header.cpp                       |   29 +-
 src/test/test_tbb_thread.cpp                       |    2 +-
 src/test/test_tbb_version.cpp                      |   74 +-
 src/test/test_thread.h                             |    2 +-
 src/test/test_tick_count.cpp                       |    2 +-
 src/test/test_tuple.cpp                            |    4 +-
 src/test/test_write_once_node.cpp                  |    8 +-
 src/test/test_yield.cpp                            |    2 +-
 1204 files changed, 52648 insertions(+), 41225 deletions(-)

diff --git a/CHANGES b/CHANGES
index 848c169..8fbdbe9 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,34 +1,158 @@
+TBB 4.0 Update 5
+
+Changes (w.r.t. TBB 4.0 Update 4):
+
+- Parallel pipeline optimization (directly storing small objects in the
+    interstage data buffers) limited to trivially-copyable types for
+    C++11 and a short list of types for earlier compilers.
+- _VARIADIC_MAX switch is honored for TBB tuple implementation
+    and flow::graph nodes based on tuple.
+- Support of Cocoa framework was added to the GUI examples on Mac OS* X
+    systems
+
+Bugs fixed:
+
+- Fixed a tv_nsec overflow bug in condition_variable::wait_for. 
+- Fixed execution order of enqueued tasks with different priorities.
+- Fixed a bug with task priority changes causing lack of progress
+    for fire-and-forget tasks when TBB was initialized to use 1 thread.
+- Fixed duplicate symbol problem when linking multiple compilation
+    units that include flow_graph.h on VC 10.
+
+------------------------------------------------------------------------
+TBB 4.0 Update 4
+
+Changes (w.r.t. TBB 4.0 Update 3):
+
+- The TBB memory allocator transparently supports large pages on Linux.
+- A new flow_graph example, logic_sim, was added.
+- Support for DirectX* 9 was added to GUI examples.
+
+Community Preview Features:
+
+- Added: aggregator, a new concurrency control mechanism.
+
+Bugs fixed:
+
+- The abort operation on concurrent_bounded_queue now leaves the queue
+    in a reusable state. If a bad_alloc or bad_last_alloc exception is
+    thrown while the queue is recovering from an abort, that exception
+    will be reported instead of user_abort on the thread on which it
+    occurred, and the queue will not be reusable.
+- Steal limiting heuristic fixed to avoid premature stealing disabling
+    when large amount of __thread data is allocated on thread stack.
+- Fixed a low-probability leak of arenas in the task scheduler.
+- In STL-compatible allocator classes, the method construct() was fixed
+    to comply with C++11 requirements.
+- Fixed a bug that prevented creation of fixed-size memory pools
+    smaller than 2M.
+- Significantly reduced the amount of warnings from various compilers.
+
+Open-source contributions integrated:
+
+- Multiple improvements by Raf Schietekat.
+- Basic support for Clang on Mac OS X* by Blas Rodriguez Somoza.
+- Fixes for warnings and corner-case bugs by Blas Rodriguez Somoza
+    and Edward Lam.
+
+------------------------------------------------------------------------
+TBB 4.0 Update 3
+
+Changes (w.r.t. TBB 4.0 Update 2):
+
+- Modifications to the low-level API for memory pools:
+    added support for aligned allocations;
+    pool policies reworked to allow backward-compatible extensions;
+    added a policy to not return memory space till destruction;
+    pool_reset() does not return memory space anymore.
+- Class tbb::flow::graph_iterator added to iterate over all nodes
+    registered with a graph instance.
+- multioutput_function_node has been renamed multifunction_node.
+    multifunction_node and split_node are now fully-supported features.
+- For the tagged join node, the policy for try_put of an item with
+    already existing tag has been defined: the item will be rejected.
+- Matching the behavior on Windows, on other platforms the optional
+    shared libraries (libtbbmalloc, libirml) now are also searched
+    only in the directory where libtbb is located.
+- The platform isolation layer based on GCC built-ins is extended.
+
+Backward-incompatible API changes:
+
+- a graph reference parameter is now required to be passed to the
+    constructors of the following flow graph nodes: overwrite_node, 
+    write_once_node, broadcast_node, and the CPF or_node.
+- the following tbb::flow node methods and typedefs have been renamed:
+       Old                             New
+    join_node and or_node:
+       inputs()                 ->     input_ports()
+       input_ports_tuple_type   ->     input_ports_type
+    multifunction_node and split_node:
+       ports_type               ->     output_ports_type
+
+Bugs fixed:
+
+- Not all logical processors were utilized on systems with more than
+    64 cores split by Windows into several processor groups.
+
+------------------------------------------------------------------------
+TBB 4.0 Update 2 commercial-aligned release
+
+Changes (w.r.t. TBB 4.0 Update 1 commercial-aligned release):
+
+- concurrent_bounded_queue now has an abort() operation that releases 
+    threads involved in pending push or pop operations. The released 
+    threads will receive a tbb::user_abort exception.
+- Added Community Preview Feature:  concurrent_lru_cache container, 
+    a concurrent implementation of LRU (least-recently-used) cache.
+
+Bugs fixed:
+
+- fixed a race condition in the TBB scalable allocator.
+- concurrent_queue counter wraparound bug was fixed, which occurred when
+    the number of push and pop operations exceeded ~>4 billion on IA32.
+- fixed races in the TBB scheduler that could put workers asleep too
+    early, especially in presense of affinitized tasks.
+
+------------------------------------------------------------------------
+TBB 4.0 Update 1 commercial-aligned release
+
+Changes (w.r.t. TBB 4.0 commercial-aligned release):
+
+- Memory leaks fixed in binpack example.
+- Improvements and fixes in the TBB allocator.
+
+------------------------------------------------------------------------
 TBB 4.0 commercial-aligned release
 
 Changes (w.r.t. TBB 3.0 Update 8 commercial-aligned release):
 
-- concurrent_priority_queue is now a supported feature. Capacity
-    control methods were removed.
-- Flow graph is now a supported feature of TBB,
-    rather than being a community preview feature.
+- concurrent_priority_queue is now a fully supported feature.
+    Capacity control methods were removed.
+- Flow graph is now a fully supported feature.
 - A new memory backend has been implemented in the TBB allocator.
-    It can return small memory blocks to the OS and thus later reuse
-    that memory for large object allocation.
+    It can reuse freed memory for both small and large objects, and
+    returns unused memory blocks to the OS more actively.
 - Improved partitioning algorithms for parallel_for and parallel_reduce
     to better handle load imbalance.
-- The convex_hull example has been refactored to produce reproducible
+- The convex_hull example has been refactored for reproducible
     performance results.
-- The Major Interface version has changed from 5 to 6. Deprecated interfaces
-    might be removed in future releases.
+- The major interface version has changed from 5 to 6.
+    Deprecated interfaces might be removed in future releases.
 
 Community Preview Features:
 
-- Added Community Preview Feature: serial subset of TBB for modeling
-    a sequential execution of a parallel algorithm. This release introduces
-    serial parallel_for.
-- Added Community Preview Feature: or_node (accepts multiple inputs,
-    forwarding each input separately to successors), split_node (accepts
-    tuples, and forwards each element to a corresponding successor),
-    and multioutput_function_node (accepts one input, and passes the input
+- Added: serial subset, i.e. sequential implementations of TBB generic
+    algorithms (currently, only provided for parallel_for).
+- Preview of new flow graph nodes:
+    or_node (accepts multiple inputs, forwards each input separately
+      to all successors),
+    split_node (accepts tuples, and forwards each element of a tuple
+      to a corresponding successor), and
+    multioutput_function_node (accepts one input, and passes the input
     and a tuple of output ports to the function body to support outputs
     to multiple successors).
-- Added Community Preview Feature: Scalable Memory Pools (more control on
-    memory source, grouping, collective deallocatation).
+- Added: memory pools for more control on memory source, grouping,
+    and collective deallocation.
 
 ------------------------------------------------------------------------
 TBB 3.0 Update 8 commercial-aligned release
@@ -52,12 +176,12 @@ Community Preview Features:
 
 - Graph community preview feature was renamed to flow graph.
     Multiple improvements in the implementation.
-    Binpack example of the feature was added.
+    Binpack example was added for the feature.
 - A number of improvements to concurrent_priority_queue.
     Shortpath example was added for the feature.
 - TBB runtime loaded functionality was added (Windows*-only).
-    This allows set exact versions of TBB library to be used in run-time,
-    while setting directories for the library search.
+    It allows to specify which versions of TBB should be used,
+    as well as to set directories for the library search.
 - parallel_deterministic_reduce template function was added.
 
 ------------------------------------------------------------------------
@@ -71,8 +195,8 @@ Changes (w.r.t. TBB 3.0 Update 6 commercial-aligned release):
 
 Community Preview Features:
 
-- Graph's dining_philosophers example added
-- A number of improvements to graph and concurrent_priority_queue
+- Graph's dining_philosophers example added.
+- A number of improvements to graph and concurrent_priority_queue.
 
 
 ------------------------------------------------------------------------
@@ -1102,8 +1226,8 @@ Features / APIs:
 - Timers.
 
 Tools Support:
-- Thread Checker 3.0.
-- Thread Profiler 3.0.
+- Intel(R) Thread Checker 3.0.
+- Intel(R) Thread Profiler 3.0.
 
 Documentation:
 - First Use Documents: README.txt, INSTALL.txt, Release_Notes.txt,
diff --git a/Makefile b/Makefile
index dd167e9..b35d19f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -28,7 +28,7 @@ tbb_root?=.
 include $(tbb_root)/build/common.inc
 .PHONY: default all tbb tbbmalloc tbbproxy test examples
 
-#workaround for non-depend targets tbb and tbbmalloc which both depend on version_string.tmp
+#workaround for non-depend targets tbb and tbbmalloc which both depend on version_string.ver
 #According to documentation submakes should run in parallel
 .NOTPARALLEL: tbb tbbmalloc tbbproxy
 
diff --git a/build/AIX.gcc.inc b/build/AIX.gcc.inc
index 757f5a2..252f3af 100644
--- a/build/AIX.gcc.inc
+++ b/build/AIX.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/AIX.inc b/build/AIX.inc
index 3f165fe..3a80f20 100644
--- a/build/AIX.inc
+++ b/build/AIX.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -47,7 +47,7 @@ RD?=rmdir
 MD?=mkdir -p
 NUL= /dev/null
 SLASH=/
-MAKE_VERSIONS=sh $(tbb_root)/build/version_info_aix.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_aix.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.ver
 MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
 
 ifdef LIBPATH
diff --git a/build/FreeBSD.gcc.inc b/build/FreeBSD.gcc.inc
index f397748..8905476 100644
--- a/build/FreeBSD.gcc.inc
+++ b/build/FreeBSD.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/FreeBSD.inc b/build/FreeBSD.inc
index 9f5b8d8..9b3c21f 100644
--- a/build/FreeBSD.inc
+++ b/build/FreeBSD.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -54,7 +54,7 @@ RD?=rmdir
 MD?=mkdir -p
 NUL= /dev/null
 SLASH=/
-MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.ver
 MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
 
 ifdef LD_LIBRARY_PATH
diff --git a/build/Makefile.rml b/build/Makefile.rml
index ff00bc8..809b013 100644
--- a/build/Makefile.rml
+++ b/build/Makefile.rml
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -79,7 +79,11 @@ R_CPLUS_FLAGS =  $(subst DO_ITT_NOTIFY,DO_ITT_NOTIFY=0,$(CPLUS_FLAGS)) $(WARNING
 %.$(OBJ): %.cpp
 	$(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(INCLUDES) $<
 
-tbb_misc_rml.$(OBJ): version_string.tmp
+ifeq (linux,$(tbb_os))
+omp_dynamic_link.$(OBJ): CPLUS_FLAGS+=-fno-exceptions
+endif
+
+tbb_misc_rml.$(OBJ): version_string.ver
 
 RML_TEST.OBJ = test_job_automaton.$(OBJ) test_thread_monitor.$(OBJ) test_rml_tbb.$(OBJ) test_rml_omp.$(OBJ) test_rml_mixed.$(OBJ)
 
@@ -133,8 +137,8 @@ test_rml_mixed.$(TEST_EXT): test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OM
 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.$(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_rml_omp_c_linkage.$(TEST_EXT): test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ) omp_dynamic_link.$(OBJ)
+	$(CONLY) $(C_FLAGS) $(OUTPUT_KEY)$@ test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ) omp_dynamic_link.$(OBJ) $(LIBS) $(LINK_FLAGS)
 
 test_%.$(TEST_EXT): test_%.$(OBJ) $(TBB_DEP_NON_RML_TEST)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS)
diff --git a/build/Makefile.tbb b/build/Makefile.tbb
index 99c20dc..fded71b 100644
--- a/build/Makefile.tbb
+++ b/build/Makefile.tbb
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -51,6 +51,11 @@ CPLUS_FLAGS += $(PIC_KEY) $(DEFINE_KEY)__TBB_BUILD=1
 # KNOWN_NOSTRICT = <object-file-name>
 # endif
 
+# suppress warnings for build of itt_notify by GCC3
+ifneq (,$(findstring gcc_cc3., $(compiler)_$(runtime)))
+KNOWN_WARNINGS += itt_notify.$(OBJ)
+endif
+
 # Object files (that were compiled from C++ code) that gmake up TBB
 TBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \
 		concurrent_queue.$(OBJ) \
@@ -123,7 +128,7 @@ $(TBB_NO_VERSION.DLL):
 endif
 
 #clean:
-#	$(RM) *.$(OBJ) *.$(DLL) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d core core.*[0-9][0-9]
+#	$(RM) *.$(OBJ) *.$(DLL) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d core core.*[0-9][0-9] *.ver
 
 # Include automatically generated dependences
 -include *.d
diff --git a/build/Makefile.tbbmalloc b/build/Makefile.tbbmalloc
index f0bcdeb..48cbdb0 100644
--- a/build/Makefile.tbbmalloc
+++ b/build/Makefile.tbbmalloc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -48,20 +48,20 @@ include $(tbb_root)/build/common_rules.inc
 #------------------------------------------------------
 
 # Object files that make up TBBMalloc
-MALLOC_CPLUS.OBJ = frontend.$(OBJ) backend.$(OBJ) large_objects.$(OBJ) backref.$(OBJ)
-MALLOC.OBJ := $(MALLOC_CPLUS.OBJ) $(MALLOC_ASM.OBJ) itt_notify_malloc.$(OBJ) tbbmalloc.$(OBJ)
+MALLOC_CPLUS.OBJ = backend.$(OBJ) large_objects.$(OBJ) backref.$(OBJ)  tbbmalloc.$(OBJ)
+MALLOC.OBJ := $(MALLOC_CPLUS.OBJ) $(MALLOC_ASM.OBJ) itt_notify_malloc.$(OBJ) frontend.$(OBJ)
 PROXY.OBJ := proxy.$(OBJ) tbb_function_replacement.$(OBJ)
-M_CPLUS_FLAGS := $(subst $(WARNING_KEY),,$(M_CPLUS_FLAGS)) $(DEFINE_KEY)__TBB_BUILD=1
+M_CPLUS_FLAGS := $(subst $(WARNING_KEY),,$(M_CPLUS_FLAGS)) $(DEFINE_KEY)__TBBMALLOC_BUILD=1
 M_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(MALLOC_ROOT) $(INCLUDE_KEY)$(MALLOC_SOURCE_ROOT)
 
 # Suppress superfluous warnings for TBBmalloc compilation
 $(MALLOC.OBJ): M_CPLUS_FLAGS += $(WARNING_SUPPRESS)
 
-tbbmalloc.$(OBJ): tbbmalloc.cpp version_string.tmp
+frontend.$(OBJ): frontend.cpp version_string.ver
 	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $(INCLUDE_KEY). $<
 
 $(PROXY.OBJ): %.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(PIC_KEY) $(DEFINE_KEY)__TBBMALLOC_BUILD=1 $(M_INCLUDES) $<
 
 $(MALLOC_CPLUS.OBJ): %.$(OBJ): %.cpp
 	$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $<
@@ -147,30 +147,35 @@ test_malloc_overload.$(TEST_EXT): test_malloc_overload.cpp
 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) version_string.tmp
+test_malloc_whitebox.$(TEST_EXT): test_malloc_whitebox.cpp $(MALLOC_ASM.OBJ) version_string.ver
 	$(CPLUS) $(OUTPUT_KEY)$@ $(M_CPLUS_FLAGS) $(M_INCLUDES) $(INCLUDE_KEY). $< $(MALLOC_ASM.OBJ) $(LIBS) $(LIBDL) $(LINK_FLAGS)
 
 test_malloc_lib_unload.$(TEST_EXT): test_malloc_lib_unload.cpp test_malloc_lib_unload_dll.$(DLL)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(M_CPLUS_FLAGS) $(M_INCLUDES) $< $(LIBS) test_malloc_lib_unload_dll.$(LIBEXT)  $(LIBDL) $(LINK_FLAGS)
 
+# TODO: use generic rules
+test_malloc_used_by_lib.$(TEST_EXT): test_malloc_used_by_lib.cpp test_malloc_used_by_lib.$(DLL)
+	$(CPLUS) $(OUTPUT_KEY)$@ $(M_CPLUS_FLAGS) $(M_INCLUDES) $< $(LIBS) $(LIBDL) $(LINK_FLAGS)
+
+test_malloc_used_by_lib.$(DLL): test_malloc_used_by_lib.cpp
+	$(CPLUS) $(OUTPUT_KEY)$@ $(subst /MT,/LD,$(M_CPLUS_FLAGS)) $(PIC_KEY) $(M_INCLUDES) $(DEFINE_KEY)_USRDLL $< $(MALLOC_LIB) $(LINK_FLAGS) $(DYLIB_KEY)
+
 $(MALLOC_MAIN_TESTS): %.$(TEST_EXT): %.$(OBJ) $(MALLOC_LIB)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(MALLOC_LIB) $(LIBS) $(LINK_FLAGS)
 
-ifeq (,$(NO_C_TESTS))
 MALLOC_C_TESTS = test_malloc_pure_c.$(TEST_EXT)
 
 $(MALLOC_C_TESTS): %.$(TEST_EXT): %.$(OBJ) $(MALLOC_LIB)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBS) $(LINK_FLAGS)
-endif
 
 # Rules for generating a test DLL
 %_dll.$(DLL): %_dll.$(OBJ)
-	$(LIB_LINK_CMD) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $< $(LIBS) $(DYLIB_KEY) $(LIB_LINK_FLAGS)
+	$(LIB_LINK_CMD) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $< $(LIBS) $(LINK_FLAGS) $(DYLIB_KEY)
 
 test_malloc_atexit.$(TEST_EXT): test_malloc_atexit.$(OBJ) test_malloc_atexit_dll.$(DLL)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(MALLOC_PROXY_LIB) $(MALLOC_LIB) test_malloc_atexit_dll.$(LIBEXT) $(LIBS) $(LINK_FLAGS)
 
-MALLOC_TESTS = $(MALLOC_MAIN_TESTS) $(MALLOC_C_TESTS) test_malloc_whitebox.$(TEST_EXT)
+MALLOC_TESTS = $(MALLOC_MAIN_TESTS) $(MALLOC_C_TESTS) test_malloc_whitebox.$(TEST_EXT) test_malloc_used_by_lib.$(TEST_EXT)
 ifneq (,$(MALLOCPROXY.DLL))
 MALLOC_TESTS += $(MALLOC_OVERLOAD_TESTS) test_malloc_lib_unload.$(TEST_EXT)
 endif
@@ -186,15 +191,14 @@ ifneq (,$(MALLOCPROXY.DLL))
 	$(run_cmd) $(TEST_LAUNCHER) -l $(call cross_suffix,$(MALLOCPROXY.DLL)) test_malloc_overload.$(TEST_EXT) $(args)
 	$(run_cmd) $(TEST_LAUNCHER) test_malloc_overload_proxy.$(TEST_EXT) $(args)
 endif
+	$(run_cmd) ./test_malloc_used_by_lib.$(TEST_EXT)
 	$(run_cmd) ./test_malloc_whitebox.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) $(TEST_LAUNCHER) test_malloc_compliance.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_ScalableAllocator.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_ScalableAllocator_STL.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_malloc_regression.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_malloc_init_shutdown.$(TEST_EXT) $(args)
-ifeq (,$(NO_C_TESTS))
 	$(run_cmd) ./test_malloc_pure_c.$(TEST_EXT) $(args)
-endif
 
 #------------------------------------------------------
 # End of rules for making the TBBMalloc unit tests
diff --git a/build/Makefile.tbbproxy b/build/Makefile.tbbproxy
index 93433d0..eb60d2f 100644
--- a/build/Makefile.tbbproxy
+++ b/build/Makefile.tbbproxy
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/Makefile.test b/build/Makefile.test
index 26c0a14..4266466 100644
--- a/build/Makefile.test
+++ b/build/Makefile.test
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -27,9 +27,9 @@
 #------------------------------------------------------------------------------
 # Define rules for making the TBB tests.
 #------------------------------------------------------------------------------
-.PHONY: default test_tbb_plain test_tbb_old clean
+.PHONY: default test_tbb_plain test_tbb_openmp test_tbb_cilk test_tbb_old clean
 
-default: test_tbb_plain test_tbb_old
+default: test_tbb_plain test_tbb_openmp test_tbb_cilk test_tbb_old
 
 tbb_root ?= $(TBBROOT)
 BUILDING_PHASE=1
@@ -66,28 +66,32 @@ include $(tbb_root)/build/common_rules.inc
 test_model_plugin.$(TEST_EXT): CPLUS_FLAGS := $(CPLUS_FLAGS:$(USE_PROXY_FLAG)=)
 test_model_plugin.$(TEST_EXT): test_model_plugin.$(OBJ) test_model_plugin_dll.$(DLL)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LIBDL) $(LIBS) $(LINK_FLAGS)
-test_cilk_dynamic_load.$(TEST_EXT): test_cilk_dynamic_load.$(OBJ) test_cilk_dynamic_load_dll.$(DLL)
-	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LINK_TBB.LIB) $(LIBDL) $(LIBS) $(LINK_FLAGS)
 
-# tbb_misc.$(OBJ) has to be specified here (instead of harness_inject_scheduler.h) because it carries dependency on version_string.tmp
-TASK_CPP_DEPENDENCIES = $(TBB_ASM.OBJ) tbb_misc.$(OBJ)
-ifeq (,$(codecov))
-    TASK_CPP_DEPENDENCIES += itt_notify.$(OBJ)
-endif
+
+# tbb_misc.$(OBJ) has to be specified here (instead of harness_inject_scheduler.h) because it carries dependency on version_string.ver
+SCHEDULER_DEPENDENCIES = $(TBB_ASM.OBJ) tbb_misc.$(OBJ)
 
 # These executables don't depend on the TBB library, but include core .cpp files directly
-TASK_CPP_DIRECTLY_INCLUDED = test_task_leaks.$(TEST_EXT) \
+SCHEDULER_DIRECTLY_INCLUDED = test_task_leaks.$(TEST_EXT) \
  test_task_assertions.$(TEST_EXT) \
  test_fast_random.$(TEST_EXT)
 
-# Necessary to locate version_string.tmp referenced from directly included tbb_misc.cpp
+# Necessary to locate version_string.ver referenced from directly included tbb_misc.cpp
 INCLUDES += $(INCLUDE_KEY).
 
-$(TASK_CPP_DIRECTLY_INCLUDED): WARNING_KEY += $(WARNING_SUPPRESS)
+$(SCHEDULER_DIRECTLY_INCLUDED): WARNING_KEY += $(WARNING_SUPPRESS)
 
-$(TASK_CPP_DIRECTLY_INCLUDED): %.$(TEST_EXT) : %.$(OBJ) $(TASK_CPP_DEPENDENCIES)
+$(SCHEDULER_DIRECTLY_INCLUDED): %.$(TEST_EXT) : %.$(OBJ) $(SCHEDULER_DEPENDENCIES)
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBDL) $(LIBS) $(LINK_FLAGS)
 
+# Tests that use some features of C++11
+TEST_TBB_CPP11 = test_lambda.$(TEST_EXT) test_cache_aligned_allocator_STL.$(TEST_EXT)
+
+$(TEST_TBB_CPP11:%.$(TEST_EXT)=%.$(OBJ)): %.$(OBJ): %.cpp
+	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(CPP11_FLAGS) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $<
+$(TEST_TBB_CPP11): %.$(TEST_EXT): %.$(OBJ) $(TBB.LIB) $(if $(use_proxy),$(LINK_TBB.LIB))
+	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(CPP11_FLAGS) $< $(LINK_TBB.LIB) $(LIBS) $(AUX_LIBS) $(LINK_FLAGS)
+
 test_tbb_header2.$(OBJ): test_tbb_header.cpp
 	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $(DEFINE_KEY)__TBB_TEST_SECONDARY=1 $< $(OUTPUTOBJ_KEY)$@
 
@@ -99,11 +103,18 @@ test_tbb_header.$(TEST_EXT): test_tbb_header.$(OBJ) test_tbb_header2.$(OBJ) $(TB
 test_atomic_pic.$(TEST_EXT): test_atomic.cpp
 	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $(DEFINE_KEY)__TBB_TEST_PIC=1 $< $(LINK_TBB.LIB) $(LIBS) $(AUX_LIBS) $(LINK_FLAGS)
 
+#Test of generic gcc port
+%_gcc_builtins.$(TEST_EXT): CPLUS_FLAGS+=$(DEFINE_KEY)__TBB_TEST_GCC_BUILTINS=1
+%_gcc_builtins.$(TEST_EXT): %.cpp
+	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $< $(LIBS) $(AUX_LIBS) $(LINK_FLAGS)
+
 # The main list of TBB tests
 TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
+	test_assembly_gcc_builtins.$(TEST_EXT)       \
 	test_aligned_space.$(TEST_EXT)               \
 	test_atomic.$(TEST_EXT)                      \
 	test_atomic_pic.$(TEST_EXT)                  \
+	test_atomic_gcc_builtins.$(TEST_EXT)         \
 	test_blocked_range.$(TEST_EXT)               \
 	test_blocked_range2d.$(TEST_EXT)             \
 	test_blocked_range3d.$(TEST_EXT)             \
@@ -114,12 +125,10 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
 	test_enumerable_thread_specific.$(TEST_EXT)  \
 	test_handle_perror.$(TEST_EXT)               \
 	test_halt.$(TEST_EXT)                        \
-	test_lambda.$(TEST_EXT)                      \
 	test_model_plugin.$(TEST_EXT)                \
 	test_mutex.$(TEST_EXT)                       \
 	test_mutex_native_threads.$(TEST_EXT)        \
 	test_rwm_upgrade_downgrade.$(TEST_EXT)       \
-	test_cache_aligned_allocator_STL.$(TEST_EXT) \
 	test_cache_aligned_allocator.$(TEST_EXT)     \
 	test_parallel_for.$(TEST_EXT)                \
 	test_parallel_reduce.$(TEST_EXT)             \
@@ -140,6 +149,7 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
 	test_yield.$(TEST_EXT)                       \
 	test_eh_tasks.$(TEST_EXT)                    \
 	test_eh_algorithms.$(TEST_EXT)               \
+	test_eh_flow_graph.$(TEST_EXT)               \
 	test_parallel_invoke.$(TEST_EXT)             \
 	test_task_group.$(TEST_EXT)                  \
 	test_ittnotify.$(TEST_EXT)                   \
@@ -148,16 +158,15 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
 	test_combinable.$(TEST_EXT)                  \
 	test_task_auto_init.$(TEST_EXT)              \
 	test_concurrent_monitor.$(TEST_EXT)          \
-	semaphore.$(OBJ)                             \
+	test_semaphore.$(TEST_EXT)                   \
 	test_critical_section.$(TEST_EXT)            \
 	test_reader_writer_lock.$(TEST_EXT)          \
 	test_tbb_condition_variable.$(TEST_EXT)      \
 	test_intrusive_list.$(TEST_EXT)              \
-	test_cilk_interop.$(TEST_EXT)                \
-	test_cilk_dynamic_load.$(TEST_EXT)           \
 	test_concurrent_priority_queue.$(TEST_EXT)   \
 	test_task_priority.$(TEST_EXT)               \
 	test_task_enqueue.$(TEST_EXT)                \
+	test_task_steal_limit.$(TEST_EXT)            \
 	test_hw_concurrency.$(TEST_EXT)              \
 	test_fp.$(TEST_EXT)                          \
 	test_flow_graph.$(TEST_EXT)                  \
@@ -174,31 +183,50 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT)   \
 	test_overwrite_node.$(TEST_EXT)              \
 	test_write_once_node.$(TEST_EXT)             \
 	test_or_node.$(TEST_EXT)                     \
-	test_multioutput_function_node.$(TEST_EXT)   \
+	test_multifunction_node.$(TEST_EXT)          \
 	test_split_node.$(TEST_EXT)                  \
 	test_tbb_version.$(TEST_EXT)                 # insert new files right above
-TEST_TBB_PLAIN.OBJ = $(TEST_TBB_PLAIN.EXE:$(TEST_EXT)=.$(OBJ))
+
+TEST_TBB_PLAIN.EXE += $(TEST_TBB_CPP11)
 
 ifdef OPENMP_FLAG
-TEST_TBB_PLAIN.EXE += test_tbb_openmp
 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_PREREQUISITE) test_openmp.$(TEST_EXT)
 	$(run_cmd) ./test_openmp.$(TEST_EXT) 1:4
+else
+test_tbb_openmp:
+	@echo "OpenMP is not available"
+endif
 
+ifdef CILK_AVAILABLE
+test_cilk_dynamic_load.$(TEST_EXT): test_cilk_dynamic_load.$(OBJ) test_cilk_dynamic_load_dll.$(DLL)
+	$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LINK_TBB.LIB) $(LIBDL) $(LIBS) $(LINK_FLAGS)
+# Workaround on cilkrts linkage known issue (see Intel(R) C++ Composer XE 2011 Release Notes)
+# The issue reveals itself if a version of binutils is prior to 2.17
+ifeq (linux_icc,$(tbb_os)_$(compiler))
+test_cilk_interop.$(TEST_EXT): LIBS += -lcilkrts
+endif
+test_tbb_cilk: test_cilk_interop.$(TEST_EXT) test_cilk_dynamic_load.$(TEST_EXT)
+	$(run_cmd) ./test_cilk_interop.$(TEST_EXT) $(args)
+	$(run_cmd) ./test_cilk_dynamic_load.$(TEST_EXT) $(args)
+else
+test_tbb_cilk:
+	@echo "Intel(R) Cilk Plus is not available"
 endif
 
 $(TEST_TBB_PLAIN.EXE): WARNING_KEY += $(TEST_WARNING_KEY)
 
-# Run tests that are in TASK_CPP_DIRECTLY_INCLUDED and TEST_TBB_PLAIN.EXE
+# Run tests that are in SCHEDULER_DIRECTLY_INCLUDED and TEST_TBB_PLAIN.EXE
 # Note that usually run_cmd is empty, and tests run directly
-test_tbb_plain: $(TEST_PREREQUISITE) $(TASK_CPP_DIRECTLY_INCLUDED) $(TEST_TBB_PLAIN.EXE)
+test_tbb_plain: $(TEST_PREREQUISITE) $(SCHEDULER_DIRECTLY_INCLUDED) $(TEST_TBB_PLAIN.EXE)
 	$(run_cmd) ./test_tbb_version.$(TEST_EXT) $(args)
         # Checking TBB version first to make sure the following testing has anything in it
 	$(run_cmd) ./test_assembly.$(TEST_EXT) $(args)
+	$(run_cmd) ./test_assembly_gcc_builtins.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_atomic.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_atomic_pic.$(TEST_EXT) $(args)
+	$(run_cmd) ./test_atomic_gcc_builtins.$(TEST_EXT) $(args)
         # Yes, 4:8 is intended on the next line.
 	$(run_cmd) ./test_yield.$(TEST_EXT) $(args) 4:8
 	$(run_cmd) ./test_handle_perror.$(TEST_EXT) $(args)
@@ -239,8 +267,9 @@ test_tbb_plain: $(TEST_PREREQUISITE) $(TASK_CPP_DIRECTLY_INCLUDED) $(TEST_TBB_PL
 	$(run_cmd) ./test_concurrent_hash_map.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_enumerable_thread_specific.$(TEST_EXT) $(args) 0:4
 	$(run_cmd) ./test_combinable.$(TEST_EXT) $(args) 0:4
-    #	$(run_cmd) ./test_model_plugin.$(TEST_EXT) $(args) 4
+	$(run_cmd) ./test_model_plugin.$(TEST_EXT) $(args) 4
 	$(run_cmd) ./test_eh_algorithms.$(TEST_EXT) $(args) 2:4
+	$(run_cmd) ./test_eh_flow_graph.$(TEST_EXT) $(args) 2:4
 	$(run_cmd) ./test_tbb_thread.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_std_thread.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_parallel_invoke.$(TEST_EXT) $(args) 1:4
@@ -250,15 +279,14 @@ test_tbb_plain: $(TEST_PREREQUISITE) $(TASK_CPP_DIRECTLY_INCLUDED) $(TEST_TBB_PL
 	$(run_cmd) ./test_tbb_header.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_concurrent_monitor.$(TEST_EXT) $(args) 6:8
 	$(run_cmd) ./test_critical_section.$(TEST_EXT) $(args) 1:4
-#	$(run_cmd) ./test_semaphore.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_semaphore.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_reader_writer_lock.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_tbb_condition_variable.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_intrusive_list.$(TEST_EXT) $(args)
-	$(run_cmd) ./test_cilk_interop.$(TEST_EXT) $(args)
-	$(run_cmd) ./test_cilk_dynamic_load.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_concurrent_priority_queue.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_task_priority.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_task_enqueue.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_task_steal_limit.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_hw_concurrency.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_fp.$(TEST_EXT) $(args)
 	$(run_cmd) ./test_flow_graph.$(TEST_EXT) $(args) 1:4
@@ -275,7 +303,7 @@ test_tbb_plain: $(TEST_PREREQUISITE) $(TASK_CPP_DIRECTLY_INCLUDED) $(TEST_TBB_PL
 	$(run_cmd) ./test_overwrite_node.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_write_once_node.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_or_node.$(TEST_EXT) $(args) 1:4
-	$(run_cmd) ./test_multioutput_function_node.$(TEST_EXT) $(args) 1:4
+	$(run_cmd) ./test_multifunction_node.$(TEST_EXT) $(args) 1:4
 	$(run_cmd) ./test_split_node.$(TEST_EXT) $(args) 1:4
 
 CPLUS_FLAGS_DEPRECATED = $(DEFINE_KEY)TBB_DEPRECATED=1 $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(WARNING_SUPPRESS)
@@ -288,10 +316,10 @@ TEST_TBB_DEPRECATED.OBJ = test_concurrent_queue_deprecated.$(OBJ) \
 
 # For deprecated files, we don't mind warnings etc., thus compilation rules are most relaxed
 $(TEST_TBB_OLD.OBJ): %.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS_DEPRECATED) $(INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS_DEPRECATED) $(CXX_ONLY_FLAGS) $(INCLUDES) $<
 
 %_deprecated.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS_DEPRECATED) $(INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS_DEPRECATED) $(CXX_ONLY_FLAGS) $(INCLUDES) $<
 
 TEST_TBB_OLD.EXE = $(subst .$(OBJ),.$(TEST_EXT),$(TEST_TBB_OLD.OBJ) $(TEST_TBB_DEPRECATED.OBJ))
 
@@ -339,10 +367,10 @@ perf_%: perf_dll.$(DLL) perf_%.$(TEST_EXT)
 	$(run_cmd) ./$@.$(TEST_EXT) $(args)
 
 clean_%:
-	$(RM) $*.$(OBJ) $*.exe $*.$(DLL) $*.$(LIBEXT) $*.res $*.map $*.ilk $*.pdb $*.exp $*.*manifest $*.tmp $*.d
+	$(RM) $*.$(OBJ) $*.exe $*.$(DLL) $*.$(LIBEXT) $*.res $*.map $*.ilk $*.pdb $*.exp $*.*manifest $*.tmp $*.d *.ver
 
 clean:
-	$(RM) *.$(OBJ) *.exe *.$(DLL) *.$(LIBEXT) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d pgopti.* *.dyn core core.*[0-9][0-9]
+	$(RM) *.$(OBJ) *.exe *.$(DLL) *.$(LIBEXT) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d pgopti.* *.dyn core core.*[0-9][0-9] *.ver
 
 # Include automatically generated dependences
 -include *.d
diff --git a/build/SunOS.gcc.inc b/build/SunOS.gcc.inc
index 3447820..4508447 100644
--- a/build/SunOS.gcc.inc
+++ b/build/SunOS.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/SunOS.inc b/build/SunOS.inc
index 662e069..4b4e854 100644
--- a/build/SunOS.inc
+++ b/build/SunOS.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -61,7 +61,7 @@ RD?=rmdir
 MD?=mkdir -p
 NUL= /dev/null
 SLASH=/
-MAKE_VERSIONS=bash $(tbb_root)/build/version_info_sunos.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_VERSIONS=bash $(tbb_root)/build/version_info_sunos.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.ver
 MAKE_TBBVARS=bash $(tbb_root)/build/generate_tbbvars.sh
 
 ifdef LD_LIBRARY_PATH
diff --git a/build/SunOS.suncc.inc b/build/SunOS.suncc.inc
index d29c60f..46add22 100644
--- a/build/SunOS.suncc.inc
+++ b/build/SunOS.suncc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/big_iron.inc b/build/big_iron.inc
index a533188..c76f116 100644
--- a/build/big_iron.inc
+++ b/build/big_iron.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -58,7 +58,7 @@
         endif
         LINK_FLAGS =
     endif
-    CXXFLAGS += -D__TBB_DYNAMIC_LOAD_ENABLED=0
+    override CXXFLAGS += -D__TBB_DYNAMIC_LOAD_ENABLED=0 -D__TBB_SOURCE_DIRECTLY_INCLUDED=1
     ITT_NOTIFY =
     LIBEXT = a
     LIBPREF = lib
diff --git a/build/common.inc b/build/common.inc
index 2d8af78..b1b3034 100644
--- a/build/common.inc
+++ b/build/common.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -83,6 +83,7 @@ ifdef BUILDING_PHASE
  # Setting default configuration to release
  cfg?=release
  # No lambas or other C++0x extensions by default for compilers that implement them as experimental features
+ # TODO: it should become unnecessary when all relevant tests are "moved" to the TEST_TBB_CPP11 set
  lambdas ?= 0
  cpp0x ?= 0
  # include compiler-specific build configurations
diff --git a/build/common_rules.inc b/build/common_rules.inc
index e8b9d88..6aa20f2 100644
--- a/build/common_rules.inc
+++ b/build/common_rules.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -97,15 +97,15 @@ $(KNOWN_NOSTRICT): %.$(OBJ): %.cpp
 endif
 
 $(KNOWN_WARNINGS): %.$(OBJ): %.cpp
-	$(CPLUS) $(COMPILE_ONLY) $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(CXX_ONLY_FLAGS) $(INCLUDES) $<
+	$(CPLUS) $(COMPILE_ONLY) $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $<
 
-tbb_misc.$(OBJ): tbb_misc.cpp version_string.tmp
+tbb_misc.$(OBJ): tbb_misc.cpp version_string.ver
 	$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDE_KEY). $(INCLUDES) $<
 
-tbb_misc.E: tbb_misc.cpp version_string.tmp
+tbb_misc.E: tbb_misc.cpp version_string.ver
 	$(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDE_KEY). $(INCLUDES) $(PREPROC_ONLY) $< >$@
 
-%.res: %.rc version_string.tmp $(TBB.MANIFEST)
+%.res: %.rc version_string.ver $(TBB.MANIFEST)
 	rc /Fo$@ $(INCLUDES) $(filter /D%,$(CPLUS_FLAGS)) $<
 
 ifneq (,$(TBB.MANIFEST))
@@ -114,12 +114,12 @@ $(TBB.MANIFEST):
 	cmd /C "echo int main(){return 0;} >>tbbmanifest.c"
 	cl /nologo $(C_FLAGS) tbbmanifest.c
 
-version_string.tmp: $(TBB.MANIFEST)
+version_string.ver: $(TBB.MANIFEST)
 	$(MAKE_VERSIONS)
-	cmd /C "echo #define TBB_MANIFEST 1 >> version_string.tmp"
+	cmd /C "echo #define TBB_MANIFEST 1 >> version_string.ver"
 
 else
-version_string.tmp:
+version_string.ver:
 	$(MAKE_VERSIONS)
 endif
 
diff --git a/build/detect.js b/build/detect.js
index dc84f4a..894422b 100644
--- a/build/detect.js
+++ b/build/detect.js
@@ -1,4 +1,4 @@
-// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
@@ -51,10 +51,20 @@ function doWork() {
 				} else {
 					WScript.Echo( "unknown" );
 				}
-			}
-			else if ( WScript.Arguments(0) == "/runtime" ) {
+			} else {
 				tmpExec = WshShell.Exec("gcc -dumpversion");
-				WScript.Echo( "mingw"+tmpExec.StdOut.ReadLine() );
+				var gcc_version = tmpExec.StdOut.ReadLine();
+				if ( WScript.Arguments(0) == "/runtime" ) {
+					WScript.Echo( "mingw"+gcc_version );
+				}
+				else if ( WScript.Arguments(0) == "/minversion" ) {
+					// Comparing strings, not numbers; will not work for two-digit versions
+					if ( gcc_version >= WScript.Arguments(2) ) {
+						WScript.Echo( "ok" );
+					} else {
+						WScript.Echo( "fail" );
+					}
+				}
 			}
 			return;
 		}
@@ -64,15 +74,14 @@ function doWork() {
 		while ( tmpExec.Status == 0 ) {
 			WScript.Sleep(100);
 		}
+		//compiler banner that includes version and target arch was printed to stderr
+		var clVersion = tmpExec.StdErr.ReadAll();
 
 		if ( WScript.Arguments(0) == "/arch" ) {
-			//read compiler banner
-			var clVersion = tmpExec.StdErr.ReadAll();
-			
 			//detect target architecture
 			var intel64=/AMD64|EM64T|x64/mgi;
 			var ia64=/IA-64|Itanium/mgi;
-			var ia32=/80x86/mgi;
+			var ia32=/[80|\s]x86/mgi;
 			if ( clVersion.match(intel64) ) {
 				WScript.Echo( "intel64" );
 			} else if ( clVersion.match(ia64) ) {
@@ -82,6 +91,7 @@ function doWork() {
 			} else {
 				WScript.Echo( "unknown" );
 			}
+			return;
 		}
 
 		if ( WScript.Arguments(0) == "/runtime" ) {
@@ -89,12 +99,13 @@ function doWork() {
 			var map = fso.OpenTextFile("detect.map", 1, 0);
 			var mapContext = map.readAll();
 			map.Close();
-			
+
 			//detect runtime
 			var vc71=/MSVCR71\.DLL/mgi;
 			var vc80=/MSVCR80\.DLL/mgi;
 			var vc90=/MSVCR90\.DLL/mgi;
 			var vc100=/MSVCR100\.DLL/mgi;
+			var vc110=/MSVCR110\.DLL/mgi;
 			var psdk=/MSVCRT\.DLL/mgi;
 			if ( mapContext.match(vc71) ) {
 				WScript.Echo( "vc7.1" );
@@ -104,12 +115,38 @@ function doWork() {
 				WScript.Echo( "vc9" );
 			} else if ( mapContext.match(vc100) ) {
 				WScript.Echo( "vc10" );
-			} else if ( mapContext.match(psdk) ) {
-				// Our current naming convention assumes vc7.1 for 64-bit Windows PSDK
-				WScript.Echo( "vc7.1" ); 
+			} else if ( mapContext.match(vc110) ) {
+				WScript.Echo( "vc11" );
 			} else {
 				WScript.Echo( "unknown" );
 			}
+			return;
+		}
+
+		if ( WScript.Arguments(0) == "/minversion" ) {
+			var compiler_version;
+			if ( WScript.Arguments(1) == "cl" ) {
+				compiler_version = clVersion.match(/Compiler Version ([0-9.]+)\s/mi)[1];
+				// compiler_version is in xx.xx.xxxxx.xx format, i.e. a string.
+				// It will compare well with major.minor versions where major has two digits,
+				// which is sufficient as the versions of interest start from 13 (for VC7).
+			} else if ( WScript.Arguments(1) == "icl" ) {
+				// Get predefined ICL macros
+				tmpExec = WshShell.Run("cmd /C icl /QdM /E detect.c > detect.map", 0, true);
+				var file = fso.OpenTextFile("detect.map", 1, 0);
+				var defs = file.readAll();
+				file.Close();
+				// In #define __INTEL_COMPILER XXYY, XX is the major ICL version, YY is minor
+				compiler_version = defs.match(/__INTEL_COMPILER[ \t]*([0-9]+).*$/mi)[1]/100;
+				// compiler version is a number; it compares well with another major.minor
+				// version number, where major has one, two, and perhaps more digits (9.1, 11, etc).
+			}
+			if ( compiler_version >= WScript.Arguments(2) ) {
+				WScript.Echo( "ok" );
+			} else {
+				WScript.Echo( "fail" );
+			}
+			return;
 		}
 }
 
@@ -138,7 +175,9 @@ if ( WScript.Arguments.Count() > 0 ) {
 	doClean();
 
 } else {
-
-	WScript.Echo( "/arch or /runtime should be set" );
+	WScript.Echo( "Supported options:\n"
+	              + "\t/arch [compiler]\n"
+	              + "\t/runtime [compiler]\n"
+	              + "\t/minversion compiler version" );
 }
 
diff --git a/build/generate_tbbvars.bat b/build/generate_tbbvars.bat
index 05dc4fe..d64adef 100644
--- a/build/generate_tbbvars.bat
+++ b/build/generate_tbbvars.bat
@@ -1,6 +1,6 @@
 @echo off
 REM
-REM Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+REM Copyright 2005-2012 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 4bc967e..dad0319 100644
--- a/build/generate_tbbvars.sh
+++ b/build/generate_tbbvars.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/index.html b/build/index.html
index 61846a8..2565e59 100644
--- a/build/index.html
+++ b/build/index.html
@@ -222,7 +222,7 @@ See the Makefile infrastructure files for examples.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <P></P>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel and Itanium are registered trademarks or trademarks of Intel Corporation or its
 subsidiaries in the United States and other countries.
diff --git a/build/linux.gcc.inc b/build/linux.gcc.inc
index 1c20c3f..8e455a8 100644
--- a/build/linux.gcc.inc
+++ b/build/linux.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -48,23 +48,33 @@ LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
 LIBS += -lpthread -lrt
 LINK_FLAGS = -Wl,-rpath-link=.
 C_FLAGS = $(CPLUS_FLAGS)
+# gcc 4.4 and higher support -std=c++0x
+ifneq (,$(shell gcc -dumpversion | egrep  "^(4\.[4-9]|[5-9])"))
+    CPP11_FLAGS = -std=c++0x -D_TBB_CPP0X
+endif
+
+# gcc 4.2 and higher support OpenMP
+ifneq (,$(shell gcc -dumpversion | egrep  "^(4\.[2-9]|[5-9])"))
+    OPENMP_FLAG = -fopenmp
+endif
 
 ITT_NOTIFY = -DDO_ITT_NOTIFY
 ifeq ($(cfg), release)
-        CPLUS_FLAGS = $(ITT_NOTIFY) -O2 -DUSE_PTHREAD
+        CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD
 endif
 ifeq ($(cfg), debug)
         CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD
 endif
 
-ifneq (0,$(cpp0x))
-    CXX_ONLY_FLAGS = -std=c++0x
+ifneq (00,$(lambdas)$(cpp0x))
+    CXX_ONLY_FLAGS += $(CPP11_FLAGS)
 endif
 
 TBB_ASM.OBJ=
 MALLOC_ASM.OBJ=
 
 ifeq (ia64,$(arch))
+    ITT_NOTIFY =
 # Position-independent code (PIC) is a must on IA-64, even for regular (not shared) executables
     CPLUS_FLAGS += $(PIC_KEY)
 endif
diff --git a/build/linux.icc.inc b/build/linux.icc.inc
index fa24432..8aa5a39 100644
--- a/build/linux.icc.inc
+++ b/build/linux.icc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -43,22 +43,26 @@ TBB_NOSTRICT = 1
 CPLUS = icpc
 CONLY = icc
 
+ITT_NOTIFY = -DDO_ITT_NOTIFY
 ifeq (release,$(cfg))
-CPLUS_FLAGS = -O2 -g -strict-ansi -DUSE_PTHREAD
+CPLUS_FLAGS = $(ITT_NOTIFY) -O2 -g -DUSE_PTHREAD
 else
-CPLUS_FLAGS = -O0 -g -strict-ansi -DUSE_PTHREAD -DTBB_USE_DEBUG
-endif
-
-ifneq (,$(codecov))
-    CPLUS_FLAGS += -prof-genx
-else
-    CPLUS_FLAGS += -DDO_ITT_NOTIFY
+CPLUS_FLAGS = $(ITT_NOTIFY) -O0 -g -DUSE_PTHREAD -DTBB_USE_DEBUG
 endif
 
 OPENMP_FLAG = -openmp
 LIB_LINK_FLAGS = -shared -i-static -Wl,-soname=$(BUILDING_LIBRARY)
 LIBS += -lpthread -lrt
 C_FLAGS = $(CPLUS_FLAGS)
+# ICC 11.0 and higher support -std=c++0x
+ifneq (,$(shell icc -dumpversion | egrep  "^1[1-9]\."))
+    CPP11_FLAGS = -std=c++0x -D_TBB_CPP0X
+endif
+
+# ICC 12.0 and higher provide Intel(R) Cilk Plus
+ifneq (,$(shell icc -dumpversion | egrep  "^1[2-9]\."))
+    CILK_AVAILABLE = yes
+endif
 
 TBB_ASM.OBJ=
 MALLOC_ASM.OBJ=
@@ -69,12 +73,21 @@ ifeq (ia32,$(arch))
 endif
 
 ifeq (ia64,$(arch))
+    ITT_NOTIFY =
 # Position-independent code (PIC) is a must on IA-64, even for regular (not shared) executables
-    CPLUS_FLAGS += $(PIC_KEY)
+# strict-ansi does not work with <signal.h> on RHEL 4 AS
+    CPLUS_FLAGS += $(PIC_KEY) $(if $(findstring cc3.,$(runtime)),-ansi,-strict-ansi)
+else
+    CPLUS_FLAGS += -strict-ansi
+endif
+
+ifneq (,$(codecov))
+# no tool support for code coverage, need profile data generation
+    ITT_NOTIFY = -prof-genx
 endif
 
 ifneq (00,$(lambdas)$(cpp0x))
-	CPLUS_FLAGS += -std=c++0x -D_TBB_CPP0X
+	CPLUS_FLAGS += $(CPP11_FLAGS)
 endif
 
 #------------------------------------------------------------------------------
diff --git a/build/linux.inc b/build/linux.inc
index aea0392..a27408f 100644
--- a/build/linux.inc
+++ b/build/linux.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -62,9 +62,7 @@ ifndef arch
 endif
 
 ifndef runtime
-        #gcc_version:=$(shell gcc -v 2>&1 | grep 'gcc --version' | sed -e 's/^gcc version //' | sed -e 's/ .*$$//')
-        gcc_version_full=$(shell gcc --version | grep 'gcc'| egrep -o ' [0-9]+\.[0-9]+\.[0-9]+.*' | sed -e 's/^\ //')
-        gcc_version=$(shell echo "$(gcc_version_full)" | egrep -o '^[0-9]+\.[0-9]+\.[0-9]+\s*' | head -n 1 | sed -e 's/ *//g')
+        gcc_version = $(shell gcc -dumpversion)
         os_version:=$(shell uname -r)
         os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
         export os_glibc_version_full:=$(shell getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //')
@@ -83,7 +81,7 @@ RD?=rmdir
 MD?=mkdir -p
 NUL= /dev/null
 SLASH=/
-MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.ver
 MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
 
 ifdef LD_LIBRARY_PATH
diff --git a/build/linux.xl.inc b/build/linux.xl.inc
index 6f980d9..c56098a 100644
--- a/build/linux.xl.inc
+++ b/build/linux.xl.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/macos.clang.inc b/build/macos.clang.inc
new file mode 100644
index 0000000..92c2cf4
--- /dev/null
+++ b/build/macos.clang.inc
@@ -0,0 +1,109 @@
+# Copyright 2005-2012 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.
+
+CPLUS = clang++
+CONLY = clang
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c++
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall
+TEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor
+WARNING_SUPPRESS = -Wno-non-virtual-dtor
+DYLIB_KEY = -dynamiclib
+EXPORT_KEY = -Wl,-exported_symbols_list,
+LIBDL = -ldl
+
+LIBS = -lpthread
+LINK_FLAGS =
+LIB_LINK_FLAGS = -dynamiclib
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifeq ($(cfg), release)
+    CPLUS_FLAGS = -O2
+else
+    CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG
+endif
+
+CPLUS_FLAGS += -DUSE_PTHREAD
+
+ifeq (intel64,$(arch))
+    CPLUS_FLAGS += -m64
+    LINK_FLAGS += -m64
+    LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ia32,$(arch))
+    CPLUS_FLAGS += -m32
+    LINK_FLAGS += -m32
+    LIB_LINK_FLAGS += -m32
+endif
+
+ifeq (ppc64,$(arch))
+    CPLUS_FLAGS += -arch ppc64
+    LINK_FLAGS += -arch ppc64
+    LIB_LINK_FLAGS += -arch ppc64
+endif
+
+ifeq (ppc32,$(arch))
+    CPLUS_FLAGS += -arch ppc
+    LINK_FLAGS += -arch ppc
+    LIB_LINK_FLAGS += -arch ppc
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+
+ASM = as
+ifeq (intel64,$(arch))
+    ASM_FLAGS += -arch x86_64
+endif
+ifeq (ia32,$(arch))
+    ASM_FLAGS += -arch i386
+endif
+ifeq ($(cfg), debug)
+    ASM_FLAGS += -g
+endif
+
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
diff --git a/build/macos.gcc.inc b/build/macos.gcc.inc
index eac10bb..cd9d9a1 100644
--- a/build/macos.gcc.inc
+++ b/build/macos.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/macos.icc.inc b/build/macos.icc.inc
index 37b5d0d..c689f61 100644
--- a/build/macos.icc.inc
+++ b/build/macos.icc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -44,6 +44,15 @@ LIBS = -lpthread
 LINK_FLAGS =
 LIB_LINK_FLAGS = -dynamiclib -i-static
 C_FLAGS = $(CPLUS_FLAGS)
+# ICC 11.0 and higher support -std=c++0x
+ifneq (,$(shell icc -dumpversion | egrep  "^1[1-9]\."))
+    CPP11_FLAGS = -std=c++0x -D_TBB_CPP0X
+endif
+
+# ICC 12.0 and higher provide Intel(R) Cilk Plus
+ifneq (,$(shell icc -dumpversion | egrep  "^1[2-9]\."))
+    CILK_AVAILABLE = yes
+endif
 
 ifeq ($(cfg), release)
     CPLUS_FLAGS = -O2 -fno-omit-frame-pointer
@@ -58,7 +67,7 @@ ifneq (,$(codecov))
 endif
 
 ifneq (00,$(lambdas)$(cpp0x))
-	CPLUS_FLAGS += -std=c++0x -D_TBB_CPP0X
+	CPLUS_FLAGS += $(CPP11_FLAGS)
 endif
 
 #------------------------------------------------------------------------------
diff --git a/build/macos.inc b/build/macos.inc
index c840c6d..31a80f0 100644
--- a/build/macos.inc
+++ b/build/macos.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -56,9 +56,7 @@ ifndef arch
 endif
 
 ifndef runtime
- #gcc_version:=$(shell gcc -v 2>&1 | grep 'gcc version' | sed -e 's/^gcc version //' | sed -e 's/ .*$$//' )
- gcc_version_full=$(shell gcc --version | grep 'gcc'| egrep -o ' [0-9]+\.[0-9]+\.[0-9]+.*' | sed -e 's/^\ //')
- gcc_version=$(shell echo "$(gcc_version_full)" | egrep -o '^[0-9]+\.[0-9]+\.[0-9]+\s*' | head -n 1 | sed -e 's/ *//g')
+ gcc_version = $(shell gcc -dumpversion)
  os_version:=$(shell /usr/bin/sw_vers -productVersion)
  export runtime:=cc$(gcc_version)_os$(os_version)
 endif
@@ -74,7 +72,7 @@ RD?=rmdir
 MD?=mkdir -p
 NUL= /dev/null
 SLASH=/
-MAKE_VERSIONS=sh $(tbb_root)/build/version_info_macos.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_macos.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.ver
 MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
 
 ####### Build settings ########################################################
diff --git a/build/test_launcher.bat b/build/test_launcher.bat
index f6fff3d..dad7769 100644
--- a/build/test_launcher.bat
+++ b/build/test_launcher.bat
@@ -1,6 +1,6 @@
 @echo off
 REM
-REM Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+REM Copyright 2005-2012 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 4aaebe8..0e80d43 100644
--- a/build/test_launcher.sh
+++ b/build/test_launcher.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/version_info_aix.sh b/build/version_info_aix.sh
index db9e079..30e9deb 100644
--- a/build/version_info_aix.sh
+++ b/build/version_info_aix.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -27,16 +27,16 @@
 # the GNU General Public License.
 
 # Script used to generate version info string
-echo "#define __TBB_VERSION_STRINGS \\"
-echo '"TBB:' "BUILD_HOST\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \'
+echo "#define __TBB_VERSION_STRINGS(N) \\"
+echo '#N": BUILD_HOST'"\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \'
 # find OS name in *-release and issue* files by filtering blank lines and lsb-release content out
-echo '"TBB:' "BUILD_OS\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \'
-echo '"TBB:' "BUILD_KERNEL\t"`uname -srv`'" ENDL \'
-echo '"TBB:' "BUILD_GCC\t\t"`g++ -v </dev/null 2>&1 | grep 'gcc.*version'`'" ENDL \'
-[ -z "$COMPILER_VERSION" ] || echo '"TBB:' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
-echo '"TBB:' "BUILD_GLIBC\t"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'" ENDL \'
-echo '"TBB:' "BUILD_LD\t\t"`ld -v 2>&1 | grep 'version'`'" ENDL \'
-echo '"TBB:' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
-echo '"TBB:' "BUILD_COMMAND\t"$*'" ENDL \'
+echo '#N": BUILD_OS'"\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \'
+echo '#N": BUILD_KERNEL'"\t"`uname -srv`'" ENDL \'
+echo '#N": BUILD_GCC'"\t\t"`g++ -v </dev/null 2>&1 | grep 'gcc.*version'`'" ENDL \'
+[ -z "$COMPILER_VERSION" ] || echo '#N": BUILD_COMPILER'"\t"$COMPILER_VERSION'" ENDL \'
+echo '#N": BUILD_GLIBC'"\t"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'" ENDL \'
+echo '#N": BUILD_LD'"\t\t"`ld -v 2>&1 | grep 'version'`'" ENDL \'
+echo '#N": BUILD_TARGET'"\t$arch on $runtime"'" ENDL \'
+echo '#N": BUILD_COMMAND'"\t"$*'" ENDL \'
 echo ""
 echo "#define __TBB_DATETIME \""`date -u`"\""
diff --git a/build/version_info_linux.sh b/build/version_info_linux.sh
index e71a70f..c11a85d 100644
--- a/build/version_info_linux.sh
+++ b/build/version_info_linux.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -27,16 +27,16 @@
 # the GNU General Public License.
 
 # Script used to generate version info string
-echo "#define __TBB_VERSION_STRINGS \\"
-echo '"TBB:' "BUILD_HOST\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \'
+echo "#define __TBB_VERSION_STRINGS(N) \\"
+echo '#N": BUILD_HOST'"\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \'
 # find OS name in *-release and issue* files by filtering blank lines and lsb-release content out
-echo '"TBB:' "BUILD_OS\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \'
-echo '"TBB:' "BUILD_KERNEL\t"`uname -srv`'" ENDL \'
-echo '"TBB:' "BUILD_GCC\t\t"`g++ -v </dev/null 2>&1 | grep 'gcc.*version '`'" ENDL \'
-[ -z "$COMPILER_VERSION" ] || echo '"TBB:' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
-echo '"TBB:' "BUILD_GLIBC\t"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'" ENDL \'
-echo '"TBB:' "BUILD_LD\t\t"`ld -v 2>&1 | grep 'version'`'" ENDL \'
-echo '"TBB:' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
-echo '"TBB:' "BUILD_COMMAND\t"$*'" ENDL \'
+echo '#N": BUILD_OS'"\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \'
+echo '#N": BUILD_KERNEL'"\t"`uname -srv`'" ENDL \'
+echo '#N": BUILD_GCC'"\t\t"`g++ -v </dev/null 2>&1 | grep 'gcc.*version '`'" ENDL \'
+[ -z "$COMPILER_VERSION" ] || echo '#N": BUILD_COMPILER'"\t"$COMPILER_VERSION'" ENDL \'
+echo '#N": BUILD_GLIBC'"\t"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'" ENDL \'
+echo '#N": BUILD_LD'"\t\t"`ld -v 2>&1 | grep 'version'`'" ENDL \'
+echo '#N": BUILD_TARGET'"\t$arch on $runtime"'" ENDL \'
+echo '#N": BUILD_COMMAND'"\t"$*'" ENDL \'
 echo ""
 echo "#define __TBB_DATETIME \""`date -u`"\""
diff --git a/build/version_info_macos.sh b/build/version_info_macos.sh
index b0d3c0c..43c706d 100644
--- a/build/version_info_macos.sh
+++ b/build/version_info_macos.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -27,13 +27,13 @@
 # the GNU General Public License.
 
 # Script used to generate version info string
-echo "#define __TBB_VERSION_STRINGS \\"
-echo '"TBB:' "BUILD_HOST\t\t"`hostname -s`" ("`arch`")"'" ENDL \'
-echo '"TBB:' "BUILD_OS\t\t"`sw_vers -productName`" version "`sw_vers -productVersion`'" ENDL \'
-echo '"TBB:' "BUILD_KERNEL\t"`uname -v`'" ENDL \'
-echo '"TBB:' "BUILD_GCC\t\t"`gcc -v </dev/null 2>&1 | grep 'version'`'" ENDL \'
-[ -z "$COMPILER_VERSION" ] || echo '"TBB:' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
-echo '"TBB:' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
-echo '"TBB:' "BUILD_COMMAND\t"$*'" ENDL \'
+echo "#define __TBB_VERSION_STRINGS(N) \\"
+echo '#N": BUILD_HOST'"\t\t"`hostname -s`" ("`arch`")"'" ENDL \'
+echo '#N": BUILD_OS'"\t\t"`sw_vers -productName`" version "`sw_vers -productVersion`'" ENDL \'
+echo '#N": BUILD_KERNEL'"\t"`uname -v`'" ENDL \'
+echo '#N": BUILD_GCC'"\t\t"`gcc -v </dev/null 2>&1 | grep 'version'`'" ENDL \'
+[ -z "$COMPILER_VERSION" ] || echo '#N": BUILD_COMPILER'"\t"$COMPILER_VERSION'" ENDL \'
+echo '#N": BUILD_TARGET'"\t$arch on $runtime"'" ENDL \'
+echo '#N": BUILD_COMMAND'"\t"$*'" ENDL \'
 echo ""
 echo "#define __TBB_DATETIME \""`date -u`"\""
diff --git a/build/version_info_sunos.sh b/build/version_info_sunos.sh
index ed72cb2..ac1cbcf 100644
--- a/build/version_info_sunos.sh
+++ b/build/version_info_sunos.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -27,13 +27,13 @@
 # the GNU General Public License.
 
 # Script used to generate version info string
-echo "#define __TBB_VERSION_STRINGS \\"
-echo '"TBB:' "BUILD_HOST\t"`hostname`" ("`arch`")"'" ENDL \'
-echo '"TBB:' "BUILD_OS\t\t"`uname`'" ENDL \'
-echo '"TBB:' "BUILD_KERNEL\t"`uname -srv`'" ENDL \'
-echo '"TBB:' "BUILD_SUNCC\t"`CC -V </dev/null 2>&1 | grep 'C++'`'" ENDL \'
-[ -z "$COMPILER_VERSION" ] || echo '"TBB:' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
-echo '"TBB:' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
-echo '"TBB:' "BUILD_COMMAND\t"$*'" ENDL \'
+echo "#define __TBB_VERSION_STRINGS(N) \\"
+echo '#N": BUILD_HOST'"\t"`hostname`" ("`arch`")"'" ENDL \'
+echo '#N": BUILD_OS'"\t\t"`uname`'" ENDL \'
+echo '#N": BUILD_KERNEL'"\t"`uname -srv`'" ENDL \'
+echo '#N": BUILD_SUNCC'"\t"`CC -V </dev/null 2>&1 | grep 'C++'`'" ENDL \'
+[ -z "$COMPILER_VERSION" ] || echo '#N": BUILD_COMPILER'"\t"$COMPILER_VERSION'" ENDL \'
+echo '#N": BUILD_TARGET'"\t$arch on $runtime"'" ENDL \'
+echo '#N": BUILD_COMMAND'"\t"$*'" ENDL \'
 echo ""
 echo "#define __TBB_DATETIME \""`date -u`"\""
diff --git a/build/version_info_windows.js b/build/version_info_windows.js
index d2f597b..3dcf09a 100644
--- a/build/version_info_windows.js
+++ b/build/version_info_windows.js
@@ -1,4 +1,4 @@
-// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
@@ -28,10 +28,10 @@ var WshShell = WScript.CreateObject("WScript.Shell");
 
 var tmpExec;
 
-WScript.Echo("#define __TBB_VERSION_STRINGS \\");
+WScript.Echo("#define __TBB_VERSION_STRINGS(N) \\");
 
 //Getting BUILD_HOST
-WScript.echo( "\"TBB: BUILD_HOST\\t\\t" + 
+WScript.echo( "#N \": BUILD_HOST\\t\\t" + 
               WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") +
               "\" ENDL \\" );
 
@@ -42,13 +42,13 @@ while ( tmpExec.Status == 0 ) {
 }
 tmpExec.StdOut.ReadLine();
 
-WScript.echo( "\"TBB: BUILD_OS\\t\\t" + 
+WScript.echo( "#N \": BUILD_OS\\t\\t" + 
               tmpExec.StdOut.ReadLine() +
               "\" ENDL \\" );
 
 if ( WScript.Arguments(0).toLowerCase().match("gcc") ) {
     tmpExec = WshShell.Exec("gcc --version");
-    WScript.echo( "\"TBB: BUILD_COMPILER\\t" + 
+    WScript.echo( "#N \": BUILD_COMPILER\\t" + 
                   tmpExec.StdOut.ReadLine() + 
                   "\" ENDL \\" );
 
@@ -60,7 +60,7 @@ if ( WScript.Arguments(0).toLowerCase().match("gcc") ) {
         WScript.Sleep(100);
     }
     var clVersion = tmpExec.StdErr.ReadLine();
-    WScript.echo( "\"TBB: BUILD_CL\\t\\t" + 
+    WScript.echo( "#N \": BUILD_CL\\t\\t" + 
                   clVersion +
                   "\" ENDL \\" );
 
@@ -70,11 +70,11 @@ if ( WScript.Arguments(0).toLowerCase().match("gcc") ) {
         while ( tmpExec.Status == 0 ) {
             WScript.Sleep(100);
         }
-        WScript.echo( "\"TBB: BUILD_COMPILER\\t" + 
+        WScript.echo( "#N \": BUILD_COMPILER\\t" + 
                       tmpExec.StdErr.ReadLine() + 
                       "\" ENDL \\" );
     } else {
-        WScript.echo( "\"TBB: BUILD_COMPILER\\t\\t" + 
+        WScript.echo( "#N \": BUILD_COMPILER\\t\\t" + 
                       clVersion +
                       "\" ENDL \\" );
     }
@@ -82,12 +82,12 @@ if ( WScript.Arguments(0).toLowerCase().match("gcc") ) {
 }
 
 //Getting BUILD_TARGET
-WScript.echo( "\"TBB: BUILD_TARGET\\t" + 
+WScript.echo( "#N \": BUILD_TARGET\\t" + 
               WScript.Arguments(1) + 
               "\" ENDL \\" );
 
 //Getting BUILD_COMMAND
-WScript.echo( "\"TBB: BUILD_COMMAND\\t" + WScript.Arguments(2) + "\" ENDL" );
+WScript.echo( "#N \": BUILD_COMMAND\\t" + WScript.Arguments(2) + "\" ENDL" );
 
 //Getting __TBB_DATETIME and __TBB_VERSION_YMD
 var date = new Date();
diff --git a/build/vsproject/index.html b/build/vsproject/index.html
index 6179447..6607338 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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/build/vsproject/tbbmalloc.vcproj b/build/vsproject/tbbmalloc.vcproj
index d00a511..f0078ad 100644
--- a/build/vsproject/tbbmalloc.vcproj
+++ b/build/vsproject/tbbmalloc.vcproj
@@ -14,7 +14,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="0" Ba [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling= [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -33,7 +33,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BasicRuntimeChecks="0"  [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BasicRuntimeCheck [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -52,7 +52,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" DebugInf [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" De [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -71,7 +71,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" BufferSecurityCheck="false" RuntimeLibrary="2" UsePrecompiledHea [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" BufferSecurityCheck="false" RuntimeLibrary="2" UsePrecompi [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -90,7 +90,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="0" BasicRuntimeChecks="0 [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="0" BasicRuntimeChe [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -109,7 +109,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BufferSecurityCheck="false" BasicRuntimeCh [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHs- /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BufferSecurityCheck="false" BasicRun [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -128,7 +128,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="3"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationForma [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -147,7 +147,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBB_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" BufferSecurityCheck="false" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLeve [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHs- /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I." AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" BufferSecurityCheck="false" RuntimeLibrary="0" UsePrecompiledHeader="0" Warni [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -259,7 +259,7 @@
 " Outputs=""$(IntDir)\tbbmalloc.def""/>
 				</FileConfiguration>
 			</File>
-			<File RelativePath="..\..\src\tbbmalloc\frontend.cpp"/><File RelativePath="..\..\src\tbbmalloc\backend.cpp"/><File RelativePath="..\..\src\tbbmalloc\large_objects.cpp"/><File RelativePath="..\..\src\tbbmalloc\backref.cpp"/><File RelativePath="..\..\src\tbb\itt_notify.cpp"/><File RelativePath="..\..\src\tbbmalloc\tbbmalloc.cpp"/></Filter>
+			<File RelativePath="..\..\src\tbbmalloc\backend.cpp"/><File RelativePath="..\..\src\tbbmalloc\large_objects.cpp"/><File RelativePath="..\..\src\tbbmalloc\backref.cpp"/><File RelativePath="..\..\src\tbbmalloc\tbbmalloc.cpp"/><File RelativePath="..\..\src\tbb\itt_notify.cpp"/><File RelativePath="..\..\src\tbbmalloc\frontend.cpp"/></Filter>
 		<Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;inc;xsd" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
 			<File RelativePath="..\..\include\tbb\internal\_concurrent_queue_impl.h">
 			</File>
diff --git a/build/vsproject/tbbmalloc_proxy.vcproj b/build/vsproject/tbbmalloc_proxy.vcproj
index 759da4e..12a60f7 100644
--- a/build/vsproject/tbbmalloc_proxy.vcproj
+++ b/build/vsproject/tbbmalloc_proxy.vcproj
@@ -14,7 +14,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="1" BasicRun [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /Wp64 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" Exceptio [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -33,7 +33,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /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" Buffer [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /Wp64 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BasicRu [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -52,7 +52,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="4" DebugInformati [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /D_USE_RTM_VERSION /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /Wp64 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLe [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -71,7 +71,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /Wp64 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" BufferSecurityCheck="false" RuntimeLibrary="2" UsePrecompiledHeader="0 [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /D_USE_RTM_VERSION /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /Wp64 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" BufferSecurityCheck="false" RuntimeLibrary="2" U [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -90,7 +90,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="1" BasicRuntimeChecks="0" RuntimeLib [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." PreprocessorDefinitions="" MinimalRebuild="true" ExceptionHandling="1" BasicRuntim [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -109,7 +109,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<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__TBB_LIB_NAME=tbb_debug.lib /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" Optimization="0" AdditionalIncludeDirectories="." MinimalRebuild="false" ExceptionHandling="0" BasicRuntimeChecks="0" BufferSecurityCheck="false" Run [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /D__TBBMALLOC_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" BufferSec [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -128,7 +128,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" DebugInformationFormat="3"/>
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /D__TBBMALLOC_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" DebugInformationF [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
@@ -147,7 +147,7 @@
 			<Tool Name="MASM"/>
 			<Tool Name="VCXMLDataGeneratorTool"/>
 			<Tool Name="VCMIDLTool" TargetEnvironment="3"/>
-			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" BufferSecurityCheck="false" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" DebugI [...]
+			<Tool Name="VCCLCompilerTool" AdditionalOptions=" /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /GS- /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0501 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc" AdditionalIncludeDirectories="." PreprocessorDefinitions="" ExceptionHandling="0" BufferSecurityCheck="false" RuntimeLibrary="0" UsePrecompiledHeader="0" W [...]
 			<Tool Name="VCManagedResourceCompilerTool"/>
 			<Tool Name="VCResourceCompilerTool"/>
 			<Tool Name="VCPreLinkEventTool"/>
diff --git a/build/vsproject/version_string.tmp b/build/vsproject/version_string.tmp
deleted file mode 100644
index 2098d67..0000000
--- a/build/vsproject/version_string.tmp
+++ /dev/null
@@ -1 +0,0 @@
-#define __TBB_VERSION_STRINGS "Empty"
diff --git a/build/vsproject/version_string.ver b/build/vsproject/version_string.ver
new file mode 100644
index 0000000..5d8f04e
--- /dev/null
+++ b/build/vsproject/version_string.ver
@@ -0,0 +1 @@
+#define __TBB_VERSION_STRINGS(N) "Empty"
diff --git a/build/windows.cl.inc b/build/windows.cl.inc
index 5f51f3a..d4ae95b 100644
--- a/build/windows.cl.inc
+++ b/build/windows.cl.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/windows.gcc.inc b/build/windows.gcc.inc
index 6233c33..15851db 100644
--- a/build/windows.gcc.inc
+++ b/build/windows.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -64,8 +64,9 @@ OUTPUT_KEY = -o #
 OUTPUTOBJ_KEY = -o #
 PIC_KEY =
 WARNING_AS_ERROR_KEY = -Werror
-WARNING_KEY = -Wall  -Wno-uninitialized
-WARNING_SUPPRESS = -Wno-parentheses
+WARNING_KEY = -Wall
+TEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wno-uninitialized
+WARNING_SUPPRESS = -Wno-parentheses -Wno-uninitialized
 DYLIB_KEY = -shared
 LIBDL =
 EXPORT_KEY = -Wl,--version-script,
@@ -79,6 +80,10 @@ LIBS = -lpsapi
 
 LINK_FLAGS = -Wl,--enable-auto-import
 LIB_LINK_FLAGS = $(DYLIB_KEY)
+# gcc 4.4 and higher support -std=c++0x
+ifeq (ok,$(shell cmd /C "cscript /nologo /E:jscript $(tbb_root)/build/detect.js /minversion gcc 4.4"))
+    CPP11_FLAGS = -std=c++0x -D_TBB_CPP0X
+endif
 
 ifeq ($(cfg), release)
         CPLUS_FLAGS = -O2
@@ -101,7 +106,7 @@ ifeq (intel64,$(arch))
 endif
 
 ifeq (ia32,$(arch))
-    CPLUS_FLAGS += -m32
+    CPLUS_FLAGS += -m32 -march=i686
     LIB_LINK_FLAGS += -m32
 endif
 
diff --git a/build/windows.icl.inc b/build/windows.icl.inc
index dfa7010..7f38b22 100644
--- a/build/windows.icl.inc
+++ b/build/windows.icl.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -44,10 +44,21 @@ cfg ?= release
 CPLUS = icl /nologo $(VCCOMPAT_FLAG)
 LINK_FLAGS = /link /nologo
 LIB_LINK_FLAGS= /link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO
+
+# ICC 11.0 and higher support -std=c++0x
+ifeq (ok,$(shell cmd /C "cscript /nologo /E:jscript $(tbb_root)/build/detect.js /minversion icl 11"))
+    CPP11_FLAGS = /Qstd=c++0x /D_TBB_CPP0X
+endif
+
+# ICC 12.0 and higher provide Intel(R) Cilk Plus
+ifeq (ok,$(shell cmd /C "cscript /nologo /E:jscript $(tbb_root)/build/detect.js /minversion icl 12"))
+    CILK_AVAILABLE = yes
+endif
+
 ifeq ($(runtime), vc_mt)
-	MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d)
+    MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d)
 else
-	MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
+    MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
 endif
 EH_FLAGS = /EHsc /GR
 
@@ -91,14 +102,14 @@ CPLUS_FLAGS += /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE \
                /D_WIN32_WINNT=$(_WIN32_WINNT)
 
 ifeq ($(runtime),vc8)
-        CPLUS_FLAGS += /D_USE_RTM_VERSION
+    CPLUS_FLAGS += /D_USE_RTM_VERSION
 endif
 
 
 C_FLAGS = $(CPLUS_FLAGS)
 
 ifneq (00,$(lambdas)$(cpp0x))
-	CPLUS_FLAGS += /Qstd=c++0x /D_TBB_CPP0X
+    CPLUS_FLAGS += $(CPP11_FLAGS)
 endif
 
 VCVERSION:=$(runtime)
diff --git a/build/windows.inc b/build/windows.inc
index 6d1150e..03c8661 100644
--- a/build/windows.inc
+++ b/build/windows.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -104,7 +104,7 @@ ifneq ($(filter vc8 vc9,$(runtime)),)
 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)") > 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.ver
 MAKE_TBBVARS  = cmd /C "$(subst /,\,$(tbb_root))\build\generate_tbbvars.bat"
 
 TEST_LAUNCHER =  $(subst /,\,$(tbb_root))\build\test_launcher.bat
diff --git a/build/xbox360.cl.inc b/build/xbox360.cl.inc
index 0322df6..7efa4e9 100644
--- a/build/xbox360.cl.inc
+++ b/build/xbox360.cl.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/build/xbox360.inc b/build/xbox360.inc
index fb2d462..b215942 100644
--- a/build/xbox360.inc
+++ b/build/xbox360.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -74,5 +74,5 @@ MALLOC.DLL = tbbmalloc$(DEBUG_SUFFIX).$(DLL)
 MALLOC.LIB = tbbmalloc$(DEBUG_SUFFIX).$(LIBEXT)
 MALLOC.RES =
 
-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) $(INCLUDES)") > version_string.ver
 MAKE_TBBVARS  = cmd /C "$(subst /,\,$(tbb_root))\build\generate_tbbvars.bat"
diff --git a/doc/Release_Notes.txt b/doc/Release_Notes.txt
index d92e7a6..e7290e5 100644
--- a/doc/Release_Notes.txt
+++ b/doc/Release_Notes.txt
@@ -118,7 +118,7 @@ Library Issues
 	on debug vs. release libraries.
     
 ------------------------------------------------------------------------
-Copyright (C) 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright (C) 2005-2012 Intel Corporation.  All Rights Reserved.
 
 Intel, Xeon and Pentium are registered trademarks or trademarks of
 Intel Corporation or its subsidiaries in the United States and other countries.
diff --git a/doc/html/a00001.html b/doc/html/a00001.html
deleted file mode 100644
index c5c6e06..0000000
--- a/doc/html/a00001.html
+++ /dev/null
@@ -1,34 +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::aligned_space< T, N > Member List</h1>This is the complete list of members for <a class="el" href="a00227.html">tbb::aligned_space< T, N ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()</td><td><a class="el" href="a00227.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00227.html#024be075c23c0394c9a2518d993bcd9e">end</a>()</td><td><a class="el" href="a00227.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00002.html b/doc/html/a00002.html
deleted file mode 100644
index e08c449..0000000
--- a/doc/html/a00002.html
+++ /dev/null
@@ -1,34 +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::atomic< T > Member List</h1>This is the complete list of members for <a class="el" href="a00228.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="a00228.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00228.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="a00228.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00228.html">tbb::atomic< T ></a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00003.html b/doc/html/a00003.html
deleted file mode 100644
index e9e631b..0000000
--- a/doc/html/a00003.html
+++ /dev/null
@@ -1,34 +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::atomic< void * > Member List</h1>This is the complete list of members for <a class="el" href="a00229.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="a00229.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00229.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="a00229.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00229.html">tbb::atomic< void * ></a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00004.html b/doc/html/a00004.html
deleted file mode 100644
index c03e3ae..0000000
--- a/doc/html/a00004.html
+++ /dev/null
@@ -1,45 +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::blocked_range< Value > Member List</h1>This is the complete list of members for <a class="el" href="a00233.html">tbb::blocked_range< Value ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00233.html#18d2258400756ac1446dac7676b18df3">begin</a>() const </td><td><a class="el" href="a00233.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00233.html#94607755c5110d199202234d58d022ac">blocked_range</a>()</td><td><a class="el" href="a00233.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00233.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td><a class="el" href="a00233.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00233.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a>(blocked_range &r, split)</td><td><a class="el" href="a00233.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="a00233.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00233.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="a00233.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00233.html">tbb::blocked_range< Value ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00233.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> typedef</td><td><a class="el" href="a00233.html">tbb::blocked_range< Value ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00233.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() const </td><td><a class="el" href="a00233.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00233.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>() const </td><td><a class="el" href="a00233.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>() const </td><td><a class="el" href="a00233.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00233.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() const </td><td><a class="el" href="a00233.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>() const </td><td><a class="el" href="a00233.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00233.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> typedef</td><td><a class="el" href="a00233.html">tbb::blocked_range< Value ></a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00005.html b/doc/html/a00005.html
index 7d34f8a..13dede1 100644
--- a/doc/html/a00005.html
+++ b/doc/html/a00005.html
@@ -20,19 +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::blocked_range2d< RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00234.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="a00234.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00234.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="a00234.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00234.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="a00234.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00234.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="a00234.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00234.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00234.html#392a46759af2c884957115771affa7f4">cols</a>() const </td><td><a class="el" href="a00234.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00234.html#d144cb2d88cef553420311aca8667a44">empty</a>() const </td><td><a class="el" href="a00234.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00234.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a>() const </td><td><a class="el" href="a00234.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00234.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a> typedef</td><td><a class="el" href="a00234.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00234.html#f496e7348a82652fba581203477cc07c">rows</a>() const </td><td><a class="el" href="a00234.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::interface6::aggregator_ext< handler_type > Member List</h1>This is the complete list of members for <a class="el" href="a00252.html">tbb::interface6::aggregator_ext< handler_type ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>aggregator_ext</b>(const handler_type &h) (defined in <a class="el" href="a00252.html">tbb::interface6::aggregator_ext< handler_type ></a>)</td><td><a class="el" href="a00252.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00252.html#fdd0a9ce522246b9e14ae5e44bc72d31">execute_impl</a>(aggregator_operation &op)</td><td><a class="el" href="a00252.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00252.html#ccd88bf4333dc100ba97da8e2170277d">process</a>(aggregator_operation *op)</td><td><a class="el" href="a00252.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00006.html b/doc/html/a00006.html
index 2281c6c..48d1954 100644
--- a/doc/html/a00006.html
+++ b/doc/html/a00006.html
@@ -20,21 +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::blocked_range3d< PageValue, RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00235.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="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00235.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="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00235.html">tbb::blocked_range3d [...]
-  <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00235.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="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00235.html#3336ba9480fd6c43e158f9beb024c050">cols</a>() const </td><td><a class="el" href="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00235.html#356860e1c977d91711e8216bd55c0b25">empty</a>() const </td><td><a class="el" href="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00235.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a>() const </td><td><a class="el" href="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00235.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a> typedef</td><td><a class="el" href="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00235.html#cf971430aa12361d3ed245344b7c6764">pages</a>() const </td><td><a class="el" href="a00235.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="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00235.html#1584623e59ff32a8aa82006827508be4">rows</a>() const </td><td><a class="el" href="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::interface6::aggregator Member List</h1>This is the complete list of members for <a class="el" href="a00251.html">tbb::interface6::aggregator</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>aggregator</b>() (defined in <a class="el" href="a00251.html">tbb::interface6::aggregator</a>)</td><td><a class="el" href="a00251.html">tbb::interface6::aggregator</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>aggregator_ext</b>(const handler_type &h) (defined in <a class="el" href="a00252.html">tbb::interface6::aggregator_ext< handler_type ></a>)</td><td><a class="el" href="a00252.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td><code> [inline, private]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00251.html#641c8dc43652589d12eefaef130c094d">execute</a>(const Body &b)</td><td><a class="el" href="a00251.html">tbb::interface6::aggregator</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00252.html#fdd0a9ce522246b9e14ae5e44bc72d31">execute_impl</a>(aggregator_operation &op)</td><td><a class="el" href="a00252.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td><code> [inline, private]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00252.html#ccd88bf4333dc100ba97da8e2170277d">process</a>(aggregator_operation *op)</td><td><a class="el" href="a00252.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td><code> [inline, private]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00007.html b/doc/html/a00007.html
index 0445b25..8834756 100644
--- a/doc/html/a00007.html
+++ b/doc/html/a00007.html
@@ -20,27 +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::cache_aligned_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00238.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>(size_type n, const void *hint=0)</td><td><a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00238.html#958ee8745c86c275bfc9533af565e017">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00238.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00238.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00238.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00238.html#cd298895a4f1654b5149ec84b591ecb5">destroy</a>(pointer p)</td><td><a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00238.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const </td><td><a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.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="a00238.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00238.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+<h1>tbb::aligned_space< T, N > Member List</h1>This is the complete list of members for <a class="el" href="a00253.html">tbb::aligned_space< T, N ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()</td><td><a class="el" href="a00253.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00253.html#024be075c23c0394c9a2518d993bcd9e">end</a>()</td><td><a class="el" href="a00253.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00008.html b/doc/html/a00008.html
new file mode 100644
index 0000000..318ca84
--- /dev/null
+++ b/doc/html/a00008.html
@@ -0,0 +1,34 @@
+<!DOCTYPE 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::atomic< T > Member List</h1>This is the complete list of members for <a class="el" href="a00254.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="a00254.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00254.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="a00254.html">tbb::atomic< T ></a>)</td><td><a class="el" href="a00254.html">tbb::atomic< T ></a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00009.html b/doc/html/a00009.html
index e747ba6..823bc54 100644
--- a/doc/html/a00009.html
+++ b/doc/html/a00009.html
@@ -20,13 +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::cache_aligned_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00239.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="a00239.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00239.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="a00239.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00239.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="a00239.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00239.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
+<h1>tbb::atomic< void * > Member List</h1>This is the complete list of members for <a class="el" href="a00255.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="a00255.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00255.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="a00255.html">tbb::atomic< void * ></a>)</td><td><a class="el" href="a00255.html">tbb::atomic< void * ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00010.html b/doc/html/a00010.html
new file mode 100644
index 0000000..7a86408
--- /dev/null
+++ b/doc/html/a00010.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::blocked_range< Value > Member List</h1>This is the complete list of members for <a class="el" href="a00259.html">tbb::blocked_range< Value ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00259.html#18d2258400756ac1446dac7676b18df3">begin</a>() const </td><td><a class="el" href="a00259.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#94607755c5110d199202234d58d022ac">blocked_range</a>()</td><td><a class="el" href="a00259.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td><a class="el" href="a00259.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a>(blocked_range &r, split)</td><td><a class="el" href="a00259.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="a00259.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00259.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="a00259.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00259.html">tbb::blocked_range< Value ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> typedef</td><td><a class="el" href="a00259.html">tbb::blocked_range< Value ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() const </td><td><a class="el" href="a00259.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>() const </td><td><a class="el" href="a00259.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>() const </td><td><a class="el" href="a00259.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() const </td><td><a class="el" href="a00259.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>() const </td><td><a class="el" href="a00259.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00259.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> typedef</td><td><a class="el" href="a00259.html">tbb::blocked_range< Value ></a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00011.html b/doc/html/a00011.html
index 6cfd67c..c3a6787 100644
--- a/doc/html/a00011.html
+++ b/doc/html/a00011.html
@@ -20,20 +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::combinable< T > Member List</h1>This is the complete list of members for <a class="el" href="a00241.html">tbb::combinable< T ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00241.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00241.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="a00241.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00241.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="a00241.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00241.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="a00241.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00241.html">tbb::combinable< T ></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="a00241.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00241.html">tbb::combinable< T ></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="a00241.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00241.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="a00241.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00241.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="a00241.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00241.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="a00241.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00241.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00241.html#2c87e79ae98588a5780f708773388843">~combinable</a>()</td><td><a class="el" href="a00241.html">tbb::combinable< T ></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="a00260.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="a00260.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00260.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="a00260.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00260.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="a00260.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00260.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="a00260.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00260.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00260.html#392a46759af2c884957115771affa7f4">cols</a>() const </td><td><a class="el" href="a00260.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00260.html#d144cb2d88cef553420311aca8667a44">empty</a>() const </td><td><a class="el" href="a00260.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00260.html#ad36a9b38e4fef26d376f99552ce2d92">is_divisible</a>() const </td><td><a class="el" href="a00260.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00260.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a> typedef</td><td><a class="el" href="a00260.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00260.html#f496e7348a82652fba581203477cc07c">rows</a>() const </td><td><a class="el" href="a00260.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00012.html b/doc/html/a00012.html
index e55415c..0599205 100644
--- a/doc/html/a00012.html
+++ b/doc/html/a00012.html
@@ -20,12 +20,21 @@
     <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< Key > Member List</h1>This is the complete list of members for <a class="el" href="a00321.html">tbb::tbb_hash_compare< Key ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>equal</b>(const Key &a, const Key &b) (defined in <a class="el" href="a00321.html">tbb::tbb_hash_compare< Key ></a>)</td><td><a class="el" href="a00321.html">tbb::tbb_hash_compare< Key ></a></td><td><code> [inline, static]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>hash</b>(const Key &a) (defined in <a class="el" href="a00321.html">tbb::tbb_hash_compare< Key ></a>)</td><td><a class="el" href="a00321.html">tbb::tbb_hash_compare< Key ></a></td><td><code> [inline, static]</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="a00261.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="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00261.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="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00261.html">tbb::blocked_range3d [...]
+  <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00261.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="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00261.html#3336ba9480fd6c43e158f9beb024c050">cols</a>() const </td><td><a class="el" href="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00261.html#356860e1c977d91711e8216bd55c0b25">empty</a>() const </td><td><a class="el" href="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00261.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a>() const </td><td><a class="el" href="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00261.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00261.html#cf971430aa12361d3ed245344b7c6764">pages</a>() const </td><td><a class="el" href="a00261.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="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00261.html#1584623e59ff32a8aa82006827508be4">rows</a>() const </td><td><a class="el" href="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00013.html b/doc/html/a00013.html
index 8cebf50..abb30bd 100644
--- a/doc/html/a00013.html
+++ b/doc/html/a00013.html
@@ -20,73 +20,26 @@
     <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::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#af34cb91b1d0f36a885a1a3432dd9af1">bucket_count</a>() const </td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#220686fe17b197eedf19dd856cd02e36">clear</a>()</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#1ad413f5b666176e7669bf4c87d1ff3f">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#46b9896317662c3cfa3c876ad7592a7c">concurrent_hash_map</a>(size_type n, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#6fb14710893308fb47aaeee55ee30dc3">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#83c40f2053f208861b90390e12a36436">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#6968eb6feed2df36be421df0464297af">count</a>(const Key &key) const </td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#61ff2e5bb44e5469366fd5295e5d0ebe">empty</a>() const </td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#f27802b3a8d1863c29e743e9c6b4e870">erase</a>(const Key &key)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#e698ef3d70b2d1a29a7a5551784d3653">erase</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#5f12d150d421420965db07368666a84f">erase</a>(accessor &item_accessor)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#0c964214eb38f54603aa75fdff6d2709">exclude</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#2afcc33dade7bb24e008d60c0df38230">find</a>(const_accessor &result, const Key &key) const </td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#7bc475d1968f7f0af3d736d7e8a0d7df">find</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#6cbcacb4a256a85bf89576c101373ca7">get_allocator</a>() const </td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#47fe0e60151a9bd7a444db827772a4e6">insert</a>(const_accessor &result, const Key &key)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#54e0955ecd11575b4c07166838a72893">insert</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#091efd2d12fdad4fe9e54d9629a9dfc3">insert</a>(const_accessor &result, const value_type &value)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#39183d78d6e8425917555ab542ab92de">insert</a>(accessor &result, const value_type &value)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#3f121a316af8135de476a30fae6d7c07">insert</a>(const value_type &value)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#1dd37fad87e561151ba1e242ca94bcc1">insert</a>(I first, I last)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#72c9c9e9655fcf096f5f0ed9c8ba6669">internal_copy</a>(const concurrent_hash_map &source)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#8f5373b8e1864619d1ffcf3bf3f1f13d">internal_equal_range</a>(const Key &key, I end) const </td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#2f76ed101a0ccc8875b846c2f747897e">internal_fast_find</a>(const Key &key) const </td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#3f3413264a99174a224ef96f6c4ea769">lookup</a>(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#2bce57fe9b594abe1e6d2568aea8b357">max_size</a>() const </td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#088d1aaccc816884a49e38f7065622c8">operator=</a>(const concurrent_hash_map &table)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#94758113d8993cfe5afdf2d63a728869">rehash</a>(size_type n=0)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#6aa56a8b5a25e61a97fa0b54fe2b5659">size</a>() const </td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#076f8d9e16110aac5f558777aa744eb6">swap</a>(concurrent_hash_map &table)</td><td><a class="el" href="a00243.html">tbb::interface5::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="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00243.html#2aa8e2d28d5af1284cf78d20a9c22731">~concurrent_hash_map</a>()</td><td><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::cache_aligned_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00264.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>(size_type n, const void *hint=0)</td><td><a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00264.html#48a7e49dfb0578edc84a90a5ac30793d">construct</a>(pointer p, Args &&...args)</td><td><a class="el" href="a00264.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00264.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00264.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const </td><td><a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.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="a00264.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00264.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00015.html b/doc/html/a00015.html
index ea69dfc..e20af72 100644
--- a/doc/html/a00015.html
+++ b/doc/html/a00015.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::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00245.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00245.html#d11c77f4d70a94d4fb344492bbf18007">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td><a class="el" href="a00245.html">tbb::interface5::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="a00245.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00245.html">tbb::interface5::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="a00245.html#07d958f151a0eaa92f50fd56ad6440e2">is_writer</a>()</td><td><a class="el" href="a00245.html">tbb::interface5::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="a00245.html#fa6314b861c574f86ed189b124cf5853">operator()</a>()</td><td><a class="el" href="a00245.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::cache_aligned_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00265.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="a00265.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00265.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="a00265.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00265.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="a00265.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00265.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00016.html b/doc/html/a00016.html
deleted file mode 100644
index 59da4fe..0000000
--- a/doc/html/a00016.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>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::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00246.html">tbb::interface5::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="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00246.html">tbb::interface5::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="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00246.html">tbb::interface5::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="a00246.html#27399c613eb1aecd4660803955dda09d">const_accessor</a>()</td><td><a class="el" href="a00246.html">tbb::interface5::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="a00246.html#84c3080d0c6124d55c8bb4cf6055e65f">empty</a>() const </td><td><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_writer</b>() (defined in <a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_hash</b> (defined in <a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_node</b> (defined in <a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00246.html#9411df8197ceb4881ec4c7368a0a7f88">operator *</a>() const </td><td><a class="el" href="a00246.html">tbb::interface5::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="a00246.html#3d03a48ecb8cd9549bd8be64b09c9b0d">operator-></a>() const </td><td><a class="el" href="a00246.html">tbb::interface5::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="a00246.html#7db006d41b49dc5f1716a913769d4698">release</a>()</td><td><a class="el" href="a00246.html">tbb::interface5::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="a00246.html#a8e50238483ba451363dccebd981d346">value_type</a> typedef</td><td><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00246.html#928769b139d53427e7075c1f86148e4c">~const_accessor</a>()</td><td><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00017.html b/doc/html/a00017.html
index e79a934..40f9017 100644
--- a/doc/html/a00017.html
+++ b/doc/html/a00017.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::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Member List</h1>This is the complete list of members for <a class="el" href="a00244.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00246.html#27399c613eb1aecd4660803955dda09d">const_accessor</a>()</td><td><a class="el" href="a00246.html">tbb::interface5::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="a00246.html#84c3080d0c6124d55c8bb4cf6055e65f">empty</a>() const </td><td><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_writer</b>() (defined in <a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_hash</b> (defined in <a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_node</b> (defined in <a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00244.html#170280ea807a22e742095de3e8c5ea38">operator *</a>() const </td><td><a class="el" href="a00244.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00244.html#a807920cdffe3ec5c5e282b4d1ff92a2">operator-></a>() const </td><td><a class="el" href="a00244.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00246.html#7db006d41b49dc5f1716a913769d4698">release</a>()</td><td><a class="el" href="a00246.html">tbb::interface5::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="a00244.html#0b648be7a95a8fb2971042c15eb112c1">value_type</a> typedef</td><td><a class="el" href="a00244.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00246.html#928769b139d53427e7075c1f86148e4c">~const_accessor</a>()</td><td><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</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="a00267.html">tbb::combinable< T ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00267.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00267.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="a00267.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00267.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="a00267.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00267.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="a00267.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00267.html">tbb::combinable< T ></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="a00267.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00267.html">tbb::combinable< T ></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="a00267.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00267.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="a00267.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00267.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="a00267.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00267.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="a00267.html">tbb::combinable< T ></a>)</td><td><a class="el" href="a00267.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00267.html#2c87e79ae98588a5780f708773388843">~combinable</a>()</td><td><a class="el" href="a00267.html">tbb::combinable< T ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00018.html b/doc/html/a00018.html
index e2ecdf6..c0fcf95 100644
--- a/doc/html/a00018.html
+++ b/doc/html/a00018.html
@@ -20,29 +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::interface5::concurrent_priority_queue< T, Compare, A > Member List</h1>This is the complete list of members for <a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> typedef</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#0bdcdf7cde9fd369edca845bec34ca94">clear</a>()</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#4555b4a55415a70024c4004b51e9f385">concurrent_priority_queue</a>(size_type init_capacity, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#9147cb4207017c260a0c3929c12cd40f">concurrent_priority_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#509419e320f200456d89dc54a65140b3">concurrent_priority_queue</a>(const concurrent_priority_queue &src)</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#c8b20e7430c5302936030bef59a562be">concurrent_priority_queue</a>(const concurrent_priority_queue &src, const allocator_type &a)</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> typedef</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#77399bc76b3ecd60e33f7e35a5becd87">difference_type</a> typedef</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#317c508fa92df218be5d014c26c09bb7">empty</a>() const </td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#d545d444fb0d16148f9b61fd89f9a337">get_allocator</a>() const </td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#2ab7f7808891027ac0f0f5b3a4be51e9">operator=</a>(const concurrent_priority_queue &src)</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#d905af7b8f6defff562f5ae9c3275763">push</a>(const_reference elem)</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a> typedef</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#8b2ae25c61338c6fd59e94fe09822ba5">size</a>() const </td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> typedef</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#0ecdc6a04aa259374425d424ca2a6082">swap</a>(concurrent_priority_queue &q)</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#e036461a29cc40902a2bb79abf9f5146">try_pop</a>(reference elem)</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00247.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a> typedef</td><td><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
+<h1>tbb::tbb_hash_compare< Key > Member List</h1>This is the complete list of members for <a class="el" href="a00347.html">tbb::tbb_hash_compare< Key ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>equal</b>(const Key &a, const Key &b) (defined in <a class="el" href="a00347.html">tbb::tbb_hash_compare< Key ></a>)</td><td><a class="el" href="a00347.html">tbb::tbb_hash_compare< Key ></a></td><td><code> [inline, static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>hash</b>(const Key &a) (defined in <a class="el" href="a00347.html">tbb::tbb_hash_compare< Key ></a>)</td><td><a class="el" href="a00347.html">tbb::tbb_hash_compare< Key ></a></td><td><code> [inline, static]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00019.html b/doc/html/a00019.html
new file mode 100644
index 0000000..9e12c85
--- /dev/null
+++ b/doc/html/a00019.html
@@ -0,0 +1,95 @@
+<!DOCTYPE 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::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#af34cb91b1d0f36a885a1a3432dd9af1">bucket_count</a>() const </td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#220686fe17b197eedf19dd856cd02e36">clear</a>()</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#1ad413f5b666176e7669bf4c87d1ff3f">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#46b9896317662c3cfa3c876ad7592a7c">concurrent_hash_map</a>(size_type n, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#6fb14710893308fb47aaeee55ee30dc3">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#83c40f2053f208861b90390e12a36436">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#6968eb6feed2df36be421df0464297af">count</a>(const Key &key) const </td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#61ff2e5bb44e5469366fd5295e5d0ebe">empty</a>() const </td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#f27802b3a8d1863c29e743e9c6b4e870">erase</a>(const Key &key)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#e698ef3d70b2d1a29a7a5551784d3653">erase</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#5f12d150d421420965db07368666a84f">erase</a>(accessor &item_accessor)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#0c964214eb38f54603aa75fdff6d2709">exclude</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#2afcc33dade7bb24e008d60c0df38230">find</a>(const_accessor &result, const Key &key) const </td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#7bc475d1968f7f0af3d736d7e8a0d7df">find</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#6cbcacb4a256a85bf89576c101373ca7">get_allocator</a>() const </td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#47fe0e60151a9bd7a444db827772a4e6">insert</a>(const_accessor &result, const Key &key)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#54e0955ecd11575b4c07166838a72893">insert</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#091efd2d12fdad4fe9e54d9629a9dfc3">insert</a>(const_accessor &result, const value_type &value)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#39183d78d6e8425917555ab542ab92de">insert</a>(accessor &result, const value_type &value)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#3f121a316af8135de476a30fae6d7c07">insert</a>(const value_type &value)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#1dd37fad87e561151ba1e242ca94bcc1">insert</a>(I first, I last)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#72c9c9e9655fcf096f5f0ed9c8ba6669">internal_copy</a>(const concurrent_hash_map &source)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#8f5373b8e1864619d1ffcf3bf3f1f13d">internal_equal_range</a>(const Key &key, I end) const </td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#2f76ed101a0ccc8875b846c2f747897e">internal_fast_find</a>(const Key &key) const </td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#3f3413264a99174a224ef96f6c4ea769">lookup</a>(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#2bce57fe9b594abe1e6d2568aea8b357">max_size</a>() const </td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#088d1aaccc816884a49e38f7065622c8">operator=</a>(const concurrent_hash_map &table)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#94758113d8993cfe5afdf2d63a728869">rehash</a>(size_type n=0)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#6aa56a8b5a25e61a97fa0b54fe2b5659">size</a>() const </td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#076f8d9e16110aac5f558777aa744eb6">swap</a>(concurrent_hash_map &table)</td><td><a class="el" href="a00269.html">tbb::interface5::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="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>)</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00269.html#2aa8e2d28d5af1284cf78d20a9c22731">~concurrent_hash_map</a>()</td><td><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00021.html
new file mode 100644
index 0000000..912ea6f
--- /dev/null
+++ b/doc/html/a00021.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00271.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00271.html#d11c77f4d70a94d4fb344492bbf18007">acquire</a>(concurrent_hash_map *base, const hashcode_t h, bool writer=false)</td><td><a class="el" href="a00271.html">tbb::interface5::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="a00271.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>)</td><td><a class="el" href="a00271.html">tbb::interface5::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="a00271.html#07d958f151a0eaa92f50fd56ad6440e2">is_writer</a>()</td><td><a class="el" href="a00271.html">tbb::interface5::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="a00271.html#fa6314b861c574f86ed189b124cf5853">operator()</a>()</td><td><a class="el" href="a00271.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00022.html b/doc/html/a00022.html
index 219c2f7..21504d7 100644
--- a/doc/html/a00022.html
+++ b/doc/html/a00022.html
@@ -20,33 +20,22 @@
     <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="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a> typedef</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#c32e8e84c0524155133b4aae32d2a827">clear</a>()</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00248.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="a00248.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a>(const concurrent_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00248.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="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a> typedef</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a> typedef</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() const </td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a>() const </td><td><a class="el" href="a00248.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="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00248.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="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>(const T &source)</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a> typedef</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> typedef</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>(T &result)</td><td><a class="el" href="a00248.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="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00248.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="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00248.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="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00248.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="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#eaa35a5274606779802e9a669a706260">unsafe_size</a>() const </td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#682c3978d5cb0620000994f11c44a476">value_type</a> typedef</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00248.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>()</td><td><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+<h1>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00272.html">tbb::interface5::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="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00272.html">tbb::interface5::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="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00272.html">tbb::interface5::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="a00272.html#27399c613eb1aecd4660803955dda09d">const_accessor</a>()</td><td><a class="el" href="a00272.html">tbb::interface5::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="a00272.html#84c3080d0c6124d55c8bb4cf6055e65f">empty</a>() const </td><td><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_writer</b>() (defined in <a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_hash</b> (defined in <a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_node</b> (defined in <a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00272.html#9411df8197ceb4881ec4c7368a0a7f88">operator *</a>() const </td><td><a class="el" href="a00272.html">tbb::interface5::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="a00272.html#3d03a48ecb8cd9549bd8be64b09c9b0d">operator-></a>() const </td><td><a class="el" href="a00272.html">tbb::interface5::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="a00272.html#7db006d41b49dc5f1716a913769d4698">release</a>()</td><td><a class="el" href="a00272.html">tbb::interface5::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="a00272.html#a8e50238483ba451363dccebd981d346">value_type</a> typedef</td><td><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00272.html#928769b139d53427e7075c1f86148e4c">~const_accessor</a>()</td><td><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00023.html b/doc/html/a00023.html
index d95baac..dc39faf 100644
--- a/doc/html/a00023.html
+++ b/doc/html/a00023.html
@@ -20,37 +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::concurrent_bounded_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00242.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="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00242.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="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00242.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="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>(size_type new_capacity)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00242.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="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00242.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="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00242.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="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00242.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="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+<h1>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Member List</h1>This is the complete list of members for <a class="el" href="a00270.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00272.html#27399c613eb1aecd4660803955dda09d">const_accessor</a>()</td><td><a class="el" href="a00272.html">tbb::interface5::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="a00272.html#84c3080d0c6124d55c8bb4cf6055e65f">empty</a>() const </td><td><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_writer</b>() (defined in <a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_hash</b> (defined in <a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_node</b> (defined in <a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>)</td><td><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00270.html#170280ea807a22e742095de3e8c5ea38">operator *</a>() const </td><td><a class="el" href="a00270.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00270.html#a807920cdffe3ec5c5e282b4d1ff92a2">operator-></a>() const </td><td><a class="el" href="a00270.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00272.html#7db006d41b49dc5f1716a913769d4698">release</a>()</td><td><a class="el" href="a00272.html">tbb::interface5::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="a00270.html#0b648be7a95a8fb2971042c15eb112c1">value_type</a> typedef</td><td><a class="el" href="a00270.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00272.html#928769b139d53427e7075c1f86148e4c">~const_accessor</a>()</td><td><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00025.html b/doc/html/a00025.html
deleted file mode 100644
index bec592c..0000000
--- a/doc/html/a00025.html
+++ /dev/null
@@ -1,68 +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::deprecated::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00242.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="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00249.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="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00249.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(const A &a=A())</td><td><a class="el" href="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00249.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a>(const concurrent_queue &src, const A &a=A())</td><td><a class="el" href="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00249.html#9102b897776bd2d9e908e6604ff16b5f">concurrent_queue</a>(InputIterator b, InputIterator e, const A &a=A())</td><td><a class="el" href="a00249.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="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00242.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="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00249.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="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00242.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="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00249.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="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00249.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>(T &destination)</td><td><a class="el" href="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00249.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>(const T &source)</td><td><a class="el" href="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>(size_type new_capacity)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00242.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="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00242.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="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00242.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="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00242.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="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00242.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00031.html b/doc/html/a00031.html
index accfa82..a7971f4 100644
--- a/doc/html/a00031.html
+++ b/doc/html/a00031.html
@@ -20,80 +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::concurrent_vector< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#423e5aa15e0e3309ad86d026fd85f6f6">assign</a>(size_type n, const_reference t)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#93a06b3112cb804f42f40efb5e7387b4">assign</a>(I first, I last)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#0c073ca43e787c7cbf7b0e26d2221748">at</a>(size_type index)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#23e14a38af748edff96a7adc3a0f1c58">at</a>(size_type index) const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#41ce48d6015a1a2812d41cf620ec3476">back</a>()</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#bd518e204107d07fd08d0ec5bdfd383d">back</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#730b23a251ecb6d37f692fb22f38e029">begin</a>()</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#78a06182276ff758788d4c0623ae0d71">begin</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#3ed6b9ae7217af5103d974045b6f5cd5">capacity</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#f88fcf1c920693c39bd9709db33c199f">cbegin</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>()</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#1693d1da41b1a8235871be9c6633be35">compact</a>()</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#2c8ca9cabfcd30ad5943324c853664b5">concurrent_vector</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a>(const concurrent_vector &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a>(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#2a2e261dfe1cab3f73f7b1a94137cfca">concurrent_vector</a>(size_type n)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#3883a8a908b44e249a57f454de3f55d8">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#4450de83c5862ea4bcd9443fd7e67419">concurrent_vector</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#db78a1d28c9c966050e8a2926d834a33">crbegin</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#fff9cece89438587997ebedf93c5e962">crend</a>() const </td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">end</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#15181759c0bfa2ddce5d10c7550e0002">front</a>()</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#502615a858eb9fa0390ee59169065e90">front</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#2fdba8e90de6a4d2300222236d46758e">get_allocator</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#30484e3959892fd5392fa93c873c31f0">grow_by</a>(size_type delta)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#c8177b1865270ea68aa1ab9148e5e35e">grow_by</a>(size_type delta)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#38274ab3f772ecba600c7daca7690102">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#473a59a4c9308b93411b898b3110d26c">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#a7e3b67c8ccab16d0aecc80899ae799d">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#691f0f3cda3e489c37a657016e375eaf">operator=</a>(const concurrent_vector &vector)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a>(const concurrent_vector< T, M > &vector)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>(size_type index)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#c6fade5c732cc95274d1d8277ea619d1">operator[]</a>(size_type index) const </td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(const_reference item) iterator push_back(const _reference item)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#a4c6ffff3bf08b92939aa2fc516edfba">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#3d09ccfb581b879ae64203741035e193">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a>()</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#9f9c103e18d5f212703805354074ad44">rbegin</a>() const </td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#290119a4eb43cd6a9e98fa17016ba3c2">rend</a>()</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#d438b9b32ea3a8ffb703015b6dce055b">rend</a>() const </td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#5a0ce05026994b010018f72cfdeb72c1">reserve</a>(size_type n)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#8dfb0cb0eef96d440b4dcf801807a718">resize</a>(size_type n)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#98ce6b2c6d2622f0c030b46dfac3880c">resize</a>(size_type n, const_reference t)</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit</a>()</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() const </td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a>(concurrent_vector &vector)</td><td><a class="el" href="a00250.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="a00250.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00250.html#da2444b28bb840d38f60d0030333a5fc">~concurrent_vector</a>()</td><td><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::interface5::concurrent_priority_queue< T, Compare, A > Member List</h1>This is the complete list of members for <a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> typedef</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#0bdcdf7cde9fd369edca845bec34ca94">clear</a>()</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#4555b4a55415a70024c4004b51e9f385">concurrent_priority_queue</a>(size_type init_capacity, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#9147cb4207017c260a0c3929c12cd40f">concurrent_priority_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#509419e320f200456d89dc54a65140b3">concurrent_priority_queue</a>(const concurrent_priority_queue &src)</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#c8b20e7430c5302936030bef59a562be">concurrent_priority_queue</a>(const concurrent_priority_queue &src, const allocator_type &a)</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> typedef</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#77399bc76b3ecd60e33f7e35a5becd87">difference_type</a> typedef</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#317c508fa92df218be5d014c26c09bb7">empty</a>() const </td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#d545d444fb0d16148f9b61fd89f9a337">get_allocator</a>() const </td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#2ab7f7808891027ac0f0f5b3a4be51e9">operator=</a>(const concurrent_priority_queue &src)</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#d905af7b8f6defff562f5ae9c3275763">push</a>(const_reference elem)</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a> typedef</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#8b2ae25c61338c6fd59e94fe09822ba5">size</a>() const </td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> typedef</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#0ecdc6a04aa259374425d424ca2a6082">swap</a>(concurrent_priority_queue &q)</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#e036461a29cc40902a2bb79abf9f5146">try_pop</a>(reference elem)</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00273.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a> typedef</td><td><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00035.html b/doc/html/a00035.html
new file mode 100644
index 0000000..bead577
--- /dev/null
+++ b/doc/html/a00035.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::strict_ppl::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a> typedef</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#c32e8e84c0524155133b4aae32d2a827">clear</a>()</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00274.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="a00274.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a>(const concurrent_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00274.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="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a> typedef</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a> typedef</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() const </td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#f034f70caef445fe8abc9113ec926a8d">get_allocator</a>() const </td><td><a class="el" href="a00274.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="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00274.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="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>(const T &source)</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a> typedef</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> typedef</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>(T &result)</td><td><a class="el" href="a00274.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="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00274.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="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00274.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="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00274.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="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#eaa35a5274606779802e9a669a706260">unsafe_size</a>() const </td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#682c3978d5cb0620000994f11c44a476">value_type</a> typedef</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00274.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>()</td><td><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00036.html b/doc/html/a00036.html
index 1fe608e..3df8f83 100644
--- a/doc/html/a00036.html
+++ b/doc/html/a00036.html
@@ -20,44 +20,38 @@
     <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::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Member List</h1>This is the complete list of members for <a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00255.html#3c03eb40955b933b01987222722ac4bd">allocator_type</a> typedef</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#01d7baf8e913ab2819e97917a2ac795f">begin</a>()</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#84afb3906a39e399cde1c950d6351300">begin</a>() const </td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#a8764176d4b6014c5d65f1051851abc8">clear</a>()</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#72595886d0ac8fd0543f90038570510d">empty</a>() const </td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#2456ff88252fc921b01cd8907628a4ee">end</a>()</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#cb448bb4977ce366ceb7344085cc7050">end</a>() const </td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#0cfa3a5c8f2be3bbf313d93b1fa8cdb3">enumerable_thread_specific</a>()</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#8d4b456ff9d7b289c73254eccc11db45">enumerable_thread_specific</a>(Finit finit)</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#7bce6829981c9efe3f59cae2355e383e">enumerable_thread_specific</a>(const T &exemplar)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#c8d5265ccbd5e4485996b3f3baaa5ba1">local</a>()</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#7dc79058d2832f7447de8e691c3455ea">local</a>(bool &exists)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#b22c54990b2362cd93c1a8f73de140bc">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#33fd6593da1ed14340f10f67d5a69130">size</a>() const </td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00255.html#5a7907d9e3e5b18e7a7b55211ef3213f">~enumerable_thread_specific</a>()</td><td><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::concurrent_bounded_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00268.html#86c77a6c1317239405968f5afc7b10d3">abort</a>()</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00268.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="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00268.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="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00268.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="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>(size_type new_capacity)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00268.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="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00268.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="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00268.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="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00268.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="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00038.html b/doc/html/a00038.html
new file mode 100644
index 0000000..1664dba
--- /dev/null
+++ b/doc/html/a00038.html
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::deprecated::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00268.html#86c77a6c1317239405968f5afc7b10d3">abort</a>()</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> typedef</td><td><a class="el" href="a00268.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="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00275.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="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>() const </td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>()</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a>(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00275.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(const A &a=A())</td><td><a class="el" href="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00275.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a>(const concurrent_queue &src, const A &a=A())</td><td><a class="el" href="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00275.html#9102b897776bd2d9e908e6604ff16b5f">concurrent_queue</a>(InputIterator b, InputIterator e, const A &a=A())</td><td><a class="el" href="a00275.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="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a> typedef</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a> typedef</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() const </td><td><a class="el" href="a00268.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="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00275.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="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>() const </td><td><a class="el" href="a00268.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="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00275.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="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>(T &destination)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00275.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>(T &destination)</td><td><a class="el" href="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#ceb08c743b11ba88c878e73fff8af20b">push</a>(const T &source)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00275.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>(const T &source)</td><td><a class="el" href="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a> typedef</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>(size_type new_capacity)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#7dc14d1a579a4cccda9f857585e1768d">size</a>() const </td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> typedef</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>(T &destination)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>(const T &source)</td><td><a class="el" href="a00268.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="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00268.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="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00268.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="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00268.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="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>)</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#98245517a931e5893f6601e66c51fc75">value_type</a> typedef</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00268.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>()</td><td><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00039.html b/doc/html/a00039.html
deleted file mode 100644
index 70ff349..0000000
--- a/doc/html/a00039.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::flow::interface6::graph_node Member List</h1>This is the complete list of members for <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00041.html b/doc/html/a00041.html
deleted file mode 100644
index ec500e6..0000000
--- a/doc/html/a00041.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::flow::interface6::sender< T > Member List</h1>This is the complete list of members for <a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00301.html#127af99916cc085cd9dbc09c53299928">output_type</a> typedef</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#68b8941ad77b9303cf3bcb8cf1f2d28a">register_successor</a>(successor_type &r)=0</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#82f363bfb1738bb8789e167590b10ef9">remove_successor</a>(successor_type &r)=0</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#d690e8a54e358968f0ee4fdf9ee73068">successor_type</a> typedef</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#7b840f50da117a0d6848707c1857ea2e">try_consume</a>()</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#922fb56b0aad090b90a98b7d56b76a59">try_get</a>(T &)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#27036b06d6a91e97007e14f400529199">try_release</a>()</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#02c05b472271db1b68a48ea2618fa72f">try_reserve</a>(T &)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00042.html b/doc/html/a00042.html
deleted file mode 100644
index 70a703c..0000000
--- a/doc/html/a00042.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::flow::interface6::receiver< T > Member List</h1>This is the complete list of members for <a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00295.html#0d0524c99313dedea1e04464bbf2f7ef">input_type</a> typedef</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#7fa8cff811e7c1589b805a4bb4c7a74f">predecessor_type</a> typedef</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#c6d5d0cb8ebe5771be91933609fe31b8">try_put</a>(const T &t)=0</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00043.html b/doc/html/a00043.html
deleted file mode 100644
index 913e4fa..0000000
--- a/doc/html/a00043.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>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::flow::interface6::continue_receiver Member List</h1>This is the complete list of members for <a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00253.html#177db82d548a1f8471371331890b91a8">continue_receiver</a>(int number_of_predecessors=0)</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00253.html#a0b292ed7fa6556b2a735f6d1e82dc74">continue_receiver</a>(const continue_receiver &src)</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00253.html#40ca8b7e96c5bc3428b4d1e409725ee5">execute</a>()=0</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [protected, pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00253.html#3c43c166af832d9187035985841e0a7f">input_type</a> typedef</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_current_count</b> (defined in <a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a>)</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_initial_predecessor_count</b> (defined in <a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a>)</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_mutex</b> (defined in <a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a>)</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_predecessor_count</b> (defined in <a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a>)</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00253.html#f9c58b3e9c46afd2518d0fd8957a5a2f">predecessor_type</a> typedef</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00253.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#30e3316466efe3a713c23062b6e806f3">tbb::flow::interface6::receiver::register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00253.html#cb691b18416d4742265aed84d496ebbd">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">tbb::flow::interface6::receiver::remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00253.html#3969c70fb89c0a982f142ae9eb5facae">try_put</a>(const input_type &)</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#c6d5d0cb8ebe5771be91933609fe31b8">tbb::flow::interface6::receiver::try_put</a>(const T &t)=0</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00253.html#1e14828fa079b9835ff7267df5ee45d7">~continue_receiver</a>()</td><td><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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 2e053fe..b5a85c5 100644
--- a/doc/html/a00044.html
+++ b/doc/html/a00044.html
@@ -20,18 +20,80 @@
     <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::flow::interface6::graph Member List</h1>This is the complete list of members for <a class="el" href="a00262.html">tbb::flow::interface6::graph</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00262.html#29b85506870f13a884a21655aec2a65d">decrement_wait_count</a>()</td><td><a class="el" href="a00262.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00262.html#4ab3d4b5208ece28c4c3ced647e26e12">graph</a>()</td><td><a class="el" href="a00262.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00262.html#a993b789d1e488e0c3929135beae560e">increment_wait_count</a>()</td><td><a class="el" href="a00262.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00262.html#7f4e3ae90811a5d8b597146b5b586d10">root_task</a>()</td><td><a class="el" href="a00262.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00262.html#50a7938df01b6148ab2c0696835f002e">run</a>(Receiver &r, Body body)</td><td><a class="el" href="a00262.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00262.html#c1145b00e063793a7e7bf994d202c7a0">run</a>(Body body)</td><td><a class="el" href="a00262.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00262.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all</a>()</td><td><a class="el" href="a00262.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00262.html#8a7d424c0616a1c37a908ead182e2fe5">~graph</a>()</td><td><a class="el" href="a00262.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::concurrent_vector< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#423e5aa15e0e3309ad86d026fd85f6f6">assign</a>(size_type n, const_reference t)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#93a06b3112cb804f42f40efb5e7387b4">assign</a>(I first, I last)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#0c073ca43e787c7cbf7b0e26d2221748">at</a>(size_type index)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#23e14a38af748edff96a7adc3a0f1c58">at</a>(size_type index) const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#41ce48d6015a1a2812d41cf620ec3476">back</a>()</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#bd518e204107d07fd08d0ec5bdfd383d">back</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#730b23a251ecb6d37f692fb22f38e029">begin</a>()</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#78a06182276ff758788d4c0623ae0d71">begin</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#3ed6b9ae7217af5103d974045b6f5cd5">capacity</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#f88fcf1c920693c39bd9709db33c199f">cbegin</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>()</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#1693d1da41b1a8235871be9c6633be35">compact</a>()</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#2c8ca9cabfcd30ad5943324c853664b5">concurrent_vector</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a>(const concurrent_vector &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a>(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#2a2e261dfe1cab3f73f7b1a94137cfca">concurrent_vector</a>(size_type n)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#3883a8a908b44e249a57f454de3f55d8">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#4450de83c5862ea4bcd9443fd7e67419">concurrent_vector</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#db78a1d28c9c966050e8a2926d834a33">crbegin</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#fff9cece89438587997ebedf93c5e962">crend</a>() const </td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#c0b51160e5a764982ec97a455f94f2c6">end</a>()</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">end</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#15181759c0bfa2ddce5d10c7550e0002">front</a>()</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#502615a858eb9fa0390ee59169065e90">front</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#2fdba8e90de6a4d2300222236d46758e">get_allocator</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#30484e3959892fd5392fa93c873c31f0">grow_by</a>(size_type delta)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#c8177b1865270ea68aa1ab9148e5e35e">grow_by</a>(size_type delta)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#38274ab3f772ecba600c7daca7690102">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#473a59a4c9308b93411b898b3110d26c">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#a7e3b67c8ccab16d0aecc80899ae799d">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#691f0f3cda3e489c37a657016e375eaf">operator=</a>(const concurrent_vector &vector)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a>(const concurrent_vector< T, M > &vector)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>(size_type index)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#c6fade5c732cc95274d1d8277ea619d1">operator[]</a>(size_type index) const </td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(const_reference item) iterator push_back(const _reference item)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#a4c6ffff3bf08b92939aa2fc516edfba">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#3d09ccfb581b879ae64203741035e193">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a>()</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#9f9c103e18d5f212703805354074ad44">rbegin</a>() const </td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#290119a4eb43cd6a9e98fa17016ba3c2">rend</a>()</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#d438b9b32ea3a8ffb703015b6dce055b">rend</a>() const </td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#5a0ce05026994b010018f72cfdeb72c1">reserve</a>(size_type n)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#8dfb0cb0eef96d440b4dcf801807a718">resize</a>(size_type n)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#98ce6b2c6d2622f0c030b46dfac3880c">resize</a>(size_type n, const_reference t)</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#03c6f4cf66532bf4cc907ee738a9a186">shrink_to_fit</a>()</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() const </td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a>(concurrent_vector &vector)</td><td><a class="el" href="a00276.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="a00276.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00276.html#da2444b28bb840d38f60d0030333a5fc">~concurrent_vector</a>()</td><td><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00047.html b/doc/html/a00047.html
deleted file mode 100644
index e533133..0000000
--- a/doc/html/a00047.html
+++ /dev/null
@@ -1,47 +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::flow::interface6::source_node< Output > Member List</h1>This is the complete list of members for <a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00304.html#4b647e4a93d08ccdd8d323279e4eaaa6">activate</a>()</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::source_task< source_node< output_type > ></b> (defined in <a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a>)</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00304.html#407533487cc3f6032c1072cba19c609c">output_type</a> typedef</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00304.html#22960d499df9f1569a9d8a544e35afe3">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00304.html#222484bf295f39df36415a29e508e5c9">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00304.html#503c3b395c629296bf5cccd96d6388c1">source_node</a>(graph &g, Body body, bool is_active=true)</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00304.html#adaac111fbcace95804219a5f2929304">source_node</a>(const source_node &src)</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00304.html#dd7b8fe78f0bec9d6b70cbf1018a69fe">successor_type</a> typedef</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00304.html#2c7fcc29e2894b29138be3c1edce9bc9">try_consume</a>()</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00304.html#41073ad4d3510ed5a8b6bda9c0f58636">try_get</a>(output_type &v)</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00304.html#494678baf9096835268736b800824460">try_release</a>()</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00304.html#ad459713ff3c1c9ad0f4826daa141f65">try_reserve</a>(output_type &v)</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00301.html">tbb::flow::interface6::sender< Output ></a>)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00304.html#61700b0865fc17188b0abe26bbde65b6">~source_node</a>()</td><td><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00048.html b/doc/html/a00048.html
deleted file mode 100644
index 8d9aa4c..0000000
--- a/doc/html/a00048.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::flow::interface6::function_node< Input, Output,, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>fOutput_type</b> typedef (defined in <a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00260.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a>(graph &g, size_t concurrency, Body body)</td><td><a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00260.html#d5132323fd2ac6a00ea0c78beda78723">function_node</a>(const function_node &src)</td><td><a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>output_type</b> typedef (defined in <a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>predecessor_type</b> typedef (defined in <a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>successor_type</b> typedef (defined in <a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>successors</b>() (defined in <a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00049.html b/doc/html/a00049.html
index 37090d4..0ca50e2 100644
--- a/doc/html/a00049.html
+++ b/doc/html/a00049.html
@@ -20,21 +20,44 @@
     <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::flow::interface6::function_node< Input, Output, queueing, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>fInput_type</b> typedef (defined in <a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>fOutput_type</b> typedef (defined in <a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00261.html#5b9019c1e6e9b2c41c986a384bd179db">function_node</a>(graph &g, size_t concurrency, Body body)</td><td><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00261.html#01055081ed477714503820035db3a965">function_node</a>(const function_node &src)</td><td><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>output_type</b> typedef (defined in <a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>predecessor_type</b> typedef (defined in <a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>queue_type</b> typedef (defined in <a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>successor_type</b> typedef (defined in <a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>successors</b>() (defined in <a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+<h1>tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Member List</h1>This is the complete list of members for <a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00281.html#3c03eb40955b933b01987222722ac4bd">allocator_type</a> typedef</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#01d7baf8e913ab2819e97917a2ac795f">begin</a>()</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#84afb3906a39e399cde1c950d6351300">begin</a>() const </td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#a8764176d4b6014c5d65f1051851abc8">clear</a>()</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#72595886d0ac8fd0543f90038570510d">empty</a>() const </td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#2456ff88252fc921b01cd8907628a4ee">end</a>()</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#cb448bb4977ce366ceb7344085cc7050">end</a>() const </td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#0cfa3a5c8f2be3bbf313d93b1fa8cdb3">enumerable_thread_specific</a>()</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#8d4b456ff9d7b289c73254eccc11db45">enumerable_thread_specific</a>(Finit finit)</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#7bce6829981c9efe3f59cae2355e383e">enumerable_thread_specific</a>(const T &exemplar)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#c8d5265ccbd5e4485996b3f3baaa5ba1">local</a>()</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#7dc79058d2832f7447de8e691c3455ea">local</a>(bool &exists)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#b22c54990b2362cd93c1a8f73de140bc">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#33fd6593da1ed14340f10f67d5a69130">size</a>() const </td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>)</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00281.html#5a7907d9e3e5b18e7a7b55211ef3213f">~enumerable_thread_specific</a>()</td><td><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00050.html b/doc/html/a00050.html
deleted file mode 100644
index 2897add..0000000
--- a/doc/html/a00050.html
+++ /dev/null
@@ -1,37 +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::flow::interface6::multioutput_function_node< Input, Output,, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>multioutput_function_node</b>(graph &g, size_t concurrency, Body body) (defined in <a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>multioutput_function_node</b>(const multioutput_function_node &other) (defined in <a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>ports_type</b> typedef (defined in <a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00052.html b/doc/html/a00052.html
deleted file mode 100644
index 9782efb..0000000
--- a/doc/html/a00052.html
+++ /dev/null
@@ -1,40 +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::flow::interface6::split_node< TupleType, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>)</td><td><a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>)</td><td><a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>multioutput_function_node</b>(graph &g, size_t concurrency, Body body) (defined in <a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< TupleType, TupleType, rejecting, Allocator ></a>)</td><td><a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< TupleType, TupleType, rejecting, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>multioutput_function_node</b>(const multioutput_function_node &other) (defined in <a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< TupleType, TupleType, rejecting, Allocator ></a>)</td><td><a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< TupleType, TupleType, rejecting, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>ports_type</b> typedef (defined in <a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>)</td><td><a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>split_node</b>(graph &g) (defined in <a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>)</td><td><a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>split_node</b>(const split_node &other) (defined in <a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>)</td><td><a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00053.html b/doc/html/a00053.html
new file mode 100644
index 0000000..09bc581
--- /dev/null
+++ b/doc/html/a00053.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::flow::interface6::sender< T > Member List</h1>This is the complete list of members for <a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00327.html#127af99916cc085cd9dbc09c53299928">output_type</a> typedef</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#68b8941ad77b9303cf3bcb8cf1f2d28a">register_successor</a>(successor_type &r)=0</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#82f363bfb1738bb8789e167590b10ef9">remove_successor</a>(successor_type &r)=0</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#d690e8a54e358968f0ee4fdf9ee73068">successor_type</a> typedef</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#7b840f50da117a0d6848707c1857ea2e">try_consume</a>()</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#922fb56b0aad090b90a98b7d56b76a59">try_get</a>(T &)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#27036b06d6a91e97007e14f400529199">try_release</a>()</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#02c05b472271db1b68a48ea2618fa72f">try_reserve</a>(T &)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00054.html b/doc/html/a00054.html
index a43d8d3..bf62763 100644
--- a/doc/html/a00054.html
+++ b/doc/html/a00054.html
@@ -20,20 +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::flow::interface6::continue_node< Output > Member List</h1>This is the complete list of members for <a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00252.html#2f200db877d2f80c08d09422e8bffd5a">continue_node</a>(graph &g, Body body)</td><td><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00252.html#7817aebf22dd125ca04df53ac488d163">continue_node</a>(graph &g, int number_of_predecessors, Body body)</td><td><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00252.html#869562787fcb5c57a90aea120f26d492">continue_node</a>(const continue_node &src)</td><td><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>fOutput_type</b> typedef (defined in <a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>output_type</b> typedef (defined in <a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>predecessor_type</b> typedef (defined in <a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>successor_type</b> typedef (defined in <a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>successors</b>() (defined in <a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a></td><td><code> [inline, protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+<h1>tbb::flow::interface6::receiver< T > Member List</h1>This is the complete list of members for <a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00321.html#0d0524c99313dedea1e04464bbf2f7ef">input_type</a> typedef</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#7fa8cff811e7c1589b805a4bb4c7a74f">predecessor_type</a> typedef</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#c6d5d0cb8ebe5771be91933609fe31b8">try_put</a>(const T &t)=0</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00055.html b/doc/html/a00055.html
new file mode 100644
index 0000000..038a1d1
--- /dev/null
+++ b/doc/html/a00055.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::flow::interface6::continue_receiver Member List</h1>This is the complete list of members for <a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00279.html#177db82d548a1f8471371331890b91a8">continue_receiver</a>(int number_of_predecessors=0)</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#a0b292ed7fa6556b2a735f6d1e82dc74">continue_receiver</a>(const continue_receiver &src)</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#40ca8b7e96c5bc3428b4d1e409725ee5">execute</a>()=0</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [protected, pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#3c43c166af832d9187035985841e0a7f">input_type</a> typedef</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_current_count</b> (defined in <a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a>)</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_initial_predecessor_count</b> (defined in <a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a>)</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_mutex</b> (defined in <a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a>)</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_predecessor_count</b> (defined in <a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a>)</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#f9c58b3e9c46afd2518d0fd8957a5a2f">predecessor_type</a> typedef</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#30e3316466efe3a713c23062b6e806f3">tbb::flow::interface6::receiver::register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#cb691b18416d4742265aed84d496ebbd">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">tbb::flow::interface6::receiver::remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#3969c70fb89c0a982f142ae9eb5facae">try_put</a>(const input_type &)</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#c6d5d0cb8ebe5771be91933609fe31b8">tbb::flow::interface6::receiver::try_put</a>(const T &t)=0</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00279.html#1e14828fa079b9835ff7267df5ee45d7">~continue_receiver</a>()</td><td><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00057.html b/doc/html/a00057.html
index 3e8dc08..477218c 100644
--- a/doc/html/a00057.html
+++ b/doc/html/a00057.html
@@ -20,28 +20,31 @@
     <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::flow::interface6::broadcast_node< T > Member List</h1>This is the complete list of members for <a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>broadcast_node</b>() (defined in <a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a>)</td><td><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>broadcast_node</b>(const broadcast_node &) (defined in <a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a>)</td><td><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00236.html#43c775d80e98cc601de69764983319f9">input_type</a> typedef</td><td><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00236.html#8fd8d3075823e08b879be46c1215ab0f">output_type</a> typedef</td><td><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00236.html#0e2ad9a121cb286aa0d0142fef33c646">predecessor_type</a> typedef</td><td><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00236.html#fd0324c9ddb51fe6f95b3d015d338941">register_successor</a>(receiver< T > &r)</td><td><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00236.html#366efcc046ec08a104281109801ae629">remove_successor</a>(receiver< T > &r)</td><td><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00236.html#cc6a0eb1c4ee65465770628d8366f055">successor_type</a> typedef</td><td><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#7b840f50da117a0d6848707c1857ea2e">try_consume</a>()</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#922fb56b0aad090b90a98b7d56b76a59">try_get</a>(T &)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00236.html#29eb768c10b377880bbf83d31ee49acf">try_put</a>(const T &t)</td><td><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#27036b06d6a91e97007e14f400529199">try_release</a>()</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#02c05b472271db1b68a48ea2618fa72f">try_reserve</a>(T &)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+<h1>tbb::flow::interface6::graph Member List</h1>This is the complete list of members for <a class="el" href="a00288.html">tbb::flow::interface6::graph</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00288.html#b028cb585ec21e5de523d0075d0fa880">begin</a>()</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#f63c3b7d03098b57fc16b71c57b303e5">begin</a>() const </td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#e183dfc3f89dc8f57c06ba165fb89f66">cbegin</a>() const </td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#4866156e6a31d0399b61c6eb82ee81fd">cend</a>() const </td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00288.html">tbb::flow::interface6::graph</a>)</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#29b85506870f13a884a21655aec2a65d">decrement_wait_count</a>()</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#a167c62511ddacaa152daa64ab2d6aac">end</a>()</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#907bd06606818c36f52420fe8d469d35">end</a>() const </td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>exception_thrown</b>() (defined in <a class="el" href="a00288.html">tbb::flow::interface6::graph</a>)</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#4ab3d4b5208ece28c4c3ced647e26e12">graph</a>()</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#104d4f3775f596b43177c29e6b7b7656">graph</a>(task_group_context &use_this_context)</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_iterator</b> (defined in <a class="el" href="a00288.html">tbb::flow::interface6::graph</a>)</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b> (defined in <a class="el" href="a00288.html">tbb::flow::interface6::graph</a>)</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#a993b789d1e488e0c3929135beae560e">increment_wait_count</a>()</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#227ea140dc2c68f79a4e5a34a8367b58">is_cancelled</a>()</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00288.html">tbb::flow::interface6::graph</a>)</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#7f4e3ae90811a5d8b597146b5b586d10">root_task</a>()</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#50a7938df01b6148ab2c0696835f002e">run</a>(Receiver &r, Body body)</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#c1145b00e063793a7e7bf994d202c7a0">run</a>(Body body)</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all</a>()</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00288.html#8a7d424c0616a1c37a908ead182e2fe5">~graph</a>()</td><td><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00058.html b/doc/html/a00058.html
deleted file mode 100644
index eaca853..0000000
--- a/doc/html/a00058.html
+++ /dev/null
@@ -1,83 +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::flow::interface6::buffer_node< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00237.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>(graph &g)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#03ad7b85a8341437f584af06ad050cdc">buffer_node</a>(const buffer_node &src)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2648324ce0a38b40132b8502ef250e3a">forward</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#334efb81b56a2f2b3ae08a16e8d65620">input_type</a> typedef</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::aggregating_functor< my_class, buffer_operation ></b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T, A > ></b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_consume</b>(buffer_operation *op) (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#dcbffbae514f4d95205b0845785c0a91">internal_forward</a>(buffer_operation *op)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_pop</b>(buffer_operation *op) (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_push</b>(buffer_operation *op) (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_release</b>(buffer_operation *op) (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(buffer_operation *op) (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_class</b> typedef (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_handler</b> typedef (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> typedef</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#5fb0ad03a822ca0fc34ad5d56a4093a2">predecessor_type</a> typedef</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#f8bf4944ede4fc106423d67715beb695">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>rel_res</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>req_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#66f7eda69b75e08f50726e50a11429cd">successor_type</a> typedef</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>try_fwd</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#aeb8aec46ca99ca022356a792c46735e">try_get</a>(T &v)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2b02fe332e704bbe14f297802298b63a">try_put</a>(const T &t)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a>(T &v)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00060.html b/doc/html/a00060.html
index c602c35..c21afe8 100644
--- a/doc/html/a00060.html
+++ b/doc/html/a00060.html
@@ -20,64 +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::flow::interface6::queue_node< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00237.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>(graph &g)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#03ad7b85a8341437f584af06ad050cdc">buffer_node</a>(const buffer_node &src)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2648324ce0a38b40132b8502ef250e3a">forward</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00287.html#1e71030845210b6c4c7380eb9e11a2ac">input_type</a> typedef</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::aggregating_functor< my_class, buffer_operation ></b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T, A > ></b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_consume</b>(queue_operation *op) (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00287.html#eadcbbb81f9a9d223afabe0f40e77ecb">internal_forward</a>(queue_operation *op)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_pop</b>(queue_operation *op) (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_push</b>(buffer_operation *op) (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_release</b>(buffer_operation *op) (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(queue_operation *op) (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_class</b> typedef (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_handler</b> typedef (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00287.html#25b5a53ab1f9a342644fa3759bc0b1ad">output_type</a> typedef</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00287.html#5e2fdd33c45d44549dee9c1638e19898">predecessor_type</a> typedef</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00287.html#c716593a92448b0f429d1f3a38e67996">queue_node</a>(graph &g)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00287.html#0226762d9ebba28311b7b1518d948ab1">queue_node</a>(const queue_node &src)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>queue_operation</b> typedef (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#f8bf4944ede4fc106423d67715beb695">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>rel_res</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>req_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00287.html#f35076a19f256f9e7a61bed77ca1ccc5">successor_type</a> typedef</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>try_fwd</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#aeb8aec46ca99ca022356a792c46735e">try_get</a>(T &v)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2b02fe332e704bbe14f297802298b63a">try_put</a>(const T &t)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a>(T &v)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+<h1>tbb::flow::interface6::graph_node Member List</h1>This is the complete list of members for <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_iterator</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00061.html b/doc/html/a00061.html
index f27772f..8f133ba 100644
--- a/doc/html/a00061.html
+++ b/doc/html/a00061.html
@@ -20,67 +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::flow::interface6::sequencer_node< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00237.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>(graph &g)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#03ad7b85a8341437f584af06ad050cdc">buffer_node</a>(const buffer_node &src)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2648324ce0a38b40132b8502ef250e3a">forward</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00302.html#af629f26832ff4e476e240637a78bc0c">input_type</a> typedef</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::aggregating_functor< my_class, buffer_operation ></b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T, A > ></b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_consume</b>(queue_operation *op) (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00287.html#eadcbbb81f9a9d223afabe0f40e77ecb">internal_forward</a>(queue_operation *op)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_pop</b>(queue_operation *op) (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_release</b>(buffer_operation *op) (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(queue_operation *op) (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_class</b> typedef (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_handler</b> typedef (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00302.html#ca026eaef70e35791c407323199031a7">output_type</a> typedef</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00302.html#8127e36811832563fe1e9bc3ba391f79">predecessor_type</a> typedef</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00287.html#c716593a92448b0f429d1f3a38e67996">queue_node</a>(graph &g)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00287.html#0226762d9ebba28311b7b1518d948ab1">queue_node</a>(const queue_node &src)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>queue_operation</b> typedef (defined in <a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#f8bf4944ede4fc106423d67715beb695">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>rel_res</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>req_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00302.html#7e71cbdf78f989091bc162b89bee7e66">sequencer_node</a>(graph &g, const Sequencer &s)</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00302.html#b38e7a070552960384bcc1d91af13a5c">sequencer_node</a>(const sequencer_node &src)</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>sequencer_operation</b> typedef (defined in <a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00302.html#795f3ee75f133b9d3b159172fc4a197f">successor_type</a> typedef</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>try_fwd</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#aeb8aec46ca99ca022356a792c46735e">try_get</a>(T &v)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2b02fe332e704bbe14f297802298b63a">try_put</a>(const T &t)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a>(T &v)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00302.html#93d3d8f6a72b3e1387047282116ed6ee">~sequencer_node</a>()</td><td><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::flow::interface6::source_node< Output > Member List</h1>This is the complete list of members for <a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00330.html#4b647e4a93d08ccdd8d323279e4eaaa6">activate</a>()</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::source_task< source_node< output_type > ></b> (defined in <a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a>)</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00330.html#407533487cc3f6032c1072cba19c609c">output_type</a> typedef</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00330.html#22960d499df9f1569a9d8a544e35afe3">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00330.html#222484bf295f39df36415a29e508e5c9">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00330.html#503c3b395c629296bf5cccd96d6388c1">source_node</a>(graph &g, Body body, bool is_active=true)</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00330.html#adaac111fbcace95804219a5f2929304">source_node</a>(const source_node &src)</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00330.html#dd7b8fe78f0bec9d6b70cbf1018a69fe">successor_type</a> typedef</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00330.html#2c7fcc29e2894b29138be3c1edce9bc9">try_consume</a>()</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00330.html#41073ad4d3510ed5a8b6bda9c0f58636">try_get</a>(output_type &v)</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00330.html#494678baf9096835268736b800824460">try_release</a>()</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00330.html#ad459713ff3c1c9ad0f4826daa141f65">try_reserve</a>(output_type &v)</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00327.html">tbb::flow::interface6::sender< Output ></a>)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< Output ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00330.html#61700b0865fc17188b0abe26bbde65b6">~source_node</a>()</td><td><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00062.html b/doc/html/a00062.html
index 732e8c7..f872024 100644
--- a/doc/html/a00062.html
+++ b/doc/html/a00062.html
@@ -20,65 +20,25 @@
     <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::flow::interface6::priority_queue_node< T, Compare, A > Member List</h1>This is the complete list of members for <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00237.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>(graph &g)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#03ad7b85a8341437f584af06ad050cdc">buffer_node</a>(const buffer_node &src)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2648324ce0a38b40132b8502ef250e3a">forward</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(prio_operation *op_list) (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00286.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a> typedef</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::aggregating_functor< my_class, buffer_operation ></b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T, A > ></b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_consume</b>(prio_operation *op) (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00286.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">internal_forward</a>(prio_operation *op)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_pop</b>(prio_operation *op) (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_push</b>(prio_operation *op) (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_release</b>(prio_operation *op) (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(prio_operation *op) (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>item_type</b> typedef (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_class</b> typedef (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_handler</b> typedef (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00286.html#2cb099b590246b6bc93cc15e78c6ee5c">output_type</a> typedef</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00286.html#fdea783bf9d5a4c98e794ac7e0f84ccf">predecessor_type</a> typedef</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>prio_operation</b> typedef (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00286.html#497ec2612615249bf5a294eb1b7b93b3">priority_queue_node</a>(graph &g)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00286.html#17a4f66e23d54100b64805405e905d62">priority_queue_node</a>(const priority_queue_node &src)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#f8bf4944ede4fc106423d67715beb695">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>rel_res</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>req_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00286.html#09ab5064ca8192e68c03da47603e68eb">successor_type</a> typedef</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>try_fwd</b> enum value (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#aeb8aec46ca99ca022356a792c46735e">try_get</a>(T &v)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2b02fe332e704bbe14f297802298b63a">try_put</a>(const T &t)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a>()</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00237.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a>(T &v)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+<h1>tbb::flow::interface6::function_node< Input, Output,, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>fInput_type</b> typedef (defined in <a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>fOutput_type</b> typedef (defined in <a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00286.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a>(graph &g, size_t concurrency, Body body)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00286.html#d5132323fd2ac6a00ea0c78beda78723">function_node</a>(const function_node &src)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>output_type</b> typedef (defined in <a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>predecessor_type</b> typedef (defined in <a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successor_type</b> typedef (defined in <a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successors</b>() (defined in <a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>try_put</b>(const input_type &i) (defined in <a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00063.html b/doc/html/a00063.html
index f2b4661..6454e71 100644
--- a/doc/html/a00063.html
+++ b/doc/html/a00063.html
@@ -20,33 +20,26 @@
     <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::flow::interface6::limiter_node< T > Member List</h1>This is the complete list of members for <a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00266.html#a3344b2461966631b6ee34b79fb105c7">decrement</a></td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00266.html#035196d3c9240ef041f528ebcde8baa7">input_type</a> typedef</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::decrementer< limiter_node< T > ></b> (defined in <a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a>)</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< limiter_node< T > ></b> (defined in <a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a>)</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00266.html#831b06576f46fe2bf3ed0f86b793c1b2">limiter_node</a>(graph &g, size_t threshold, int num_decrement_predecessors=0)</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00266.html#83d3ab884543b070ee5b345a87f241fa">limiter_node</a>(const limiter_node &src)</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00266.html#6e67fc480147c0b88a483b85db6457b0">output_type</a> typedef</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00266.html#f89fcf44f38eb33f965ee5362d3e68e9">predecessor_type</a> typedef</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00266.html#de70a0e88ce7655d8c14b6af57f7496f">register_predecessor</a>(predecessor_type &src)</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#30e3316466efe3a713c23062b6e806f3">tbb::flow::interface6::receiver::register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00266.html#c76561d8d871b4769876988a4de12a9b">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00266.html#c530e7b469454e2340460795f2da3317">remove_predecessor</a>(predecessor_type &src)</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">tbb::flow::interface6::receiver::remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00266.html#275e328063c121b3e506ccef2a825d28">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00266.html#e8945e4dd6ea759ff9e4735da13f12ef">successor_type</a> typedef</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#7b840f50da117a0d6848707c1857ea2e">try_consume</a>()</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#922fb56b0aad090b90a98b7d56b76a59">try_get</a>(T &)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00266.html#55a02d458a4d8ffa6accd7a70605da2f">try_put</a>(const T &t)</td><td><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#27036b06d6a91e97007e14f400529199">try_release</a>()</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00301.html#02c05b472271db1b68a48ea2618fa72f">try_reserve</a>(T &)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00295.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+<h1>tbb::flow::interface6::function_node< Input, Output, queueing, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>fInput_type</b> typedef (defined in <a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>fOutput_type</b> typedef (defined in <a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00287.html#5b9019c1e6e9b2c41c986a384bd179db">function_node</a>(graph &g, size_t concurrency, Body body)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00287.html#01055081ed477714503820035db3a965">function_node</a>(const function_node &src)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>output_type</b> typedef (defined in <a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>predecessor_type</b> typedef (defined in <a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>queue_type</b> typedef (defined in <a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successor_type</b> typedef (defined in <a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successors</b>() (defined in <a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>try_put</b>(const input_type &i) (defined in <a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>)</td><td><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00064.html b/doc/html/a00064.html
new file mode 100644
index 0000000..8e76336
--- /dev/null
+++ b/doc/html/a00064.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::flow::interface6::multifunction_node< Input, Output,, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>multifunction_node</b>(graph &g, size_t concurrency, Body body) (defined in <a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>multifunction_node</b>(const multifunction_node &other) (defined in <a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>output_ports_type</b> typedef (defined in <a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a>)</td><td><a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00066.html b/doc/html/a00066.html
new file mode 100644
index 0000000..ff77f55
--- /dev/null
+++ b/doc/html/a00066.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::flow::interface6::split_node< TupleType, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>)</td><td><a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>)</td><td><a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>multifunction_node</b>(graph &g, size_t concurrency, Body body) (defined in <a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a>)</td><td><a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>multifunction_node</b>(const multifunction_node &other) (defined in <a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a>)</td><td><a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>output_ports_type</b> typedef (defined in <a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>)</td><td><a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>split_node</b>(graph &g) (defined in <a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>)</td><td><a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>split_node</b>(const split_node &other) (defined in <a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>)</td><td><a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00068.html b/doc/html/a00068.html
index 16915ab..bc68351 100644
--- a/doc/html/a00068.html
+++ b/doc/html/a00068.html
@@ -20,32 +20,25 @@
     <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::interface6::memory_pool_allocator< T, P > Member List</h1>This is the complete list of members for <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>address</b>(reference x) const  (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></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="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00270.html#365bd64d284c80d85bb2149a12681526">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00270.html#c7e1671b725894b94ce9a6ac544e24f2">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00270.html#4e24a03de38638af07548383024c54ab">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00270.html#a3af27e1f8535cc512134ec9a82ff4fc">destroy</a>(pointer p)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00270.html#beebdb6144df8ba219fadfad4de866ea">max_size</a>() const </td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b> (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(pool_type &pool) (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(const memory_pool_allocator &src) (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(const memory_pool_allocator< U, P > &src) (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_pool</b> (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator!=</b> (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator==</b> (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pool_type</b> typedef (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
+<h1>tbb::flow::interface6::continue_node< Output > Member List</h1>This is the complete list of members for <a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00278.html#2f200db877d2f80c08d09422e8bffd5a">continue_node</a>(graph &g, Body body)</td><td><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00278.html#7817aebf22dd125ca04df53ac488d163">continue_node</a>(graph &g, int number_of_predecessors, Body body)</td><td><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00278.html#869562787fcb5c57a90aea120f26d492">continue_node</a>(const continue_node &src)</td><td><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>fOutput_type</b> typedef (defined in <a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>input_type</b> typedef (defined in <a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>output_type</b> typedef (defined in <a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>predecessor_type</b> typedef (defined in <a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successor_type</b> typedef (defined in <a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>successors</b>() (defined in <a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td><td><code> [inline, protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>try_put</b>(const input_type &i) (defined in <a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a>)</td><td><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00070.html b/doc/html/a00070.html
deleted file mode 100644
index d0209ee..0000000
--- a/doc/html/a00070.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>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::interface6::memory_pool_allocator< void, P > Member List</h1>This is the complete list of members for <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b> (defined in <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(pool_type &pool) (defined in <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(const memory_pool_allocator &src) (defined in <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(const memory_pool_allocator< U, P > &src) (defined in <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_pool</b> (defined in <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator!=</b> (defined in <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator==</b> (defined in <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pool_type</b> typedef (defined in <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00071.html b/doc/html/a00071.html
new file mode 100644
index 0000000..4a960d6
--- /dev/null
+++ b/doc/html/a00071.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::flow::interface6::broadcast_node< T > Member List</h1>This is the complete list of members for <a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>broadcast_node</b>(graph &g) (defined in <a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a>)</td><td><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>broadcast_node</b>(const broadcast_node &src) (defined in <a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a>)</td><td><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00262.html#43c775d80e98cc601de69764983319f9">input_type</a> typedef</td><td><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00262.html#8fd8d3075823e08b879be46c1215ab0f">output_type</a> typedef</td><td><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00262.html#0e2ad9a121cb286aa0d0142fef33c646">predecessor_type</a> typedef</td><td><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00262.html#fd0324c9ddb51fe6f95b3d015d338941">register_successor</a>(receiver< T > &r)</td><td><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00262.html#366efcc046ec08a104281109801ae629">remove_successor</a>(receiver< T > &r)</td><td><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00262.html#cc6a0eb1c4ee65465770628d8366f055">successor_type</a> typedef</td><td><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#7b840f50da117a0d6848707c1857ea2e">try_consume</a>()</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#922fb56b0aad090b90a98b7d56b76a59">try_get</a>(T &)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00262.html#29eb768c10b377880bbf83d31ee49acf">try_put</a>(const T &t)</td><td><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#27036b06d6a91e97007e14f400529199">try_release</a>()</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#02c05b472271db1b68a48ea2618fa72f">try_reserve</a>(T &)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00072.html b/doc/html/a00072.html
index 13cb414..1fe10f4 100644
--- a/doc/html/a00072.html
+++ b/doc/html/a00072.html
@@ -20,12 +20,65 @@
     <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::interface6::memory_pool< Alloc > Member List</h1>This is the complete list of members for <a class="el" href="a00269.html">tbb::interface6::memory_pool< Alloc ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00269.html#2822528265718a4c779591fc37c02ca8">memory_pool</a>(const Alloc &src=Alloc())</td><td><a class="el" href="a00269.html">tbb::interface6::memory_pool< Alloc ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00269.html#fdad7c4ed08332ec384491a71b721957">~memory_pool</a>()</td><td><a class="el" href="a00269.html">tbb::interface6::memory_pool< Alloc ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::flow::interface6::buffer_node< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00263.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>(graph &g)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#03ad7b85a8341437f584af06ad050cdc">buffer_node</a>(const buffer_node &src)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2648324ce0a38b40132b8502ef250e3a">forward</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#334efb81b56a2f2b3ae08a16e8d65620">input_type</a> typedef</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::aggregating_functor< my_class, buffer_operation ></b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T, A > ></b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_consume</b>(buffer_operation *op) (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#dcbffbae514f4d95205b0845785c0a91">internal_forward</a>(buffer_operation *op)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_pop</b>(buffer_operation *op) (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_push</b>(buffer_operation *op) (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_release</b>(buffer_operation *op) (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(buffer_operation *op) (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_class</b> typedef (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_handler</b> typedef (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> typedef</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#5fb0ad03a822ca0fc34ad5d56a4093a2">predecessor_type</a> typedef</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#f8bf4944ede4fc106423d67715beb695">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rel_res</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>req_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#66f7eda69b75e08f50726e50a11429cd">successor_type</a> typedef</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>try_fwd</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#aeb8aec46ca99ca022356a792c46735e">try_get</a>(T &v)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2b02fe332e704bbe14f297802298b63a">try_put</a>(const T &t)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a>(T &v)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00074.html b/doc/html/a00074.html
index 1a4425d..89f85fc 100644
--- a/doc/html/a00074.html
+++ b/doc/html/a00074.html
@@ -20,27 +20,68 @@
     <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="a00275.html">tbb::mutex</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>DESTROYED</b> enum value (defined in <a class="el" href="a00275.html">tbb::mutex</a>)</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>HELD</b> enum value (defined in <a class="el" href="a00275.html">tbb::mutex</a>)</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>INITIALIZED</b> enum value (defined in <a class="el" href="a00275.html">tbb::mutex</a>)</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00275.html">tbb::mutex</a>)</td><td><a class="el" href="a00275.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="a00275.html">tbb::mutex</a>)</td><td><a class="el" href="a00275.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="a00275.html">tbb::mutex</a>)</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00275.html#4470e61c24c129a0299ca6c17240adbb">lock</a>()</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00275.html#05313cb77d4f85213103d4dab74ed454">mutex</a>()</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>native_handle</b>() (defined in <a class="el" href="a00275.html">tbb::mutex</a>)</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00275.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> typedef</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>native_handle_type</b> typedef (defined in <a class="el" href="a00275.html">tbb::mutex</a>)</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00275.html">tbb::mutex</a>)</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00275.html#795649a185b0d6af6dc81c5f378616dd">set_state</a>(state_t to)</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>state_t</b> enum name (defined in <a class="el" href="a00275.html">tbb::mutex</a>)</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00275.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>()</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00275.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>()</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~mutex</b>() (defined in <a class="el" href="a00275.html">tbb::mutex</a>)</td><td><a class="el" href="a00275.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::flow::interface6::queue_node< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00263.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>(graph &g)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#03ad7b85a8341437f584af06ad050cdc">buffer_node</a>(const buffer_node &src)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2648324ce0a38b40132b8502ef250e3a">forward</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00313.html#1e71030845210b6c4c7380eb9e11a2ac">input_type</a> typedef</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::aggregating_functor< my_class, buffer_operation ></b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T, A > ></b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_consume</b>(queue_operation *op) (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00313.html#eadcbbb81f9a9d223afabe0f40e77ecb">internal_forward</a>(queue_operation *op)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_pop</b>(queue_operation *op) (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_push</b>(buffer_operation *op) (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_release</b>(buffer_operation *op) (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(queue_operation *op) (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_class</b> typedef (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_handler</b> typedef (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00313.html#25b5a53ab1f9a342644fa3759bc0b1ad">output_type</a> typedef</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00313.html#5e2fdd33c45d44549dee9c1638e19898">predecessor_type</a> typedef</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00313.html#c716593a92448b0f429d1f3a38e67996">queue_node</a>(graph &g)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00313.html#0226762d9ebba28311b7b1518d948ab1">queue_node</a>(const queue_node &src)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>queue_operation</b> typedef (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#f8bf4944ede4fc106423d67715beb695">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rel_res</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>req_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00313.html#f35076a19f256f9e7a61bed77ca1ccc5">successor_type</a> typedef</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>try_fwd</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#aeb8aec46ca99ca022356a792c46735e">try_get</a>(T &v)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2b02fe332e704bbe14f297802298b63a">try_put</a>(const T &t)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a>(T &v)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00075.html b/doc/html/a00075.html
index 10c39e2..6bf48b6 100644
--- a/doc/html/a00075.html
+++ b/doc/html/a00075.html
@@ -20,17 +20,71 @@
     <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="a00276.html">tbb::mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00276.html#862e022841cdc522e4296a5533b22efd">acquire</a>(mutex &mutex)</td><td><a class="el" href="a00276.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="a00276.html">tbb::mutex::scoped_lock</a>)</td><td><a class="el" href="a00276.html">tbb::mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00276.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>()</td><td><a class="el" href="a00276.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00276.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>()</td><td><a class="el" href="a00276.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00276.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a>(mutex &mutex)</td><td><a class="el" href="a00276.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00276.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>(mutex &mutex)</td><td><a class="el" href="a00276.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00276.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>()</td><td><a class="el" href="a00276.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::flow::interface6::sequencer_node< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00263.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>(graph &g)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#03ad7b85a8341437f584af06ad050cdc">buffer_node</a>(const buffer_node &src)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2648324ce0a38b40132b8502ef250e3a">forward</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(buffer_operation *op_list) (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00328.html#af629f26832ff4e476e240637a78bc0c">input_type</a> typedef</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::aggregating_functor< my_class, buffer_operation ></b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T, A > ></b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_consume</b>(queue_operation *op) (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00313.html#eadcbbb81f9a9d223afabe0f40e77ecb">internal_forward</a>(queue_operation *op)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_pop</b>(queue_operation *op) (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_release</b>(buffer_operation *op) (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(queue_operation *op) (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_class</b> typedef (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_handler</b> typedef (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00328.html#ca026eaef70e35791c407323199031a7">output_type</a> typedef</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00328.html#8127e36811832563fe1e9bc3ba391f79">predecessor_type</a> typedef</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00313.html#c716593a92448b0f429d1f3a38e67996">queue_node</a>(graph &g)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00313.html#0226762d9ebba28311b7b1518d948ab1">queue_node</a>(const queue_node &src)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>queue_operation</b> typedef (defined in <a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>)</td><td><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#f8bf4944ede4fc106423d67715beb695">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rel_res</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>req_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00328.html#7e71cbdf78f989091bc162b89bee7e66">sequencer_node</a>(graph &g, const Sequencer &s)</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00328.html#b38e7a070552960384bcc1d91af13a5c">sequencer_node</a>(const sequencer_node &src)</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>sequencer_operation</b> typedef (defined in <a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00328.html#795f3ee75f133b9d3b159172fc4a197f">successor_type</a> typedef</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>try_fwd</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#aeb8aec46ca99ca022356a792c46735e">try_get</a>(T &v)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2b02fe332e704bbe14f297802298b63a">try_put</a>(const T &t)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a>(T &v)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a>)</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00328.html#93d3d8f6a72b3e1387047282116ed6ee">~sequencer_node</a>()</td><td><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00076.html b/doc/html/a00076.html
index b744120..6617254 100644
--- a/doc/html/a00076.html
+++ b/doc/html/a00076.html
@@ -20,14 +20,69 @@
     <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="a00277.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="a00277.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00277.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="a00277.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00277.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="a00277.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00277.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="a00277.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00277.html">tbb::null_mutex</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::flow::interface6::priority_queue_node< T, Compare, A > Member List</h1>This is the complete list of members for <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00263.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>(graph &g)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#03ad7b85a8341437f584af06ad050cdc">buffer_node</a>(const buffer_node &src)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>con_res</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>FAILED</b> enum value (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2648324ce0a38b40132b8502ef250e3a">forward</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>forwarder_busy</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>handle_operations</b>(prio_operation *op_list) (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00312.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a> typedef</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::aggregating_functor< my_class, buffer_operation ></b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< buffer_node< T, A > ></b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_consume</b>(prio_operation *op) (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00312.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">internal_forward</a>(prio_operation *op)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_pop</b>(prio_operation *op) (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_push</b>(prio_operation *op) (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_release</b>(prio_operation *op) (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(buffer_operation *op)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(prio_operation *op) (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>item_type</b> typedef (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_aggregator</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_class</b> typedef (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_handler</b> typedef (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_parent</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_successors</b> (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_stat</b> enum name (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>op_type</b> enum name (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00312.html#2cb099b590246b6bc93cc15e78c6ee5c">output_type</a> typedef</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00312.html#fdea783bf9d5a4c98e794ac7e0f84ccf">predecessor_type</a> typedef</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prio_operation</b> typedef (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00312.html#497ec2612615249bf5a294eb1b7b93b3">priority_queue_node</a>(graph &g)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00312.html#17a4f66e23d54100b64805405e905d62">priority_queue_node</a>(const priority_queue_node &src)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>put_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reg_succ</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#f8bf4944ede4fc106423d67715beb695">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rel_res</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>rem_succ</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>req_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>res_item</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>SUCCEEDED</b> enum value (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00312.html#09ab5064ca8192e68c03da47603e68eb">successor_type</a> typedef</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>try_fwd</b> enum value (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#aeb8aec46ca99ca022356a792c46735e">try_get</a>(T &v)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2b02fe332e704bbe14f297802298b63a">try_put</a>(const T &t)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a>()</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00263.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a>(T &v)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>WAIT</b> enum value (defined in <a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>)</td><td><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~buffer_node</b>() (defined in <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>)</td><td><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00077.html b/doc/html/a00077.html
index b6e3d9d..febb8e1 100644
--- a/doc/html/a00077.html
+++ b/doc/html/a00077.html
@@ -20,16 +20,37 @@
     <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="a00278.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="a00278.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00278.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="a00278.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00278.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="a00278.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00278.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="a00278.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00278.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="a00278.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00278.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="a00278.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00278.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::flow::interface6::limiter_node< T > Member List</h1>This is the complete list of members for <a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00292.html#a3344b2461966631b6ee34b79fb105c7">decrement</a></td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>graph_node</b>(graph &g) (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00292.html#035196d3c9240ef041f528ebcde8baa7">input_type</a> typedef</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::decrementer< limiter_node< T > ></b> (defined in <a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a>)</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::forward_task< limiter_node< T > ></b> (defined in <a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a>)</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00292.html#831b06576f46fe2bf3ed0f86b793c1b2">limiter_node</a>(graph &g, size_t threshold, int num_decrement_predecessors=0)</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00292.html#83d3ab884543b070ee5b345a87f241fa">limiter_node</a>(const limiter_node &src)</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_graph</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00292.html#6e67fc480147c0b88a483b85db6457b0">output_type</a> typedef</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00292.html#f89fcf44f38eb33f965ee5362d3e68e9">predecessor_type</a> typedef</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev</b> (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00292.html#de70a0e88ce7655d8c14b6af57f7496f">register_predecessor</a>(predecessor_type &src)</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#30e3316466efe3a713c23062b6e806f3">tbb::flow::interface6::receiver::register_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00292.html#c76561d8d871b4769876988a4de12a9b">register_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00292.html#c530e7b469454e2340460795f2da3317">remove_predecessor</a>(predecessor_type &src)</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">tbb::flow::interface6::receiver::remove_predecessor</a>(predecessor_type &)</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00292.html#275e328063c121b3e506ccef2a825d28">remove_successor</a>(receiver< output_type > &r)</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00292.html#e8945e4dd6ea759ff9e4735da13f12ef">successor_type</a> typedef</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#7b840f50da117a0d6848707c1857ea2e">try_consume</a>()</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#922fb56b0aad090b90a98b7d56b76a59">try_get</a>(T &)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00292.html#55a02d458a4d8ffa6accd7a70605da2f">try_put</a>(const T &t)</td><td><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#27036b06d6a91e97007e14f400529199">try_release</a>()</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00327.html#02c05b472271db1b68a48ea2618fa72f">try_reserve</a>(T &)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~graph_node</b>() (defined in <a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>)</td><td><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00321.html#b00699b235435f7b65b663d5063624a1">~receiver</a>()</td><td><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~sender</b>() (defined in <a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a>)</td><td><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00078.html b/doc/html/a00078.html
deleted file mode 100644
index 6a7c81a..0000000
--- a/doc/html/a00078.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>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::null_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00279.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="a00279.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00279.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="a00279.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00279.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="a00279.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00279.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="a00279.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00279.html">tbb::null_rw_mutex</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00079.html b/doc/html/a00079.html
deleted file mode 100644
index 6c44c19..0000000
--- a/doc/html/a00079.html
+++ /dev/null
@@ -1,40 +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::null_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00280.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="a00280.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00280.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="a00280.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00280.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00080.html b/doc/html/a00080.html
deleted file mode 100644
index 67469ea..0000000
--- a/doc/html/a00080.html
+++ /dev/null
@@ -1,34 +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::parallel_do_feeder< Item > Member List</h1>This is the complete list of members for <a class="el" href="a00281.html">tbb::parallel_do_feeder< Item ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00281.html#40baaf0f6856f4491dd0adf896c93516">add</a>(const Item &item)</td><td><a class="el" href="a00281.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="a00281.html">tbb::parallel_do_feeder< Item ></a>)</td><td><a class="el" href="a00281.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [friend]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00082.html b/doc/html/a00082.html
index 9b0ca91..ab4eeb1 100644
--- a/doc/html/a00082.html
+++ b/doc/html/a00082.html
@@ -20,11 +20,31 @@
     <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="a00285.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="a00285.html">tbb::pre_scan_tag</a>)</td><td><a class="el" href="a00285.html">tbb::pre_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
+<h1>tbb::interface6::memory_pool_allocator< T, P > Member List</h1>This is the complete list of members for <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>address</b>(reference x) const  (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></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="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00296.html#365bd64d284c80d85bb2149a12681526">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00296.html#3491a81e0597c1696a163e7c8fa8706a">construct</a>(pointer p, Args &&...args)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00296.html#4e24a03de38638af07548383024c54ab">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00296.html#beebdb6144df8ba219fadfad4de866ea">max_size</a>() const </td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b> (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(pool_type &pool) (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(const memory_pool_allocator &src) (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(const memory_pool_allocator< U, P > &src) (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_pool</b> (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator!=</b> (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator==</b> (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pool_type</b> typedef (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>)</td><td><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00083.html b/doc/html/a00083.html
deleted file mode 100644
index 5614da5..0000000
--- a/doc/html/a00083.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::final_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00258.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="a00258.html">tbb::final_scan_tag</a>)</td><td><a class="el" href="a00258.html">tbb::final_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00084.html b/doc/html/a00084.html
index 0923278..fe9265a 100644
--- a/doc/html/a00084.html
+++ b/doc/html/a00084.html
@@ -20,15 +20,21 @@
     <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="a00282.html">tbb::parallel_while< Body ></a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00282.html#e131c560057a58229992b61eb8dba4c6">add</a>(const value_type &item)</td><td><a class="el" href="a00282.html">tbb::parallel_while< Body ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00282.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>()</td><td><a class="el" href="a00282.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00282.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a>(Stream &stream, const Body &body)</td><td><a class="el" href="a00282.html">tbb::parallel_while< Body ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00282.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> typedef</td><td><a class="el" href="a00282.html">tbb::parallel_while< Body ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00282.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a>()</td><td><a class="el" href="a00282.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::interface6::memory_pool_allocator< void, P > Member List</h1>This is the complete list of members for <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b> (defined in <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(pool_type &pool) (defined in <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(const memory_pool_allocator &src) (defined in <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>memory_pool_allocator</b>(const memory_pool_allocator< U, P > &src) (defined in <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_pool</b> (defined in <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator!=</b> (defined in <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator==</b> (defined in <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pool_type</b> typedef (defined in <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>)</td><td><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00085.html b/doc/html/a00085.html
deleted file mode 100644
index ace4663..0000000
--- a/doc/html/a00085.html
+++ /dev/null
@@ -1,34 +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::affinity_partitioner_base_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00226.html">tbb::internal::affinity_partitioner_base_v3</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>tbb::affinity_partitioner</b> (defined in <a class="el" href="a00226.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00226.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>tbb::interface6::internal::affinity_partition_type</b> (defined in <a class="el" href="a00226.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00226.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00086.html b/doc/html/a00086.html
index 1e29984..46fd5dd 100644
--- a/doc/html/a00086.html
+++ b/doc/html/a00086.html
@@ -20,15 +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::partition_type_base Member List</h1>This is the complete list of members for <a class="el" href="a00283.html">tbb::internal::partition_type_base</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>continue_after_execute_range</b>() (defined in <a class="el" href="a00283.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00283.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>decide_whether_to_delay</b>() (defined in <a class="el" href="a00283.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00283.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>note_affinity</b>(task::affinity_id) (defined in <a class="el" href="a00283.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00283.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>set_affinity</b>(task &) (defined in <a class="el" href="a00283.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00283.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>spawn_or_delay</b>(bool, task &b) (defined in <a class="el" href="a00283.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00283.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::interface6::memory_pool< Alloc > Member List</h1>This is the complete list of members for <a class="el" href="a00295.html">tbb::interface6::memory_pool< Alloc ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00295.html#2822528265718a4c779591fc37c02ca8">memory_pool</a>(const Alloc &src=Alloc())</td><td><a class="el" href="a00295.html">tbb::interface6::memory_pool< Alloc ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00295.html#fdad7c4ed08332ec384491a71b721957">~memory_pool</a>()</td><td><a class="el" href="a00295.html">tbb::interface6::memory_pool< Alloc ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00087.html b/doc/html/a00087.html
deleted file mode 100644
index 1c2fb62..0000000
--- a/doc/html/a00087.html
+++ /dev/null
@@ -1,37 +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::simple_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00303.html">tbb::simple_partitioner</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_for</b> (defined in <a class="el" href="a00303.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00303.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_reduce</b> (defined in <a class="el" href="a00303.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00303.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="a00303.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00303.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>serial::interface6::start_for</b> (defined in <a class="el" href="a00303.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00303.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="a00303.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00303.html">tbb::simple_partitioner</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00088.html b/doc/html/a00088.html
new file mode 100644
index 0000000..a97e5c6
--- /dev/null
+++ b/doc/html/a00088.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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="a00301.html">tbb::mutex</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>DESTROYED</b> enum value (defined in <a class="el" href="a00301.html">tbb::mutex</a>)</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>HELD</b> enum value (defined in <a class="el" href="a00301.html">tbb::mutex</a>)</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>INITIALIZED</b> enum value (defined in <a class="el" href="a00301.html">tbb::mutex</a>)</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00301.html">tbb::mutex</a>)</td><td><a class="el" href="a00301.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="a00301.html">tbb::mutex</a>)</td><td><a class="el" href="a00301.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="a00301.html">tbb::mutex</a>)</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00301.html#4470e61c24c129a0299ca6c17240adbb">lock</a>()</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00301.html#05313cb77d4f85213103d4dab74ed454">mutex</a>()</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>native_handle</b>() (defined in <a class="el" href="a00301.html">tbb::mutex</a>)</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00301.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> typedef</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>native_handle_type</b> typedef (defined in <a class="el" href="a00301.html">tbb::mutex</a>)</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00301.html">tbb::mutex</a>)</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00301.html#795649a185b0d6af6dc81c5f378616dd">set_state</a>(state_t to)</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>state_t</b> enum name (defined in <a class="el" href="a00301.html">tbb::mutex</a>)</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00301.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>()</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00301.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>()</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~mutex</b>() (defined in <a class="el" href="a00301.html">tbb::mutex</a>)</td><td><a class="el" href="a00301.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00089.html b/doc/html/a00089.html
index 24f6586..ddb367b 100644
--- a/doc/html/a00089.html
+++ b/doc/html/a00089.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::auto_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00231.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="a00231.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00231.html">tbb::auto_partitioner</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_for</b> (defined in <a class="el" href="a00231.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00231.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_reduce</b> (defined in <a class="el" href="a00231.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00231.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="a00231.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00231.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>serial::interface6::start_for</b> (defined in <a class="el" href="a00231.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00231.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+<h1>tbb::mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00302.html">tbb::mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00302.html#862e022841cdc522e4296a5533b22efd">acquire</a>(mutex &mutex)</td><td><a class="el" href="a00302.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="a00302.html">tbb::mutex::scoped_lock</a>)</td><td><a class="el" href="a00302.html">tbb::mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00302.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>()</td><td><a class="el" href="a00302.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00302.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>()</td><td><a class="el" href="a00302.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00302.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a>(mutex &mutex)</td><td><a class="el" href="a00302.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00302.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>(mutex &mutex)</td><td><a class="el" href="a00302.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00302.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>()</td><td><a class="el" href="a00302.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00090.html b/doc/html/a00090.html
index 205ab74..d868cc3 100644
--- a/doc/html/a00090.html
+++ b/doc/html/a00090.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::affinity_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00225.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="a00225.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00225.html">tbb::affinity_partitioner</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_for</b> (defined in <a class="el" href="a00225.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00225.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_reduce</b> (defined in <a class="el" href="a00225.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00225.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="a00225.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00225.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>serial::interface6::start_for</b> (defined in <a class="el" href="a00225.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00225.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>tbb::affinity_partitioner</b> (defined in <a class="el" href="a00226.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00226.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>tbb::interface6::internal::affinity_partition_type</b> (defined in <a class="el" href="a00226.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00226.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
+<h1>tbb::null_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00303.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="a00303.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00303.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="a00303.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00303.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="a00303.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00303.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="a00303.html">tbb::null_mutex</a>)</td><td><a class="el" href="a00303.html">tbb::null_mutex</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00091.html b/doc/html/a00091.html
index 498cfc2..bdd2323 100644
--- a/doc/html/a00091.html
+++ b/doc/html/a00091.html
@@ -20,32 +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::filter Member List</h1>This is the complete list of members for <a class="el" href="a00256.html">tbb::filter</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00256.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a></td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>filter</b>(mode filter_mode) (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a></td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a></td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a></td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a></td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00256.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="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.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="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_pipeline</b>(NULL) (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>next_segment</b>(NULL) (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#8ec4dfe053e94a2349d56781ddea8477">object_may_be_null</a>()</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pipeline</b> (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>prev_filter_in_pipeline</b>(not_in_pipeline()) (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>set_end_of_input</b>() (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b> (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>x1</b>((is_serial_?serial:parallel)|exact_exception_propagation)) (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
+<h1>tbb::null_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00304.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="a00304.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00304.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="a00304.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00304.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="a00304.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00304.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="a00304.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00304.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="a00304.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00304.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="a00304.html">tbb::null_mutex::scoped_lock</a>)</td><td><a class="el" href="a00304.html">tbb::null_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00092.html b/doc/html/a00092.html
index f345406..6fb88b3 100644
--- a/doc/html/a00092.html
+++ b/doc/html/a00092.html
@@ -20,37 +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::thread_bound_filter Member List</h1>This is the complete list of members for <a class="el" href="a00322.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="a00322.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00322.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a></td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>filter</b>(mode filter_mode) (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a></td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a></td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a></td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a></td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00256.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="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.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="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00256.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="a00322.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00322.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>my_pipeline</b>(NULL) (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>next_segment</b>(NULL) (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#8ec4dfe053e94a2349d56781ddea8477">object_may_be_null</a>()</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>prev_filter_in_pipeline</b>(not_in_pipeline()) (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00322.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>()</td><td><a class="el" href="a00322.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="a00322.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00322.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>set_end_of_input</b>() (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>success</b> enum value (defined in <a class="el" href="a00322.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00322.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="a00322.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00322.html">tbb::thread_bound_filter</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00322.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>()</td><td><a class="el" href="a00322.html">tbb::thread_bound_filter</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>x1</b>((is_serial_?serial:parallel)|exact_exception_propagation)) (defined in <a class="el" href="a00256.html">tbb::filter</a>)</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00256.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00256.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
+<h1>tbb::null_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00305.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="a00305.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00305.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="a00305.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00305.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="a00305.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00305.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="a00305.html">tbb::null_rw_mutex</a>)</td><td><a class="el" href="a00305.html">tbb::null_rw_mutex</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00093.html b/doc/html/a00093.html
index 1d47b8b..c547bac 100644
--- a/doc/html/a00093.html
+++ b/doc/html/a00093.html
@@ -20,22 +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::pipeline Member List</h1>This is the complete list of members for <a class="el" href="a00284.html">tbb::pipeline</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00284.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>(filter &filter_)</td><td><a class="el" href="a00284.html">tbb::pipeline</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00284.html#2c84aef5b834b555ee220b176e25931e">clear</a>()</td><td><a class="el" href="a00284.html">tbb::pipeline</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>filter</b> (defined in <a class="el" href="a00284.html">tbb::pipeline</a>)</td><td><a class="el" href="a00284.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="a00284.html">tbb::pipeline</a>)</td><td><a class="el" href="a00284.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="a00284.html">tbb::pipeline</a>)</td><td><a class="el" href="a00284.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="a00284.html">tbb::pipeline</a>)</td><td><a class="el" href="a00284.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00284.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>()</td><td><a class="el" href="a00284.html">tbb::pipeline</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00284.html#f627616049b3fe36801f37ee40403ef8">run</a>(size_t max_number_of_live_tokens)</td><td><a class="el" href="a00284.html">tbb::pipeline</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00284.html#93d7fec8cd607b803dd2d79fb46bd260">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &context)</td><td><a class="el" href="a00284.html">tbb::pipeline</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>tbb::interface6::internal::pipeline_proxy</b> (defined in <a class="el" href="a00284.html">tbb::pipeline</a>)</td><td><a class="el" href="a00284.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b> (defined in <a class="el" href="a00284.html">tbb::pipeline</a>)</td><td><a class="el" href="a00284.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00284.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>()</td><td><a class="el" href="a00284.html">tbb::pipeline</a></td><td><code> [virtual]</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="a00306.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="a00306.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00306.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="a00306.html">tbb::null_rw_mutex::scoped_lock</a>)</td><td><a class="el" href="a00306.html">tbb::null_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00094.html b/doc/html/a00094.html
index 94889c4..8c6bf6b 100644
--- a/doc/html/a00094.html
+++ b/doc/html/a00094.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::interface6::flow_control Member List</h1>This is the complete list of members for <a class="el" href="a00259.html">tbb::interface6::flow_control</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>internal::concrete_filter</b> (defined in <a class="el" href="a00259.html">tbb::interface6::flow_control</a>)</td><td><a class="el" href="a00259.html">tbb::interface6::flow_control</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>stop</b>() (defined in <a class="el" href="a00259.html">tbb::interface6::flow_control</a>)</td><td><a class="el" href="a00259.html">tbb::interface6::flow_control</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::parallel_do_feeder< Item > Member List</h1>This is the complete list of members for <a class="el" href="a00307.html">tbb::parallel_do_feeder< Item ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00307.html#40baaf0f6856f4491dd0adf896c93516">add</a>(const Item &item)</td><td><a class="el" href="a00307.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="a00307.html">tbb::parallel_do_feeder< Item ></a>)</td><td><a class="el" href="a00307.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00095.html b/doc/html/a00095.html
deleted file mode 100644
index 2672779..0000000
--- a/doc/html/a00095.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::interface6::filter_t< T, U > Member List</h1>This is the complete list of members for <a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>filter_t</b>() (defined in <a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>filter_t</b>(const filter_t< T, U > &rhs) (defined in <a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>filter_t</b>(tbb::filter::mode mode, const Body &body) (defined in <a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_proxy</b> (defined in <a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00257.html#85c2892eff1fddcd06e28911e75838bd">make_filter</a>(tbb::filter::mode, const Body &)</td><td><a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator &</b> (defined in <a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const filter_t< T, U > &rhs) (defined in <a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~filter_t</b>() (defined in <a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00096.html b/doc/html/a00096.html
index abb4614..8d215e3 100644
--- a/doc/html/a00096.html
+++ b/doc/html/a00096.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::queuing_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00288.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="a00288.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00288.html">tbb::queuing_mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00288.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00288.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="a00288.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00288.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="a00288.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00288.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00288.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>()</td><td><a class="el" href="a00288.html">tbb::queuing_mutex</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::pre_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00311.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="a00311.html">tbb::pre_scan_tag</a>)</td><td><a class="el" href="a00311.html">tbb::pre_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00097.html b/doc/html/a00097.html
index 4b6b3a3..ad8bd18 100644
--- a/doc/html/a00097.html
+++ b/doc/html/a00097.html
@@ -20,16 +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::queuing_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00289.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00289.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00289.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00289.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>()</td><td><a class="el" href="a00289.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00289.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>()</td><td><a class="el" href="a00289.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00289.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a>(queuing_mutex &m)</td><td><a class="el" href="a00289.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00289.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00289.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00289.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>()</td><td><a class="el" href="a00289.html">tbb::queuing_mutex::scoped_lock</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="a00284.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="a00284.html">tbb::final_scan_tag</a>)</td><td><a class="el" href="a00284.html">tbb::final_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00098.html b/doc/html/a00098.html
index ab2a755..b92ef81 100644
--- a/doc/html/a00098.html
+++ b/doc/html/a00098.html
@@ -20,17 +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::queuing_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00290.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="a00290.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00290.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="a00290.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00290.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="a00290.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00290.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="a00290.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00290.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00290.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>()</td><td><a class="el" href="a00290.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="a00290.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00290.html">tbb::queuing_rw_mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00290.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>()</td><td><a class="el" href="a00290.html">tbb::queuing_rw_mutex</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="a00308.html">tbb::parallel_while< Body ></a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00308.html#e131c560057a58229992b61eb8dba4c6">add</a>(const value_type &item)</td><td><a class="el" href="a00308.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00308.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>()</td><td><a class="el" href="a00308.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00308.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a>(Stream &stream, const Body &body)</td><td><a class="el" href="a00308.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00308.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> typedef</td><td><a class="el" href="a00308.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00308.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a>()</td><td><a class="el" href="a00308.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00099.html b/doc/html/a00099.html
index edde6aa..8ec61c6 100644
--- a/doc/html/a00099.html
+++ b/doc/html/a00099.html
@@ -20,18 +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::queuing_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00291.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00291.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00291.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00291.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>()</td><td><a class="el" href="a00291.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00291.html#67ae221109ddc69510ab593874e435d4">release</a>()</td><td><a class="el" href="a00291.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00291.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>()</td><td><a class="el" href="a00291.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00291.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00291.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00291.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00291.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00291.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>()</td><td><a class="el" href="a00291.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00291.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>()</td><td><a class="el" href="a00291.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::internal::affinity_partitioner_base_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>tbb::affinity_partitioner</b> (defined in <a class="el" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>tbb::interface6::internal::affinity_partition_type</b> (defined in <a class="el" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00100.html b/doc/html/a00100.html
index 758acaa..30a59c7 100644
--- a/doc/html/a00100.html
+++ b/doc/html/a00100.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::interface5::reader_writer_lock Member List</h1>This is the complete list of members for <a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>active</b> enum value (defined in <a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>invalid</b> enum value (defined in <a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00292.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>()</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00292.html#d9d16a24d9f6c3dada73c6b9ff214f5b">lock_read</a>()</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00292.html#c1431c4293e777efd9aab9a95c2a46e1">reader_writer_lock</a>()</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scoped_lock_read</b> (defined in <a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00292.html#6f921f0d7c1812ceb5674418c8b6ccaf">status_t</a> enum name</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00292.html#721eb173e154ab38292273e9266a9b07">try_lock</a>()</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00292.html#595fb23952e3b89426b1f7938dea9b11">try_lock_read</a>()</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00292.html#5113b32689305599b2c36b5831547704">unlock</a>()</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>waiting</b> enum value (defined in <a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>waiting_nonblocking</b> enum value (defined in <a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00292.html#5135f64f7b7339017f33d956445edbee">~reader_writer_lock</a>()</td><td><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::internal::partition_type_base Member List</h1>This is the complete list of members for <a class="el" href="a00309.html">tbb::internal::partition_type_base</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>continue_after_execute_range</b>() (defined in <a class="el" href="a00309.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00309.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>decide_whether_to_delay</b>() (defined in <a class="el" href="a00309.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00309.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>note_affinity</b>(task::affinity_id) (defined in <a class="el" href="a00309.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00309.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>set_affinity</b>(task &) (defined in <a class="el" href="a00309.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00309.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>spawn_or_delay</b>(bool, task &b) (defined in <a class="el" href="a00309.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00309.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00101.html b/doc/html/a00101.html
index 3cd86c0..ec1ce9b 100644
--- a/doc/html/a00101.html
+++ b/doc/html/a00101.html
@@ -20,15 +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::interface5::reader_writer_lock::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00293.html">tbb::interface5::reader_writer_lock::scoped_lock</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>operator delete</b>(void *p) (defined in <a class="el" href="a00293.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00293.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator new</b>(size_t s) (defined in <a class="el" href="a00293.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00293.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reader_writer_lock</b> (defined in <a class="el" href="a00293.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00293.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00293.html#cf19f20e082887c1bb0ba6b0911c3583">scoped_lock</a>(reader_writer_lock &lock)</td><td><a class="el" href="a00293.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00293.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a>()</td><td><a class="el" href="a00293.html">tbb::interface5::reader_writer_lock::scoped_lock</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="a00329.html">tbb::simple_partitioner</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_for</b> (defined in <a class="el" href="a00329.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00329.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_reduce</b> (defined in <a class="el" href="a00329.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00329.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="a00329.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00329.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>serial::interface6::start_for</b> (defined in <a class="el" href="a00329.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00329.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="a00329.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00329.html">tbb::simple_partitioner</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00102.html b/doc/html/a00102.html
deleted file mode 100644
index a02433b..0000000
--- a/doc/html/a00102.html
+++ /dev/null
@@ -1,37 +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::interface5::reader_writer_lock::scoped_lock_read Member List</h1>This is the complete list of members for <a class="el" href="a00294.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>operator delete</b>(void *p) (defined in <a class="el" href="a00294.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00294.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>operator new</b>(size_t s) (defined in <a class="el" href="a00294.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00294.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reader_writer_lock</b> (defined in <a class="el" href="a00294.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00294.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00294.html#87ab0dc8f7216e6ba0f7acd6aec33064">scoped_lock_read</a>(reader_writer_lock &lock)</td><td><a class="el" href="a00294.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00294.html#bd21c5f3d555d64d1de8658e15bf4966">~scoped_lock_read</a>()</td><td><a class="el" href="a00294.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00103.html b/doc/html/a00103.html
index b32866d..1ba82c5 100644
--- a/doc/html/a00103.html
+++ b/doc/html/a00103.html
@@ -20,22 +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="a00296.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="a00296.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00296.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="a00296.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00296.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="a00296.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00296.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00296.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>()</td><td><a class="el" href="a00296.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>native_handle</b>() (defined in <a class="el" href="a00296.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00296.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00296.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a> typedef</td><td><a class="el" href="a00296.html">tbb::recursive_mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>native_handle_type</b> typedef (defined in <a class="el" href="a00296.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00296.html">tbb::recursive_mutex</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00296.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>()</td><td><a class="el" href="a00296.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="a00296.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00296.html">tbb::recursive_mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00296.html#86e719b0afee25704af11ab97694d240">try_lock</a>()</td><td><a class="el" href="a00296.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00296.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>()</td><td><a class="el" href="a00296.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="a00296.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00296.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::auto_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00257.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="a00257.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00257.html">tbb::auto_partitioner</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_for</b> (defined in <a class="el" href="a00257.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00257.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_reduce</b> (defined in <a class="el" href="a00257.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00257.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="a00257.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00257.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>serial::interface6::start_for</b> (defined in <a class="el" href="a00257.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00257.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00104.html b/doc/html/a00104.html
index fc62e2c..4087aae 100644
--- a/doc/html/a00104.html
+++ b/doc/html/a00104.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::recursive_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00297.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00297.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00297.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="a00297.html">tbb::recursive_mutex::scoped_lock</a>)</td><td><a class="el" href="a00297.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00297.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>()</td><td><a class="el" href="a00297.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00297.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>()</td><td><a class="el" href="a00297.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00297.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00297.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00297.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00297.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00297.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>()</td><td><a class="el" href="a00297.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::affinity_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00249.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="a00249.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00249.html">tbb::affinity_partitioner</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_for</b> (defined in <a class="el" href="a00249.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00249.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>interface6::internal::start_reduce</b> (defined in <a class="el" href="a00249.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00249.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="a00249.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00249.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>serial::interface6::start_for</b> (defined in <a class="el" href="a00249.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00249.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>tbb::affinity_partitioner</b> (defined in <a class="el" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>tbb::interface6::internal::affinity_partition_type</b> (defined in <a class="el" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00105.html b/doc/html/a00105.html
index 83bdf57..19a6239 100644
--- a/doc/html/a00105.html
+++ b/doc/html/a00105.html
@@ -20,26 +20,32 @@
     <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::interface6::runtime_loader Member List</h1>This is the complete list of members for <a class="el" href="a00298.html">tbb::interface6::runtime_loader</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">ec_bad_arg</a> enum value</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">ec_bad_call</a> enum value</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">ec_bad_lib</a> enum value</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">ec_bad_ver</a> enum value</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">ec_no_lib</a> enum value</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">ec_ok</a> enum value</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a> enum value</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">em_status</a> enum value</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">em_throw</a> enum value</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789">error_code</a> enum name</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> enum name</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#5f3f6f1683386705a6931acae45f0862">load</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#7caa4ff6e44c2348e67f601cc5d97c34">runtime_loader</a>(error_mode mode=em_abort)</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#7ae5330beb48fce0c702c32a5df0094a">runtime_loader</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, error_mode mode=em_abort)</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#78d938ed2e54d38dd38d6609e6c60389">status</a>()</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00298.html#c25fec923a751a3e03f5cbe969f1f0c5">~runtime_loader</a>()</td><td><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+<h1>tbb::filter Member List</h1>This is the complete list of members for <a class="el" href="a00282.html">tbb::filter</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00282.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a></td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter</b>(mode filter_mode) (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a></td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a></td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a></td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a></td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00282.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="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.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="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_pipeline</b>(NULL) (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next_segment</b>(NULL) (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#8ec4dfe053e94a2349d56781ddea8477">object_may_be_null</a>()</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pipeline</b> (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev_filter_in_pipeline</b>(not_in_pipeline()) (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>set_end_of_input</b>() (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b> (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>x1</b>((is_serial_?serial:parallel)|exact_exception_propagation)) (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00106.html b/doc/html/a00106.html
new file mode 100644
index 0000000..d86c682
--- /dev/null
+++ b/doc/html/a00106.html
@@ -0,0 +1,59 @@
+<!DOCTYPE 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::thread_bound_filter Member List</h1>This is the complete list of members for <a class="el" href="a00348.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="a00348.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00348.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a></td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter</b>(mode filter_mode) (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a></td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a></td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a></td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a></td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#56275eb889c77c4807967133e21401bd">finalize</a>(void *)</td><td><a class="el" href="a00282.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="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.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="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>() const </td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>() const </td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>() const </td><td><a class="el" href="a00282.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="a00348.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00348.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>my_pipeline</b>(NULL) (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>next_segment</b>(NULL) (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#8ec4dfe053e94a2349d56781ddea8477">object_may_be_null</a>()</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>(void *item)=0</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>prev_filter_in_pipeline</b>(not_in_pipeline()) (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00348.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>()</td><td><a class="el" href="a00348.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="a00348.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00348.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>set_end_of_input</b>() (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>success</b> enum value (defined in <a class="el" href="a00348.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00348.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="a00348.html">tbb::thread_bound_filter</a>)</td><td><a class="el" href="a00348.html">tbb::thread_bound_filter</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00348.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>()</td><td><a class="el" href="a00348.html">tbb::thread_bound_filter</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>x1</b>((is_serial_?serial:parallel)|exact_exception_propagation)) (defined in <a class="el" href="a00282.html">tbb::filter</a>)</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00282.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>()</td><td><a class="el" href="a00282.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00107.html b/doc/html/a00107.html
index c8878d4..2ed6c4b 100644
--- a/doc/html/a00107.html
+++ b/doc/html/a00107.html
@@ -20,27 +20,22 @@
     <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="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00299.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00299.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00299.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const </td><td><a class="el" href="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>() (defined in <a class="el" href="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.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="a00299.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00299.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+<h1>tbb::pipeline Member List</h1>This is the complete list of members for <a class="el" href="a00310.html">tbb::pipeline</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00310.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>(filter &filter_)</td><td><a class="el" href="a00310.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00310.html#2c84aef5b834b555ee220b176e25931e">clear</a>()</td><td><a class="el" href="a00310.html">tbb::pipeline</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter</b> (defined in <a class="el" href="a00310.html">tbb::pipeline</a>)</td><td><a class="el" href="a00310.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="a00310.html">tbb::pipeline</a>)</td><td><a class="el" href="a00310.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="a00310.html">tbb::pipeline</a>)</td><td><a class="el" href="a00310.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="a00310.html">tbb::pipeline</a>)</td><td><a class="el" href="a00310.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00310.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>()</td><td><a class="el" href="a00310.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00310.html#f627616049b3fe36801f37ee40403ef8">run</a>(size_t max_number_of_live_tokens)</td><td><a class="el" href="a00310.html">tbb::pipeline</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00310.html#93d7fec8cd607b803dd2d79fb46bd260">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &context)</td><td><a class="el" href="a00310.html">tbb::pipeline</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>tbb::interface6::internal::pipeline_proxy</b> (defined in <a class="el" href="a00310.html">tbb::pipeline</a>)</td><td><a class="el" href="a00310.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>thread_bound_filter</b> (defined in <a class="el" href="a00310.html">tbb::pipeline</a>)</td><td><a class="el" href="a00310.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00310.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>()</td><td><a class="el" href="a00310.html">tbb::pipeline</a></td><td><code> [virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00108.html b/doc/html/a00108.html
new file mode 100644
index 0000000..768cfad
--- /dev/null
+++ b/doc/html/a00108.html
@@ -0,0 +1,34 @@
+<!DOCTYPE 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::interface6::flow_control Member List</h1>This is the complete list of members for <a class="el" href="a00285.html">tbb::interface6::flow_control</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>internal::concrete_filter</b> (defined in <a class="el" href="a00285.html">tbb::interface6::flow_control</a>)</td><td><a class="el" href="a00285.html">tbb::interface6::flow_control</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>stop</b>() (defined in <a class="el" href="a00285.html">tbb::interface6::flow_control</a>)</td><td><a class="el" href="a00285.html">tbb::interface6::flow_control</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00109.html b/doc/html/a00109.html
index 38d7564..346452e 100644
--- a/doc/html/a00109.html
+++ b/doc/html/a00109.html
@@ -20,13 +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::scalable_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00300.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="a00300.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00300.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00300.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00300.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="a00300.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00300.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
+<h1>tbb::interface6::filter_t< T, U > Member List</h1>This is the complete list of members for <a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>clear</b>() (defined in <a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter_t</b>() (defined in <a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter_t</b>(const filter_t< T, U > &rhs) (defined in <a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>filter_t</b>(tbb::filter::mode mode, const Body &body) (defined in <a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::pipeline_proxy</b> (defined in <a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00283.html#85c2892eff1fddcd06e28911e75838bd">make_filter</a>(tbb::filter::mode, const Body &)</td><td><a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator &</b> (defined in <a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const filter_t< T, U > &rhs) (defined in <a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~filter_t</b>() (defined in <a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a>)</td><td><a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00110.html b/doc/html/a00110.html
new file mode 100644
index 0000000..2130b67
--- /dev/null
+++ b/doc/html/a00110.html
@@ -0,0 +1,37 @@
+<!DOCTYPE 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::queuing_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00314.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="a00314.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00314.html">tbb::queuing_mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00314.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00314.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="a00314.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00314.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="a00314.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00314.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00314.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>()</td><td><a class="el" href="a00314.html">tbb::queuing_mutex</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00111.html b/doc/html/a00111.html
index b36c110..a8da238 100644
--- a/doc/html/a00111.html
+++ b/doc/html/a00111.html
@@ -20,19 +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 Member List</h1>This is the complete list of members for <a class="el" href="a00305.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="a00305.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00305.html">tbb::spin_mutex</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00305.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00305.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="a00305.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00305.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="a00305.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00305.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00305.html#4f748989e19b6045e3a2d2ee73626a28">lock</a>()</td><td><a class="el" href="a00305.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="a00305.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00305.html">tbb::spin_mutex</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00305.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a>()</td><td><a class="el" href="a00305.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00305.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a>()</td><td><a class="el" href="a00305.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00305.html#0e843ee6265f57f27d228ba91e7308ef">unlock</a>()</td><td><a class="el" href="a00305.html">tbb::spin_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="a00315.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00315.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00315.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00315.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>()</td><td><a class="el" href="a00315.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00315.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>()</td><td><a class="el" href="a00315.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00315.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a>(queuing_mutex &m)</td><td><a class="el" href="a00315.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00315.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00315.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00315.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>()</td><td><a class="el" href="a00315.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00112.html b/doc/html/a00112.html
index 27d1506..c3a3d9d 100644
--- a/doc/html/a00112.html
+++ b/doc/html/a00112.html
@@ -20,17 +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="a00306.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00306.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00306.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00306.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a>()</td><td><a class="el" href="a00306.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00306.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>()</td><td><a class="el" href="a00306.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00306.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a>(spin_mutex &m)</td><td><a class="el" href="a00306.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="a00306.html">tbb::spin_mutex::scoped_lock</a>)</td><td><a class="el" href="a00306.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00306.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00306.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00306.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a>()</td><td><a class="el" href="a00306.html">tbb::spin_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="a00316.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="a00316.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00316.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="a00316.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00316.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="a00316.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00316.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="a00316.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00316.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00316.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>()</td><td><a class="el" href="a00316.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00316.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>()</td><td><a class="el" href="a00316.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00113.html b/doc/html/a00113.html
index 8c9a5ce..091c401 100644
--- a/doc/html/a00113.html
+++ b/doc/html/a00113.html
@@ -20,20 +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::spin_rw_mutex_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00307.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="a00307.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00307.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="a00307.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00307.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="a00307.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00307.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00307.html#4007d6e1523dbc3c2bb7f889ab789a8a">lock</a>()</td><td><a class="el" href="a00307.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00307.html#13f799708ac4ca437a16be202e263e18">lock_read</a>()</td><td><a class="el" href="a00307.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00307.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00307.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00307.html#088bb256be794cc47d3b83791632fdfc">try_lock</a>()</td><td><a class="el" href="a00307.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00307.html#b8667415869013f840d976aa406d385a">try_lock_read</a>()</td><td><a class="el" href="a00307.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00307.html#f9f52ead2098eb5fb12da59d5ae53b55">unlock</a>()</td><td><a class="el" href="a00307.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00307.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00307.html">tbb::spin_rw_mutex_v3</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="a00317.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00317.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00317.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00317.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>()</td><td><a class="el" href="a00317.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00317.html#67ae221109ddc69510ab593874e435d4">release</a>()</td><td><a class="el" href="a00317.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00317.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>()</td><td><a class="el" href="a00317.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00317.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00317.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00317.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00317.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00317.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>()</td><td><a class="el" href="a00317.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00317.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>()</td><td><a class="el" href="a00317.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00114.html b/doc/html/a00114.html
index 541405c..b4cb5fd 100644
--- a/doc/html/a00114.html
+++ b/doc/html/a00114.html
@@ -20,20 +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::spin_rw_mutex_v3::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00308.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00308.html#c2c2c38a08cb9080e87099fac3e5bc94">downgrade_to_reader</a>()</td><td><a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00308.html#6b5a7c3c67a36b05c4df8410d32627d8">is_writer</a></td><td><a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00308.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">mutex</a></td><td><a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00308.html#61b14d00a78185c9b2d206ebfc379124">release</a>()</td><td><a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00308.html#d6ea60dee5563f702379bf5e51aa8806">scoped_lock</a>()</td><td><a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00308.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00308.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00308.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a>()</td><td><a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00308.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~scoped_lock</a>()</td><td><a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::interface5::reader_writer_lock Member List</h1>This is the complete list of members for <a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>active</b> enum value (defined in <a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>invalid</b> enum value (defined in <a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00318.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>()</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00318.html#d9d16a24d9f6c3dada73c6b9ff214f5b">lock_read</a>()</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00318.html#c1431c4293e777efd9aab9a95c2a46e1">reader_writer_lock</a>()</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scoped_lock_read</b> (defined in <a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00318.html#6f921f0d7c1812ceb5674418c8b6ccaf">status_t</a> enum name</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00318.html#721eb173e154ab38292273e9266a9b07">try_lock</a>()</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00318.html#595fb23952e3b89426b1f7938dea9b11">try_lock_read</a>()</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00318.html#5113b32689305599b2c36b5831547704">unlock</a>()</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>waiting</b> enum value (defined in <a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>waiting_nonblocking</b> enum value (defined in <a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a>)</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00318.html#5135f64f7b7339017f33d956445edbee">~reader_writer_lock</a>()</td><td><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00115.html b/doc/html/a00115.html
new file mode 100644
index 0000000..3d9f6c6
--- /dev/null
+++ b/doc/html/a00115.html
@@ -0,0 +1,37 @@
+<!DOCTYPE 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::interface5::reader_writer_lock::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00319.html">tbb::interface5::reader_writer_lock::scoped_lock</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>operator delete</b>(void *p) (defined in <a class="el" href="a00319.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00319.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator new</b>(size_t s) (defined in <a class="el" href="a00319.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00319.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reader_writer_lock</b> (defined in <a class="el" href="a00319.html">tbb::interface5::reader_writer_lock::scoped_lock</a>)</td><td><a class="el" href="a00319.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00319.html#cf19f20e082887c1bb0ba6b0911c3583">scoped_lock</a>(reader_writer_lock &lock)</td><td><a class="el" href="a00319.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00319.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a>()</td><td><a class="el" href="a00319.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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
index 78a43a7..a9a041f 100644
--- a/doc/html/a00116.html
+++ b/doc/html/a00116.html
@@ -20,10 +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::interface5::internal::task_base Member List</h1>This is the complete list of members for <a class="el" href="a00312.html">tbb::interface5::internal::task_base</a>, including all inherited members.<p><table>
+<h1>tbb::interface5::reader_writer_lock::scoped_lock_read Member List</h1>This is the complete list of members for <a class="el" href="a00320.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>operator delete</b>(void *p) (defined in <a class="el" href="a00320.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00320.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>operator new</b>(size_t s) (defined in <a class="el" href="a00320.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00320.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reader_writer_lock</b> (defined in <a class="el" href="a00320.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>)</td><td><a class="el" href="a00320.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00320.html#87ab0dc8f7216e6ba0f7acd6aec33064">scoped_lock_read</a>(reader_writer_lock &lock)</td><td><a class="el" href="a00320.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00320.html#bd21c5f3d555d64d1de8658e15bf4966">~scoped_lock_read</a>()</td><td><a class="el" href="a00320.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00117.html b/doc/html/a00117.html
new file mode 100644
index 0000000..7db7b57
--- /dev/null
+++ b/doc/html/a00117.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::recursive_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00322.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="a00322.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00322.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="a00322.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00322.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="a00322.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00322.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00322.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>()</td><td><a class="el" href="a00322.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>native_handle</b>() (defined in <a class="el" href="a00322.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00322.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00322.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a> typedef</td><td><a class="el" href="a00322.html">tbb::recursive_mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>native_handle_type</b> typedef (defined in <a class="el" href="a00322.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00322.html">tbb::recursive_mutex</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00322.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>()</td><td><a class="el" href="a00322.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="a00322.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00322.html">tbb::recursive_mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00322.html#86e719b0afee25704af11ab97694d240">try_lock</a>()</td><td><a class="el" href="a00322.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00322.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>()</td><td><a class="el" href="a00322.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="a00322.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00322.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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
new file mode 100644
index 0000000..7360b9b
--- /dev/null
+++ b/doc/html/a00118.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::recursive_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00323.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00323.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00323.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="a00323.html">tbb::recursive_mutex::scoped_lock</a>)</td><td><a class="el" href="a00323.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00323.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>()</td><td><a class="el" href="a00323.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00323.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>()</td><td><a class="el" href="a00323.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00323.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00323.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00323.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00323.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00323.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>()</td><td><a class="el" href="a00323.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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
index 300283a..2f41f37 100644
--- a/doc/html/a00119.html
+++ b/doc/html/a00119.html
@@ -20,68 +20,26 @@
     <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="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#62247be9a637a814c8e8f4bcfb3a1908">change_group</a>(task_group_context &ctx)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>(task &t)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a>(task &t)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#fe6bf6aaf84e664134fabb6c4f409ea9">enqueue</a>(task &t, priority_t p)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#22c298cd40937a431a06777423f002f6">execute</a>()=0</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#5987123486afca36ddebb9e2a8b7779a">group</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#e1d969a1ccab6796e3b8b2c1a5be33d2">group_priority</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>interface5::internal::task_base</b> (defined in <a class="el" href="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#9ac8d1542d67d9d80121ff986801ac26">set_group_priority</a>(priority_t p)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">set_parent</a>(task *p)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<h1>tbb::interface6::runtime_loader Member List</h1>This is the complete list of members for <a class="el" href="a00324.html">tbb::interface6::runtime_loader</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">ec_bad_arg</a> enum value</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">ec_bad_call</a> enum value</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">ec_bad_lib</a> enum value</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">ec_bad_ver</a> enum value</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">ec_no_lib</a> enum value</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">ec_ok</a> enum value</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a> enum value</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">em_status</a> enum value</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">em_throw</a> enum value</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789">error_code</a> enum name</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> enum name</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#5f3f6f1683386705a6931acae45f0862">load</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#7caa4ff6e44c2348e67f601cc5d97c34">runtime_loader</a>(error_mode mode=em_abort)</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#7ae5330beb48fce0c702c32a5df0094a">runtime_loader</a>(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, error_mode mode=em_abort)</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#78d938ed2e54d38dd38d6609e6c60389">status</a>()</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00324.html#c25fec923a751a3e03f5cbe969f1f0c5">~runtime_loader</a>()</td><td><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00120.html b/doc/html/a00120.html
deleted file mode 100644
index ef1bb92..0000000
--- a/doc/html/a00120.html
+++ /dev/null
@@ -1,88 +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::empty_task Member List</h1>This is the complete list of members for <a class="el" href="a00254.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#62247be9a637a814c8e8f4bcfb3a1908">change_group</a>(task_group_context &ctx)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>(task &t)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a>(task &t)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#fe6bf6aaf84e664134fabb6c4f409ea9">enqueue</a>(task &t, priority_t p)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#5987123486afca36ddebb9e2a8b7779a">group</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#e1d969a1ccab6796e3b8b2c1a5be33d2">group_priority</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>interface5::internal::task_base</b> (defined in <a class="el" href="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00311.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="a00311.html">tbb::task</a>)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#9ac8d1542d67d9d80121ff986801ac26">set_group_priority</a>(priority_t p)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">set_parent</a>(task *p)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00311.html">tbb::task</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00311.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00311.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00121.html b/doc/html/a00121.html
index efe208d..0abc0aa 100644
--- a/doc/html/a00121.html
+++ b/doc/html/a00121.html
@@ -20,18 +20,26 @@
     <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="a00315.html">tbb::task_list</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00315.html#fce446ee13e025969945328f3ff59b95">clear</a>()</td><td><a class="el" href="a00315.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00315.html#f3ac31e092814b90929f81bb30441959">empty</a>() const </td><td><a class="el" href="a00315.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>interface5::internal::task_base</b> (defined in <a class="el" href="a00315.html">tbb::task_list</a>)</td><td><a class="el" href="a00315.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00315.html#5fe85df5ed524418389d34051750347d">pop_front</a>()</td><td><a class="el" href="a00315.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00315.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a>(task &task)</td><td><a class="el" href="a00315.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="a00315.html">tbb::task_list</a>)</td><td><a class="el" href="a00315.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00315.html#416341c2047eaef50417b41eaf7e9de6">task_list</a>()</td><td><a class="el" href="a00315.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00315.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a>()</td><td><a class="el" href="a00315.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::scalable_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00325.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="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.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="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00325.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00325.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="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.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="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>construct</b>(pointer p, Args &&...args) (defined in <a class="el" href="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00325.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00325.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="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00325.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const </td><td><a class="el" href="a00325.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="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>() (defined in <a class="el" href="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.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="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.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="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.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="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.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="a00325.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00325.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00123.html b/doc/html/a00123.html
new file mode 100644
index 0000000..ca11399
--- /dev/null
+++ b/doc/html/a00123.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::scalable_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00326.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="a00326.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00326.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00326.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00326.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00125.html b/doc/html/a00125.html
new file mode 100644
index 0000000..68002b9
--- /dev/null
+++ b/doc/html/a00125.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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="a00331.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="a00331.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00331.html">tbb::spin_mutex</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00331.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00331.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="a00331.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00331.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="a00331.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00331.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00331.html#4f748989e19b6045e3a2d2ee73626a28">lock</a>()</td><td><a class="el" href="a00331.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="a00331.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00331.html">tbb::spin_mutex</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00331.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</a>()</td><td><a class="el" href="a00331.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00331.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</a>()</td><td><a class="el" href="a00331.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00331.html#0e843ee6265f57f27d228ba91e7308ef">unlock</a>()</td><td><a class="el" href="a00331.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00126.html b/doc/html/a00126.html
new file mode 100644
index 0000000..b3d0629
--- /dev/null
+++ b/doc/html/a00126.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00332.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00332.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00332.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00332.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a>()</td><td><a class="el" href="a00332.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00332.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>()</td><td><a class="el" href="a00332.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00332.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a>(spin_mutex &m)</td><td><a class="el" href="a00332.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="a00332.html">tbb::spin_mutex::scoped_lock</a>)</td><td><a class="el" href="a00332.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00332.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00332.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00332.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a>()</td><td><a class="el" href="a00332.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00127.html b/doc/html/a00127.html
new file mode 100644
index 0000000..51f45e0
--- /dev/null
+++ b/doc/html/a00127.html
@@ -0,0 +1,42 @@
+<!DOCTYPE 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_rw_mutex_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00333.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="a00333.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00333.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="a00333.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00333.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="a00333.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00333.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00333.html#4007d6e1523dbc3c2bb7f889ab789a8a">lock</a>()</td><td><a class="el" href="a00333.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00333.html#13f799708ac4ca437a16be202e263e18">lock_read</a>()</td><td><a class="el" href="a00333.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00333.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00333.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00333.html#088bb256be794cc47d3b83791632fdfc">try_lock</a>()</td><td><a class="el" href="a00333.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00333.html#b8667415869013f840d976aa406d385a">try_lock_read</a>()</td><td><a class="el" href="a00333.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00333.html#f9f52ead2098eb5fb12da59d5ae53b55">unlock</a>()</td><td><a class="el" href="a00333.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00333.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00333.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00128.html b/doc/html/a00128.html
index 81613ed..55ac4c9 100644
--- a/doc/html/a00128.html
+++ b/doc/html/a00128.html
@@ -20,19 +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::task_scheduler_init Member List</h1>This is the complete list of members for <a class="el" href="a00316.html">tbb::task_scheduler_init</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00316.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></td><td><a class="el" href="a00316.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00316.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a>()</td><td><a class="el" href="a00316.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00316.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a></td><td><a class="el" href="a00316.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00316.html#d476053cc712e572554823492a5229ce">initialize</a>(int number_of_threads=automatic)</td><td><a class="el" href="a00316.html">tbb::task_scheduler_init</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00316.html#d5ed214a8bb53b0466ed91ff4734b9a3">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td><a class="el" href="a00316.html">tbb::task_scheduler_init</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00316.html#12752282977029f23416642bc03e8b74">is_active</a>() const </td><td><a class="el" href="a00316.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00316.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td><a class="el" href="a00316.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00316.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>()</td><td><a class="el" href="a00316.html">tbb::task_scheduler_init</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00316.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>()</td><td><a class="el" href="a00316.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></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="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00334.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00334.html#c2c2c38a08cb9080e87099fac3e5bc94">downgrade_to_reader</a>()</td><td><a class="el" href="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00334.html#6b5a7c3c67a36b05c4df8410d32627d8">is_writer</a></td><td><a class="el" href="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00334.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">mutex</a></td><td><a class="el" href="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00334.html#61b14d00a78185c9b2d206ebfc379124">release</a>()</td><td><a class="el" href="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00334.html#d6ea60dee5563f702379bf5e51aa8806">scoped_lock</a>()</td><td><a class="el" href="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00334.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00334.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00334.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a>()</td><td><a class="el" href="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00334.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~scoped_lock</a>()</td><td><a class="el" href="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00130.html b/doc/html/a00130.html
index f0a0855..2aefa04 100644
--- a/doc/html/a00130.html
+++ b/doc/html/a00130.html
@@ -20,31 +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< T > Member List</h1>This is the complete list of members for <a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00317.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00317.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00317.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a>()</td><td><a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00317.html#ab228ab9e324ed041c2226e1d717df5f">construct</a>(pointer p, const value_type &value)</td><td><a class="el" href="a00317.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00317.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00317.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00317.html#ef133522bf55f05a605bee0763208281">destroy</a>(pointer p)</td><td><a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00317.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> enum name</td><td><a class="el" href="a00317.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00317.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const </td><td><a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>() (defined in <a class="el" href="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.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="a00317.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00317.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+<h1>tbb::interface5::internal::task_base Member List</h1>This is the complete list of members for <a class="el" href="a00338.html">tbb::interface5::internal::task_base</a>, including all inherited members.<p><table>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00132.html b/doc/html/a00132.html
deleted file mode 100644
index ee3501e..0000000
--- a/doc/html/a00132.html
+++ /dev/null
@@ -1,35 +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::tbb_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00318.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="a00318.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00318.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00318.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00318.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="a00318.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00318.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00133.html b/doc/html/a00133.html
new file mode 100644
index 0000000..84e3739
--- /dev/null
+++ b/doc/html/a00133.html
@@ -0,0 +1,90 @@
+<!DOCTYPE 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="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#62247be9a637a814c8e8f4bcfb3a1908">change_group</a>(task_group_context &ctx)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>(task &t)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a>(task &t)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#fe6bf6aaf84e664134fabb6c4f409ea9">enqueue</a>(task &t, priority_t p)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#22c298cd40937a431a06777423f002f6">execute</a>()=0</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#5987123486afca36ddebb9e2a8b7779a">group</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#e1d969a1ccab6796e3b8b2c1a5be33d2">group_priority</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>interface5::internal::task_base</b> (defined in <a class="el" href="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#9ac8d1542d67d9d80121ff986801ac26">set_group_priority</a>(priority_t p)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">set_parent</a>(task *p)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00134.html b/doc/html/a00134.html
index 8c3578f..ea31f2e 100644
--- a/doc/html/a00134.html
+++ b/doc/html/a00134.html
@@ -20,22 +20,66 @@
     <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="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.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="a00326.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00326.html">tbb::zero_allocator< T, Allocator ></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="a00280.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> typedef</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#1434c79a5138993269d034008bff7329">allocate_continuation</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#23acb0da0afd690da797f9f882027d34">allocate_root</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#62247be9a637a814c8e8f4bcfb3a1908">change_group</a>(task_group_context &ctx)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>()</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>(task &t)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a>(task &t)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#fe6bf6aaf84e664134fabb6c4f409ea9">enqueue</a>(task &t, priority_t p)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#5987123486afca36ddebb9e2a8b7779a">group</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#e1d969a1ccab6796e3b8b2c1a5be33d2">group_priority</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>interface5::internal::task_base</b> (defined in <a class="el" href="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#314e98ee4347ccec83efcb9ee22e8596">parent</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a> enum value</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#ad774f55eaec008ae02b236423209ced">ref_count</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00337.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="a00337.html">tbb::task</a>)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#9ac8d1542d67d9d80121ff986801ac26">set_group_priority</a>(priority_t p)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">set_parent</a>(task *p)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(int count)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a>() const </td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e">state_type</a> enum name</td><td><a class="el" href="a00337.html">tbb::task</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00337.html#98245ee0473f84cb19dbbf8c81134908">~task</a>()</td><td><a class="el" href="a00337.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00135.html b/doc/html/a00135.html
new file mode 100644
index 0000000..ab14bbf
--- /dev/null
+++ b/doc/html/a00135.html
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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_list Member List</h1>This is the complete list of members for <a class="el" href="a00341.html">tbb::task_list</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00341.html#fce446ee13e025969945328f3ff59b95">clear</a>()</td><td><a class="el" href="a00341.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00341.html#f3ac31e092814b90929f81bb30441959">empty</a>() const </td><td><a class="el" href="a00341.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>interface5::internal::task_base</b> (defined in <a class="el" href="a00341.html">tbb::task_list</a>)</td><td><a class="el" href="a00341.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00341.html#5fe85df5ed524418389d34051750347d">pop_front</a>()</td><td><a class="el" href="a00341.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00341.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a>(task &task)</td><td><a class="el" href="a00341.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="a00341.html">tbb::task_list</a>)</td><td><a class="el" href="a00341.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00341.html#416341c2047eaef50417b41eaf7e9de6">task_list</a>()</td><td><a class="el" href="a00341.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00341.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a>()</td><td><a class="el" href="a00341.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00136.html b/doc/html/a00136.html
deleted file mode 100644
index cf60dcf..0000000
--- a/doc/html/a00136.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>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::zero_allocator< void, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00327.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="a00327.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00327.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="a00327.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00327.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="a00327.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00327.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="a00327.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00327.html">tbb::zero_allocator< void, Allocator ></a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00138.html b/doc/html/a00138.html
deleted file mode 100644
index b80dde6..0000000
--- a/doc/html/a00138.html
+++ /dev/null
@@ -1,34 +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::bad_last_alloc Member List</h1>This is the complete list of members for <a class="el" href="a00232.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="a00232.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00232.html">tbb::bad_last_alloc</a></td><td></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>~bad_last_alloc</b>() (defined in <a class="el" href="a00232.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00232.html">tbb::bad_last_alloc</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00139.html b/doc/html/a00139.html
deleted file mode 100644
index 5c917c6..0000000
--- a/doc/html/a00139.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::improper_lock Member List</h1>This is the complete list of members for <a class="el" href="a00264.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="a00264.html">tbb::improper_lock</a>)</td><td><a class="el" href="a00264.html">tbb::improper_lock</a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00140.html b/doc/html/a00140.html
deleted file mode 100644
index cc64dd3..0000000
--- a/doc/html/a00140.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::missing_wait Member List</h1>This is the complete list of members for <a class="el" href="a00272.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="a00272.html">tbb::missing_wait</a>)</td><td><a class="el" href="a00272.html">tbb::missing_wait</a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00141.html b/doc/html/a00141.html
deleted file mode 100644
index 19cbf87..0000000
--- a/doc/html/a00141.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::invalid_multiple_scheduling Member List</h1>This is the complete list of members for <a class="el" href="a00265.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="a00265.html">tbb::invalid_multiple_scheduling</a>)</td><td><a class="el" href="a00265.html">tbb::invalid_multiple_scheduling</a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00142.html b/doc/html/a00142.html
index bcac7fb..17fcd35 100644
--- a/doc/html/a00142.html
+++ b/doc/html/a00142.html
@@ -20,16 +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::tbb_exception Member List</h1>This is the complete list of members for <a class="el" href="a00319.html">tbb::tbb_exception</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00319.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a>()=0</td><td><a class="el" href="a00319.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00319.html#3e3482bf264d4ca4dde046cd9c02c766">move</a>()=0</td><td><a class="el" href="a00319.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00319.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() const =0</td><td><a class="el" href="a00319.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00319.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00319.html">tbb::tbb_exception</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00319.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a>()=0</td><td><a class="el" href="a00319.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00319.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() const =0</td><td><a class="el" href="a00319.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+<h1>tbb::task_scheduler_init Member List</h1>This is the complete list of members for <a class="el" href="a00342.html">tbb::task_scheduler_init</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00342.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></td><td><a class="el" href="a00342.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00342.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a>()</td><td><a class="el" href="a00342.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00342.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a></td><td><a class="el" href="a00342.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00342.html#d476053cc712e572554823492a5229ce">initialize</a>(int number_of_threads=automatic)</td><td><a class="el" href="a00342.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00342.html#d5ed214a8bb53b0466ed91ff4734b9a3">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td><a class="el" href="a00342.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00342.html#12752282977029f23416642bc03e8b74">is_active</a>() const </td><td><a class="el" href="a00342.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00342.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td><a class="el" href="a00342.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00342.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>()</td><td><a class="el" href="a00342.html">tbb::task_scheduler_init</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00342.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>()</td><td><a class="el" href="a00342.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00143.html b/doc/html/a00143.html
deleted file mode 100644
index 4ef88eb..0000000
--- a/doc/html/a00143.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>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::captured_exception Member List</h1>This is the complete list of members for <a class="el" href="a00240.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="a00240.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00240.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="a00240.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00240.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="a00240.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00240.html">tbb::captured_exception</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00240.html#93d875d3555502ff6f18513525de204c">destroy</a>()</td><td><a class="el" href="a00240.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00240.html#837a50b8f6a800bda225c39d1699643f">move</a>()</td><td><a class="el" href="a00240.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00240.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const </td><td><a class="el" href="a00240.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00319.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00319.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="a00240.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00240.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="a00240.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00240.html">tbb::captured_exception</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00240.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a>()</td><td><a class="el" href="a00240.html">tbb::captured_exception</a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00240.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const </td><td><a class="el" href="a00240.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="a00240.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00240.html">tbb::captured_exception</a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00144.html b/doc/html/a00144.html
index 69ac6fd..d5e415c 100644
--- a/doc/html/a00144.html
+++ b/doc/html/a00144.html
@@ -20,23 +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::movable_exception< ExceptionData > Member List</h1>This is the complete list of members for <a class="el" href="a00273.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="a00273.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00273.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="a00273.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00273.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00273.html#7a46873119d9f85a7b0009c13e41a258">destroy</a>()</td><td><a class="el" href="a00273.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="a00273.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00273.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="a00273.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00273.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00273.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a>()</td><td><a class="el" href="a00273.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00273.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td><td><a class="el" href="a00273.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [protected]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00273.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>() const </td><td><a class="el" href="a00273.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00319.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00319.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="a00273.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00273.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00273.html#17cffba35811c92b7e65d63506b69602">throw_self</a>()</td><td><a class="el" href="a00273.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00273.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a>() const </td><td><a class="el" href="a00273.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="a00273.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00273.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::tbb_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00343.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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00343.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00343.html">tbb::tbb_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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00343.html#15c431ccb5ccc5a30e5d496edad4c143">construct</a>(pointer p, Args &&...args)</td><td><a class="el" href="a00343.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00343.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00343.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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00343.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> enum name</td><td><a class="el" href="a00343.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00343.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const </td><td><a class="el" href="a00343.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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>() (defined in <a class="el" href="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.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="a00343.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00343.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00145.html b/doc/html/a00145.html
deleted file mode 100644
index 2a193ac..0000000
--- a/doc/html/a00145.html
+++ /dev/null
@@ -1,37 +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::tbb_exception_ptr Member List</h1>This is the complete list of members for <a class="el" href="a00320.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="a00320.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00320.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="a00320.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00320.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00320.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a>(captured_exception &src)</td><td><a class="el" href="a00320.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00320.html#921875bbacd2c8a5f324c7da7a415262">destroy</a>()</td><td><a class="el" href="a00320.html">tbb::internal::tbb_exception_ptr</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00320.html#292832fd5c523e3d8081a22247840a1d">throw_self</a>()</td><td><a class="el" href="a00320.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00146.html b/doc/html/a00146.html
new file mode 100644
index 0000000..33b67d9
--- /dev/null
+++ b/doc/html/a00146.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::tbb_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00344.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="a00344.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00344.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00344.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00344.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="a00344.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00344.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00148.html b/doc/html/a00148.html
new file mode 100644
index 0000000..8749dc9
--- /dev/null
+++ b/doc/html/a00148.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::zero_allocator< T, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.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="a00353.html">tbb::zero_allocator< T, Allocator ></a>)</td><td><a class="el" href="a00353.html">tbb::zero_allocator< T, Allocator ></a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00150.html b/doc/html/a00150.html
index e038e06..53d3c66 100644
--- a/doc/html/a00150.html
+++ b/doc/html/a00150.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::internal::atomic_backoff Member List</h1>This is the complete list of members for <a class="el" href="a00230.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="a00230.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00230.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="a00230.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00230.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00230.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>()</td><td><a class="el" href="a00230.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="a00230.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00230.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+<h1>tbb::zero_allocator< void, Allocator > Member List</h1>This is the complete list of members for <a class="el" href="a00354.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="a00354.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00354.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="a00354.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00354.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="a00354.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00354.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="a00354.html">tbb::zero_allocator< void, Allocator ></a>)</td><td><a class="el" href="a00354.html">tbb::zero_allocator< void, Allocator ></a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00152.html b/doc/html/a00152.html
new file mode 100644
index 0000000..fb2070e
--- /dev/null
+++ b/doc/html/a00152.html
@@ -0,0 +1,34 @@
+<!DOCTYPE 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::bad_last_alloc Member List</h1>This is the complete list of members for <a class="el" href="a00258.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="a00258.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00258.html">tbb::bad_last_alloc</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~bad_last_alloc</b>() (defined in <a class="el" href="a00258.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00258.html">tbb::bad_last_alloc</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00153.html b/doc/html/a00153.html
new file mode 100644
index 0000000..f5f1d14
--- /dev/null
+++ b/doc/html/a00153.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<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::improper_lock Member List</h1>This is the complete list of members for <a class="el" href="a00290.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="a00290.html">tbb::improper_lock</a>)</td><td><a class="el" href="a00290.html">tbb::improper_lock</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00154.html b/doc/html/a00154.html
index 83999d8..a180181 100644
--- a/doc/html/a00154.html
+++ b/doc/html/a00154.html
@@ -20,12 +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::machine_load_store_seq_cst< T, 8 > Member List</h1>This is the complete list of members for <a class="el" href="a00268.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>load</b>(const volatile T &location) (defined in <a class="el" href="a00268.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a>)</td><td><a class="el" href="a00268.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a></td><td><code> [inline, static]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>store</b>(volatile T &location, T value) (defined in <a class="el" href="a00268.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a>)</td><td><a class="el" href="a00268.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a></td><td><code> [inline, static]</code></td></tr>
+<h1>tbb::user_abort Member List</h1>This is the complete list of members for <a class="el" href="a00351.html">tbb::user_abort</a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>what</b>() const  (defined in <a class="el" href="a00351.html">tbb::user_abort</a>)</td><td><a class="el" href="a00351.html">tbb::user_abort</a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00155.html b/doc/html/a00155.html
index c9b6f5b..16a42a3 100644
--- a/doc/html/a00155.html
+++ b/doc/html/a00155.html
@@ -20,12 +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::machine_load_store_relaxed< T, S > Member List</h1>This is the complete list of members for <a class="el" href="a00267.html">tbb::internal::machine_load_store_relaxed< T, S ></a>, including all inherited members.<p><table>
-  <tr bgcolor="#f0f0f0"><td><b>load</b>(const volatile T &location) (defined in <a class="el" href="a00267.html">tbb::internal::machine_load_store_relaxed< T, S ></a>)</td><td><a class="el" href="a00267.html">tbb::internal::machine_load_store_relaxed< T, S ></a></td><td><code> [inline, static]</code></td></tr>
-  <tr bgcolor="#f0f0f0"><td><b>store</b>(volatile T &location, T value) (defined in <a class="el" href="a00267.html">tbb::internal::machine_load_store_relaxed< T, S ></a>)</td><td><a class="el" href="a00267.html">tbb::internal::machine_load_store_relaxed< T, S ></a></td><td><code> [inline, static]</code></td></tr>
+<h1>tbb::missing_wait Member List</h1>This is the complete list of members for <a class="el" href="a00298.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="a00298.html">tbb::missing_wait</a>)</td><td><a class="el" href="a00298.html">tbb::missing_wait</a></td><td></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00156.html b/doc/html/a00156.html
new file mode 100644
index 0000000..2de2c80
--- /dev/null
+++ b/doc/html/a00156.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<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::invalid_multiple_scheduling Member List</h1>This is the complete list of members for <a class="el" href="a00291.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="a00291.html">tbb::invalid_multiple_scheduling</a>)</td><td><a class="el" href="a00291.html">tbb::invalid_multiple_scheduling</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00157.html b/doc/html/a00157.html
new file mode 100644
index 0000000..2376ebd
--- /dev/null
+++ b/doc/html/a00157.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::tbb_exception Member List</h1>This is the complete list of members for <a class="el" href="a00345.html">tbb::tbb_exception</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00345.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a>()=0</td><td><a class="el" href="a00345.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00345.html#3e3482bf264d4ca4dde046cd9c02c766">move</a>()=0</td><td><a class="el" href="a00345.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00345.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() const =0</td><td><a class="el" href="a00345.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00345.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00345.html">tbb::tbb_exception</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00345.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a>()=0</td><td><a class="el" href="a00345.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00345.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() const =0</td><td><a class="el" href="a00345.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00158.html b/doc/html/a00158.html
new file mode 100644
index 0000000..7799031
--- /dev/null
+++ b/doc/html/a00158.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::captured_exception Member List</h1>This is the complete list of members for <a class="el" href="a00266.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="a00266.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00266.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="a00266.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00266.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="a00266.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00266.html">tbb::captured_exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00266.html#93d875d3555502ff6f18513525de204c">destroy</a>()</td><td><a class="el" href="a00266.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00266.html#837a50b8f6a800bda225c39d1699643f">move</a>()</td><td><a class="el" href="a00266.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00266.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const </td><td><a class="el" href="a00266.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00345.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00345.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="a00266.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00266.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="a00266.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00266.html">tbb::captured_exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00266.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a>()</td><td><a class="el" href="a00266.html">tbb::captured_exception</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00266.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const </td><td><a class="el" href="a00266.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="a00266.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00266.html">tbb::captured_exception</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00159.html b/doc/html/a00159.html
new file mode 100644
index 0000000..e9cf7cf
--- /dev/null
+++ b/doc/html/a00159.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::movable_exception< ExceptionData > Member List</h1>This is the complete list of members for <a class="el" href="a00299.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="a00299.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00299.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="a00299.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00299.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00299.html#7a46873119d9f85a7b0009c13e41a258">destroy</a>()</td><td><a class="el" href="a00299.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="a00299.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00299.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="a00299.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00299.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00299.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a>()</td><td><a class="el" href="a00299.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00299.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td><td><a class="el" href="a00299.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00299.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>() const </td><td><a class="el" href="a00299.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00345.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a>(void *p)</td><td><a class="el" href="a00345.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="a00299.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00299.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00299.html#17cffba35811c92b7e65d63506b69602">throw_self</a>()</td><td><a class="el" href="a00299.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00299.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a>() const </td><td><a class="el" href="a00299.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="a00299.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00299.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00160.html b/doc/html/a00160.html
new file mode 100644
index 0000000..689f460
--- /dev/null
+++ b/doc/html/a00160.html
@@ -0,0 +1,37 @@
+<!DOCTYPE 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::tbb_exception_ptr Member List</h1>This is the complete list of members for <a class="el" href="a00346.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="a00346.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00346.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="a00346.html">tbb::internal::tbb_exception_ptr</a>)</td><td><a class="el" href="a00346.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00346.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a>(captured_exception &src)</td><td><a class="el" href="a00346.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00346.html#921875bbacd2c8a5f324c7da7a415262">destroy</a>()</td><td><a class="el" href="a00346.html">tbb::internal::tbb_exception_ptr</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00346.html#292832fd5c523e3d8081a22247840a1d">throw_self</a>()</td><td><a class="el" href="a00346.html">tbb::internal::tbb_exception_ptr</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00164.html b/doc/html/a00164.html
deleted file mode 100644
index 65afe3d..0000000
--- a/doc/html/a00164.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="a00325.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="a00325.html">tbb::internal::work_around_alignment_bug< Size, T ></a>)</td><td><a class="el" href="a00325.html">tbb::internal::work_around_alignment_bug< Size, T ></a></td><td><code> [static]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00165.html b/doc/html/a00165.html
new file mode 100644
index 0000000..85205fc
--- /dev/null
+++ b/doc/html/a00165.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::atomic_backoff Member List</h1>This is the complete list of members for <a class="el" href="a00256.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="a00256.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00256.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="a00256.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00256.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00256.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>()</td><td><a class="el" href="a00256.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="a00256.html">tbb::internal::atomic_backoff</a>)</td><td><a class="el" href="a00256.html">tbb::internal::atomic_backoff</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00168.html b/doc/html/a00168.html
deleted file mode 100644
index 4f4d44d..0000000
--- a/doc/html/a00168.html
+++ /dev/null
@@ -1,35 +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::tick_count Member List</h1>This is the complete list of members for <a class="el" href="a00323.html">tbb::tick_count</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00323.html#fb7f78ca61cf28398645ace66e284473">now</a>()</td><td><a class="el" href="a00323.html">tbb::tick_count</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00323.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00323.html">tbb::tick_count</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00323.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a>()</td><td><a class="el" href="a00323.html">tbb::tick_count</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00169.html b/doc/html/a00169.html
index 3d6774f..ebb7c32 100644
--- a/doc/html/a00169.html
+++ b/doc/html/a00169.html
@@ -20,19 +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::tick_count::interval_t Member List</h1>This is the complete list of members for <a class="el" href="a00324.html">tbb::tick_count::interval_t</a>, including all inherited members.<p><table>
-  <tr class="memlist"><td><a class="el" href="a00324.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>()</td><td><a class="el" href="a00324.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00324.html#1a21a428e00cced2e6a49e0f5f2258bf">interval_t</a>(double sec)</td><td><a class="el" href="a00324.html">tbb::tick_count::interval_t</a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00324.html#5871ead1ca230efbe52a5008470e6428">operator+</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00324.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00324.html#cd9814947902e26463a69a111530f81b">operator+=</a>(const interval_t &i)</td><td><a class="el" href="a00324.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00324.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00324.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00324.html#fa509691e1d689830931e36edd274f76">operator-</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00324.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00324.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>(const interval_t &i)</td><td><a class="el" href="a00324.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="a00324.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a>() const </td><td><a class="el" href="a00324.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="a00324.html">tbb::tick_count::interval_t</a>)</td><td><a class="el" href="a00324.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+<h1>tbb::internal::machine_load_store_seq_cst< T, 8 > Member List</h1>This is the complete list of members for <a class="el" href="a00294.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>load</b>(const volatile T &location) (defined in <a class="el" href="a00294.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a>)</td><td><a class="el" href="a00294.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a></td><td><code> [inline, static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>store</b>(volatile T &location, T value) (defined in <a class="el" href="a00294.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a>)</td><td><a class="el" href="a00294.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a></td><td><code> [inline, static]</code></td></tr>
 </table><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00170.html b/doc/html/a00170.html
new file mode 100644
index 0000000..cf23eda
--- /dev/null
+++ b/doc/html/a00170.html
@@ -0,0 +1,34 @@
+<!DOCTYPE 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::machine_load_store_relaxed< T, S > Member List</h1>This is the complete list of members for <a class="el" href="a00293.html">tbb::internal::machine_load_store_relaxed< T, S ></a>, including all inherited members.<p><table>
+  <tr bgcolor="#f0f0f0"><td><b>load</b>(const volatile T &location) (defined in <a class="el" href="a00293.html">tbb::internal::machine_load_store_relaxed< T, S ></a>)</td><td><a class="el" href="a00293.html">tbb::internal::machine_load_store_relaxed< T, S ></a></td><td><code> [inline, static]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>store</b>(volatile T &location, T value) (defined in <a class="el" href="a00293.html">tbb::internal::machine_load_store_relaxed< T, S ></a>)</td><td><a class="el" href="a00293.html">tbb::internal::machine_load_store_relaxed< T, S ></a></td><td><code> [inline, static]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00179.html b/doc/html/a00179.html
new file mode 100644
index 0000000..36a0907
--- /dev/null
+++ b/doc/html/a00179.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<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="a00352.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="a00352.html">tbb::internal::work_around_alignment_bug< Size, T ></a>)</td><td><a class="el" href="a00352.html">tbb::internal::work_around_alignment_bug< Size, T ></a></td><td><code> [static]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00183.html b/doc/html/a00183.html
new file mode 100644
index 0000000..ee5ff29
--- /dev/null
+++ b/doc/html/a00183.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::tick_count Member List</h1>This is the complete list of members for <a class="el" href="a00349.html">tbb::tick_count</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00349.html#fb7f78ca61cf28398645ace66e284473">now</a>()</td><td><a class="el" href="a00349.html">tbb::tick_count</a></td><td><code> [inline, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00349.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00349.html">tbb::tick_count</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00349.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a>()</td><td><a class="el" href="a00349.html">tbb::tick_count</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00184.html b/doc/html/a00184.html
new file mode 100644
index 0000000..e402627
--- /dev/null
+++ b/doc/html/a00184.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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::tick_count::interval_t Member List</h1>This is the complete list of members for <a class="el" href="a00350.html">tbb::tick_count::interval_t</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="a00350.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>()</td><td><a class="el" href="a00350.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00350.html#1a21a428e00cced2e6a49e0f5f2258bf">interval_t</a>(double sec)</td><td><a class="el" href="a00350.html">tbb::tick_count::interval_t</a></td><td><code> [inline, explicit]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00350.html#5871ead1ca230efbe52a5008470e6428">operator+</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00350.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00350.html#cd9814947902e26463a69a111530f81b">operator+=</a>(const interval_t &i)</td><td><a class="el" href="a00350.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00350.html#09dde78a4100800c11bb883d6204b586">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00350.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00350.html#fa509691e1d689830931e36edd274f76">operator-</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00350.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00350.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>(const interval_t &i)</td><td><a class="el" href="a00350.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="a00350.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a>() const </td><td><a class="el" href="a00350.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="a00350.html">tbb::tick_count::interval_t</a>)</td><td><a class="el" href="a00350.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00225.html b/doc/html/a00225.html
deleted file mode 100644
index 74166b2..0000000
--- a/doc/html/a00225.html
+++ /dev/null
@@ -1,64 +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="a00383.html">tbb</a>::<a class="el" href="a00225.html">affinity_partitioner</a></div>
-<h1>tbb::affinity_partitioner Class Reference</h1><!-- doxytag: class="tbb::affinity_partitioner" --><!-- doxytag: inherits="tbb::internal::affinity_partitioner_base_v3" -->An affinity partitioner.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00531.html">partitioner.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::affinity_partitioner:
-<p><center><img src="a00225.png" usemap="#tbb::affinity_partitioner_map" border="0" alt=""></center>
-<map name="tbb::affinity_partitioner_map">
-<area href="a00226.html" alt="tbb::internal::affinity_partitioner_base_v3" shape="rect" coords="0,0,240,24">
-</map>
-<a href="a00090.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5f730f70d21df405adaebfc2018f59cd"></a><!-- doxytag: member="tbb::affinity_partitioner::serial::interface6::start_for" ref="5f730f70d21df405adaebfc2018f59cd" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>serial::interface6::start_for</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a4cd0ffed4fad0d9af2c5efdaf586a8"></a><!-- doxytag: member="tbb::affinity_partitioner::interface6::internal::start_for" ref="8a4cd0ffed4fad0d9af2c5efdaf586a8" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>interface6::internal::start_for</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="86f0750233dd6c83b65fb684338fd09f"></a><!-- doxytag: member="tbb::affinity_partitioner::interface6::internal::start_reduce" ref="86f0750233dd6c83b65fb684338fd09f" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>interface6::internal::start_reduce</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>
-
-</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="a00531.html">partitioner.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00225.png b/doc/html/a00225.png
deleted file mode 100644
index 31d2cc3..0000000
Binary files a/doc/html/a00225.png and /dev/null differ
diff --git a/doc/html/a00226.html b/doc/html/a00226.html
deleted file mode 100644
index 07b5814..0000000
--- a/doc/html/a00226.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::affinity_partitioner_base_v3 Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<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="a00383.html">tbb</a>::<b>internal</b>::<a class="el" href="a00226.html">affinity_partitioner_base_v3</a></div>
-<h1>tbb::internal::affinity_partitioner_base_v3 Class Reference</h1><!-- doxytag: class="tbb::internal::affinity_partitioner_base_v3" -->Defines entry point for affinity partitioner into tbb run-time library.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00531.html">partitioner.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::internal::affinity_partitioner_base_v3:
-<p><center><img src="a00226.png" usemap="#tbb::internal::affinity_partitioner_base_v3_map" border="0" alt=""></center>
-<map name="tbb::internal::affinity_partitioner_base_v3_map">
-<area href="a00225.html" alt="tbb::affinity_partitioner" shape="rect" coords="0,56,240,80">
-</map>
-<a href="a00085.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa554f840d8ef010ff2650bac032ec01"></a><!-- doxytag: member="tbb::internal::affinity_partitioner_base_v3::tbb::affinity_partitioner" ref="fa554f840d8ef010ff2650bac032ec01" args="" -->
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#fa554f840d8ef010ff2650bac032ec01">tbb::affinity_partitioner</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c6d1d1f136cb6105d06ddbcf67107575"></a><!-- doxytag: member="tbb::internal::affinity_partitioner_base_v3::tbb::interface6::internal::affinity_partition_type" ref="c6d1d1f136cb6105d06ddbcf67107575" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>tbb::interface6::internal::affinity_partition_type</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Defines entry point for affinity partitioner into tbb run-time library. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00531.html">partitioner.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00227.html b/doc/html/a00227.html
deleted file mode 100644
index 406807c..0000000
--- a/doc/html/a00227.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="a00383.html">tbb</a>::<a class="el" href="a00227.html">aligned_space</a></div>
-<h1>tbb::aligned_space< T, N > Class Template Reference<br>
-<small>
-[<a class="el" href="a00397.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="a00401.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="a00227.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="a00227.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="a00401.html">aligned_space.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00228.html b/doc/html/a00228.html
deleted file mode 100644
index dd91709..0000000
--- a/doc/html/a00228.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="a00383.html">tbb</a>::<a class="el" href="a00228.html">atomic</a></div>
-<h1>tbb::atomic< T > Struct Template Reference<br>
-<small>
-[<a class="el" href="a00398.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="a00403.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="a00228.html">atomic</a>< T > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00228.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="a00403.html">atomic.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00229.html b/doc/html/a00229.html
deleted file mode 100644
index 279fa06..0000000
--- a/doc/html/a00229.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="a00383.html">tbb</a>::<a class="el" href="a00229.html">atomic< void * ></a></div>
-<h1>tbb::atomic< void * > Struct Template Reference</h1><!-- doxytag: class="tbb::atomic< void * >" -->Specialization for <a class="el" href="a00229.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00403.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="a00228.html">atomic</a>< void * > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00228.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="a00229.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="a00403.html">atomic.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00230.html b/doc/html/a00230.html
deleted file mode 100644
index d491137..0000000
--- a/doc/html/a00230.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="a00383.html">tbb</a>::<b>internal</b>::<a class="el" href="a00230.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="a00594.html">tbb_machine.h</a>></code>
-<p>
-<a href="a00150.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="a00230.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="a00594.html">tbb_machine.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00231.html b/doc/html/a00231.html
deleted file mode 100644
index ad994ed..0000000
--- a/doc/html/a00231.html
+++ /dev/null
@@ -1,64 +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::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>
-<!-- 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="a00383.html">tbb</a>::<a class="el" href="a00231.html">auto_partitioner</a></div>
-<h1>tbb::auto_partitioner Class Reference<br>
-<small>
-[<a class="el" href="a00395.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="a00531.html">partitioner.h</a>></code>
-<p>
-<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>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5f730f70d21df405adaebfc2018f59cd"></a><!-- doxytag: member="tbb::auto_partitioner::serial::interface6::start_for" ref="5f730f70d21df405adaebfc2018f59cd" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>serial::interface6::start_for</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a4cd0ffed4fad0d9af2c5efdaf586a8"></a><!-- doxytag: member="tbb::auto_partitioner::interface6::internal::start_for" ref="8a4cd0ffed4fad0d9af2c5efdaf586a8" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>interface6::internal::start_for</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="86f0750233dd6c83b65fb684338fd09f"></a><!-- doxytag: member="tbb::auto_partitioner::interface6::internal::start_reduce" ref="86f0750233dd6c83b65fb684338fd09f" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>interface6::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="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-An auto partitioner. 
-<p>
-The range is initial divided into several large chunks. Chunks are further subdivided into smaller pieces if demand detected and they are divisible. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00531.html">partitioner.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00232.html
deleted file mode 100644
index 837ad06..0000000
--- a/doc/html/a00232.html
+++ /dev/null
@@ -1,50 +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::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>
-<!-- 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="a00383.html">tbb</a>::<a class="el" href="a00232.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="a00593.html">tbb_exception.h</a>></code>
-<p>
-<a href="a00138.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="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>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Exception for concurrent containers. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00593.html">tbb_exception.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00233.html b/doc/html/a00233.html
deleted file mode 100644
index 0d961f0..0000000
--- a/doc/html/a00233.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::blocked_range< Value > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<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="a00383.html">tbb</a>::<a class="el" href="a00233.html">blocked_range</a></div>
-<h1>tbb::blocked_range< Value > Class Template Reference<br>
-<small>
-[<a class="el" href="a00395.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="a00412.html">blocked_range.h</a>></code>
-<p>
-<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="a00233.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="a00233.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="a00233.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="a00233.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00233.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="a00233.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.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="a00233.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.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="a00233.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.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="a00233.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The grain size for this range. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8f4f02f530eb3f2e7ea26e06f76aef9d"></a><!-- doxytag: member="tbb::blocked_range::empty" ref="8f4f02f530eb3f2e7ea26e06f76aef9d" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.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="a00233.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="a00233.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a> (<a class="el" href="a00233.html">blocked_range</a> &r, <a class="el" href="a00309.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>
-
-</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="a00233.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00233.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="a00233.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="a00233.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00233.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="a00233.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00233.html">blocked_range</a>           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00233.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="a00309.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="a00233.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00233.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="a00233.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="a00233.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00233.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="a00233.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="el" href="a00233.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">
-
-<p>
-Size of the range. 
-<p>
-Unspecified if <a class="el" href="a00233.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00233.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="a00412.html">blocked_range.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00234.html b/doc/html/a00234.html
deleted file mode 100644
index 7cea8ee..0000000
--- a/doc/html/a00234.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>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>
-<!-- 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="a00383.html">tbb</a>::<a class="el" href="a00234.html">blocked_range2d</a></div>
-<h1>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference<br>
-<small>
-[<a class="el" href="a00395.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="a00413.html">blocked_range2d.h</a>></code>
-<p>
-<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 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="a00233.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteration 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="a00233.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="a00233.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00233.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="a00234.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="a00234.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="a00234.html">blocked_range2d</a> &r, <a class="el" href="a00309.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="a00233.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#f496e7348a82652fba581203477cc07c">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="392a46759af2c884957115771affa7f4"></a><!-- doxytag: member="tbb::blocked_range2d::cols" ref="392a46759af2c884957115771affa7f4" args="() const " -->
-const <a class="el" href="a00233.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.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 RowValue, typename ColValue = RowValue><br>
- class tbb::blocked_range2d< RowValue, ColValue ></h3>
-
-A 2-dimensional range that models the Range concept. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00413.html">blocked_range2d.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00235.html b/doc/html/a00235.html
deleted file mode 100644
index 06958fb..0000000
--- a/doc/html/a00235.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>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>
-<!-- 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="a00383.html">tbb</a>::<a class="el" href="a00235.html">blocked_range3d</a></div>
-<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference<br>
-<small>
-[<a class="el" href="a00395.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="a00414.html">blocked_range3d.h</a>></code>
-<p>
-<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="b8ebf17a552ba47825e9b3887855b719"></a><!-- doxytag: member="tbb::blocked_range3d::page_range_type" ref="b8ebf17a552ba47825e9b3887855b719" args="" -->
-typedef <a class="el" href="a00233.html">blocked_range</a>< PageValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteration 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="a00233.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="a00233.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="a00233.html#f5707bffea38eee5c9680f37358afb8e">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00233.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00233.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="a00235.html#356860e1c977d91711e8216bd55c0b25">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="39d69191721c488e737ae5d9c5336b9c"></a><!-- doxytag: member="tbb::blocked_range3d::is_divisible" ref="39d69191721c488e737ae5d9c5336b9c" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#39d69191721c488e737ae5d9c5336b9c">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="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="a00235.html">blocked_range3d</a> &r, <a class="el" href="a00309.html">split</a>)</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="a00233.html">page_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.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="a00233.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.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="a00233.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.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. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00414.html">blocked_range3d.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00236.html b/doc/html/a00236.html
deleted file mode 100644
index 3bc8c2b..0000000
--- a/doc/html/a00236.html
+++ /dev/null
@@ -1,89 +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::flow::interface6::broadcast_node< 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>
-<!-- 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="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00236.html">broadcast_node</a></div>
-<h1>tbb::flow::interface6::broadcast_node< T > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::broadcast_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node,tbb::flow::interface6::receiver,tbb::flow::interface6::sender" -->Forwards messages of type T to all successors.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00468.html">flow_graph.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::flow::interface6::broadcast_node< T >:
-<p><center><img src="a00236.png" usemap="#tbb::flow::interface6::broadcast_node< T >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::broadcast_node< T >_map">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,249,24">
-<area href="a00295.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="259,0,508,24">
-<area href="a00301.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="518,0,767,24">
-</map>
-<a href="a00057.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="43c775d80e98cc601de69764983319f9"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::input_type" ref="43c775d80e98cc601de69764983319f9" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#43c775d80e98cc601de69764983319f9">input_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8fd8d3075823e08b879be46c1215ab0f"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::output_type" ref="8fd8d3075823e08b879be46c1215ab0f" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#8fd8d3075823e08b879be46c1215ab0f">output_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0e2ad9a121cb286aa0d0142fef33c646"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::predecessor_type" ref="0e2ad9a121cb286aa0d0142fef33c646" args="" -->
-typedef <a class="el" href="a00301.html">sender</a>< <a class="el" href="a00236.html#43c775d80e98cc601de69764983319f9">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#0e2ad9a121cb286aa0d0142fef33c646">predecessor_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cc6a0eb1c4ee65465770628d8366f055"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::successor_type" ref="cc6a0eb1c4ee65465770628d8366f055" args="" -->
-typedef <a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00236.html#8fd8d3075823e08b879be46c1215ab0f">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#cc6a0eb1c4ee65465770628d8366f055">successor_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <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="e446eb80aa9ac9bc1ab8f9c0ffc582cd"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::broadcast_node" ref="e446eb80aa9ac9bc1ab8f9c0ffc582cd" args="(const broadcast_node &)" -->
- </td><td class="memItemRight" valign="bottom"><b>broadcast_node</b> (const <a class="el" href="a00236.html">broadcast_node</a> &)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fd0324c9ddb51fe6f95b3d015d338941"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::register_successor" ref="fd0324c9ddb51fe6f95b3d015d338941" args="(receiver< T > &r)" -->
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#fd0324c9ddb51fe6f95b3d015d338941">register_successor</a> (<a class="el" href="a00295.html">receiver</a>< T > &r)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Adds a successor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="366efcc046ec08a104281109801ae629"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::remove_successor" ref="366efcc046ec08a104281109801ae629" args="(receiver< T > &r)" -->
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#366efcc046ec08a104281109801ae629">remove_successor</a> (<a class="el" href="a00295.html">receiver</a>< T > &r)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes s as a successor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="29eb768c10b377880bbf83d31ee49acf"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::try_put" ref="29eb768c10b377880bbf83d31ee49acf" args="(const T &t)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#29eb768c10b377880bbf83d31ee49acf">try_put</a> (const T &t)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- class tbb::flow::interface6::broadcast_node< T ></h3>
-
-Forwards messages of type T to all successors. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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
deleted file mode 100644
index cfd40a8..0000000
--- a/doc/html/a00237.html
+++ /dev/null
@@ -1,411 +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::flow::interface6::buffer_node< 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>
-<!-- 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="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00237.html">buffer_node</a></div>
-<h1>tbb::flow::interface6::buffer_node< T, A > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::buffer_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node,tbb::flow::interface6::receiver,tbb::flow::interface6::sender" -->Forwards messages in arbitrary order.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00468.html">flow_graph.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::flow::interface6::buffer_node< T, A >:
-<p><center><img src="a00237.png" usemap="#tbb::flow::interface6::buffer_node< T, A >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::buffer_node< T, A >_map">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,352,24">
-<area href="a00295.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="362,0,714,24">
-<area href="a00301.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="724,0,1076,24">
-<area href="a00286.html" alt="tbb::flow::interface6::priority_queue_node< T, Compare, A >" shape="rect" coords="181,112,533,136">
-<area href="a00287.html" alt="tbb::flow::interface6::queue_node< T, A >" shape="rect" coords="543,112,895,136">
-<area href="a00302.html" alt="tbb::flow::interface6::sequencer_node< T, A >" shape="rect" coords="543,168,895,192">
-</map>
-<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 Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="334efb81b56a2f2b3ae08a16e8d65620"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::input_type" ref="334efb81b56a2f2b3ae08a16e8d65620" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#334efb81b56a2f2b3ae08a16e8d65620">input_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="089520db81f6a1551dc94c01efbdd7be"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::output_type" ref="089520db81f6a1551dc94c01efbdd7be" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#089520db81f6a1551dc94c01efbdd7be">output_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5fb0ad03a822ca0fc34ad5d56a4093a2"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::predecessor_type" ref="5fb0ad03a822ca0fc34ad5d56a4093a2" args="" -->
-typedef <a class="el" href="a00301.html">sender</a>< <a class="el" href="a00237.html#334efb81b56a2f2b3ae08a16e8d65620">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#5fb0ad03a822ca0fc34ad5d56a4093a2">predecessor_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="66f7eda69b75e08f50726e50a11429cd"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::successor_type" ref="66f7eda69b75e08f50726e50a11429cd" args="" -->
-typedef <a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00237.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#66f7eda69b75e08f50726e50a11429cd">successor_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="17ee32d233db52b86256480d5f048e16"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::my_class" ref="17ee32d233db52b86256480d5f048e16" args="" -->
-typedef <a class="el" href="a00237.html">buffer_node</a>< T, A > </td><td class="memItemRight" valign="bottom"><b>my_class</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="5fe4b79f780586ff66e002ce32a5c60d"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::buffer_node" ref="5fe4b79f780586ff66e002ce32a5c60d" args="(graph &g)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a> (<a class="el" href="a00262.html">graph</a> &g)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="03ad7b85a8341437f584af06ad050cdc"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::buffer_node" ref="03ad7b85a8341437f584af06ad050cdc" args="(const buffer_node &src)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#03ad7b85a8341437f584af06ad050cdc">buffer_node</a> (const <a class="el" href="a00237.html">buffer_node</a> &src)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#f8bf4944ede4fc106423d67715beb695">register_successor</a> (<a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00237.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> > &r)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Adds a new successor.  <a href="#f8bf4944ede4fc106423d67715beb695"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a> (<a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00237.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> > &r)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor.  <a href="#2074da0e39b9477c32897d6e5786196f"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#aeb8aec46ca99ca022356a792c46735e">try_get</a> (T &v)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the <a class="el" href="a00237.html">buffer_node</a>.  <a href="#aeb8aec46ca99ca022356a792c46735e"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a> (T &v)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item.  <a href="#1cc889bb6c38bcb81757d0ebbc3a5e64"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release a reserved item.  <a href="#2c8e8f2f5f4ff5be27136cc1184a3c3e"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Consumes a reserved item.  <a href="#8ef07c434eb763d947a7b4e80c086a49"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#2b02fe332e704bbe14f297802298b63a">try_put</a> (const T &t)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Receive an item.  <a href="#2b02fe332e704bbe14f297802298b63a"></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="3bdeda814bba6d687b62449e8d7b8001"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::size_type" ref="3bdeda814bba6d687b62449e8d7b8001" 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="5da41039fc224257fc16df21ea78351c"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::my_handler" ref="5da41039fc224257fc16df21ea78351c" args="" -->
-typedef internal::aggregating_functor<<br>
- <a class="el" href="a00237.html">my_class</a>, buffer_operation > </td><td class="memItemRight" valign="bottom"><b>my_handler</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579ba61e9d48b022a45d302fb7cc2e99587"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::reg_succ" ref="27ef87d052ece9366a56e5dfd8017579ba61e9d48b022a45d302fb7cc2e99587" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>reg_succ</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579e5c114ade89a63b1d44116994be56f94"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::rem_succ" ref="27ef87d052ece9366a56e5dfd8017579e5c114ade89a63b1d44116994be56f94" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>rem_succ</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579b830235026f7286b15954d74559baeb8"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::req_item" ref="27ef87d052ece9366a56e5dfd8017579b830235026f7286b15954d74559baeb8" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>req_item</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579014be13638194a9fe0b10201be74847e"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::res_item" ref="27ef87d052ece9366a56e5dfd8017579014be13638194a9fe0b10201be74847e" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>res_item</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579d451e6807b6f8238c3fed708789c9fb3"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::rel_res" ref="27ef87d052ece9366a56e5dfd8017579d451e6807b6f8238c3fed708789c9fb3" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>rel_res</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579b2a86824c712d448bd3ff7c6e905fb48"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::con_res" ref="27ef87d052ece9366a56e5dfd8017579b2a86824c712d448bd3ff7c6e905fb48" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>con_res</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd80175799f00b67eaae74451baf63ea2dc0cb94c"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::put_item" ref="27ef87d052ece9366a56e5dfd80175799f00b67eaae74451baf63ea2dc0cb94c" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>put_item</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579ec0df922a8ffd2153f650732611395c9"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_fwd" ref="27ef87d052ece9366a56e5dfd8017579ec0df922a8ffd2153f650732611395c9" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>try_fwd</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ca181d774b321a511fd9a9653ce2a60f415a59924de2ce1c447c79a1b278a3a"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::WAIT" ref="0ca181d774b321a511fd9a9653ce2a60f415a59924de2ce1c447c79a1b278a3a" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>WAIT</b> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ca181d774b321a511fd9a9653ce2a60159bdd1eb0a3e1245f61a1e3bcca417f"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::SUCCEEDED" ref="0ca181d774b321a511fd9a9653ce2a60159bdd1eb0a3e1245f61a1e3bcca417f" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>SUCCEEDED</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ca181d774b321a511fd9a9653ce2a602c60f32df3cedd3c31dadd0086e5edc4"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::FAILED" ref="0ca181d774b321a511fd9a9653ce2a602c60f32df3cedd3c31dadd0086e5edc4" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>FAILED</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_type</b> { <br>
-  <b>reg_succ</b>, 
-<b>rem_succ</b>, 
-<b>req_item</b>, 
-<b>res_item</b>, 
-<br>
-  <b>rel_res</b>, 
-<b>con_res</b>, 
-<b>put_item</b>, 
-<b>try_fwd</b>
-<br>
- }</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> = 0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</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="c896b8640b606e49f369d1260c041ded"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::handle_operations" ref="c896b8640b606e49f369d1260c041ded" args="(buffer_operation *op_list)" -->
-virtual void </td><td class="memItemRight" valign="bottom"><b>handle_operations</b> (buffer_operation *op_list)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2648324ce0a38b40132b8502ef250e3a"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::forward" ref="2648324ce0a38b40132b8502ef250e3a" args="()" -->
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#2648324ce0a38b40132b8502ef250e3a">forward</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">This is executed by an enqueued task, the "forwarder". <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="df21388252b8963e839dca29d2c67ea5"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_reg_succ" ref="df21388252b8963e839dca29d2c67ea5" args="(buffer_operation *op)" -->
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a> (buffer_operation *op)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Register successor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6b6cf76dff80fd679251da93351c1291"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_rem_succ" ref="6b6cf76dff80fd679251da93351c1291" args="(buffer_operation *op)" -->
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a> (buffer_operation *op)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Remove successor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dcbffbae514f4d95205b0845785c0a91"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_forward" ref="dcbffbae514f4d95205b0845785c0a91" args="(buffer_operation *op)" -->
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#dcbffbae514f4d95205b0845785c0a91">internal_forward</a> (buffer_operation *op)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to forward valid items to successors. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="58c70e13ecd40cdaa59cda059e68de51"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_push" ref="58c70e13ecd40cdaa59cda059e68de51" args="(buffer_operation *op)" -->
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_push</b> (buffer_operation *op)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="035cbd758a1a28317ba951e2447e0826"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_pop" ref="035cbd758a1a28317ba951e2447e0826" args="(buffer_operation *op)" -->
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_pop</b> (buffer_operation *op)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4072ad4d1b320d584ea837048d6e4130"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_reserve" ref="4072ad4d1b320d584ea837048d6e4130" args="(buffer_operation *op)" -->
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (buffer_operation *op)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1177d6a157c14cdbfd7d4b05f01605a5"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_consume" ref="1177d6a157c14cdbfd7d4b05f01605a5" args="(buffer_operation *op)" -->
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_consume</b> (buffer_operation *op)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ceeec6c56ae8e16effb3fd187e83d958"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_release" ref="ceeec6c56ae8e16effb3fd187e83d958" args="(buffer_operation *op)" -->
-virtual void </td><td class="memItemRight" valign="bottom"><b>internal_release</b> (buffer_operation *op)</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="28807215994d4c7d3725fac693b37ec1"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::my_successors" ref="28807215994d4c7d3725fac693b37ec1" args="" -->
-internal::round_robin_cache<<br>
- T, <a class="el" href="a00279.html">null_rw_mutex</a> > </td><td class="memItemRight" valign="bottom"><b>my_successors</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b569eeae467185c45ea78ee1ab41a215"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::my_parent" ref="b569eeae467185c45ea78ee1ab41a215" args="" -->
-<a class="el" href="a00311.html">task</a> * </td><td class="memItemRight" valign="bottom"><b>my_parent</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5e90b3f77cbfac9fd5fb4d53456955d4"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::forwarder_busy" ref="5e90b3f77cbfac9fd5fb4d53456955d4" args="" -->
-bool </td><td class="memItemRight" valign="bottom"><b>forwarder_busy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4d008669d152fe291079f097da72ec74"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::my_aggregator" ref="4d008669d152fe291079f097da72ec74" args="" -->
-internal::aggregator< my_handler,<br>
- buffer_operation > </td><td class="memItemRight" valign="bottom"><b>my_aggregator</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="02a18a6a10c05e3f217f0111e0f5fb72"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal::forward_task< buffer_node< T, A > >" ref="02a18a6a10c05e3f217f0111e0f5fb72" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::forward_task< buffer_node< T, A > ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0b5526a5033ff7acc64681cff9ad76b0"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal::aggregating_functor< my_class, buffer_operation >" ref="0b5526a5033ff7acc64681cff9ad76b0" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::aggregating_functor< my_class, buffer_operation ></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>buffer_operation</b></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::flow::interface6::buffer_node< T, A ></h3>
-
-Forwards messages in arbitrary order. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="f8bf4944ede4fc106423d67715beb695"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::register_successor" ref="f8bf4944ede4fc106423d67715beb695" args="(receiver< output_type > &r)" -->
-<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">bool <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node</a>< T, A >::register_successor           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00237.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> > & </td>
-          <td class="paramname"> <em>r</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Adds a new successor. 
-<p>
-Adds successor r to the list of successors; may forward tasks. 
-<p>
-Implements <a class="el" href="a00301.html#68b8941ad77b9303cf3bcb8cf1f2d28a">tbb::flow::interface6::sender< T ></a>.
-</div>
-</div><p>
-<a class="anchor" name="2074da0e39b9477c32897d6e5786196f"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::remove_successor" ref="2074da0e39b9477c32897d6e5786196f" args="(receiver< output_type > &r)" -->
-<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">bool <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node</a>< T, A >::remove_successor           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00237.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> > & </td>
-          <td class="paramname"> <em>r</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Removes a successor. 
-<p>
-Removes successor r from the list of successors. It also calls r.remove_predecessor(*this) to remove this node as a predecessor. 
-<p>
-Implements <a class="el" href="a00301.html#82f363bfb1738bb8789e167590b10ef9">tbb::flow::interface6::sender< T ></a>.
-</div>
-</div><p>
-<a class="anchor" name="8ef07c434eb763d947a7b4e80c086a49"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_consume" ref="8ef07c434eb763d947a7b4e80c086a49" args="()" -->
-<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">bool <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node</a>< T, A >::try_consume           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Consumes a reserved item. 
-<p>
-true = item is removed from sender and reservation removed 
-<p>
-Reimplemented from <a class="el" href="a00301.html#7b840f50da117a0d6848707c1857ea2e">tbb::flow::interface6::sender< T ></a>.
-</div>
-</div><p>
-<a class="anchor" name="aeb8aec46ca99ca022356a792c46735e"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_get" ref="aeb8aec46ca99ca022356a792c46735e" args="(T &v)" -->
-<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">bool <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node</a>< T, A >::try_get           </td>
-          <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"> <em>v</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Request an item from the <a class="el" href="a00237.html">buffer_node</a>. 
-<p>
-true = v contains the returned item<br>
- false = no item has been returned 
-<p>
-Reimplemented from <a class="el" href="a00301.html#922fb56b0aad090b90a98b7d56b76a59">tbb::flow::interface6::sender< T ></a>.
-</div>
-</div><p>
-<a class="anchor" name="2b02fe332e704bbe14f297802298b63a"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_put" ref="2b02fe332e704bbe14f297802298b63a" args="(const T &t)" -->
-<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">bool <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node</a>< T, A >::try_put           </td>
-          <td>(</td>
-          <td class="paramtype">const T & </td>
-          <td class="paramname"> <em>t</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Receive an item. 
-<p>
-true is always returned 
-<p>
-Implements <a class="el" href="a00295.html#c6d5d0cb8ebe5771be91933609fe31b8">tbb::flow::interface6::receiver< T ></a>.
-</div>
-</div><p>
-<a class="anchor" name="2c8e8f2f5f4ff5be27136cc1184a3c3e"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_release" ref="2c8e8f2f5f4ff5be27136cc1184a3c3e" args="()" -->
-<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">bool <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node</a>< T, A >::try_release           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Release a reserved item. 
-<p>
-true = item has been released and so remains in sender 
-<p>
-Reimplemented from <a class="el" href="a00301.html#27036b06d6a91e97007e14f400529199">tbb::flow::interface6::sender< T ></a>.
-</div>
-</div><p>
-<a class="anchor" name="1cc889bb6c38bcb81757d0ebbc3a5e64"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_reserve" ref="1cc889bb6c38bcb81757d0ebbc3a5e64" args="(T &v)" -->
-<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">bool <a class="el" href="a00237.html">tbb::flow::interface6::buffer_node</a>< T, A >::try_reserve           </td>
-          <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"> <em>v</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Reserves an item. 
-<p>
-false = no item can be reserved<br>
- true = an item is reserved 
-<p>
-Reimplemented from <a class="el" href="a00301.html#02c05b472271db1b68a48ea2618fa72f">tbb::flow::interface6::sender< T ></a>.
-</div>
-</div><p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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.png b/doc/html/a00237.png
deleted file mode 100644
index 425350b..0000000
Binary files a/doc/html/a00237.png and /dev/null differ
diff --git a/doc/html/a00238.html b/doc/html/a00238.html
deleted file mode 100644
index a7fef17..0000000
--- a/doc/html/a00238.html
+++ /dev/null
@@ -1,114 +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::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>
-<!-- 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="a00383.html">tbb</a>::<a class="el" href="a00238.html">cache_aligned_allocator</a></div>
-<h1>tbb::cache_aligned_allocator< T > Class Template Reference<br>
-<small>
-[<a class="el" href="a00397.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="a00415.html">cache_aligned_allocator.h</a>></code>
-<p>
-<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="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="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="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="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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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="a00238.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>
-
-</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. 
-<p>
-The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00415.html">cache_aligned_allocator.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00239.html b/doc/html/a00239.html
deleted file mode 100644
index e966827..0000000
--- a/doc/html/a00239.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>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>
-<!-- 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="a00383.html">tbb</a>::<a class="el" href="a00239.html">cache_aligned_allocator< void ></a></div>
-<h1>tbb::cache_aligned_allocator< void > Class Template Reference<br>
-<small>
-[<a class="el" href="a00397.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="a00415.html">cache_aligned_allocator.h</a>></code>
-<p>
-<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="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="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>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<><br>
- class tbb::cache_aligned_allocator< void ></h3>
-
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00415.html">cache_aligned_allocator.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00240.html b/doc/html/a00240.html
deleted file mode 100644
index 47fbf40..0000000
--- a/doc/html/a00240.html
+++ /dev/null
@@ -1,157 +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::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>
-<!-- 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="a00383.html">tbb</a>::<a class="el" href="a00240.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="a00593.html">tbb_exception.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::captured_exception:
-<p><center><img src="a00240.png" usemap="#tbb::captured_exception_map" border="0" alt=""></center>
-<map name="tbb::captured_exception_map">
-<area href="a00319.html" alt="tbb::tbb_exception" shape="rect" coords="0,0,146,24">
-</map>
-<a href="a00143.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="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="a00240.html">captured_exception</a> &src)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="179076f146699724f652a9b1e81bd791"></a><!-- doxytag: member="tbb::captured_exception::captured_exception" ref="179076f146699724f652a9b1e81bd791" 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="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="a00240.html">captured_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00240.html">captured_exception</a> &src)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00240.html">captured_exception</a> *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#837a50b8f6a800bda225c39d1699643f">move</a> ()  throw ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#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="a00240.html#93d875d3555502ff6f18513525de204c">destroy</a> ()  throw ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00240.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="a00240.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="a00240.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="a00240.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="a00240.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>
-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="a00319.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="a00240.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="a00319.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="a00240.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">
-
-<p>
-Creates and returns pointer to the deep copy of this exception object. 
-<p>
-Move semantics is allowed. 
-<p>
-Implements <a class="el" href="a00319.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="a00319.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="a00593.html">tbb_exception.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00240.png b/doc/html/a00240.png
deleted file mode 100644
index 2470bea..0000000
Binary files a/doc/html/a00240.png and /dev/null differ
diff --git a/doc/html/a00241.html b/doc/html/a00241.html
deleted file mode 100644
index c324f56..0000000
--- a/doc/html/a00241.html
+++ /dev/null
@@ -1,84 +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::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>
-<!-- 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="a00383.html">tbb</a>::<a class="el" href="a00241.html">combinable</a></div>
-<h1>tbb::combinable< T > Class Template Reference<br>
-<small>
-[<a class="el" href="a00396.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="a00417.html">combinable.h</a>></code>
-<p>
-<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 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 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="a00241.html#2c87e79ae98588a5780f708773388843">~combinable</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="a00241.html">combinable</a> &other)</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="a00241.html">combinable</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00241.html">combinable</a> &other)</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="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="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="memTemplParams" nowrap colspan="2"><a class="anchor" name="9be306b4a073066dcac4043dc189c514"></a><!-- doxytag: member="tbb::combinable::combine" ref="9be306b4a073066dcac4043dc189c514" 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="dcd23283834149c87c345c0e476dfee8"></a><!-- doxytag: member="tbb::combinable::combine_each" ref="dcd23283834149c87c345c0e476dfee8" 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>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- class tbb::combinable< T ></h3>
-
-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="a00417.html">combinable.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00242.html b/doc/html/a00242.html
deleted file mode 100644
index 9c325cd..0000000
--- a/doc/html/a00242.html
+++ /dev/null
@@ -1,306 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::concurrent_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>
-<!-- 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="a00383.html">tbb</a>::<a class="el" href="a00242.html">concurrent_bounded_queue</a></div>
-<h1>tbb::concurrent_bounded_queue< T, A > Class Template Reference<br>
-<small>
-[<a class="el" href="a00396.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="a00432.html">concurrent_queue.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::concurrent_bounded_queue< T, A >:
-<p><center><img src="a00242.png" usemap="#tbb::concurrent_bounded_queue< T, A >_map" border="0" alt=""></center>
-<map name="tbb::concurrent_bounded_queue< T, A >_map">
-<area href="a00249.html" alt="tbb::deprecated::concurrent_queue< T, A >" shape="rect" coords="0,56,257,80">
-</map>
-<a href="a00023.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="a00242.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="a00242.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="a00242.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="a00242.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="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_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="a00242.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="aeea2ad38b7e7fc2866f063dfed24c52"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::iterator" ref="aeea2ad38b7e7fc2866f063dfed24c52" args="" -->
-typedef internal::concurrent_queue_iterator<<br>
- <a class="el" href="a00242.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="a00242.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="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="a00242.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a> (const <a class="el" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00242.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="a00242.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a> (const <a class="el" href="a00242.html">concurrent_bounded_queue</a> &src, const <a class="el" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00242.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="a00242.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00242.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="a00242.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="a00242.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">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.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="a00242.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="a00242.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="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.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="a00242.html#f64924f2ee9225c368a270fc3c394db9">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to <a class="el" href="a00242.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="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of allowed elements. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a> (<a class="el" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> new_capacity)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the capacity.  <a href="#f3c6c934f85fd02aedbc83a16943193b"></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="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.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="a00242.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>
-</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>
-
-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="a00242.html">tbb::concurrent_bounded_queue</a>< T, A >::<a class="el" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Integral type for representing size of the queue. 
-<p>
-Note 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="a00242.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="f3c6c934f85fd02aedbc83a16943193b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::set_capacity" ref="f3c6c934f85fd02aedbc83a16943193b" args="(size_type new_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="a00242.html">tbb::concurrent_bounded_queue</a>< T, A >::set_capacity           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td>
-          <td class="paramname"> <em>new_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="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="el" href="a00242.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="a00242.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="a00242.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="a00242.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="a00432.html">concurrent_queue.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00243.html b/doc/html/a00243.html
deleted file mode 100644
index 796bd76..0000000
--- a/doc/html/a00243.html
+++ /dev/null
@@ -1,646 +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::interface5::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>
-<!-- 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="a00383.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00243.html">concurrent_hash_map</a></div>
-<h1>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator > Class Template Reference<br>
-<small>
-[<a class="el" href="a00396.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::interface5::concurrent_hash_map" -->Unordered map from Key to T.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00418.html">concurrent_hash_map.h</a>></code>
-<p>
-<a href="a00013.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e664e41a5b735a677f2ebbbcca0fcd80"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::key_type" ref="e664e41a5b735a677f2ebbbcca0fcd80" 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="616243d5a0b6159299f2a34413e077e4"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::mapped_type" ref="616243d5a0b6159299f2a34413e077e4" 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="ece048b19778bc31377185392ecf312b"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::value_type" ref="ece048b19778bc31377185392ecf312b" 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="549109620a3331c83e46b8fe0636b883"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::size_type" ref="549109620a3331c83e46b8fe0636b883" 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="0a4ffc8ac85bb2eb80a4e1909a373e2c"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::difference_type" ref="0a4ffc8ac85bb2eb80a4e1909a373e2c" 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="341d2ae1e5e9d8ba05e5306a3933f31a"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::pointer" ref="341d2ae1e5e9d8ba05e5306a3933f31a" 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="4b401731d22f457617f950416fde9bff"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_pointer" ref="4b401731d22f457617f950416fde9bff" 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="2765bbab7bac8b74cfd79d269a2008b8"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::reference" ref="2765bbab7bac8b74cfd79d269a2008b8" 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="a3b62b1930b2b88c98cb617f67bb9545"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_reference" ref="a3b62b1930b2b88c98cb617f67bb9545" 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="83603b64f2507ee6560133d79a001eb2"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::iterator" ref="83603b64f2507ee6560133d79a001eb2" args="" -->
-typedef internal::hash_map_iterator<<br>
- <a class="el" href="a00243.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="d47cbc7e0b0999b849187040f02557f5"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_iterator" ref="d47cbc7e0b0999b849187040f02557f5" args="" -->
-typedef internal::hash_map_iterator<<br>
- <a class="el" href="a00243.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="baeed4327d9c77f084bfb5ac8d519c96"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::range_type" ref="baeed4327d9c77f084bfb5ac8d519c96" 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="1e7700e8872566a5dc6d1c702b7949f4"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_range_type" ref="1e7700e8872566a5dc6d1c702b7949f4" 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="bf2a3ebce78da6d8be3b1803eb31a2e3"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::allocator_type" ref="bf2a3ebce78da6d8be3b1803eb31a2e3" 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="1ad413f5b666176e7669bf4c87d1ff3f"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::concurrent_hash_map" ref="1ad413f5b666176e7669bf4c87d1ff3f" args="(const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#1ad413f5b666176e7669bf4c87d1ff3f">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="46b9896317662c3cfa3c876ad7592a7c"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::concurrent_hash_map" ref="46b9896317662c3cfa3c876ad7592a7c" args="(size_type n, const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#46b9896317662c3cfa3c876ad7592a7c">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="6fb14710893308fb47aaeee55ee30dc3"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::concurrent_hash_map" ref="6fb14710893308fb47aaeee55ee30dc3" args="(const concurrent_hash_map &table, const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#6fb14710893308fb47aaeee55ee30dc3">concurrent_hash_map</a> (const <a class="el" href="a00243.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="83c40f2053f208861b90390e12a36436"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::concurrent_hash_map" ref="83c40f2053f208861b90390e12a36436" 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="a00243.html#83c40f2053f208861b90390e12a36436">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="088d1aaccc816884a49e38f7065622c8"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::operator=" ref="088d1aaccc816884a49e38f7065622c8" args="(const concurrent_hash_map &table)" -->
-<a class="el" href="a00243.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#088d1aaccc816884a49e38f7065622c8">operator=</a> (const <a class="el" href="a00243.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">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#94758113d8993cfe5afdf2d63a728869">rehash</a> (size_type n=0)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Rehashes and optionally resizes the whole table.  <a href="#94758113d8993cfe5afdf2d63a728869"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="220686fe17b197eedf19dd856cd02e36"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::clear" ref="220686fe17b197eedf19dd856cd02e36" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#220686fe17b197eedf19dd856cd02e36">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="2aa8e2d28d5af1284cf78d20a9c22731"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::~concurrent_hash_map" ref="2aa8e2d28d5af1284cf78d20a9c22731" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#2aa8e2d28d5af1284cf78d20a9c22731">~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="ee6b69f390111c92318a85600dd9c559"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::range" ref="ee6b69f390111c92318a85600dd9c559" 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="d9a834a345415581bd801647945ea96b"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::range" ref="d9a834a345415581bd801647945ea96b" 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="35a8c373fc3d52099ae18f0553162491"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::begin" ref="35a8c373fc3d52099ae18f0553162491" 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="67c50bddda53b9a10318f8981e4fc4fa"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::end" ref="67c50bddda53b9a10318f8981e4fc4fa" 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="c8ad3d9bb833063b3d09164199b8f7de"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::begin" ref="c8ad3d9bb833063b3d09164199b8f7de" 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="75e7c0fb6addae180b6cc483b771fded"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::end" ref="75e7c0fb6addae180b6cc483b771fded" 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="8262e9ef1208a39e7ea087487fbe8368"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::equal_range" ref="8262e9ef1208a39e7ea087487fbe8368" 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="b94bf1d3724f26299640e8b82787a75c"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::equal_range" ref="b94bf1d3724f26299640e8b82787a75c" 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="6aa56a8b5a25e61a97fa0b54fe2b5659"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::size" ref="6aa56a8b5a25e61a97fa0b54fe2b5659" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#6aa56a8b5a25e61a97fa0b54fe2b5659">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="61ff2e5bb44e5469366fd5295e5d0ebe"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::empty" ref="61ff2e5bb44e5469366fd5295e5d0ebe" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#61ff2e5bb44e5469366fd5295e5d0ebe">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if <a class="el" href="a00243.html#6aa56a8b5a25e61a97fa0b54fe2b5659">size()</a>==0. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2bce57fe9b594abe1e6d2568aea8b357"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::max_size" ref="2bce57fe9b594abe1e6d2568aea8b357" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#2bce57fe9b594abe1e6d2568aea8b357">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="af34cb91b1d0f36a885a1a3432dd9af1"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::bucket_count" ref="af34cb91b1d0f36a885a1a3432dd9af1" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#af34cb91b1d0f36a885a1a3432dd9af1">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="6cbcacb4a256a85bf89576c101373ca7"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::get_allocator" ref="6cbcacb4a256a85bf89576c101373ca7" args="() const " -->
-allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#6cbcacb4a256a85bf89576c101373ca7">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="076f8d9e16110aac5f558777aa744eb6"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::swap" ref="076f8d9e16110aac5f558777aa744eb6" args="(concurrent_hash_map &table)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#076f8d9e16110aac5f558777aa744eb6">swap</a> (<a class="el" href="a00243.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="6968eb6feed2df36be421df0464297af"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::count" ref="6968eb6feed2df36be421df0464297af" args="(const Key &key) const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#6968eb6feed2df36be421df0464297af">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="a00243.html#2afcc33dade7bb24e008d60c0df38230">find</a> (<a class="el" href="a00246.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="#2afcc33dade7bb24e008d60c0df38230"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#7bc475d1968f7f0af3d736d7e8a0d7df">find</a> (<a class="el" href="a00244.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="#7bc475d1968f7f0af3d736d7e8a0d7df"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#47fe0e60151a9bd7a444db827772a4e6">insert</a> (<a class="el" href="a00246.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="#47fe0e60151a9bd7a444db827772a4e6"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#54e0955ecd11575b4c07166838a72893">insert</a> (<a class="el" href="a00244.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="#54e0955ecd11575b4c07166838a72893"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#091efd2d12fdad4fe9e54d9629a9dfc3">insert</a> (<a class="el" href="a00246.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="#091efd2d12fdad4fe9e54d9629a9dfc3"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#39183d78d6e8425917555ab542ab92de">insert</a> (<a class="el" href="a00244.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="#39183d78d6e8425917555ab542ab92de"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#3f121a316af8135de476a30fae6d7c07">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="#3f121a316af8135de476a30fae6d7c07"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="1dd37fad87e561151ba1e242ca94bcc1"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="1dd37fad87e561151ba1e242ca94bcc1" 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="a00243.html#1dd37fad87e561151ba1e242ca94bcc1">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="a00243.html#f27802b3a8d1863c29e743e9c6b4e870">erase</a> (const Key &key)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item.  <a href="#f27802b3a8d1863c29e743e9c6b4e870"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#e698ef3d70b2d1a29a7a5551784d3653">erase</a> (<a class="el" href="a00246.html">const_accessor</a> &item_accessor)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by <a class="el" href="a00246.html">const_accessor</a>.  <a href="#e698ef3d70b2d1a29a7a5551784d3653"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#5f12d150d421420965db07368666a84f">erase</a> (<a class="el" href="a00244.html">accessor</a> &item_accessor)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by accessor.  <a href="#5f12d150d421420965db07368666a84f"></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="2066e7e0fec7813db8fe9c8b9368c9e5"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::node_allocator_type" ref="2066e7e0fec7813db8fe9c8b9368c9e5" 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="559190b7953177b4967a3312f557318f"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::delete_node" ref="559190b7953177b4967a3312f557318f" 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="32ec82223d843f1c2b95fa37acb7f4bb"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::search_bucket" ref="32ec82223d843f1c2b95fa37acb7f4bb" 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="4962c7da24793ccc05524cc3bbcf1efa"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::rehash_bucket" ref="4962c7da24793ccc05524cc3bbcf1efa" 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="3f3413264a99174a224ef96f6c4ea769"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::lookup" ref="3f3413264a99174a224ef96f6c4ea769" 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="a00243.html#3f3413264a99174a224ef96f6c4ea769">lookup</a> (bool op_insert, const Key &key, const T *t, <a class="el" href="a00246.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="0c964214eb38f54603aa75fdff6d2709"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::exclude" ref="0c964214eb38f54603aa75fdff6d2709" args="(const_accessor &item_accessor)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#0c964214eb38f54603aa75fdff6d2709">exclude</a> (<a class="el" href="a00246.html">const_accessor</a> &item_accessor)</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="8f5373b8e1864619d1ffcf3bf3f1f13d"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::internal_equal_range" ref="8f5373b8e1864619d1ffcf3bf3f1f13d" 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="a00243.html#8f5373b8e1864619d1ffcf3bf3f1f13d">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="72c9c9e9655fcf096f5f0ed9c8ba6669"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::internal_copy" ref="72c9c9e9655fcf096f5f0ed9c8ba6669" args="(const concurrent_hash_map &source)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#72c9c9e9655fcf096f5f0ed9c8ba6669">internal_copy</a> (const <a class="el" href="a00243.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="1ec1fe8dfa2d7894bf0589bfdbcb1f96"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::internal_copy" ref="1ec1fe8dfa2d7894bf0589bfdbcb1f96" 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="a00243.html#2f76ed101a0ccc8875b846c2f747897e">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="#2f76ed101a0ccc8875b846c2f747897e"></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="a72cb6e9873e5541295682179e5a7f74"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::my_allocator" ref="a72cb6e9873e5541295682179e5a7f74" 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="53c747a3f2d2d2c85aec866e19c31c29"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::my_hash_compare" ref="53c747a3f2d2d2c85aec866e19c31c29" 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::interface5::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::interface5::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::interface5::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="a00244.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="a00244.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.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="a00245.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html">const_accessor</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Combines data access, locking, and garbage collection.  <a href="a00246.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 Key, typename T, typename HashCompare, typename Allocator><br>
- class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></h3>
-
-Unordered map from Key to T. 
-<p>
-<a class="el" href="a00243.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="a00243.html#47fe0e60151a9bd7a444db827772a4e6">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="a00243.html#088d1aaccc816884a49e38f7065622c8">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="a00243.html#47fe0e60151a9bd7a444db827772a4e6">insert()</a> methods</li><li>Added <a class="el" href="a00243.html#6cbcacb4a256a85bf89576c101373ca7">get_allocator()</a></li><li>Added <a class="el" href="a00243.html#076f8d9e16110aac5f558777aa744eb6">swap()</a></li [...]
-</dd></dl>
-
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="5f12d150d421420965db07368666a84f"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::erase" ref="5f12d150d421420965db07368666a84f" 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="a00243.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00244.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="e698ef3d70b2d1a29a7a5551784d3653"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::erase" ref="e698ef3d70b2d1a29a7a5551784d3653" 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="a00243.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00246.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="a00246.html">const_accessor</a>. 
-<p>
-Return true if item was erased by particularly this call. 
-</div>
-</div><p>
-<a class="anchor" name="f27802b3a8d1863c29e743e9c6b4e870"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::erase" ref="f27802b3a8d1863c29e743e9c6b4e870" 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="a00243.html">tbb::interface5::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="7bc475d1968f7f0af3d736d7e8a0d7df"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::find" ref="7bc475d1968f7f0af3d736d7e8a0d7df" 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="a00243.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00244.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="2afcc33dade7bb24e008d60c0df38230"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::find" ref="2afcc33dade7bb24e008d60c0df38230" 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="a00243.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00246.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="3f121a316af8135de476a30fae6d7c07"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="3f121a316af8135de476a30fae6d7c07" 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="a00243.html">tbb::interface5::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="39183d78d6e8425917555ab542ab92de"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="39183d78d6e8425917555ab542ab92de" 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="a00243.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00244.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="091efd2d12fdad4fe9e54d9629a9dfc3"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="091efd2d12fdad4fe9e54d9629a9dfc3" 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="a00243.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00246.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="54e0955ecd11575b4c07166838a72893"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="54e0955ecd11575b4c07166838a72893" 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="a00243.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00244.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="47fe0e60151a9bd7a444db827772a4e6"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="47fe0e60151a9bd7a444db827772a4e6" 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="a00243.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00246.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="2f76ed101a0ccc8875b846c2f747897e"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::internal_fast_find" ref="2f76ed101a0ccc8875b846c2f747897e" 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="a00243.html">tbb::interface5::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="94758113d8993cfe5afdf2d63a728869"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::rehash" ref="94758113d8993cfe5afdf2d63a728869" 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="a00243.html">tbb::interface5::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>
-Useful to optimize performance before or after concurrent operations. Also enables using of <a class="el" href="a00243.html#2afcc33dade7bb24e008d60c0df38230">find()</a> and <a class="el" href="a00243.html#6968eb6feed2df36be421df0464297af">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="a00418.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00244.html b/doc/html/a00244.html
deleted file mode 100644
index 55bf422..0000000
--- a/doc/html/a00244.html
+++ /dev/null
@@ -1,68 +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::interface5::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>
-<!-- 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="a00383.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00243.html">concurrent_hash_map</a>::<a class="el" href="a00244.html">accessor</a></div>
-<h1>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Class Reference</h1><!-- doxytag: class="tbb::interface5::concurrent_hash_map::accessor" --><!-- doxytag: inherits="tbb::interface5::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="a00418.html">concurrent_hash_map.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor:
-<p><center><img src="a00244.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor_map" border="0" alt=""></center>
-<map name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor_map">
-<area href="a00246.html" alt="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor" shape="rect" coords="0,0,530,24">
-</map>
-<a href="a00017.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0b648be7a95a8fb2971042c15eb112c1"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::accessor::value_type" ref="0b648be7a95a8fb2971042c15eb112c1" args="" -->
-typedef concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#0b648be7a95a8fb2971042c15eb112c1">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="170280ea807a22e742095de3e8c5ea38"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::accessor::operator *" ref="170280ea807a22e742095de3e8c5ea38" args="() const " -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#170280ea807a22e742095de3e8c5ea38">operator *</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a807920cdffe3ec5c5e282b4d1ff92a2"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::accessor::operator->" ref="a807920cdffe3ec5c5e282b4d1ff92a2" args="() const " -->
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a807920cdffe3ec5c5e282b4d1ff92a2">operator-></a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
- class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</h3>
-
-Allows write access to elements and combines data access, locking, and garbage collection. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00418.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00245.html b/doc/html/a00245.html
deleted file mode 100644
index 456a14b..0000000
--- a/doc/html/a00245.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::interface5::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>
-<!-- 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="a00383.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00243.html">concurrent_hash_map</a>::<a class="el" href="a00245.html">bucket_accessor</a></div>
-<h1>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Class Reference</h1><!-- doxytag: class="tbb::interface5::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="a00418.html">concurrent_hash_map.h</a>></code>
-<p>
-<a href="a00015.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b1dcb174ab54b8612b25b6126d18d6c3"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::bucket_accessor::bucket_accessor" ref="b1dcb174ab54b8612b25b6126d18d6c3" 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="a00243.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="d11c77f4d70a94d4fb344492bbf18007"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::bucket_accessor::acquire" ref="d11c77f4d70a94d4fb344492bbf18007" args="(concurrent_hash_map *base, const hashcode_t h, bool writer=false)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#d11c77f4d70a94d4fb344492bbf18007">acquire</a> (<a class="el" href="a00243.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="07d958f151a0eaa92f50fd56ad6440e2"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::bucket_accessor::is_writer" ref="07d958f151a0eaa92f50fd56ad6440e2" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#07d958f151a0eaa92f50fd56ad6440e2">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="fa6314b861c574f86ed189b124cf5853"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::bucket_accessor::operator()" ref="fa6314b861c574f86ed189b124cf5853" args="()" -->
-bucket * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#fa6314b861c574f86ed189b124cf5853">operator()</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">get bucket pointer <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::interface5::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="a00418.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00246.html b/doc/html/a00246.html
deleted file mode 100644
index 6eb7733..0000000
--- a/doc/html/a00246.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>tbb::interface5::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>
-<!-- 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="a00383.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00243.html">concurrent_hash_map</a>::<a class="el" href="a00246.html">const_accessor</a></div>
-<h1>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Class Reference</h1><!-- doxytag: class="tbb::interface5::concurrent_hash_map::const_accessor" -->Combines data access, locking, and garbage collection.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00418.html">concurrent_hash_map.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor:
-<p><center><img src="a00246.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor_map" border="0" alt=""></center>
-<map name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor_map">
-<area href="a00244.html" alt="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor" shape="rect" coords="0,56,530,80">
-</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="a8e50238483ba451363dccebd981d346"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::value_type" ref="a8e50238483ba451363dccebd981d346" args="" -->
-typedef const concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#a8e50238483ba451363dccebd981d346">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="84c3080d0c6124d55c8bb4cf6055e65f"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::empty" ref="84c3080d0c6124d55c8bb4cf6055e65f" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#84c3080d0c6124d55c8bb4cf6055e65f">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if result is empty. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7db006d41b49dc5f1716a913769d4698"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::release" ref="7db006d41b49dc5f1716a913769d4698" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#7db006d41b49dc5f1716a913769d4698">release</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set to null. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9411df8197ceb4881ec4c7368a0a7f88"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::operator *" ref="9411df8197ceb4881ec4c7368a0a7f88" args="() const " -->
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#9411df8197ceb4881ec4c7368a0a7f88">operator *</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3d03a48ecb8cd9549bd8be64b09c9b0d"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::operator->" ref="3d03a48ecb8cd9549bd8be64b09c9b0d" args="() const " -->
-const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#3d03a48ecb8cd9549bd8be64b09c9b0d">operator-></a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27399c613eb1aecd4660803955dda09d"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::const_accessor" ref="27399c613eb1aecd4660803955dda09d" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#27399c613eb1aecd4660803955dda09d">const_accessor</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Create empty result. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="928769b139d53427e7075c1f86148e4c"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::~const_accessor" ref="928769b139d53427e7075c1f86148e4c" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#928769b139d53427e7075c1f86148e4c">~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>Protected Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="45ab59454c6f11fe938bbcab637cdd73"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::is_writer" ref="45ab59454c6f11fe938bbcab637cdd73" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><b>is_writer</b> ()</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="21856da696b0765cc3db90663160d95e"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::my_node" ref="21856da696b0765cc3db90663160d95e" args="" -->
-node * </td><td class="memItemRight" valign="bottom"><b>my_node</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4936cc9432926ed38f0207828b388e24"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::my_hash" ref="4936cc9432926ed38f0207828b388e24" args="" -->
-hashcode_t </td><td class="memItemRight" valign="bottom"><b>my_hash</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="d062d8ecb243a6ec62fa30bca52a1bcf"></a><!-- doxytag: member="tbb::interface5::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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ddd77aff56c12366acc02d0f1588a706"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::accessor" ref="ddd77aff56c12366acc02d0f1588a706" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>accessor</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
- class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</h3>
-
-Combines data access, locking, and garbage collection. 
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00418.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00247.html b/doc/html/a00247.html
deleted file mode 100644
index 1ab5139..0000000
--- a/doc/html/a00247.html
+++ /dev/null
@@ -1,348 +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::interface5::concurrent_priority_queue< T, Compare, 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>
-<!-- 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="a00383.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00247.html">concurrent_priority_queue</a></div>
-<h1>tbb::interface5::concurrent_priority_queue< T, Compare, A > Class Template Reference</h1><!-- doxytag: class="tbb::interface5::concurrent_priority_queue" -->Concurrent priority queue.  
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00429.html">concurrent_priority_queue.h</a>></code>
-<p>
-<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="7c611a6b5b8f94b0e7f2afc97e31efb1"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::value_type" ref="7c611a6b5b8f94b0e7f2afc97e31efb1" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#7c611a6b5b8f94b0e7f2afc97e31efb1">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="5804b3c708ef4e50d603f918ef2b9e58"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::reference" ref="5804b3c708ef4e50d603f918ef2b9e58" args="" -->
-typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#5804b3c708ef4e50d603f918ef2b9e58">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="a4ded8601a434098605be0dcc4febc60"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::const_reference" ref="a4ded8601a434098605be0dcc4febc60" args="" -->
-typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#a4ded8601a434098605be0dcc4febc60">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="b679eea8d01d041625a39f719ca2b7ed"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::size_type" ref="b679eea8d01d041625a39f719ca2b7ed" args="" -->
-typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">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="77399bc76b3ecd60e33f7e35a5becd87"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::difference_type" ref="77399bc76b3ecd60e33f7e35a5becd87" args="" -->
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#77399bc76b3ecd60e33f7e35a5becd87">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="1712cb3a46bc1821fccc5e2cd83d5cd7"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::allocator_type" ref="1712cb3a46bc1821fccc5e2cd83d5cd7" args="" -->
-typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocator type. <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="eefa40599afe00ea393897d8f5662e65"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::concurrent_priority_queue" ref="eefa40599afe00ea393897d8f5662e65" args="(const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a> (const <a class="el" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &a=<a class="el" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00247.html">concurrent_priority_queue</a> with default capacity. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4555b4a55415a70024c4004b51e9f385"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::concurrent_priority_queue" ref="4555b4a55415a70024c4004b51e9f385" args="(size_type init_capacity, const allocator_type &a=allocator_type())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#4555b4a55415a70024c4004b51e9f385">concurrent_priority_queue</a> (<a class="el" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> init_capacity, const <a class="el" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &a=<a class="el" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00247.html">concurrent_priority_queue</a> with init_sz capacity. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="9147cb4207017c260a0c3929c12cd40f"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::concurrent_priority_queue" ref="9147cb4207017c260a0c3929c12cd40f" 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="a00247.html#9147cb4207017c260a0c3929c12cd40f">concurrent_priority_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &a=<a class="el" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">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"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#509419e320f200456d89dc54a65140b3">concurrent_priority_queue</a> (const <a class="el" href="a00247.html">concurrent_priority_queue</a> &src)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor.  <a href="#509419e320f200456d89dc54a65140b3"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#c8b20e7430c5302936030bef59a562be">concurrent_priority_queue</a> (const <a class="el" href="a00247.html">concurrent_priority_queue</a> &src, const <a class="el" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &a)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor with specific allocator.  <a href="#c8b20e7430c5302936030bef59a562be"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00247.html">concurrent_priority_queue</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#2ab7f7808891027ac0f0f5b3a4be51e9">operator=</a> (const <a class="el" href="a00247.html">concurrent_priority_queue</a> &src)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Assignment operator.  <a href="#2ab7f7808891027ac0f0f5b3a4be51e9"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#317c508fa92df218be5d014c26c09bb7">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if empty, false otherwise.  <a href="#317c508fa92df218be5d014c26c09bb7"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#8b2ae25c61338c6fd59e94fe09822ba5">size</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the current number of elements contained in the queue.  <a href="#8b2ae25c61338c6fd59e94fe09822ba5"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#d905af7b8f6defff562f5ae9c3275763">push</a> (<a class="el" href="a00247.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> elem)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pushes elem onto the queue, increasing capacity of queue if necessary.  <a href="#d905af7b8f6defff562f5ae9c3275763"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#e036461a29cc40902a2bb79abf9f5146">try_pop</a> (<a class="el" href="a00247.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a> elem)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Gets a reference to and removes highest priority element.  <a href="#e036461a29cc40902a2bb79abf9f5146"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#0bdcdf7cde9fd369edca845bec34ca94">clear</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear the queue; not thread-safe.  <a href="#0bdcdf7cde9fd369edca845bec34ca94"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#0ecdc6a04aa259374425d424ca2a6082">swap</a> (<a class="el" href="a00247.html">concurrent_priority_queue</a> &q)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Swap this queue with another; not thread-safe.  <a href="#0ecdc6a04aa259374425d424ca2a6082"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d545d444fb0d16148f9b61fd89f9a337"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::get_allocator" ref="d545d444fb0d16148f9b61fd89f9a337" args="() const " -->
-<a class="el" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#d545d444fb0d16148f9b61fd89f9a337">get_allocator</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return allocator object. <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"><b>cpq_operation</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>my_functor_t</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>><br>
- class tbb::interface5::concurrent_priority_queue< T, Compare, A ></h3>
-
-Concurrent priority queue. 
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="509419e320f200456d89dc54a65140b3"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::concurrent_priority_queue" ref="509419e320f200456d89dc54a65140b3" args="(const concurrent_priority_queue &src)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00247.html">concurrent_priority_queue</a>           </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="a00247.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
-          <td class="paramname"> <em>src</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, explicit]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Copy constructor. 
-<p>
-This operation is unsafe if there are pending concurrent operations on the src queue. 
-</div>
-</div><p>
-<a class="anchor" name="c8b20e7430c5302936030bef59a562be"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::concurrent_priority_queue" ref="c8b20e7430c5302936030bef59a562be" args="(const concurrent_priority_queue &src, const allocator_type &a)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00247.html">concurrent_priority_queue</a>           </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="a00247.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
-          <td class="paramname"> <em>src</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> & </td>
-          <td class="paramname"> <em>a</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>
-Copy constructor with specific allocator. 
-<p>
-This operation is unsafe if there are pending concurrent operations on the src queue. 
-</div>
-</div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="0bdcdf7cde9fd369edca845bec34ca94"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::clear" ref="0bdcdf7cde9fd369edca845bec34ca94" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, 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 the queue; not thread-safe. 
-<p>
-This operation is unsafe if there are pending concurrent operations on the queue. Resets size, effectively emptying queue; does not free space. May not clear elements added in pending operations. 
-</div>
-</div><p>
-<a class="anchor" name="317c508fa92df218be5d014c26c09bb7"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::empty" ref="317c508fa92df218be5d014c26c09bb7" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::empty           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Returns true if empty, false otherwise. 
-<p>
-Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. 
-</div>
-</div><p>
-<a class="anchor" name="2ab7f7808891027ac0f0f5b3a4be51e9"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::operator=" ref="2ab7f7808891027ac0f0f5b3a4be51e9" args="(const concurrent_priority_queue &src)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00247.html">concurrent_priority_queue</a>& <a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::operator=           </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="a00247.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
-          <td class="paramname"> <em>src</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Assignment operator. 
-<p>
-This operation is unsafe if there are pending concurrent operations on the src queue. 
-</div>
-</div><p>
-<a class="anchor" name="d905af7b8f6defff562f5ae9c3275763"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::push" ref="d905af7b8f6defff562f5ae9c3275763" args="(const_reference elem)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::push           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00247.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> </td>
-          <td class="paramname"> <em>elem</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Pushes elem onto the queue, increasing capacity of queue if necessary. 
-<p>
-This operation can be safely used concurrently with other push, try_pop or reserve operations. 
-</div>
-</div><p>
-<a class="anchor" name="8b2ae25c61338c6fd59e94fe09822ba5"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::size" ref="8b2ae25c61338c6fd59e94fe09822ba5" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> <a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, 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>
-Returns the current number of elements contained in the queue. 
-<p>
-Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. 
-</div>
-</div><p>
-<a class="anchor" name="0ecdc6a04aa259374425d424ca2a6082"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::swap" ref="0ecdc6a04aa259374425d424ca2a6082" args="(concurrent_priority_queue &q)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void <a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::swap           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00247.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
-          <td class="paramname"> <em>q</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Swap this queue with another; not thread-safe. 
-<p>
-This operation is unsafe if there are pending concurrent operations on the queue. 
-</div>
-</div><p>
-<a class="anchor" name="e036461a29cc40902a2bb79abf9f5146"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::try_pop" ref="e036461a29cc40902a2bb79abf9f5146" args="(reference elem)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::try_pop           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00247.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a> </td>
-          <td class="paramname"> <em>elem</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Gets a reference to and removes highest priority element. 
-<p>
-If a highest priority element was found, sets elem and returns true, otherwise returns false. This operation can be safely used concurrently with other push, try_pop or reserve operations. 
-</div>
-</div><p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00429.html">concurrent_priority_queue.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00248.html b/doc/html/a00248.html
deleted file mode 100644
index ee9798f..0000000
--- a/doc/html/a00248.html
+++ /dev/null
@@ -1,169 +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::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>
-<!-- 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="a00383.html">tbb</a>::<b>strict_ppl</b>::<a class="el" href="a00248.html">concurrent_queue</a></div>
-<h1>tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference<br>
-<small>
-[<a class="el" href="a00396.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="a00432.html">concurrent_queue.h</a>></code>
-<p>
-<a href="a00022.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>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="a00248.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="a00248.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="a00248.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="a00248.html#8fc30e93f8342a1960357f71e4fe8a2b">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="a00248.html#068576d16c7e4e05d52f9db7a45b5b65">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="a00248.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="" -->
-typedef internal::concurrent_queue_iterator<<br>
- <a class="el" href="a00248.html">concurrent_queue</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9cd76d19af8c78be1bafc6ca0123ac0d"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::const_iterator" ref="9cd76d19af8c78be1bafc6ca0123ac0d" args="" -->
-typedef internal::concurrent_queue_iterator<<br>
- <a class="el" href="a00248.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="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="a00248.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a> (const <a class="el" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00248.html#5a3956341728eaa558d8827063718cac">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())" -->
-template<typename InputIterator> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00248.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00248.html#5a3956341728eaa558d8827063718cac">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="a00248.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a> (const <a class="el" href="a00248.html">concurrent_queue</a> &src, const <a class="el" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00248.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="a00248.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00248.html#73c47563ffcc4c2f6452f25a04ebe2e2">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="a00248.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a> (T &result)</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="a00248.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#eaa35a5274606779802e9a669a706260">unsafe_size</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="a00248.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a> () const </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="a00248.html#c32e8e84c0524155133b4aae32d2a827">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="f034f70caef445fe8abc9113ec926a8d"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::get_allocator" ref="f034f70caef445fe8abc9113ec926a8d" args="() const " -->
-<a class="el" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.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="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="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>
-
-<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>
-
-<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>
-
-<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>
-
-</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>
-Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
-<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)" -->
-<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">bool <a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue</a>< T, A >::try_pop           </td>
-          <td>(</td>
-          <td class="paramtype">T & </td>
-          <td class="paramname"> <em>result</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>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00432.html">concurrent_queue.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00249.html b/doc/html/a00249.html
index eb4207b..efaa794 100644
--- a/doc/html/a00249.html
+++ b/doc/html/a00249.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::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,131 +21,41 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>deprecated</b>::<a class="el" href="a00249.html">concurrent_queue</a></div>
-<h1>tbb::deprecated::concurrent_queue< T, A > Class Template Reference<br>
-<small>
-[<a class="el" href="a00396.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="a00414.html">tbb</a>::<a class="el" href="a00249.html">affinity_partitioner</a></div>
+<h1>tbb::affinity_partitioner Class Reference</h1><!-- doxytag: class="tbb::affinity_partitioner" --><!-- doxytag: inherits="tbb::internal::affinity_partitioner_base_v3" -->An affinity partitioner.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00432.html">concurrent_queue.h</a>></code>
+<code>#include <<a class="el" href="a00575.html">partitioner.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::deprecated::concurrent_queue< T, A >:
-<p><center><img src="a00249.png" usemap="#tbb::deprecated::concurrent_queue< T, A >_map" border="0" alt=""></center>
-<map name="tbb::deprecated::concurrent_queue< T, A >_map">
-<area href="a00242.html" alt="tbb::concurrent_bounded_queue< T, A >" shape="rect" coords="0,0,257,24">
+<p>Inheritance diagram for tbb::affinity_partitioner:
+<p><center><img src="a00249.png" usemap="#tbb::affinity_partitioner_map" border="0" alt=""></center>
+<map name="tbb::affinity_partitioner_map">
+<area href="a00250.html" alt="tbb::internal::affinity_partitioner_base_v3" shape="rect" coords="0,0,240,24">
 </map>
-<a href="a00025.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00104.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8861a9cdf232a20b5f2569754a281871"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::iterator" ref="8861a9cdf232a20b5f2569754a281871" args="" -->
-typedef <a class="el" href="a00242.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="a00242.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="a00249.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="a00249.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a> (const <a class="el" href="a00249.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="9102b897776bd2d9e908e6604ff16b5f"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="9102b897776bd2d9e908e6604ff16b5f" args="(InputIterator b, InputIterator e, 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="a00249.html#9102b897776bd2d9e908e6604ff16b5f">concurrent_queue</a> (InputIterator b, InputIterator e, 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="a00249.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="a00249.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 colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5f730f70d21df405adaebfc2018f59cd"></a><!-- doxytag: member="tbb::affinity_partitioner::serial::interface6::start_for" ref="5f730f70d21df405adaebfc2018f59cd" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>serial::interface6::start_for</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="8a4cd0ffed4fad0d9af2c5efdaf586a8"></a><!-- doxytag: member="tbb::affinity_partitioner::interface6::internal::start_for" ref="8a4cd0ffed4fad0d9af2c5efdaf586a8" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>interface6::internal::start_for</b></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 class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="86f0750233dd6c83b65fb684338fd09f"></a><!-- doxytag: member="tbb::affinity_partitioner::interface6::internal::start_reduce" ref="86f0750233dd6c83b65fb684338fd09f" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>interface6::internal::start_reduce</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="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>
 
 </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>
-
-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="a00249.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="a00242.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="a00249.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. 
+An affinity partitioner. 
 <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="a00432.html">concurrent_queue.h</a></ul>
+<li><a class="el" href="a00575.html">partitioner.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00249.png b/doc/html/a00249.png
index 6aac5a0..31d2cc3 100644
Binary files a/doc/html/a00249.png and b/doc/html/a00249.png differ
diff --git a/doc/html/a00250.html b/doc/html/a00250.html
index 20f6c0b..287624f 100644
--- a/doc/html/a00250.html
+++ b/doc/html/a00250.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::internal::affinity_partitioner_base_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,573 +21,35 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00250.html">concurrent_vector</a></div>
-<h1>tbb::concurrent_vector< T, A > Class Template Reference<br>
-<small>
-[<a class="el" href="a00396.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::concurrent_vector" -->Concurrent vector container.  
+<a class="el" href="a00414.html">tbb</a>::<b>internal</b>::<a class="el" href="a00250.html">affinity_partitioner_base_v3</a></div>
+<h1>tbb::internal::affinity_partitioner_base_v3 Class Reference</h1><!-- doxytag: class="tbb::internal::affinity_partitioner_base_v3" -->Defines entry point for affinity partitioner into tbb run-time library.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00443.html">concurrent_vector.h</a>></code>
+<code>#include <<a class="el" href="a00575.html">partitioner.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::internal::affinity_partitioner_base_v3:
+<p><center><img src="a00250.png" usemap="#tbb::internal::affinity_partitioner_base_v3_map" border="0" alt=""></center>
+<map name="tbb::internal::affinity_partitioner_base_v3_map">
+<area href="a00249.html" alt="tbb::affinity_partitioner" shape="rect" coords="0,56,240,80">
+</map>
+<a href="a00099.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public 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="a00250.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="a00250.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="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="a00250.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="a00250.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a> (const <a class="el" href="a00250.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="a00250.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a> (const <a class="el" href="a00250.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="a00250.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="a00250.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="a00250.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="a00250.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#691f0f3cda3e489c37a657016e375eaf">operator=</a> (const <a class="el" href="a00250.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="a00250.html">concurrent_vector</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00250.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a> (const <a class="el" href="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.html#1693d1da41b1a8235871be9c6633be35">compact</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An alias for <a class="el" href="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</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="a00250.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">reverse start iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="290119a4eb43cd6a9e98fa17016ba3c2"></a><!-- doxytag: member="tbb::concurrent_vector::rend" ref="290119a4eb43cd6a9e98fa17016ba3c2" args="()" -->
-reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a> (<a class="el" href="a00250.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="a00250.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="a00250.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"><a class="anchor" name="fa554f840d8ef010ff2650bac032ec01"></a><!-- doxytag: member="tbb::internal::affinity_partitioner_base_v3::tbb::affinity_partitioner" ref="fa554f840d8ef010ff2650bac032ec01" args="" -->
+class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#fa554f840d8ef010ff2650bac032ec01">tbb::affinity_partitioner</a></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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c6d1d1f136cb6105d06ddbcf67107575"></a><!-- doxytag: member="tbb::internal::affinity_partitioner_base_v3::tbb::interface6::internal::affinity_partition_type" ref="c6d1d1f136cb6105d06ddbcf67107575" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>tbb::interface6::internal::affinity_partition_type</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 T, class A><br>
- class tbb::concurrent_vector< T, A ></h3>
-
-Concurrent vector container. 
-<p>
-<a class="el" href="a00250.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="a00250.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="a00250.html#715fe313c4a9c22731cc404dd80c9ec9">concurrent_vector::size()</a> and <a class="el" href="a00250.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least()</a> methods to assure elements are allocated.</li><li>Methods <a class="el" href="a00250.html#c0b51160e5a764982ec97a455f94f2c6">end()</a>/rbegin()/back() are partly thread-safe since they use <a class="el" href="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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="a00250.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. 
+Defines entry point for affinity partitioner into tbb run-time library. 
 <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="a00443.html">concurrent_vector.h</a></ul>
+<li><a class="el" href="a00575.html">partitioner.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00226.png b/doc/html/a00250.png
similarity index 100%
rename from doc/html/a00226.png
rename to doc/html/a00250.png
diff --git a/doc/html/a00251.html b/doc/html/a00251.html
index 53ab362..af0be41 100644
--- a/doc/html/a00251.html
+++ b/doc/html/a00251.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::flow::interface6::continue_msg Class Reference</title>
+<title>tbb::interface6::aggregator Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,23 +21,58 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00251.html">continue_msg</a></div>
-<h1>tbb::flow::interface6::continue_msg Class Reference</h1><!-- doxytag: class="tbb::flow::interface6::continue_msg" -->An empty class used for messages that mean "I'm done".  
+<a class="el" href="a00414.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00251.html">aggregator</a></div>
+<h1>tbb::interface6::aggregator Class Reference</h1><!-- doxytag: class="tbb::interface6::aggregator" --><!-- doxytag: inherits="tbb::interface6::aggregator_ext" -->Basic aggregator interface.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00432.html">aggregator.h</a>></code>
 <p>
-<table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::interface6::aggregator:
+<p><center><img src="a00251.png" usemap="#tbb::interface6::aggregator_map" border="0" alt=""></center>
+<map name="tbb::interface6::aggregator_map">
+<area href="a00252.html" alt="tbb::interface6::aggregator_ext< handler_type >" shape="rect" coords="0,0,281,24">
+</map>
+<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 Member Functions</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template<typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00251.html#641c8dc43652589d12eefaef130c094d">execute</a> (const Body &b)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">BASIC INTERFACE: Enter a function for exclusvie execution by the aggregator.  <a href="#641c8dc43652589d12eefaef130c094d"></a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-An empty class used for messages that mean "I'm done". 
+Basic aggregator interface. 
 <p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="641c8dc43652589d12eefaef130c094d"></a><!-- doxytag: member="tbb::interface6::aggregator::execute" ref="641c8dc43652589d12eefaef130c094d" args="(const Body &b)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Body> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::interface6::aggregator::execute           </td>
+          <td>(</td>
+          <td class="paramtype">const Body & </td>
+          <td class="paramname"> <em>b</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+BASIC INTERFACE: Enter a function for exclusvie execution by the aggregator. 
+<p>
+The calling thread stores the function object in a basic_operation and places the operation in the aggregator's mailbox 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00432.html">aggregator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00251.png b/doc/html/a00251.png
new file mode 100644
index 0000000..123e10d
Binary files /dev/null and b/doc/html/a00251.png differ
diff --git a/doc/html/a00252.html b/doc/html/a00252.html
index 8ebd70d..4300fd3 100644
--- a/doc/html/a00252.html
+++ b/doc/html/a00252.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::flow::interface6::continue_node< Output > Class Template Reference</title>
+<title>tbb::interface6::aggregator_ext< handler_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,68 +21,90 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00252.html">continue_node</a></div>
-<h1>tbb::flow::interface6::continue_node< Output > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::continue_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node" -->Implements an executable node that supports <a class="el" href="a00251.html">continue_msg</a> -> Output.  
+<a class="el" href="a00414.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00252.html">aggregator_ext</a></div>
+<h1>tbb::interface6::aggregator_ext< handler_type > Class Template Reference</h1><!-- doxytag: class="tbb::interface6::aggregator_ext" -->Aggregator base class and expert interface.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00432.html">aggregator.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::continue_node< Output >:
-<p><center><img src="a00252.png" usemap="#tbb::flow::interface6::continue_node< Output >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::continue_node< Output >_map">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,271,24">
+<p>Inheritance diagram for tbb::interface6::aggregator_ext< handler_type >:
+<p><center><img src="a00252.png" usemap="#tbb::interface6::aggregator_ext< handler_type >_map" border="0" alt=""></center>
+<map name="tbb::interface6::aggregator_ext< handler_type >_map">
+<area href="a00251.html" alt="tbb::interface6::aggregator" shape="rect" coords="0,56,281,80">
 </map>
-<a href="a00054.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 Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7a06613c9cda6f13a6010e7f2f8d0c23"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::input_type" ref="7a06613c9cda6f13a6010e7f2f8d0c23" args="" -->
-typedef <a class="el" href="a00251.html">continue_msg</a> </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="01b4d78a352cfb7d62b5ce2d1baa24f3"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::output_type" ref="01b4d78a352cfb7d62b5ce2d1baa24f3" args="" -->
-typedef Output </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9ae7fda69d7d69c55cf8b57ae7b4b613"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::predecessor_type" ref="9ae7fda69d7d69c55cf8b57ae7b4b613" args="" -->
-typedef <a class="el" href="a00301.html">sender</a>< <a class="el" href="a00251.html">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5a647a2b302232fe9a8f44940987f21"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::successor_type" ref="d5a647a2b302232fe9a8f44940987f21" args="" -->
-typedef <a class="el" href="a00295.html">receiver</a>< output_type > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="868190ed9818d1d23eb65c87689657d5"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::fOutput_type" ref="868190ed9818d1d23eb65c87689657d5" args="" -->
-typedef internal::function_output<<br>
- output_type > </td><td class="memItemRight" valign="bottom"><b>fOutput_type</b></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="2f200db877d2f80c08d09422e8bffd5a"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::continue_node" ref="2f200db877d2f80c08d09422e8bffd5a" args="(graph &g, Body body)" -->
-template<typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#2f200db877d2f80c08d09422e8bffd5a">continue_node</a> (<a class="el" href="a00262.html">graph</a> &g, Body body)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor for executable node with <a class="el" href="a00251.html">continue_msg</a> -> Output. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="7817aebf22dd125ca04df53ac488d163"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::continue_node" ref="7817aebf22dd125ca04df53ac488d163" args="(graph &g, int number_of_predecessors, Body body)" -->
-template<typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00252.html#7817aebf22dd125ca04df53ac488d163">continue_node</a> (<a class="el" href="a00262.html">graph</a> &g, int number_of_predecessors, Body body)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="882115f59b5a15b2f4fc54178ad66cd9"></a><!-- doxytag: member="tbb::interface6::aggregator_ext::aggregator_ext" ref="882115f59b5a15b2f4fc54178ad66cd9" args="(const handler_type &h)" -->
+ </td><td class="memItemRight" valign="bottom"><b>aggregator_ext</b> (const handler_type &h)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor for executable node with <a class="el" href="a00251.html">continue_msg</a> -> Output. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="869562787fcb5c57a90aea120f26d492"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::continue_node" ref="869562787fcb5c57a90aea120f26d492" args="(const continue_node &src)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html#869562787fcb5c57a90aea120f26d492">continue_node</a> (const <a class="el" href="a00252.html">continue_node</a> &src)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html#ccd88bf4333dc100ba97da8e2170277d">process</a> (aggregator_operation *op)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.  <a href="#ccd88bf4333dc100ba97da8e2170277d"></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="23d3b09e13e2dbc32a6308a821e8ba29"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::successors" ref="23d3b09e13e2dbc32a6308a821e8ba29" args="()" -->
-internal::broadcast_cache<<br>
- output_type > & </td><td class="memItemRight" valign="bottom"><b>successors</b> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html#fdd0a9ce522246b9e14ae5e44bc72d31">execute_impl</a> (aggregator_operation &op)</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Output><br>
- class tbb::flow::interface6::continue_node< Output ></h3>
+<h3>template<typename handler_type><br>
+ class tbb::interface6::aggregator_ext< handler_type ></h3>
 
-Implements an executable node that supports <a class="el" href="a00251.html">continue_msg</a> -> Output. 
+Aggregator base class and expert interface. 
+<p>
+An aggregator for collecting operations coming from multiple sources and executing them serially on a single thread. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="fdd0a9ce522246b9e14ae5e44bc72d31"></a><!-- doxytag: member="tbb::interface6::aggregator_ext::execute_impl" ref="fdd0a9ce522246b9e14ae5e44bc72d31" args="(aggregator_operation &op)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename handler_type> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00252.html">tbb::interface6::aggregator_ext</a>< handler_type >::execute_impl           </td>
+          <td>(</td>
+          <td class="paramtype">aggregator_operation & </td>
+          <td class="paramname"> <em>op</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, protected]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Place operation in mailbox, then either handle mailbox or wait for the operation to be completed by a different thread. 
+</div>
+</div><p>
+<a class="anchor" name="ccd88bf4333dc100ba97da8e2170277d"></a><!-- doxytag: member="tbb::interface6::aggregator_ext::process" ref="ccd88bf4333dc100ba97da8e2170277d" args="(aggregator_operation *op)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename handler_type> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00252.html">tbb::interface6::aggregator_ext</a>< handler_type >::process           </td>
+          <td>(</td>
+          <td class="paramtype">aggregator_operation * </td>
+          <td class="paramname"> <em>op</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox. 
 <p>
+Details of user-made operations must be handled by user-provided handler 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00432.html">aggregator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00252.png b/doc/html/a00252.png
index 97eb6db..0f01bcf 100644
Binary files a/doc/html/a00252.png and b/doc/html/a00252.png differ
diff --git a/doc/html/a00253.html b/doc/html/a00253.html
index 696e637..2e7bd94 100644
--- a/doc/html/a00253.html
+++ b/doc/html/a00253.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::flow::interface6::continue_receiver 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,145 +21,40 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00253.html">continue_receiver</a></div>
-<h1>tbb::flow::interface6::continue_receiver Class Reference</h1><!-- doxytag: class="tbb::flow::interface6::continue_receiver" --><!-- doxytag: inherits="tbb::flow::interface6::receiver" -->Base class for receivers of completion messages.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00253.html">aligned_space</a></div>
+<h1>tbb::aligned_space< T, N > Class Template Reference<br>
+<small>
+[<a class="el" href="a00428.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="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00440.html">aligned_space.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::continue_receiver:
-<p><center><img src="a00253.png" usemap="#tbb::flow::interface6::continue_receiver_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::continue_receiver_map">
-<area href="a00295.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="0,0,230,24">
-</map>
-<a href="a00043.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="3c43c166af832d9187035985841e0a7f"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::input_type" ref="3c43c166af832d9187035985841e0a7f" args="" -->
-typedef <a class="el" href="a00251.html">continue_msg</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#3c43c166af832d9187035985841e0a7f">input_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f9c58b3e9c46afd2518d0fd8957a5a2f"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::predecessor_type" ref="f9c58b3e9c46afd2518d0fd8957a5a2f" args="" -->
-typedef <a class="el" href="a00301.html">sender</a>< <a class="el" href="a00251.html">continue_msg</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#f9c58b3e9c46afd2518d0fd8957a5a2f">predecessor_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <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="177db82d548a1f8471371331890b91a8"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::continue_receiver" ref="177db82d548a1f8471371331890b91a8" args="(int number_of_predecessors=0)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#177db82d548a1f8471371331890b91a8">continue_receiver</a> (int number_of_predecessors=0)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0b292ed7fa6556b2a735f6d1e82dc74"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::continue_receiver" ref="a0b292ed7fa6556b2a735f6d1e82dc74" args="(const continue_receiver &src)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a0b292ed7fa6556b2a735f6d1e82dc74">continue_receiver</a> (const <a class="el" href="a00253.html">continue_receiver</a> &src)</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="1e14828fa079b9835ff7267df5ee45d7"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::~continue_receiver" ref="1e14828fa079b9835ff7267df5ee45d7" args="()" -->
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#1e14828fa079b9835ff7267df5ee45d7">~continue_receiver</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="2fcfa4990a42417bbeb1f3c8b9ac8a22"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::register_predecessor" ref="2fcfa4990a42417bbeb1f3c8b9ac8a22" args="(predecessor_type &)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">register_predecessor</a> (<a class="el" href="a00301.html">predecessor_type</a> &)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Increments the trigger threshold. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#cb691b18416d4742265aed84d496ebbd">remove_predecessor</a> (<a class="el" href="a00301.html">predecessor_type</a> &)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Decrements the trigger threshold.  <a href="#cb691b18416d4742265aed84d496ebbd"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#3969c70fb89c0a982f142ae9eb5facae">try_put</a> (const <a class="el" href="a00251.html">input_type</a> &)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Puts a <a class="el" href="a00251.html">continue_msg</a> to the receiver.  <a href="#3969c70fb89c0a982f142ae9eb5facae"></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">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#40ca8b7e96c5bc3428b4d1e409725ee5">execute</a> ()=0</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Does whatever should happen when the threshold is reached.  <a href="#40ca8b7e96c5bc3428b4d1e409725ee5"></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="5cddbd33109e94a68fb5457682a62110"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::my_mutex" ref="5cddbd33109e94a68fb5457682a62110" args="" -->
-<a class="el" href="a00305.html">spin_mutex</a> </td><td class="memItemRight" valign="bottom"><b>my_mutex</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="66df49f67e70e7f8e9831d0e362ba84c"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::my_predecessor_count" ref="66df49f67e70e7f8e9831d0e362ba84c" args="" -->
-int </td><td class="memItemRight" valign="bottom"><b>my_predecessor_count</b></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="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05fd1ce3c3fd7be3e74817b31fd2f068"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::my_current_count" ref="05fd1ce3c3fd7be3e74817b31fd2f068" args="" -->
-int </td><td class="memItemRight" valign="bottom"><b>my_current_count</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a0d4c3084fd13902c2d38f31c1dc232"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::my_initial_predecessor_count" ref="8a0d4c3084fd13902c2d38f31c1dc232" args="" -->
-int </td><td class="memItemRight" valign="bottom"><b>my_initial_predecessor_count</b></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="a00253.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>
-Base class for receivers of completion messages. 
-<p>
-These receivers automatically reset, but cannot be explicitly waited on 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="40ca8b7e96c5bc3428b4d1e409725ee5"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::execute" ref="40ca8b7e96c5bc3428b4d1e409725ee5" args="()=0" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">virtual void tbb::flow::interface6::continue_receiver::execute           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [protected, pure virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Does whatever should happen when the threshold is reached. 
-<p>
-This should be very fast or else spawn a task. This is called while the sender is blocked in the <a class="el" href="a00253.html#3969c70fb89c0a982f142ae9eb5facae">try_put()</a>. 
-</div>
-</div><p>
-<a class="anchor" name="cb691b18416d4742265aed84d496ebbd"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::remove_predecessor" ref="cb691b18416d4742265aed84d496ebbd" args="(predecessor_type &)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::flow::interface6::continue_receiver::remove_predecessor           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00301.html">predecessor_type</a> & </td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Decrements the trigger threshold. 
-<p>
-Does not check to see if the removal of the predecessor now makes the current count exceed the new threshold. So removing a predecessor while the graph is active can cause unexpected results. 
-</div>
-</div><p>
-<a class="anchor" name="3969c70fb89c0a982f142ae9eb5facae"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::try_put" ref="3969c70fb89c0a982f142ae9eb5facae" args="(const input_type &)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::flow::interface6::continue_receiver::try_put           </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="a00251.html">input_type</a> & </td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+<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>
-Puts a <a class="el" href="a00251.html">continue_msg</a> to the receiver. 
+The elements are not constructed or destroyed by this class. 
 <p>
-If the message causes the message count to reach the predecessor count, <a class="el" href="a00253.html#40ca8b7e96c5bc3428b4d1e409725ee5">execute()</a> is called and the message count is reset to 0. Otherwise the message count is incremented. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00440.html">aligned_space.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00254.html b/doc/html/a00254.html
index 9624512..5acb7a9 100644
--- a/doc/html/a00254.html
+++ b/doc/html/a00254.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::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,31 +21,38 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00254.html">empty_task</a></div>
-<h1>tbb::empty_task Class Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00254.html">atomic</a></div>
+<h1>tbb::atomic< T > Struct Template Reference<br>
 <small>
-[<a class="el" href="a00400.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="a00429.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="a00567.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00441.html">atomic.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::empty_task:
-<p><center><img src="a00254.png" usemap="#tbb::empty_task_map" border="0" alt=""></center>
-<map name="tbb::empty_task_map">
-<area href="a00311.html" alt="tbb::task" shape="rect" coords="0,0,97,24">
-</map>
-<a href="a00120.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00008.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="a00254.html">atomic</a>< T > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00254.html">atomic</a>< T > &rhs)</td></tr>
+
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-task that does nothing. Useful for synchronization. 
+<h3>template<typename T><br>
+ struct tbb::atomic< T ></h3>
+
+Primary template for atomic. 
 <p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00567.html">task.h</a></ul>
+See the Reference for details. 
+<p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00441.html">atomic.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00255.html b/doc/html/a00255.html
index 51b8f44..6b2eece 100644
--- a/doc/html/a00255.html
+++ b/doc/html/a00255.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::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > 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,174 +21,33 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00255.html">enumerable_thread_specific</a></div>
-<h1>tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference<br>
-<small>
-[<a class="el" href="a00396.html">Containers</a>]</small>
-</h1><!-- doxytag: class="tbb::interface6::enumerable_thread_specific" -->The <a class="el" href="a00255.html">enumerable_thread_specific</a> container.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00255.html">atomic< void * ></a></div>
+<h1>tbb::atomic< void * > Struct Template Reference</h1><!-- doxytag: class="tbb::atomic< void * >" -->Specialization for <a class="el" href="a00255.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00455.html">enumerable_thread_specific.h</a>></code>
+<code>#include <<a class="el" href="a00441.html">atomic.h</a>></code>
 <p>
-<a href="a00036.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="3c03eb40955b933b01987222722ac4bd"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::allocator_type" ref="3c03eb40955b933b01987222722ac4bd" args="" -->
-typedef Allocator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#3c03eb40955b933b01987222722ac4bd">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="e93f3b75e82eaa845cc1a0514eaba31a"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::value_type" ref="e93f3b75e82eaa845cc1a0514eaba31a" 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="0fd259a6b20641c768079f41d3213904"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::reference" ref="0fd259a6b20641c768079f41d3213904" 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="2c1d47e24439524fea72d9c10df25d54"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::const_reference" ref="2c1d47e24439524fea72d9c10df25d54" 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="27cf20b87f4381a69203aed11e5a34dc"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::pointer" ref="27cf20b87f4381a69203aed11e5a34dc" 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="0e132e2a40dd6ce5472f8e13a1e80947"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::const_pointer" ref="0e132e2a40dd6ce5472f8e13a1e80947" 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="c67c208bec3e8b77190d545bd1f150e3"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::size_type" ref="c67c208bec3e8b77190d545bd1f150e3" 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="eda9be9a80bed094d4657948b5b7831f"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::difference_type" ref="eda9be9a80bed094d4657948b5b7831f" 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="bd6f8e0af3c5e5166a4223f88b03e0a5"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::iterator" ref="bd6f8e0af3c5e5166a4223f88b03e0a5" args="" -->
-typedef internal::enumerable_thread_specific_iterator<<br>
- <a class="el" href="a00250.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="8ff2ff1a117048f5d57aedebb12d57e1"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::const_iterator" ref="8ff2ff1a117048f5d57aedebb12d57e1" args="" -->
-typedef internal::enumerable_thread_specific_iterator<<br>
- <a class="el" href="a00250.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="d4c23a666adbf88bd3280873de9d7f39"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::range_type" ref="d4c23a666adbf88bd3280873de9d7f39" 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="0ce41c6603d8f547f11df05d1ccb2184"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::const_range_type" ref="0ce41c6603d8f547f11df05d1ccb2184" 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="0cfa3a5c8f2be3bbf313d93b1fa8cdb3"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::enumerable_thread_specific" ref="0cfa3a5c8f2be3bbf313d93b1fa8cdb3" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#0cfa3a5c8f2be3bbf313d93b1fa8cdb3">enumerable_thread_specific</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. Each local instance of T is default constructed. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="8d4b456ff9d7b289c73254eccc11db45"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::enumerable_thread_specific" ref="8d4b456ff9d7b289c73254eccc11db45" 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="a00255.html#8d4b456ff9d7b289c73254eccc11db45">enumerable_thread_specific</a> (Finit finit)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor with initializer functor. Each local instance of T is constructed by T(finit()). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7bce6829981c9efe3f59cae2355e383e"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::enumerable_thread_specific" ref="7bce6829981c9efe3f59cae2355e383e" args="(const T &exemplar)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#7bce6829981c9efe3f59cae2355e383e">enumerable_thread_specific</a> (const T &exemplar)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constuctor with exemplar. Each local instance of T is copied-constructed from the exemplar. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5a7907d9e3e5b18e7a7b55211ef3213f"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::~enumerable_thread_specific" ref="5a7907d9e3e5b18e7a7b55211ef3213f" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#5a7907d9e3e5b18e7a7b55211ef3213f">~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="c8d5265ccbd5e4485996b3f3baaa5ba1"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::local" ref="c8d5265ccbd5e4485996b3f3baaa5ba1" args="()" -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#c8d5265ccbd5e4485996b3f3baaa5ba1">local</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="7dc79058d2832f7447de8e691c3455ea"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::local" ref="7dc79058d2832f7447de8e691c3455ea" args="(bool &exists)" -->
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#7dc79058d2832f7447de8e691c3455ea">local</a> (bool &exists)</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="33fd6593da1ed14340f10f67d5a69130"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::size" ref="33fd6593da1ed14340f10f67d5a69130" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#33fd6593da1ed14340f10f67d5a69130">size</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">Get the number of local copies. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="72595886d0ac8fd0543f90038570510d"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::empty" ref="72595886d0ac8fd0543f90038570510d" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#72595886d0ac8fd0543f90038570510d">empty</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="a00254.html">atomic</a>< void * > & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00254.html">atomic</a>< void * > &rhs)</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="01d7baf8e913ab2819e97917a2ac795f"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::begin" ref="01d7baf8e913ab2819e97917a2ac795f" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#01d7baf8e913ab2819e97917a2ac795f">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="2456ff88252fc921b01cd8907628a4ee"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::end" ref="2456ff88252fc921b01cd8907628a4ee" args="()" -->
-iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#2456ff88252fc921b01cd8907628a4ee">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="84afb3906a39e399cde1c950d6351300"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::begin" ref="84afb3906a39e399cde1c950d6351300" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#84afb3906a39e399cde1c950d6351300">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="cb448bb4977ce366ceb7344085cc7050"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::end" ref="cb448bb4977ce366ceb7344085cc7050" args="() const " -->
-const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#cb448bb4977ce366ceb7344085cc7050">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="b22c54990b2362cd93c1a8f73de140bc"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::range" ref="b22c54990b2362cd93c1a8f73de140bc" args="(size_t grainsize=1)" -->
-range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#b22c54990b2362cd93c1a8f73de140bc">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="3b068000cf4dbf9b40f8bb7e3fc53e0b"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::range" ref="3b068000cf4dbf9b40f8bb7e3fc53e0b" args="(size_t grainsize=1) const " -->
-const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">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="a8764176d4b6014c5d65f1051851abc8"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::clear" ref="a8764176d4b6014c5d65f1051851abc8" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html#a8764176d4b6014c5d65f1051851abc8">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="43bbf3a313c5431559df2946f76221e0"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::enumerable_thread_specific" ref="43bbf3a313c5431559df2946f76221e0" 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="a00255.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="25a9c336cfd5a171c29cbdd0feb84249"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::enumerable_thread_specific" ref="25a9c336cfd5a171c29cbdd0feb84249" args="(const enumerable_thread_specific &other)" -->
- </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00255.html">enumerable_thread_specific</a> &other)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1f8f467eb4c44c58614d0f9dce687477"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::operator=" ref="1f8f467eb4c44c58614d0f9dce687477" args="(const enumerable_thread_specific &other)" -->
-<a class="el" href="a00255.html">enumerable_thread_specific</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00255.html">enumerable_thread_specific</a> &other)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="0e7ebbfd8e04eb22fe59b581206e7888"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::operator=" ref="0e7ebbfd8e04eb22fe59b581206e7888" 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="a00255.html">enumerable_thread_specific</a> & </td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00255.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="1eac7eff6e21b7fc299b67acb36eb3c7"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::combine" ref="1eac7eff6e21b7fc299b67acb36eb3c7" 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="f671d7bd4c1d3a750b4be4c32a489c55"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::combine_each" ref="f671d7bd4c1d3a750b4be4c32a489c55" 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 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::interface6::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>
 </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::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></h3>
-
-The <a class="el" href="a00255.html">enumerable_thread_specific</a> container. 
-<p>
-<a class="el" href="a00255.html">enumerable_thread_specific</a> has the following properties:<ul>
-<li>thread-local copies are lazily created, with default, exemplar or function initialization.</li><li>thread-local copies do not move (during lifetime, and excepting <a class="el" href="a00255.html#a8764176d4b6014c5d65f1051851abc8">clear()</a>) so the address of a copy is invariant.</li><li>the contained objects need not have operator=() defined if combine is not used.</li><li><a class="el" href="a00255.html">enumerable_thread_specific</a> containers may be copy-constructed or assigned. [...]
-<p>
-<dl compact><dt><b>Segmented iterator</b></dt><dd>When the thread-local objects are containers with input_iterators defined, a segmented iterator may be used to iterate over all the elements of all thread-local copies.</dd></dl>
-<dl compact><dt><b>combine and combine_each</b></dt><dd><ul>
-<li>Both methods are defined for <a class="el" href="a00255.html">enumerable_thread_specific</a>.</li><li>combine() requires the the type T have operator=() defined.</li><li>neither method modifies the contents of the object (though there is no guarantee that the applied methods do not modify the object.)</li><li>Both are evaluated in serial context (the methods are assumed to be non-benign.) </li></ul>
-</dd></dl>
+<h3>template<><br>
+ struct tbb::atomic< void * ></h3>
 
+Specialization for <a class="el" href="a00255.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="a00455.html">enumerable_thread_specific.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00441.html">atomic.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00256.html b/doc/html/a00256.html
index 7ebc5a4..bd57357 100644
--- a/doc/html/a00256.html
+++ b/doc/html/a00256.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::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,213 +21,36 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00256.html">filter</a></div>
-<h1>tbb::filter Class Reference<br>
-<small>
-[<a class="el" href="a00395.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::filter" -->A stage in a pipeline.  
+<a class="el" href="a00414.html">tbb</a>::<b>internal</b>::<a class="el" href="a00256.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="a00543.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00640.html">tbb_machine.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::filter:
-<p><center><img src="a00256.png" usemap="#tbb::filter_map" border="0" alt=""></center>
-<map name="tbb::filter_map">
-<area href="a00322.html" alt="tbb::thread_bound_filter" shape="rect" coords="0,56,145,80">
-</map>
-<a href="a00091.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00165.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="fcfec27656a69ff2072802ac001e936f"></a><!-- doxytag: member="tbb::filter::is_serial" ref="fcfec27656a69ff2072802ac001e936f" args="() const " -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html#fcfec27656a69ff2072802ac001e936f">is_serial</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="a00256.html#a174ea93e3bd3d5cce82389c2f28d037">pause</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="a00256.html#cd53206c4795ef2df5df26b795caf692">is_ordered</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 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="a00256.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"><a class="anchor" name="8ec4dfe053e94a2349d56781ddea8477"></a><!-- doxytag: member="tbb::filter::object_may_be_null" ref="8ec4dfe053e94a2349d56781ddea8477" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html#8ec4dfe053e94a2349d56781ddea8477">object_may_be_null</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">true if an input filter can emit null <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.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="a00256.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="a00256.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="1edba30e1e64e82ee4b7c6f227825817"></a><!-- doxytag: member="tbb::filter::x1" ref="1edba30e1e64e82ee4b7c6f227825817" args="((is_serial_?serial:parallel)|exact_exception_propagation))" -->
- </td><td class="memItemRight" valign="bottom"><b>x1</b> ((is_serial_?serial:parallel)|<a class="el" href="a00256.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a>))</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a06145c3e7ad273ece95eb8be642b0a2"></a><!-- doxytag: member="tbb::filter::prev_filter_in_pipeline" ref="a06145c3e7ad273ece95eb8be642b0a2" args="(not_in_pipeline())" -->
- </td><td class="memItemRight" valign="bottom"><b>prev_filter_in_pipeline</b> (not_in_pipeline())</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7a54082a9165275bf7725970d756f132"></a><!-- doxytag: member="tbb::filter::my_pipeline" ref="7a54082a9165275bf7725970d756f132" args="(NULL)" -->
- </td><td class="memItemRight" valign="bottom"><b>my_pipeline</b> (NULL)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d66d6e9e27b1be74fdb9c07f899d4837"></a><!-- doxytag: member="tbb::filter::next_segment" ref="d66d6e9e27b1be74fdb9c07f899d4837" args="(NULL)" -->
- </td><td class="memItemRight" valign="bottom"><b>next_segment</b> (NULL)</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> (mode filter_mode)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2b9c0dd8123a8186b46bc100d9469f5"></a><!-- doxytag: member="tbb::filter::set_end_of_input" ref="b2b9c0dd8123a8186b46bc100d9469f5" args="()" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>set_end_of_input</b> ()</td></tr>
-
-<tr><td colspan="2"><br><h2>Static Protected Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b7de3a76e744f3d9c1bc5d437ea851d"></a><!-- doxytag: member="tbb::filter::filter_is_serial" ref="4b7de3a76e744f3d9c1bc5d437ea851d" args="" -->
-static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a> = 0x1</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The lowest bit 0 is for parallel vs. serial. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a> = 0x1<<4</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">4th bit distinguishes ordered vs unordered filters.  <a href="#2e5eb65f95d8050186278077e433c5b1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dd6a6e7210efc9bcaf2c5e08767d92b5"></a><!-- doxytag: member="tbb::filter::filter_is_bound" ref="dd6a6e7210efc9bcaf2c5e08767d92b5" args="" -->
-static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a> = 0x1<<5</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">5th bit distinguishes thread-bound and regular filters. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bdd02a434a6e7499dd1e8f43aae96793"></a><!-- doxytag: member="tbb::filter::filter_may_emit_null" ref="bdd02a434a6e7499dd1e8f43aae96793" args="" -->
-static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a> = 0x1<<6</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">6th bit marks input filters emitting small objects <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">7th bit defines exception propagation mode expected by the application.  <a href="#f17200974c33be21f42a5f00893de028"></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="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="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>
-A stage in a pipeline. 
-<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>
-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><h2>Member Data Documentation</h2>
-<a class="anchor" name="f17200974c33be21f42a5f00893de028"></a><!-- doxytag: member="tbb::filter::exact_exception_propagation" ref="f17200974c33be21f42a5f00893de028" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const unsigned char <a class="el" href="a00256.html#f17200974c33be21f42a5f00893de028">tbb::filter::exact_exception_propagation</a><code> [static, protected]</code>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-<b>Initial value:</b><div class="fragment"><pre class="fragment">
-<span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<span class="preprocessor">            0x0</span>
-</pre></div>7th bit defines exception propagation mode expected by the application. 
-<p>
-
-</div>
-</div><p>
-<a class="anchor" name="2e5eb65f95d8050186278077e433c5b1"></a><!-- doxytag: member="tbb::filter::filter_is_out_of_order" ref="2e5eb65f95d8050186278077e433c5b1" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const unsigned char <a class="el" href="a00256.html#2e5eb65f95d8050186278077e433c5b1">tbb::filter::filter_is_out_of_order</a> = 0x1<<4<code> [static, protected]</code>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
+Class that implements exponential backoff. 
 <p>
-4th bit distinguishes ordered vs unordered filters. 
+See implementation of spin_wait_while_eq for an example. 
 <p>
-The bit was not set for parallel filters in TBB 2.1 and earlier, but <a class="el" href="a00256.html#cd53206c4795ef2df5df26b795caf692">is_ordered()</a> function always treats parallel filters as out of order. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00543.html">pipeline.h</a></ul>
+<li><a class="el" href="a00640.html">tbb_machine.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00257.html b/doc/html/a00257.html
index 6c49c54..ad7e043 100644
--- a/doc/html/a00257.html
+++ b/doc/html/a00257.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::interface6::filter_t< T, U > 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,53 +21,41 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00257.html">filter_t</a></div>
-<h1>tbb::interface6::filter_t< T, U > Class Template Reference</h1><!-- doxytag: class="tbb::interface6::filter_t" -->Class representing a chain of type-safe pipeline filters.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00257.html">auto_partitioner</a></div>
+<h1>tbb::auto_partitioner Class Reference<br>
+<small>
+[<a class="el" href="a00426.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="a00543.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00575.html">partitioner.h</a>></code>
 <p>
-<a href="a00095.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00103.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="af1a36ca22e38eacd72eb256ee2ecef0"></a><!-- doxytag: member="tbb::interface6::filter_t::filter_t" ref="af1a36ca22e38eacd72eb256ee2ecef0" args="(const filter_t< T, U > &rhs)" -->
- </td><td class="memItemRight" valign="bottom"><b>filter_t</b> (const <a class="el" href="a00257.html">filter_t</a>< T, U > &rhs)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b80632a312f984a16b2a0db77859ee08"></a><!-- doxytag: member="tbb::interface6::filter_t::filter_t" ref="b80632a312f984a16b2a0db77859ee08" args="(tbb::filter::mode mode, const Body &body)" -->
-template<typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>filter_t</b> (tbb::filter::mode mode, const Body &body)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2d87c68b6beaff12dcec7231d96d7b4c"></a><!-- doxytag: member="tbb::interface6::filter_t::operator=" ref="2d87c68b6beaff12dcec7231d96d7b4c" args="(const filter_t< T, U > &rhs)" -->
-void </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00257.html">filter_t</a>< T, U > &rhs)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f299d149b932c2c78006c6f703b83eef"></a><!-- doxytag: member="tbb::interface6::filter_t::clear" ref="f299d149b932c2c78006c6f703b83eef" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><b>clear</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="fff802cb5656e3788a89f3314aed2efe"></a><!-- doxytag: member="tbb::interface6::filter_t::internal::pipeline_proxy" ref="fff802cb5656e3788a89f3314aed2efe" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_proxy</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5f730f70d21df405adaebfc2018f59cd"></a><!-- doxytag: member="tbb::auto_partitioner::serial::interface6::start_for" ref="5f730f70d21df405adaebfc2018f59cd" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>serial::interface6::start_for</b></td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="85c2892eff1fddcd06e28911e75838bd"></a><!-- doxytag: member="tbb::interface6::filter_t::make_filter" ref="85c2892eff1fddcd06e28911e75838bd" args="(tbb::filter::mode, const Body &)" -->
-template<typename T_, typename U_, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00257.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00257.html#85c2892eff1fddcd06e28911e75838bd">make_filter</a> (tbb::filter::mode, const Body &)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a4cd0ffed4fad0d9af2c5efdaf586a8"></a><!-- doxytag: member="tbb::auto_partitioner::interface6::internal::start_for" ref="8a4cd0ffed4fad0d9af2c5efdaf586a8" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>interface6::internal::start_for</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Create a filter to participate in parallel_pipeline. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="6b9b1f5ce7f2121f093b8cd1d84707ad"></a><!-- doxytag: member="tbb::interface6::filter_t::operator &" ref="6b9b1f5ce7f2121f093b8cd1d84707ad" args="(const filter_t< T_, V_ > &, const filter_t< V_, U_ > &)" -->
-template<typename T_, typename V_, typename U_> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00257.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><b>operator &</b> (const <a class="el" href="a00257.html">filter_t</a>< T_, V_ > &, const <a class="el" href="a00257.html">filter_t</a>< V_, U_ > &)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="86f0750233dd6c83b65fb684338fd09f"></a><!-- doxytag: member="tbb::auto_partitioner::interface6::internal::start_reduce" ref="86f0750233dd6c83b65fb684338fd09f" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>interface6::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="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, typename U><br>
- class tbb::interface6::filter_t< T, U ></h3>
-
-Class representing a chain of type-safe pipeline filters. 
+An auto partitioner. 
+<p>
+The range is initial divided into several large chunks. Chunks are further subdivided into smaller pieces if demand detected and they are divisible. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00543.html">pipeline.h</a></ul>
+<li><a class="el" href="a00575.html">partitioner.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00258.html b/doc/html/a00258.html
index 75898ea..86ac2f2 100644
--- a/doc/html/a00258.html
+++ b/doc/html/a00258.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::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,30 +21,27 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00258.html">final_scan_tag</a></div>
-<h1>tbb::final_scan_tag Struct Reference<br>
-<small>
-[<a class="el" href="a00395.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="a00414.html">tbb</a>::<a class="el" href="a00258.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="a00518.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00639.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00083.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00152.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 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>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Used to indicate that the final scan is being performed. 
+Exception for concurrent containers. 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00518.html">parallel_scan.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00639.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00259.html b/doc/html/a00259.html
index bd90879..84c752a 100644
--- a/doc/html/a00259.html
+++ b/doc/html/a00259.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::interface6::flow_control 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,31 +21,201 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00259.html">flow_control</a></div>
-<h1>tbb::interface6::flow_control Class Reference</h1><!-- doxytag: class="tbb::interface6::flow_control" -->input_filter control to signal end-of-input for parallel_pipeline  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00259.html">blocked_range</a></div>
+<h1>tbb::blocked_range< Value > Class Template Reference<br>
+<small>
+[<a class="el" href="a00426.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="a00543.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00449.html">blocked_range.h</a>></code>
 <p>
-<a href="a00094.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00010.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="a00259.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="a00259.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="4b2c7123577587e3c26506db3e5abe62"></a><!-- doxytag: member="tbb::interface6::flow_control::stop" ref="4b2c7123577587e3c26506db3e5abe62" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><b>stop</b> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.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="a00259.html#14795a36ead1414b4371dbe1a4656359">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00259.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="a00259.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.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="a00259.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.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="a00259.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.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="a00259.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a> () const </td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The grain size for this range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8f4f02f530eb3f2e7ea26e06f76aef9d"></a><!-- doxytag: member="tbb::blocked_range::empty" ref="8f4f02f530eb3f2e7ea26e06f76aef9d" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.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="a00259.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="a00259.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">blocked_range</a> (<a class="el" href="a00259.html">blocked_range</a> &r, <a class="el" href="a00335.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="15bb80e25fbcc4213e0053d558df6462"></a><!-- doxytag: member="tbb::interface6::flow_control::internal::concrete_filter" ref="15bb80e25fbcc4213e0053d558df6462" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::concrete_filter</b></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>
-input_filter control to signal end-of-input for parallel_pipeline 
+<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="a00259.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00259.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="a00259.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="a00259.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00259.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="a00259.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00259.html">blocked_range</a>           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00259.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="a00335.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="a00259.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00259.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="a00259.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="a00259.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00259.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="a00259.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="el" href="a00259.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">
+
+<p>
+Size of the range. 
 <p>
+Unspecified if <a class="el" href="a00259.html#8b929d93ddc13f148b11bceef3a3bdf8">end()</a><<a class="el" href="a00259.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="a00543.html">pipeline.h</a></ul>
+<li><a class="el" href="a00449.html">blocked_range.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00260.html b/doc/html/a00260.html
index 91ec502..330e299 100644
--- a/doc/html/a00260.html
+++ b/doc/html/a00260.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::flow::interface6::function_node< Input, Output,, Allocator > 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,63 +21,63 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00260.html">function_node</a></div>
-<h1>tbb::flow::interface6::function_node< Input, Output,, Allocator > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::function_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node" -->Implements a function node that supports Input -> Output.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00260.html">blocked_range2d</a></div>
+<h1>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference<br>
+<small>
+[<a class="el" href="a00426.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="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00450.html">blocked_range2d.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::function_node< Input, Output,, Allocator >:
-<p><center><img src="a00260.png" usemap="#tbb::flow::interface6::function_node< Input, Output,, Allocator >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::function_node< Input, Output,, Allocator >_map">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,368,24">
-</map>
-<a href="a00048.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="eed5be58daf252aebed0df276ef9829b"></a><!-- doxytag: member="tbb::flow::interface6::function_node::input_type" ref="eed5be58daf252aebed0df276ef9829b" args="" -->
-typedef Input </td><td class="memItemRight" valign="bottom"><b>input_type</b></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="a00259.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html#a807a22fe658ec38b8edfd69521d0383">row_range_type</a></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6b1ada4ae95bcc11f3ecc7d8b407038"></a><!-- doxytag: member="tbb::flow::interface6::function_node::output_type" ref="a6b1ada4ae95bcc11f3ecc7d8b407038" args="" -->
-typedef Output </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteration 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="a00259.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7bffd3b755433095325cc554ea2ae752"></a><!-- doxytag: member="tbb::flow::interface6::function_node::predecessor_type" ref="7bffd3b755433095325cc554ea2ae752" args="" -->
-typedef <a class="el" href="a00301.html">sender</a>< input_type > </td><td class="memItemRight" valign="bottom"><b>predecessor_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="a00259.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00259.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="c24f9bbb872a81053cea4f38e214f458"></a><!-- doxytag: member="tbb::flow::interface6::function_node::successor_type" ref="c24f9bbb872a81053cea4f38e214f458" args="" -->
-typedef <a class="el" href="a00295.html">receiver</a>< output_type > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></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="6bde48df8336f0bdc4fbb8c1879e13d6"></a><!-- doxytag: member="tbb::flow::interface6::function_node::fOutput_type" ref="6bde48df8336f0bdc4fbb8c1879e13d6" args="" -->
-typedef internal::function_output<<br>
- output_type > </td><td class="memItemRight" valign="bottom"><b>fOutput_type</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="a00260.html#d144cb2d88cef553420311aca8667a44">empty</a> () const </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="5c215b40e3daf73d1c6802ecb5aded6c"></a><!-- doxytag: member="tbb::flow::interface6::function_node::function_node" ref="5c215b40e3daf73d1c6802ecb5aded6c" args="(graph &g, size_t concurrency, Body body)" -->
-template<typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00260.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a> (<a class="el" href="a00262.html">graph</a> &g, size_t concurrency, Body body)</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="a00260.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="a00260.html">blocked_range2d</a> &r, <a class="el" href="a00335.html">split</a>)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5132323fd2ac6a00ea0c78beda78723"></a><!-- doxytag: member="tbb::flow::interface6::function_node::function_node" ref="d5132323fd2ac6a00ea0c78beda78723" args="(const function_node &src)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html#d5132323fd2ac6a00ea0c78beda78723">function_node</a> (const <a class="el" href="a00260.html">function_node</a> &src)</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="a00259.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html#f496e7348a82652fba581203477cc07c">rows</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <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="ffad8dcf70ebebc751dcf2c82cd5e1ad"></a><!-- doxytag: member="tbb::flow::interface6::function_node::successors" ref="ffad8dcf70ebebc751dcf2c82cd5e1ad" args="()" -->
-internal::broadcast_cache<<br>
- output_type > & </td><td class="memItemRight" valign="bottom"><b>successors</b> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The rows of the iteration space. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="392a46759af2c884957115771affa7f4"></a><!-- doxytag: member="tbb::blocked_range2d::cols" ref="392a46759af2c884957115771affa7f4" args="() const " -->
+const <a class="el" href="a00259.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.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 Input, typename Output = continue_msg, graph_buffer_policy = queueing, typename Allocator = cache_aligned_allocator<Input>><br>
- class tbb::flow::interface6::function_node< Input, Output,, Allocator ></h3>
+<h3>template<typename RowValue, typename ColValue = RowValue><br>
+ class tbb::blocked_range2d< RowValue, ColValue ></h3>
 
-Implements a function node that supports Input -> Output. 
+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="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00450.html">blocked_range2d.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00260.png b/doc/html/a00260.png
deleted file mode 100644
index 75bb777..0000000
Binary files a/doc/html/a00260.png and /dev/null differ
diff --git a/doc/html/a00261.html b/doc/html/a00261.html
index 6d5a273..b72441d 100644
--- a/doc/html/a00261.html
+++ b/doc/html/a00261.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::flow::interface6::function_node< Input, Output, queueing, Allocator > 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,72 +21,70 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00261.html">function_node< Input, Output, queueing, Allocator ></a></div>
-<h1>tbb::flow::interface6::function_node< Input, Output, queueing, Allocator > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node" -->Implements a function node that supports Input -> Output.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00261.html">blocked_range3d</a></div>
+<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference<br>
+<small>
+[<a class="el" href="a00426.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="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00451.html">blocked_range3d.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >:
-<p><center><img src="a00261.png" usemap="#tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >_map">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,424,24">
-</map>
-<a href="a00049.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="d2d8e92791b85100f8a53f7b2335c60c"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::input_type" ref="d2d8e92791b85100f8a53f7b2335c60c" args="" -->
-typedef Input </td><td class="memItemRight" valign="bottom"><b>input_type</b></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="a00259.html">blocked_range</a>< PageValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#b8ebf17a552ba47825e9b3887855b719">page_range_type</a></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="df1b2d30d065b64efcee71021129760a"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::output_type" ref="df1b2d30d065b64efcee71021129760a" args="" -->
-typedef Output </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteration 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="a00259.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="8d8519eb42d5ddbba668a575b24a720a"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::predecessor_type" ref="8d8519eb42d5ddbba668a575b24a720a" args="" -->
-typedef <a class="el" href="a00301.html">sender</a>< input_type > </td><td class="memItemRight" valign="bottom"><b>predecessor_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="a00259.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eb82369d652cd58b169f9a2e8f7ed023"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::successor_type" ref="eb82369d652cd58b169f9a2e8f7ed023" args="" -->
-typedef <a class="el" href="a00295.html">receiver</a>< output_type > </td><td class="memItemRight" valign="bottom"><b>successor_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="6083108a1ca5a4f1464511e378e4bedf"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::fInput_type" ref="6083108a1ca5a4f1464511e378e4bedf" args="" -->
-typedef internal::function_input<<br>
- input_type, output_type,<br>
- Allocator > </td><td class="memItemRight" valign="bottom"><b>fInput_type</b></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="a00259.html#f5707bffea38eee5c9680f37358afb8e">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00259.html#f5707bffea38eee5c9680f37358afb8e">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00259.html#f5707bffea38eee [...]
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4259f2853fb3af09518df3efb44ed8d5"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::queue_type" ref="4259f2853fb3af09518df3efb44ed8d5" args="" -->
-typedef internal::function_input_queue<<br>
- input_type, Allocator > </td><td class="memItemRight" valign="bottom"><b>queue_type</b></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="a00261.html#356860e1c977d91711e8216bd55c0b25">empty</a> () const </td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="431ce7232e788562d9152493961ee4b9"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::fOutput_type" ref="431ce7232e788562d9152493961ee4b9" args="" -->
-typedef internal::function_output<<br>
- output_type > </td><td class="memItemRight" valign="bottom"><b>fOutput_type</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="39d69191721c488e737ae5d9c5336b9c"></a><!-- doxytag: member="tbb::blocked_range3d::is_divisible" ref="39d69191721c488e737ae5d9c5336b9c" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#39d69191721c488e737ae5d9c5336b9c">is_divisible</a> () const </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="5b9019c1e6e9b2c41c986a384bd179db"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::function_node" ref="5b9019c1e6e9b2c41c986a384bd179db" args="(graph &g, size_t concurrency, Body body)" -->
-template<typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00261.html#5b9019c1e6e9b2c41c986a384bd179db">function_node</a> (<a class="el" href="a00262.html">graph</a> &g, size_t concurrency, Body body)</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="a00261.html">blocked_range3d</a> &r, <a class="el" href="a00335.html">split</a>)</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="a00259.html">page_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#cf971430aa12361d3ed245344b7c6764">pages</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="01055081ed477714503820035db3a965"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::function_node" ref="01055081ed477714503820035db3a965" args="(const function_node &src)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#01055081ed477714503820035db3a965">function_node</a> (const <a class="el" href="a00260.html">function_node</a> &src)</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="a00259.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#1584623e59ff32a8aa82006827508be4">rows</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <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="34125123f0c8d9c13dbd6f52148608a1"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::successors" ref="34125123f0c8d9c13dbd6f52148608a1" args="()" -->
-internal::broadcast_cache<<br>
- output_type > & </td><td class="memItemRight" valign="bottom"><b>successors</b> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The rows of the iteration space. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3336ba9480fd6c43e158f9beb024c050"></a><!-- doxytag: member="tbb::blocked_range3d::cols" ref="3336ba9480fd6c43e158f9beb024c050" args="() const " -->
+const <a class="el" href="a00259.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.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 Input, typename Output, typename Allocator><br>
- class tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></h3>
+<h3>template<typename PageValue, typename RowValue = PageValue, typename ColValue = RowValue><br>
+ class tbb::blocked_range3d< PageValue, RowValue, ColValue ></h3>
 
-Implements a function node that supports Input -> Output. 
+A 3-dimensional range that models the Range concept. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00451.html">blocked_range3d.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00261.png b/doc/html/a00261.png
deleted file mode 100644
index 349b919..0000000
Binary files a/doc/html/a00261.png and /dev/null differ
diff --git a/doc/html/a00262.html b/doc/html/a00262.html
index f74449d..c4b0dd8 100644
--- a/doc/html/a00262.html
+++ b/doc/html/a00262.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::flow::interface6::graph Class Reference</title>
+<title>tbb::flow::interface6::broadcast_node< 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,202 +21,69 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00262.html">graph</a></div>
-<h1>tbb::flow::interface6::graph Class Reference</h1><!-- doxytag: class="tbb::flow::interface6::graph" -->The graph class.  
+<a class="el" href="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00262.html">broadcast_node</a></div>
+<h1>tbb::flow::interface6::broadcast_node< T > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::broadcast_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node,tbb::flow::interface6::receiver,tbb::flow::interface6::sender" -->Forwards messages of type T to all successors.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<a href="a00044.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::flow::interface6::broadcast_node< T >:
+<p><center><img src="a00262.png" usemap="#tbb::flow::interface6::broadcast_node< T >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::broadcast_node< T >_map">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,249,24">
+<area href="a00321.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="259,0,508,24">
+<area href="a00327.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="518,0,767,24">
+</map>
+<a href="a00071.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4ab3d4b5208ece28c4c3ced647e26e12"></a><!-- doxytag: member="tbb::flow::interface6::graph::graph" ref="4ab3d4b5208ece28c4c3ced647e26e12" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#4ab3d4b5208ece28c4c3ced647e26e12">graph</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a graph withy no nodes. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#8a7d424c0616a1c37a908ead182e2fe5">~graph</a> ()</td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="43c775d80e98cc601de69764983319f9"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::input_type" ref="43c775d80e98cc601de69764983319f9" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#43c775d80e98cc601de69764983319f9">input_type</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys the graph.  <a href="#8a7d424c0616a1c37a908ead182e2fe5"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#a993b789d1e488e0c3929135beae560e">increment_wait_count</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8fd8d3075823e08b879be46c1215ab0f"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::output_type" ref="8fd8d3075823e08b879be46c1215ab0f" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#8fd8d3075823e08b879be46c1215ab0f">output_type</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to register that an external entity may still interact with the graph.  <a href="#a993b789d1e488e0c3929135beae560e"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#29b85506870f13a884a21655aec2a65d">decrement_wait_count</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0e2ad9a121cb286aa0d0142fef33c646"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::predecessor_type" ref="0e2ad9a121cb286aa0d0142fef33c646" args="" -->
+typedef <a class="el" href="a00327.html">sender</a>< <a class="el" href="a00262.html#43c775d80e98cc601de69764983319f9">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#0e2ad9a121cb286aa0d0142fef33c646">predecessor_type</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Deregisters an external entity that may have interacted with the graph.  <a href="#29b85506870f13a884a21655aec2a65d"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2">template<typename Receiver, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00262.html#50a7938df01b6148ab2c0696835f002e">run</a> (Receiver &r, Body body)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cc6a0eb1c4ee65465770628d8366f055"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::successor_type" ref="cc6a0eb1c4ee65465770628d8366f055" args="" -->
+typedef <a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00262.html#8fd8d3075823e08b879be46c1215ab0f">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#cc6a0eb1c4ee65465770628d8366f055">successor_type</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawns a task that runs a body and puts its output to a specific receiver.  <a href="#50a7938df01b6148ab2c0696835f002e"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2">template<typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00262.html#c1145b00e063793a7e7bf994d202c7a0">run</a> (Body body)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <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="89e20f24ae56d38a5ee52f8d41e1a79c"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::broadcast_node" ref="89e20f24ae56d38a5ee52f8d41e1a79c" args="(graph &g)" -->
+ </td><td class="memItemRight" valign="bottom"><b>broadcast_node</b> (<a class="el" href="a00288.html">graph</a> &g)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawns a task that runs a function object.  <a href="#c1145b00e063793a7e7bf994d202c7a0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bdcf84bf5b52c3af2d5332dc9d5fec07"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::broadcast_node" ref="bdcf84bf5b52c3af2d5332dc9d5fec07" args="(const broadcast_node &src)" -->
+ </td><td class="memItemRight" valign="bottom"><b>broadcast_node</b> (const <a class="el" href="a00262.html">broadcast_node</a> &src)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Waits until the graph is idle and the number of decrement_wait_count calls equals the number of increment_wait_count calls.  <a href="#a66b0020f7514b86d030fa8aea073d37"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7f4e3ae90811a5d8b597146b5b586d10"></a><!-- doxytag: member="tbb::flow::interface6::graph::root_task" ref="7f4e3ae90811a5d8b597146b5b586d10" args="()" -->
-<a class="el" href="a00311.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#7f4e3ae90811a5d8b597146b5b586d10">root_task</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fd0324c9ddb51fe6f95b3d015d338941"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::register_successor" ref="fd0324c9ddb51fe6f95b3d015d338941" args="(receiver< T > &r)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#fd0324c9ddb51fe6f95b3d015d338941">register_successor</a> (<a class="el" href="a00321.html">receiver</a>< T > &r)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the root task of the graph. <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"><b>run_and_put_task</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Adds a successor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="366efcc046ec08a104281109801ae629"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::remove_successor" ref="366efcc046ec08a104281109801ae629" args="(receiver< T > &r)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#366efcc046ec08a104281109801ae629">remove_successor</a> (<a class="el" href="a00321.html">receiver</a>< T > &r)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>run_task</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes s as a successor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="29eb768c10b377880bbf83d31ee49acf"></a><!-- doxytag: member="tbb::flow::interface6::broadcast_node::try_put" ref="29eb768c10b377880bbf83d31ee49acf" args="(const T &t)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#29eb768c10b377880bbf83d31ee49acf">try_put</a> (const T &t)</td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-The graph class. 
-<p>
-This class serves as a handle to the graph 
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="8a7d424c0616a1c37a908ead182e2fe5"></a><!-- doxytag: member="tbb::flow::interface6::graph::~graph" ref="8a7d424c0616a1c37a908ead182e2fe5" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::flow::interface6::graph::~graph           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Destroys the graph. 
-<p>
-Calls wait_for_all on the graph, deletes all of the nodes appended by calls to add, and then destroys the root task of the graph. 
-</div>
-</div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="29b85506870f13a884a21655aec2a65d"></a><!-- doxytag: member="tbb::flow::interface6::graph::decrement_wait_count" ref="29b85506870f13a884a21655aec2a65d" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::flow::interface6::graph::decrement_wait_count           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Deregisters an external entity that may have interacted with the graph. 
-<p>
-The graph will not return from wait_for_all until all the number of decrement_wait_count calls matches the number of increment_wait_count calls. 
-</div>
-</div><p>
-<a class="anchor" name="a993b789d1e488e0c3929135beae560e"></a><!-- doxytag: member="tbb::flow::interface6::graph::increment_wait_count" ref="a993b789d1e488e0c3929135beae560e" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::flow::interface6::graph::increment_wait_count           </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::flow::interface6::broadcast_node< T ></h3>
 
+Forwards messages of type T to all successors. 
 <p>
-Used to register that an external entity may still interact with the graph. 
-<p>
-The graph will not return from wait_for_all until a matching number of decrement_wait_count calls is made. 
-</div>
-</div><p>
-<a class="anchor" name="c1145b00e063793a7e7bf994d202c7a0"></a><!-- doxytag: member="tbb::flow::interface6::graph::run" ref="c1145b00e063793a7e7bf994d202c7a0" args="(Body body)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Body> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::flow::interface6::graph::run           </td>
-          <td>(</td>
-          <td class="paramtype">Body </td>
-          <td class="paramname"> <em>body</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Spawns a task that runs a function object. 
-<p>
-The task is spawned as a child of the graph. This is useful for running tasks that need to block a <a class="el" href="a00262.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all()</a> on the graph. For example a one-off source. 
-</div>
-</div><p>
-<a class="anchor" name="50a7938df01b6148ab2c0696835f002e"></a><!-- doxytag: member="tbb::flow::interface6::graph::run" ref="50a7938df01b6148ab2c0696835f002e" args="(Receiver &r, Body body)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Receiver, typename Body> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::flow::interface6::graph::run           </td>
-          <td>(</td>
-          <td class="paramtype">Receiver & </td>
-          <td class="paramname"> <em>r</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">Body </td>
-          <td class="paramname"> <em>body</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>
-Spawns a task that runs a body and puts its output to a specific receiver. 
-<p>
-The task is spawned as a child of the graph. This is useful for running tasks that need to block a <a class="el" href="a00262.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all()</a> on the graph. For example a one-off source. 
-</div>
-</div><p>
-<a class="anchor" name="a66b0020f7514b86d030fa8aea073d37"></a><!-- doxytag: member="tbb::flow::interface6::graph::wait_for_all" ref="a66b0020f7514b86d030fa8aea073d37" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::flow::interface6::graph::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>
-Waits until the graph is idle and the number of decrement_wait_count calls equals the number of increment_wait_count calls. 
-<p>
-The waiting thread will go off and steal work while it is block in the wait_for_all. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00236.png b/doc/html/a00262.png
similarity index 100%
rename from doc/html/a00236.png
rename to doc/html/a00262.png
diff --git a/doc/html/a00263.html b/doc/html/a00263.html
index f52f173..3eb6bf4 100644
--- a/doc/html/a00263.html
+++ b/doc/html/a00263.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::flow::interface6::graph_node Class Reference</title>
+<title>tbb::flow::interface6::buffer_node< 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,36 +21,388 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00263.html">graph_node</a></div>
-<h1>tbb::flow::interface6::graph_node Class Reference</h1><!-- doxytag: class="tbb::flow::interface6::graph_node" -->The base of all graph nodes. Allows them to be stored in a collection for deletion.  
+<a class="el" href="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00263.html">buffer_node</a></div>
+<h1>tbb::flow::interface6::buffer_node< T, A > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::buffer_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node,tbb::flow::interface6::receiver,tbb::flow::interface6::sender" -->Forwards messages in arbitrary order.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00468.html">flow_graph.h</a>></code>
-<p>
-<p>Inheritance diagram for tbb::flow::interface6::graph_node:
-<p><center><img src="a00263.png" usemap="#tbb::flow::interface6::graph_node_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::graph_node_map">
-<area href="a00236.html" alt="tbb::flow::interface6::broadcast_node< T >" shape="rect" coords="552,56,1094,80">
-<area href="a00237.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="552,112,1094,136">
-<area href="a00252.html" alt="tbb::flow::interface6::continue_node< Output >" shape="rect" coords="552,168,1094,192">
-<area href="a00260.html" alt="tbb::flow::interface6::function_node< Input, Output,, Allocator >" shape="rect" coords="552,224,1094,248">
-<area href="a00261.html" alt="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >" shape="rect" coords="552,280,1094,304">
-<area href="a00266.html" alt="tbb::flow::interface6::limiter_node< T >" shape="rect" coords="552,336,1094,360">
-<area href="a00274.html" alt="tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator >" shape="rect" coords="552,392,1094,416">
-<area href="a00274.html" alt="tbb::flow::interface6::multioutput_function_node< TupleType, TupleType, rejecting, Allocator >" shape="rect" coords="552,448,1094,472">
-<area href="a00304.html" alt="tbb::flow::interface6::source_node< Output >" shape="rect" coords="552,504,1094,528">
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::flow::interface6::buffer_node< T, A >:
+<p><center><img src="a00263.png" usemap="#tbb::flow::interface6::buffer_node< T, A >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::buffer_node< T, A >_map">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,352,24">
+<area href="a00321.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="362,0,714,24">
+<area href="a00327.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="724,0,1076,24">
+<area href="a00312.html" alt="tbb::flow::interface6::priority_queue_node< T, Compare, A >" shape="rect" coords="181,112,533,136">
+<area href="a00313.html" alt="tbb::flow::interface6::queue_node< T, A >" shape="rect" coords="543,112,895,136">
+<area href="a00328.html" alt="tbb::flow::interface6::sequencer_node< T, A >" shape="rect" coords="543,168,895,192">
 </map>
-<a href="a00039.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00072.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="334efb81b56a2f2b3ae08a16e8d65620"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::input_type" ref="334efb81b56a2f2b3ae08a16e8d65620" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#334efb81b56a2f2b3ae08a16e8d65620">input_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="089520db81f6a1551dc94c01efbdd7be"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::output_type" ref="089520db81f6a1551dc94c01efbdd7be" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#089520db81f6a1551dc94c01efbdd7be">output_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5fb0ad03a822ca0fc34ad5d56a4093a2"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::predecessor_type" ref="5fb0ad03a822ca0fc34ad5d56a4093a2" args="" -->
+typedef <a class="el" href="a00327.html">sender</a>< <a class="el" href="a00263.html#334efb81b56a2f2b3ae08a16e8d65620">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#5fb0ad03a822ca0fc34ad5d56a4093a2">predecessor_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="66f7eda69b75e08f50726e50a11429cd"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::successor_type" ref="66f7eda69b75e08f50726e50a11429cd" args="" -->
+typedef <a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00263.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#66f7eda69b75e08f50726e50a11429cd">successor_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="17ee32d233db52b86256480d5f048e16"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::my_class" ref="17ee32d233db52b86256480d5f048e16" args="" -->
+typedef <a class="el" href="a00263.html">buffer_node</a>< T, A > </td><td class="memItemRight" valign="bottom"><b>my_class</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="5fe4b79f780586ff66e002ce32a5c60d"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::buffer_node" ref="5fe4b79f780586ff66e002ce32a5c60d" args="(graph &g)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a> (<a class="el" href="a00288.html">graph</a> &g)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="03ad7b85a8341437f584af06ad050cdc"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::buffer_node" ref="03ad7b85a8341437f584af06ad050cdc" args="(const buffer_node &src)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#03ad7b85a8341437f584af06ad050cdc">buffer_node</a> (const <a class="el" href="a00263.html">buffer_node</a> &src)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#f8bf4944ede4fc106423d67715beb695">register_successor</a> (<a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00263.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> > &r)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Adds a new successor.  <a href="#f8bf4944ede4fc106423d67715beb695"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a> (<a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00263.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> > &r)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor.  <a href="#2074da0e39b9477c32897d6e5786196f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#aeb8aec46ca99ca022356a792c46735e">try_get</a> (T &v)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the <a class="el" href="a00263.html">buffer_node</a>.  <a href="#aeb8aec46ca99ca022356a792c46735e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a> (T &v)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item.  <a href="#1cc889bb6c38bcb81757d0ebbc3a5e64"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release a reserved item.  <a href="#2c8e8f2f5f4ff5be27136cc1184a3c3e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Consumes a reserved item.  <a href="#8ef07c434eb763d947a7b4e80c086a49"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#2b02fe332e704bbe14f297802298b63a">try_put</a> (const T &t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Receive an item.  <a href="#2b02fe332e704bbe14f297802298b63a"></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="3bdeda814bba6d687b62449e8d7b8001"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::size_type" ref="3bdeda814bba6d687b62449e8d7b8001" 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="5da41039fc224257fc16df21ea78351c"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::my_handler" ref="5da41039fc224257fc16df21ea78351c" args="" -->
+typedef internal::aggregating_functor<<br>
+ <a class="el" href="a00263.html">my_class</a>, buffer_operation > </td><td class="memItemRight" valign="bottom"><b>my_handler</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579ba61e9d48b022a45d302fb7cc2e99587"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::reg_succ" ref="27ef87d052ece9366a56e5dfd8017579ba61e9d48b022a45d302fb7cc2e99587" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>reg_succ</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579e5c114ade89a63b1d44116994be56f94"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::rem_succ" ref="27ef87d052ece9366a56e5dfd8017579e5c114ade89a63b1d44116994be56f94" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>rem_succ</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579b830235026f7286b15954d74559baeb8"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::req_item" ref="27ef87d052ece9366a56e5dfd8017579b830235026f7286b15954d74559baeb8" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>req_item</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579014be13638194a9fe0b10201be74847e"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::res_item" ref="27ef87d052ece9366a56e5dfd8017579014be13638194a9fe0b10201be74847e" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>res_item</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579d451e6807b6f8238c3fed708789c9fb3"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::rel_res" ref="27ef87d052ece9366a56e5dfd8017579d451e6807b6f8238c3fed708789c9fb3" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>rel_res</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579b2a86824c712d448bd3ff7c6e905fb48"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::con_res" ref="27ef87d052ece9366a56e5dfd8017579b2a86824c712d448bd3ff7c6e905fb48" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>con_res</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd80175799f00b67eaae74451baf63ea2dc0cb94c"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::put_item" ref="27ef87d052ece9366a56e5dfd80175799f00b67eaae74451baf63ea2dc0cb94c" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>put_item</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ef87d052ece9366a56e5dfd8017579ec0df922a8ffd2153f650732611395c9"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_fwd" ref="27ef87d052ece9366a56e5dfd8017579ec0df922a8ffd2153f650732611395c9" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>try_fwd</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ca181d774b321a511fd9a9653ce2a60f415a59924de2ce1c447c79a1b278a3a"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::WAIT" ref="0ca181d774b321a511fd9a9653ce2a60f415a59924de2ce1c447c79a1b278a3a" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>WAIT</b> = 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ca181d774b321a511fd9a9653ce2a60159bdd1eb0a3e1245f61a1e3bcca417f"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::SUCCEEDED" ref="0ca181d774b321a511fd9a9653ce2a60159bdd1eb0a3e1245f61a1e3bcca417f" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>SUCCEEDED</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0ca181d774b321a511fd9a9653ce2a602c60f32df3cedd3c31dadd0086e5edc4"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::FAILED" ref="0ca181d774b321a511fd9a9653ce2a602c60f32df3cedd3c31dadd0086e5edc4" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>FAILED</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_type</b> { <br>
+  <b>reg_succ</b>, 
+<b>rem_succ</b>, 
+<b>req_item</b>, 
+<b>res_item</b>, 
+<br>
+  <b>rel_res</b>, 
+<b>con_res</b>, 
+<b>put_item</b>, 
+<b>try_fwd</b>
+<br>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> = 0, 
+<b>SUCCEEDED</b>, 
+<b>FAILED</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="c896b8640b606e49f369d1260c041ded"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::handle_operations" ref="c896b8640b606e49f369d1260c041ded" args="(buffer_operation *op_list)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><b>handle_operations</b> (buffer_operation *op_list)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2648324ce0a38b40132b8502ef250e3a"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::forward" ref="2648324ce0a38b40132b8502ef250e3a" args="()" -->
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#2648324ce0a38b40132b8502ef250e3a">forward</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">This is executed by an enqueued task, the "forwarder". <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="df21388252b8963e839dca29d2c67ea5"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_reg_succ" ref="df21388252b8963e839dca29d2c67ea5" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a> (buffer_operation *op)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Register successor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6b6cf76dff80fd679251da93351c1291"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_rem_succ" ref="6b6cf76dff80fd679251da93351c1291" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a> (buffer_operation *op)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Remove successor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dcbffbae514f4d95205b0845785c0a91"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_forward" ref="dcbffbae514f4d95205b0845785c0a91" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#dcbffbae514f4d95205b0845785c0a91">internal_forward</a> (buffer_operation *op)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to forward valid items to successors. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="58c70e13ecd40cdaa59cda059e68de51"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_push" ref="58c70e13ecd40cdaa59cda059e68de51" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_push</b> (buffer_operation *op)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="035cbd758a1a28317ba951e2447e0826"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_pop" ref="035cbd758a1a28317ba951e2447e0826" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_pop</b> (buffer_operation *op)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4072ad4d1b320d584ea837048d6e4130"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_reserve" ref="4072ad4d1b320d584ea837048d6e4130" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (buffer_operation *op)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1177d6a157c14cdbfd7d4b05f01605a5"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_consume" ref="1177d6a157c14cdbfd7d4b05f01605a5" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_consume</b> (buffer_operation *op)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ceeec6c56ae8e16effb3fd187e83d958"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal_release" ref="ceeec6c56ae8e16effb3fd187e83d958" args="(buffer_operation *op)" -->
+virtual void </td><td class="memItemRight" valign="bottom"><b>internal_release</b> (buffer_operation *op)</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="28807215994d4c7d3725fac693b37ec1"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::my_successors" ref="28807215994d4c7d3725fac693b37ec1" args="" -->
+internal::round_robin_cache<<br>
+ T, <a class="el" href="a00305.html">null_rw_mutex</a> > </td><td class="memItemRight" valign="bottom"><b>my_successors</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b569eeae467185c45ea78ee1ab41a215"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::my_parent" ref="b569eeae467185c45ea78ee1ab41a215" args="" -->
+<a class="el" href="a00337.html">task</a> * </td><td class="memItemRight" valign="bottom"><b>my_parent</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5e90b3f77cbfac9fd5fb4d53456955d4"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::forwarder_busy" ref="5e90b3f77cbfac9fd5fb4d53456955d4" args="" -->
+bool </td><td class="memItemRight" valign="bottom"><b>forwarder_busy</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4d008669d152fe291079f097da72ec74"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::my_aggregator" ref="4d008669d152fe291079f097da72ec74" args="" -->
+internal::aggregator< my_handler,<br>
+ buffer_operation > </td><td class="memItemRight" valign="bottom"><b>my_aggregator</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="02a18a6a10c05e3f217f0111e0f5fb72"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal::forward_task< buffer_node< T, A > >" ref="02a18a6a10c05e3f217f0111e0f5fb72" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::forward_task< buffer_node< T, A > ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0b5526a5033ff7acc64681cff9ad76b0"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::internal::aggregating_functor< my_class, buffer_operation >" ref="0b5526a5033ff7acc64681cff9ad76b0" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::aggregating_functor< my_class, buffer_operation ></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>buffer_operation</b></td></tr>
+
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-The base of all graph nodes. Allows them to be stored in a collection for deletion. 
+<h3>template<typename T, typename A = cache_aligned_allocator<T>><br>
+ class tbb::flow::interface6::buffer_node< T, A ></h3>
+
+Forwards messages in arbitrary order. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="f8bf4944ede4fc106423d67715beb695"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::register_successor" ref="f8bf4944ede4fc106423d67715beb695" args="(receiver< output_type > &r)" -->
+<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">bool <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node</a>< T, A >::register_successor           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00263.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> > & </td>
+          <td class="paramname"> <em>r</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Adds a new successor. 
+<p>
+Adds successor r to the list of successors; may forward tasks. 
+<p>
+Implements <a class="el" href="a00327.html#68b8941ad77b9303cf3bcb8cf1f2d28a">tbb::flow::interface6::sender< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="2074da0e39b9477c32897d6e5786196f"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::remove_successor" ref="2074da0e39b9477c32897d6e5786196f" args="(receiver< output_type > &r)" -->
+<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">bool <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node</a>< T, A >::remove_successor           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00263.html#089520db81f6a1551dc94c01efbdd7be">output_type</a> > & </td>
+          <td class="paramname"> <em>r</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Removes a successor. 
+<p>
+Removes successor r from the list of successors. It also calls r.remove_predecessor(*this) to remove this node as a predecessor. 
+<p>
+Implements <a class="el" href="a00327.html#82f363bfb1738bb8789e167590b10ef9">tbb::flow::interface6::sender< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="8ef07c434eb763d947a7b4e80c086a49"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_consume" ref="8ef07c434eb763d947a7b4e80c086a49" args="()" -->
+<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">bool <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node</a>< T, A >::try_consume           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Consumes a reserved item. 
+<p>
+true = item is removed from sender and reservation removed 
+<p>
+Reimplemented from <a class="el" href="a00327.html#7b840f50da117a0d6848707c1857ea2e">tbb::flow::interface6::sender< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="aeb8aec46ca99ca022356a792c46735e"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_get" ref="aeb8aec46ca99ca022356a792c46735e" args="(T &v)" -->
+<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">bool <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node</a>< T, A >::try_get           </td>
+          <td>(</td>
+          <td class="paramtype">T & </td>
+          <td class="paramname"> <em>v</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Request an item from the <a class="el" href="a00263.html">buffer_node</a>. 
+<p>
+true = v contains the returned item<br>
+ false = no item has been returned 
+<p>
+Reimplemented from <a class="el" href="a00327.html#922fb56b0aad090b90a98b7d56b76a59">tbb::flow::interface6::sender< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="2b02fe332e704bbe14f297802298b63a"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_put" ref="2b02fe332e704bbe14f297802298b63a" args="(const T &t)" -->
+<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">bool <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node</a>< T, A >::try_put           </td>
+          <td>(</td>
+          <td class="paramtype">const T & </td>
+          <td class="paramname"> <em>t</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Receive an item. 
+<p>
+true is always returned 
+<p>
+Implements <a class="el" href="a00321.html#c6d5d0cb8ebe5771be91933609fe31b8">tbb::flow::interface6::receiver< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="2c8e8f2f5f4ff5be27136cc1184a3c3e"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_release" ref="2c8e8f2f5f4ff5be27136cc1184a3c3e" args="()" -->
+<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">bool <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node</a>< T, A >::try_release           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Release a reserved item. 
+<p>
+true = item has been released and so remains in sender 
+<p>
+Reimplemented from <a class="el" href="a00327.html#27036b06d6a91e97007e14f400529199">tbb::flow::interface6::sender< T ></a>.
+</div>
+</div><p>
+<a class="anchor" name="1cc889bb6c38bcb81757d0ebbc3a5e64"></a><!-- doxytag: member="tbb::flow::interface6::buffer_node::try_reserve" ref="1cc889bb6c38bcb81757d0ebbc3a5e64" args="(T &v)" -->
+<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">bool <a class="el" href="a00263.html">tbb::flow::interface6::buffer_node</a>< T, A >::try_reserve           </td>
+          <td>(</td>
+          <td class="paramtype">T & </td>
+          <td class="paramname"> <em>v</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Reserves an item. 
+<p>
+false = no item can be reserved<br>
+ true = an item is reserved 
 <p>
+Reimplemented from <a class="el" href="a00327.html#02c05b472271db1b68a48ea2618fa72f">tbb::flow::interface6::sender< T ></a>.
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00263.png b/doc/html/a00263.png
index dc4610c..425350b 100644
Binary files a/doc/html/a00263.png and b/doc/html/a00263.png differ
diff --git a/doc/html/a00264.html b/doc/html/a00264.html
index 49a65e4..fa87fba 100644
--- a/doc/html/a00264.html
+++ b/doc/html/a00264.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::improper_lock Class 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,27 +21,88 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00264.html">improper_lock</a></div>
-<h1>tbb::improper_lock Class Reference</h1><!-- doxytag: class="tbb::improper_lock" -->Exception for PPL locks.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00264.html">cache_aligned_allocator</a></div>
+<h1>tbb::cache_aligned_allocator< T > Class Template Reference<br>
+<small>
+[<a class="el" href="a00428.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="a00593.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00452.html">cache_aligned_allocator.h</a>></code>
 <p>
-<a href="a00139.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00013.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><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="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="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="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="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="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="a00264.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="a00264.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="a00264.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="a00264.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="a00264.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="memTemplParams" nowrap colspan="2"><a class="anchor" name="48a7e49dfb0578edc84a90a5ac30793d"></a><!-- doxytag: member="tbb::cache_aligned_allocator::construct" ref="48a7e49dfb0578edc84a90a5ac30793d" args="(pointer p, Args &&...args)" -->
+template<typename... Args> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00264.html#48a7e49dfb0578edc84a90a5ac30793d">construct</a> (pointer p, Args &&...args)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct 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>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Exception for PPL locks. 
+<h3>template<typename T><br>
+ class tbb::cache_aligned_allocator< T ></h3>
+
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
+<p>
+The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00593.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00452.html">cache_aligned_allocator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00265.html b/doc/html/a00265.html
index 1fcde07..83226cb 100644
--- a/doc/html/a00265.html
+++ b/doc/html/a00265.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::invalid_multiple_scheduling 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,27 +21,42 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00265.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 class="el" href="a00414.html">tbb</a>::<a class="el" href="a00265.html">cache_aligned_allocator< void ></a></div>
+<h1>tbb::cache_aligned_allocator< void > Class Template Reference<br>
+<small>
+[<a class="el" href="a00428.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="a00593.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00452.html">cache_aligned_allocator.h</a>></code>
 <p>
-<a href="a00141.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00015.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></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>
+<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 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>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Exception for repeated scheduling of the same task_handle. 
+<h3>template<><br>
+ class tbb::cache_aligned_allocator< void ></h3>
+
+Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00593.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00452.html">cache_aligned_allocator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00266.html b/doc/html/a00266.html
index 50c218a..aa6a0dc 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>tbb::flow::interface6::limiter_node< T > Class Template 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,100 +21,114 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00266.html">limiter_node</a></div>
-<h1>tbb::flow::interface6::limiter_node< T > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::limiter_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node,tbb::flow::interface6::receiver,tbb::flow::interface6::sender" -->Forwards messages only if the threshold has not been reached.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00266.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="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00639.html">tbb_exception.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::limiter_node< T >:
-<p><center><img src="a00266.png" usemap="#tbb::flow::interface6::limiter_node< T >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::limiter_node< T >_map">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,226,24">
-<area href="a00295.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="236,0,462,24">
-<area href="a00301.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="472,0,698,24">
+<p>Inheritance diagram for tbb::captured_exception:
+<p><center><img src="a00266.png" usemap="#tbb::captured_exception_map" border="0" alt=""></center>
+<map name="tbb::captured_exception_map">
+<area href="a00345.html" alt="tbb::tbb_exception" shape="rect" coords="0,0,146,24">
 </map>
-<a href="a00063.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00158.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="035196d3c9240ef041f528ebcde8baa7"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::input_type" ref="035196d3c9240ef041f528ebcde8baa7" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#035196d3c9240ef041f528ebcde8baa7">input_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6e67fc480147c0b88a483b85db6457b0"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::output_type" ref="6e67fc480147c0b88a483b85db6457b0" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#6e67fc480147c0b88a483b85db6457b0">output_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f89fcf44f38eb33f965ee5362d3e68e9"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::predecessor_type" ref="f89fcf44f38eb33f965ee5362d3e68e9" args="" -->
-typedef <a class="el" href="a00301.html">sender</a>< <a class="el" href="a00266.html#035196d3c9240ef041f528ebcde8baa7">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#f89fcf44f38eb33f965ee5362d3e68e9">predecessor_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8945e4dd6ea759ff9e4735da13f12ef"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::successor_type" ref="e8945e4dd6ea759ff9e4735da13f12ef" args="" -->
-typedef <a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00266.html#6e67fc480147c0b88a483b85db6457b0">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#e8945e4dd6ea759ff9e4735da13f12ef">successor_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <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="831b06576f46fe2bf3ed0f86b793c1b2"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::limiter_node" ref="831b06576f46fe2bf3ed0f86b793c1b2" args="(graph &g, size_t threshold, int num_decrement_predecessors=0)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#831b06576f46fe2bf3ed0f86b793c1b2">limiter_node</a> (<a class="el" href="a00262.html">graph</a> &g, size_t threshold, int num_decrement_predecessors=0)</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="a00266.html">captured_exception</a> &src)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="83d3ab884543b070ee5b345a87f241fa"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::limiter_node" ref="83d3ab884543b070ee5b345a87f241fa" args="(const limiter_node &src)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#83d3ab884543b070ee5b345a87f241fa">limiter_node</a> (const <a class="el" href="a00266.html">limiter_node</a> &src)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="179076f146699724f652a9b1e81bd791"></a><!-- doxytag: member="tbb::captured_exception::captured_exception" ref="179076f146699724f652a9b1e81bd791" 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">Copy constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c76561d8d871b4769876988a4de12a9b"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::register_successor" ref="c76561d8d871b4769876988a4de12a9b" args="(receiver< output_type > &r)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#c76561d8d871b4769876988a4de12a9b">register_successor</a> (<a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00266.html#6e67fc480147c0b88a483b85db6457b0">output_type</a> > &r)</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="a00266.html">captured_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00266.html">captured_exception</a> &src)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Replace the current successor with this new successor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#275e328063c121b3e506ccef2a825d28">remove_successor</a> (<a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00266.html#6e67fc480147c0b88a483b85db6457b0">output_type</a> > &r)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00266.html">captured_exception</a> *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#837a50b8f6a800bda225c39d1699643f">move</a> ()  throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node.  <a href="#275e328063c121b3e506ccef2a825d28"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="55a02d458a4d8ffa6accd7a70605da2f"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::try_put" ref="55a02d458a4d8ffa6accd7a70605da2f" args="(const T &t)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#55a02d458a4d8ffa6accd7a70605da2f">try_put</a> (const T &t)</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="a00266.html#93d875d3555502ff6f18513525de204c">destroy</a> ()  throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Puts an item to this receiver. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="de70a0e88ce7655d8c14b6af57f7496f"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::register_predecessor" ref="de70a0e88ce7655d8c14b6af57f7496f" args="(predecessor_type &src)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#de70a0e88ce7655d8c14b6af57f7496f">register_predecessor</a> (<a class="el" href="a00301.html">predecessor_type</a> &src)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00266.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="a00266.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes src from the list of cached predecessors. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c530e7b469454e2340460795f2da3317"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::remove_predecessor" ref="c530e7b469454e2340460795f2da3317" args="(predecessor_type &src)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#c530e7b469454e2340460795f2da3317">remove_predecessor</a> (<a class="el" href="a00301.html">predecessor_type</a> &src)</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="a00266.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a> () const   throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes src from the list of cached predecessors. <br></td></tr>
-<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3344b2461966631b6ee34b79fb105c7"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::decrement" ref="a3344b2461966631b6ee34b79fb105c7" args="" -->
-internal::decrementer< <a class="el" href="a00266.html">limiter_node</a><<br>
- T > > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#a3344b2461966631b6ee34b79fb105c7">decrement</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="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="a00266.html#6b5988ef74a1fe2a58998d110b3633e0">what</a> () const   throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The internal receiver< continue_msg > that decrements the count. <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="ed05e0c262c5a8869bf1395e1fb4bcf9"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::internal::forward_task< limiter_node< T > >" ref="ed05e0c262c5a8869bf1395e1fb4bcf9" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::forward_task< limiter_node< T > ></b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00266.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="b43677b60c786d1071a7efd6f195c3be"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::internal::decrementer< limiter_node< T > >" ref="b43677b60c786d1071a7efd6f195c3be" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::decrementer< limiter_node< T > ></b></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 T><br>
- class tbb::flow::interface6::limiter_node< T ></h3>
-
-Forwards messages only if the threshold has not been reached. 
+This class is used by TBB to propagate information about unhandled exceptions into the root thread. 
 <p>
-This node forwards items until its threshold is reached. It contains no buffering. If the downstream node rejects, the message is dropped. 
+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="a00345.html">tbb::tbb_exception</a> </dd></dl>
+
 <p>
 <hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="275e328063c121b3e506ccef2a825d28"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::remove_successor" ref="275e328063c121b3e506ccef2a825d28" args="(receiver< output_type > &r)" -->
+<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="a00266.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="a00345.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="a00266.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">
+
+<p>
+Creates and returns pointer to the deep copy of this exception object. 
+<p>
+Move semantics is allowed. 
+<p>
+Implements <a class="el" href="a00345.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">
-<div class="memtemplate">
-template<typename T> </div>
       <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00266.html">tbb::flow::interface6::limiter_node</a>< T >::remove_successor           </td>
+          <td class="memname">void tbb::captured_exception::throw_self           </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00266.html#6e67fc480147c0b88a483b85db6457b0">output_type</a> > & </td>
-          <td class="paramname"> <em>r</em>          </td>
+          <td class="paramname">          </td>
           <td> ) </td>
           <td width="100%"><code> [inline, virtual]</code></td>
         </tr>
@@ -123,18 +137,18 @@ template<typename T> </div>
 <div class="memdoc">
 
 <p>
-Removes a successor from this node. 
+Throws this exception object. 
 <p>
-r.remove_predecessor(*this) is also called. 
+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="a00301.html#82f363bfb1738bb8789e167590b10ef9">tbb::flow::interface6::sender< T ></a>.
+Implements <a class="el" href="a00345.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="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00639.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00266.png b/doc/html/a00266.png
index 4eedec5..2470bea 100644
Binary files a/doc/html/a00266.png and b/doc/html/a00266.png differ
diff --git a/doc/html/a00267.html b/doc/html/a00267.html
index 0c73575..aca2732 100644
--- a/doc/html/a00267.html
+++ b/doc/html/a00267.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::machine_load_store_relaxed< T, S > Struct Template 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,30 +21,61 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>internal</b>::<a class="el" href="a00267.html">machine_load_store_relaxed</a></div>
-<h1>tbb::internal::machine_load_store_relaxed< T, S > Struct Template Reference</h1><!-- doxytag: class="tbb::internal::machine_load_store_relaxed" --><code>#include <<a class="el" href="a00594.html">tbb_machine.h</a>></code>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00267.html">combinable</a></div>
+<h1>tbb::combinable< T > Class Template Reference<br>
+<small>
+[<a class="el" href="a00427.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::combinable" -->Thread-local storage with optional reduction.  
+<a href="#_details">More...</a>
 <p>
-<a href="a00155.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<code>#include <<a class="el" href="a00454.html">combinable.h</a>></code>
+<p>
+<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>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="de10ed2fe8788773adb55f265db38587"></a><!-- doxytag: member="tbb::internal::machine_load_store_relaxed::load" ref="de10ed2fe8788773adb55f265db38587" args="(const volatile T &location)" -->
-static T </td><td class="memItemRight" valign="bottom"><b>load</b> (const volatile T &location)</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 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="a00267.html#2c87e79ae98588a5780f708773388843">~combinable</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="a00267.html">combinable</a> &other)</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="a00267.html">combinable</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00267.html">combinable</a> &other)</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="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="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="memTemplParams" nowrap colspan="2"><a class="anchor" name="9be306b4a073066dcac4043dc189c514"></a><!-- doxytag: member="tbb::combinable::combine" ref="9be306b4a073066dcac4043dc189c514" 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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d72090653905a4c94aa6836bc190044"></a><!-- doxytag: member="tbb::internal::machine_load_store_relaxed::store" ref="1d72090653905a4c94aa6836bc190044" args="(volatile T &location, T value)" -->
-static void </td><td class="memItemRight" valign="bottom"><b>store</b> (volatile T &location, T value)</td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="dcd23283834149c87c345c0e476dfee8"></a><!-- doxytag: member="tbb::combinable::combine_each" ref="dcd23283834149c87c345c0e476dfee8" 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>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, size_t S><br>
- struct tbb::internal::machine_load_store_relaxed< T, S ></h3>
+<h3>template<typename T><br>
+ class tbb::combinable< T ></h3>
 
-Volatile should not incur any additional cost on IA32, Intel64, and Sparc TSO architectures. However on architectures with weak memory ordering compiler may generate code with acquire/release semantics for operations on volatile data. 
+Thread-local storage with optional reduction. 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00594.html">tbb_machine.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00454.html">combinable.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00268.html b/doc/html/a00268.html
index 29c0de0..04afb29 100644
--- a/doc/html/a00268.html
+++ b/doc/html/a00268.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::machine_load_store_seq_cst< T, 8 > Struct 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,30 +21,287 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>internal</b>::<a class="el" href="a00268.html">machine_load_store_seq_cst< T, 8 ></a></div>
-<h1>tbb::internal::machine_load_store_seq_cst< T, 8 > Struct Template Reference</h1><!-- doxytag: class="tbb::internal::machine_load_store_seq_cst< T, 8 >" --><code>#include <<a class="el" href="a00594.html">tbb_machine.h</a>></code>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00268.html">concurrent_bounded_queue</a></div>
+<h1>tbb::concurrent_bounded_queue< T, A > Class Template Reference<br>
+<small>
+[<a class="el" href="a00427.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>
-<a href="a00154.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<code>#include <<a class="el" href="a00476.html">concurrent_queue.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::concurrent_bounded_queue< T, A >:
+<p><center><img src="a00268.png" usemap="#tbb::concurrent_bounded_queue< T, A >_map" border="0" alt=""></center>
+<map name="tbb::concurrent_bounded_queue< T, A >_map">
+<area href="a00275.html" alt="tbb::deprecated::concurrent_queue< T, A >" shape="rect" coords="0,56,257,80">
+</map>
+<a href="a00036.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e765439a2cd7ddd871b20dc72148d600"></a><!-- doxytag: member="tbb::internal::machine_load_store_seq_cst< T, 8 >::load" ref="e765439a2cd7ddd871b20dc72148d600" args="(const volatile T &location)" -->
-static T </td><td class="memItemRight" valign="bottom"><b>load</b> (const volatile T &location)</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="a00268.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="a00268.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="a00268.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="a00268.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="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">size_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="a00268.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="aeea2ad38b7e7fc2866f063dfed24c52"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::iterator" ref="aeea2ad38b7e7fc2866f063dfed24c52" args="" -->
+typedef internal::concurrent_queue_iterator<<br>
+ <a class="el" href="a00268.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="a00268.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="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="a00268.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a> (const <a class="el" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00268.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="a00268.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">concurrent_bounded_queue</a> (const <a class="el" href="a00268.html">concurrent_bounded_queue</a> &src, const <a class="el" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00268.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="a00268.html#a5e04dcd7db9fd9b583b4e7df832246a">concurrent_bounded_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> &a=<a class="el" href="a00268.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="a00268.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="a00268.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">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.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"><a class="anchor" name="86c77a6c1317239405968f5afc7b10d3"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::abort" ref="86c77a6c1317239405968f5afc7b10d3" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#86c77a6c1317239405968f5afc7b10d3">abort</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Abort all pending queue operations. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.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="a00268.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="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.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="a00268.html#f64924f2ee9225c368a270fc3c394db9">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to <a class="el" href="a00268.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="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of allowed elements. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a> (<a class="el" href="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> new_capacity)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the capacity.  <a href="#f3c6c934f85fd02aedbc83a16943193b"></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="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.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="a00268.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="05fcfe2752cabb32ff9db4fbef59bb8b"></a><!-- doxytag: member="tbb::internal::machine_load_store_seq_cst< T, 8 >::store" ref="05fcfe2752cabb32ff9db4fbef59bb8b" args="(volatile T &location, T value)" -->
-static void </td><td class="memItemRight" valign="bottom"><b>store</b> (volatile T &location, T value)</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>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- struct tbb::internal::machine_load_store_seq_cst< T, 8 ></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="a00268.html">tbb::concurrent_bounded_queue</a>< T, A >::<a class="el" href="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Integral type for representing size of the queue. 
+<p>
+Note 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="a00268.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">
 
-The implementation does not use functions __TBB_machine_load8/store8 as they are not required to be sequentially consistent. 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00594.html">tbb_machine.h</a></ul>
+Dequeue item from head of queue. 
+<p>
+Block until an item becomes available, and then dequeue it. 
+</div>
+</div><p>
+<a class="anchor" name="f3c6c934f85fd02aedbc83a16943193b"></a><!-- doxytag: member="tbb::concurrent_bounded_queue::set_capacity" ref="f3c6c934f85fd02aedbc83a16943193b" args="(size_type new_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="a00268.html">tbb::concurrent_bounded_queue</a>< T, A >::set_capacity           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> </td>
+          <td class="paramname"> <em>new_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="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="el" href="a00268.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="a00268.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="a00268.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="a00268.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="a00476.html">concurrent_queue.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00242.png b/doc/html/a00268.png
similarity index 100%
rename from doc/html/a00242.png
rename to doc/html/a00268.png
diff --git a/doc/html/a00269.html b/doc/html/a00269.html
index 05e37b2..e0f8d9e 100644
--- a/doc/html/a00269.html
+++ b/doc/html/a00269.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::interface6::memory_pool< Alloc > Class Template Reference</title>
+<title>tbb::interface5::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,35 +21,623 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00269.html">memory_pool</a></div>
-<h1>tbb::interface6::memory_pool< Alloc > Class Template Reference</h1><!-- doxytag: class="tbb::interface6::memory_pool" -->Thread-safe growable pool allocator for variable-size requests.  
+<a class="el" href="a00414.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00269.html">concurrent_hash_map</a></div>
+<h1>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator > Class Template Reference<br>
+<small>
+[<a class="el" href="a00427.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::interface5::concurrent_hash_map" -->Unordered map from Key to T.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00480.html">memory_pool.h</a>></code>
+<code>#include <<a class="el" href="a00455.html">concurrent_hash_map.h</a>></code>
 <p>
-<a href="a00072.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00019.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="e664e41a5b735a677f2ebbbcca0fcd80"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::key_type" ref="e664e41a5b735a677f2ebbbcca0fcd80" 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="616243d5a0b6159299f2a34413e077e4"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::mapped_type" ref="616243d5a0b6159299f2a34413e077e4" 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="ece048b19778bc31377185392ecf312b"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::value_type" ref="ece048b19778bc31377185392ecf312b" 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="549109620a3331c83e46b8fe0636b883"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::size_type" ref="549109620a3331c83e46b8fe0636b883" 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="0a4ffc8ac85bb2eb80a4e1909a373e2c"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::difference_type" ref="0a4ffc8ac85bb2eb80a4e1909a373e2c" 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="341d2ae1e5e9d8ba05e5306a3933f31a"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::pointer" ref="341d2ae1e5e9d8ba05e5306a3933f31a" 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="4b401731d22f457617f950416fde9bff"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_pointer" ref="4b401731d22f457617f950416fde9bff" 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="2765bbab7bac8b74cfd79d269a2008b8"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::reference" ref="2765bbab7bac8b74cfd79d269a2008b8" 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="a3b62b1930b2b88c98cb617f67bb9545"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_reference" ref="a3b62b1930b2b88c98cb617f67bb9545" 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="83603b64f2507ee6560133d79a001eb2"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::iterator" ref="83603b64f2507ee6560133d79a001eb2" args="" -->
+typedef internal::hash_map_iterator<<br>
+ <a class="el" href="a00269.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="d47cbc7e0b0999b849187040f02557f5"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_iterator" ref="d47cbc7e0b0999b849187040f02557f5" args="" -->
+typedef internal::hash_map_iterator<<br>
+ <a class="el" href="a00269.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="baeed4327d9c77f084bfb5ac8d519c96"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::range_type" ref="baeed4327d9c77f084bfb5ac8d519c96" 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="1e7700e8872566a5dc6d1c702b7949f4"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_range_type" ref="1e7700e8872566a5dc6d1c702b7949f4" 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="bf2a3ebce78da6d8be3b1803eb31a2e3"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::allocator_type" ref="bf2a3ebce78da6d8be3b1803eb31a2e3" 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="2822528265718a4c779591fc37c02ca8"></a><!-- doxytag: member="tbb::interface6::memory_pool::memory_pool" ref="2822528265718a4c779591fc37c02ca8" args="(const Alloc &src=Alloc())" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#2822528265718a4c779591fc37c02ca8">memory_pool</a> (const Alloc &src=Alloc())</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1ad413f5b666176e7669bf4c87d1ff3f"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::concurrent_hash_map" ref="1ad413f5b666176e7669bf4c87d1ff3f" args="(const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#1ad413f5b666176e7669bf4c87d1ff3f">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="46b9896317662c3cfa3c876ad7592a7c"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::concurrent_hash_map" ref="46b9896317662c3cfa3c876ad7592a7c" args="(size_type n, const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#46b9896317662c3cfa3c876ad7592a7c">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="6fb14710893308fb47aaeee55ee30dc3"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::concurrent_hash_map" ref="6fb14710893308fb47aaeee55ee30dc3" args="(const concurrent_hash_map &table, const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#6fb14710893308fb47aaeee55ee30dc3">concurrent_hash_map</a> (const <a class="el" href="a00269.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="83c40f2053f208861b90390e12a36436"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::concurrent_hash_map" ref="83c40f2053f208861b90390e12a36436" 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="a00269.html#83c40f2053f208861b90390e12a36436">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="088d1aaccc816884a49e38f7065622c8"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::operator=" ref="088d1aaccc816884a49e38f7065622c8" args="(const concurrent_hash_map &table)" -->
+<a class="el" href="a00269.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#088d1aaccc816884a49e38f7065622c8">operator=</a> (const <a class="el" href="a00269.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">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#94758113d8993cfe5afdf2d63a728869">rehash</a> (size_type n=0)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Rehashes and optionally resizes the whole table.  <a href="#94758113d8993cfe5afdf2d63a728869"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="220686fe17b197eedf19dd856cd02e36"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::clear" ref="220686fe17b197eedf19dd856cd02e36" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#220686fe17b197eedf19dd856cd02e36">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="2aa8e2d28d5af1284cf78d20a9c22731"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::~concurrent_hash_map" ref="2aa8e2d28d5af1284cf78d20a9c22731" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#2aa8e2d28d5af1284cf78d20a9c22731">~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="ee6b69f390111c92318a85600dd9c559"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::range" ref="ee6b69f390111c92318a85600dd9c559" 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="d9a834a345415581bd801647945ea96b"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::range" ref="d9a834a345415581bd801647945ea96b" 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="35a8c373fc3d52099ae18f0553162491"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::begin" ref="35a8c373fc3d52099ae18f0553162491" 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="67c50bddda53b9a10318f8981e4fc4fa"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::end" ref="67c50bddda53b9a10318f8981e4fc4fa" 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="c8ad3d9bb833063b3d09164199b8f7de"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::begin" ref="c8ad3d9bb833063b3d09164199b8f7de" 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="75e7c0fb6addae180b6cc483b771fded"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::end" ref="75e7c0fb6addae180b6cc483b771fded" 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="8262e9ef1208a39e7ea087487fbe8368"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::equal_range" ref="8262e9ef1208a39e7ea087487fbe8368" 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="b94bf1d3724f26299640e8b82787a75c"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::equal_range" ref="b94bf1d3724f26299640e8b82787a75c" 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="6aa56a8b5a25e61a97fa0b54fe2b5659"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::size" ref="6aa56a8b5a25e61a97fa0b54fe2b5659" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#6aa56a8b5a25e61a97fa0b54fe2b5659">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="61ff2e5bb44e5469366fd5295e5d0ebe"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::empty" ref="61ff2e5bb44e5469366fd5295e5d0ebe" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#61ff2e5bb44e5469366fd5295e5d0ebe">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if <a class="el" href="a00269.html#6aa56a8b5a25e61a97fa0b54fe2b5659">size()</a>==0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2bce57fe9b594abe1e6d2568aea8b357"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::max_size" ref="2bce57fe9b594abe1e6d2568aea8b357" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#2bce57fe9b594abe1e6d2568aea8b357">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="af34cb91b1d0f36a885a1a3432dd9af1"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::bucket_count" ref="af34cb91b1d0f36a885a1a3432dd9af1" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#af34cb91b1d0f36a885a1a3432dd9af1">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="6cbcacb4a256a85bf89576c101373ca7"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::get_allocator" ref="6cbcacb4a256a85bf89576c101373ca7" args="() const " -->
+allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#6cbcacb4a256a85bf89576c101373ca7">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="076f8d9e16110aac5f558777aa744eb6"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::swap" ref="076f8d9e16110aac5f558777aa744eb6" args="(concurrent_hash_map &table)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#076f8d9e16110aac5f558777aa744eb6">swap</a> (<a class="el" href="a00269.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="6968eb6feed2df36be421df0464297af"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::count" ref="6968eb6feed2df36be421df0464297af" args="(const Key &key) const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#6968eb6feed2df36be421df0464297af">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="a00269.html#2afcc33dade7bb24e008d60c0df38230">find</a> (<a class="el" href="a00272.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="#2afcc33dade7bb24e008d60c0df38230"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#7bc475d1968f7f0af3d736d7e8a0d7df">find</a> (<a class="el" href="a00270.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="#7bc475d1968f7f0af3d736d7e8a0d7df"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#47fe0e60151a9bd7a444db827772a4e6">insert</a> (<a class="el" href="a00272.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="#47fe0e60151a9bd7a444db827772a4e6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#54e0955ecd11575b4c07166838a72893">insert</a> (<a class="el" href="a00270.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="#54e0955ecd11575b4c07166838a72893"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#091efd2d12fdad4fe9e54d9629a9dfc3">insert</a> (<a class="el" href="a00272.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="#091efd2d12fdad4fe9e54d9629a9dfc3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#39183d78d6e8425917555ab542ab92de">insert</a> (<a class="el" href="a00270.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="#39183d78d6e8425917555ab542ab92de"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#3f121a316af8135de476a30fae6d7c07">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="#3f121a316af8135de476a30fae6d7c07"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="1dd37fad87e561151ba1e242ca94bcc1"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="1dd37fad87e561151ba1e242ca94bcc1" 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="a00269.html#1dd37fad87e561151ba1e242ca94bcc1">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="a00269.html#f27802b3a8d1863c29e743e9c6b4e870">erase</a> (const Key &key)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item.  <a href="#f27802b3a8d1863c29e743e9c6b4e870"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#e698ef3d70b2d1a29a7a5551784d3653">erase</a> (<a class="el" href="a00272.html">const_accessor</a> &item_accessor)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by <a class="el" href="a00272.html">const_accessor</a>.  <a href="#e698ef3d70b2d1a29a7a5551784d3653"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#5f12d150d421420965db07368666a84f">erase</a> (<a class="el" href="a00270.html">accessor</a> &item_accessor)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by accessor.  <a href="#5f12d150d421420965db07368666a84f"></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="2066e7e0fec7813db8fe9c8b9368c9e5"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::node_allocator_type" ref="2066e7e0fec7813db8fe9c8b9368c9e5" 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="559190b7953177b4967a3312f557318f"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::delete_node" ref="559190b7953177b4967a3312f557318f" 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="32ec82223d843f1c2b95fa37acb7f4bb"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::search_bucket" ref="32ec82223d843f1c2b95fa37acb7f4bb" 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="4962c7da24793ccc05524cc3bbcf1efa"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::rehash_bucket" ref="4962c7da24793ccc05524cc3bbcf1efa" 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="3f3413264a99174a224ef96f6c4ea769"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::lookup" ref="3f3413264a99174a224ef96f6c4ea769" 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="a00269.html#3f3413264a99174a224ef96f6c4ea769">lookup</a> (bool op_insert, const Key &key, const T *t, <a class="el" href="a00272.html">const_accessor</a> *result, bool write)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">construct pool with underlying allocator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fdad7c4ed08332ec384491a71b721957"></a><!-- doxytag: member="tbb::interface6::memory_pool::~memory_pool" ref="fdad7c4ed08332ec384491a71b721957" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#fdad7c4ed08332ec384491a71b721957">~memory_pool</a> ()</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="0c964214eb38f54603aa75fdff6d2709"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::exclude" ref="0c964214eb38f54603aa75fdff6d2709" args="(const_accessor &item_accessor)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#0c964214eb38f54603aa75fdff6d2709">exclude</a> (<a class="el" href="a00272.html">const_accessor</a> &item_accessor)</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="8f5373b8e1864619d1ffcf3bf3f1f13d"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::internal_equal_range" ref="8f5373b8e1864619d1ffcf3bf3f1f13d" 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="a00269.html#8f5373b8e1864619d1ffcf3bf3f1f13d">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="72c9c9e9655fcf096f5f0ed9c8ba6669"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::internal_copy" ref="72c9c9e9655fcf096f5f0ed9c8ba6669" args="(const concurrent_hash_map &source)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#72c9c9e9655fcf096f5f0ed9c8ba6669">internal_copy</a> (const <a class="el" href="a00269.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="1ec1fe8dfa2d7894bf0589bfdbcb1f96"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::internal_copy" ref="1ec1fe8dfa2d7894bf0589bfdbcb1f96" 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="a00269.html#2f76ed101a0ccc8875b846c2f747897e">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="#2f76ed101a0ccc8875b846c2f747897e"></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="a72cb6e9873e5541295682179e5a7f74"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::my_allocator" ref="a72cb6e9873e5541295682179e5a7f74" 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="53c747a3f2d2d2c85aec866e19c31c29"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::my_hash_compare" ref="53c747a3f2d2d2c85aec866e19c31c29" 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::interface5::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::interface5::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::interface5::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="a00270.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="a00270.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00271.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="a00271.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html">const_accessor</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Combines data access, locking, and garbage collection.  <a href="a00272.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="mdescLeft"> </td><td class="mdescRight">destroy pool <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Alloc><br>
- class tbb::interface6::memory_pool< Alloc ></h3>
+<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
+ class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></h3>
+
+Unordered map from Key to T. 
+<p>
+<a class="el" href="a00269.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="a00269.html#47fe0e60151a9bd7a444db827772a4e6">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="a00269.html#088d1aaccc816884a49e38f7065622c8">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="a00269.html#47fe0e60151a9bd7a444db827772a4e6">insert()</a> methods</li><li>Added <a class="el" href="a00269.html#6cbcacb4a256a85bf89576c101373ca7">get_allocator()</a></li><li>Added <a class="el" href="a00269.html#076f8d9e16110aac5f558777aa744eb6">swap()</a></li [...]
+</dd></dl>
+
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="5f12d150d421420965db07368666a84f"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::erase" ref="5f12d150d421420965db07368666a84f" 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="a00269.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00270.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="e698ef3d70b2d1a29a7a5551784d3653"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::erase" ref="e698ef3d70b2d1a29a7a5551784d3653" 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="a00269.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::erase           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00272.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="a00272.html">const_accessor</a>. 
+<p>
+Return true if item was erased by particularly this call. 
+</div>
+</div><p>
+<a class="anchor" name="f27802b3a8d1863c29e743e9c6b4e870"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::erase" ref="f27802b3a8d1863c29e743e9c6b4e870" 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="a00269.html">tbb::interface5::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="7bc475d1968f7f0af3d736d7e8a0d7df"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::find" ref="7bc475d1968f7f0af3d736d7e8a0d7df" 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="a00269.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00270.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">
 
-Thread-safe growable pool allocator for variable-size requests. 
 <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="2afcc33dade7bb24e008d60c0df38230"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::find" ref="2afcc33dade7bb24e008d60c0df38230" 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="a00269.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::find           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00272.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="3f121a316af8135de476a30fae6d7c07"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="3f121a316af8135de476a30fae6d7c07" 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="a00269.html">tbb::interface5::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="39183d78d6e8425917555ab542ab92de"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="39183d78d6e8425917555ab542ab92de" 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="a00269.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00270.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="091efd2d12fdad4fe9e54d9629a9dfc3"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="091efd2d12fdad4fe9e54d9629a9dfc3" 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="a00269.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00272.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="54e0955ecd11575b4c07166838a72893"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="54e0955ecd11575b4c07166838a72893" 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="a00269.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00270.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="47fe0e60151a9bd7a444db827772a4e6"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::insert" ref="47fe0e60151a9bd7a444db827772a4e6" 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="a00269.html">tbb::interface5::concurrent_hash_map</a>< Key, T, HashCompare, Allocator >::insert           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00272.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="2f76ed101a0ccc8875b846c2f747897e"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::internal_fast_find" ref="2f76ed101a0ccc8875b846c2f747897e" 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="a00269.html">tbb::interface5::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="94758113d8993cfe5afdf2d63a728869"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::rehash" ref="94758113d8993cfe5afdf2d63a728869" 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="a00269.html">tbb::interface5::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>
+Useful to optimize performance before or after concurrent operations. Also enables using of <a class="el" href="a00269.html#2afcc33dade7bb24e008d60c0df38230">find()</a> and <a class="el" href="a00269.html#6968eb6feed2df36be421df0464297af">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="a00480.html">memory_pool.h</a></ul>
+<li><a class="el" href="a00455.html">concurrent_hash_map.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00270.html b/doc/html/a00270.html
index d3b2b28..adfa37b 100644
--- a/doc/html/a00270.html
+++ b/doc/html/a00270.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::interface6::memory_pool_allocator< T, P > Class Template Reference</title>
+<title>tbb::interface5::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,112 +21,45 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00270.html">memory_pool_allocator</a></div>
-<h1>tbb::interface6::memory_pool_allocator< T, P > Class Template Reference<br>
-<small>
-[<a class="el" href="a00397.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::interface6::memory_pool_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
+<a class="el" href="a00414.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00269.html">concurrent_hash_map</a>::<a class="el" href="a00270.html">accessor</a></div>
+<h1>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor Class Reference</h1><!-- doxytag: class="tbb::interface5::concurrent_hash_map::accessor" --><!-- doxytag: inherits="tbb::interface5::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="a00480.html">memory_pool.h</a>></code>
+<code>#include <<a class="el" href="a00455.html">concurrent_hash_map.h</a>></code>
 <p>
-<a href="a00068.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor:
+<p><center><img src="a00270.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor_map" border="0" alt=""></center>
+<map name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor_map">
+<area href="a00272.html" alt="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor" shape="rect" coords="0,0,530,24">
+</map>
+<a href="a00023.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="364d1a4b2174091802a0c1a7177fd037"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::value_type" ref="364d1a4b2174091802a0c1a7177fd037" args="" -->
-typedef tbb::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="841174744c7bebbe9a8ec4cd35b7e8c8"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::pointer" ref="841174744c7bebbe9a8ec4cd35b7e8c8" 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="8867631698ca08b5b8c849693f45cef4"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::const_pointer" ref="8867631698ca08b5b8c849693f45cef4" 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="4419d14b95793fea5e80c1a7ad85b4b3"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::reference" ref="4419d14b95793fea5e80c1a7ad85b4b3" 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="57a51cd687993c94d486a0ff0b7a783f"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::const_reference" ref="57a51cd687993c94d486a0ff0b7a783f" 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="fd9f0aaee1039cc64fa4342ee93fd43e"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::size_type" ref="fd9f0aaee1039cc64fa4342ee93fd43e" 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="4340f60415582d0eca834b47b22f5d62"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::difference_type" ref="4340f60415582d0eca834b47b22f5d62" 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="0b648be7a95a8fb2971042c15eb112c1"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::accessor::value_type" ref="0b648be7a95a8fb2971042c15eb112c1" args="" -->
+typedef concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#0b648be7a95a8fb2971042c15eb112c1">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="d06264c6dc8ed178d8c14998f0511b27"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::memory_pool_allocator" ref="d06264c6dc8ed178d8c14998f0511b27" args="(pool_type &pool)" -->
- </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (pool_type &pool)  throw ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="655f7aef5ba5dbe79f76b493270794af"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::memory_pool_allocator" ref="655f7aef5ba5dbe79f76b493270794af" args="(const memory_pool_allocator &src)" -->
- </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00270.html">memory_pool_allocator</a> &src)  throw ()</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="0d1d98389a82d65a4229db8e28363420"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::memory_pool_allocator" ref="0d1d98389a82d65a4229db8e28363420" args="(const memory_pool_allocator< U, P > &src)" -->
-template<typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00270.html">memory_pool_allocator</a>< U, P > &src)  throw ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="727129bc029510733b3e95ea10f6bee3"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::address" ref="727129bc029510733b3e95ea10f6bee3" 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="e250b83998b01dbea88c43085e15139a"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::address" ref="e250b83998b01dbea88c43085e15139a" 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="365bd64d284c80d85bb2149a12681526"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::allocate" ref="365bd64d284c80d85bb2149a12681526" args="(size_type n, const void *=0)" -->
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#365bd64d284c80d85bb2149a12681526">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="4e24a03de38638af07548383024c54ab"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::deallocate" ref="4e24a03de38638af07548383024c54ab" args="(pointer p, size_type)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#4e24a03de38638af07548383024c54ab">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="beebdb6144df8ba219fadfad4de866ea"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::max_size" ref="beebdb6144df8ba219fadfad4de866ea" args="() const " -->
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#beebdb6144df8ba219fadfad4de866ea">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="c7e1671b725894b94ce9a6ac544e24f2"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::construct" ref="c7e1671b725894b94ce9a6ac544e24f2" args="(pointer p, const value_type &value)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#c7e1671b725894b94ce9a6ac544e24f2">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="a3af27e1f8535cc512134ec9a82ff4fc"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::destroy" ref="a3af27e1f8535cc512134ec9a82ff4fc" args="(pointer p)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#a3af27e1f8535cc512134ec9a82ff4fc">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>Protected Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b9b545d2d31ef4b711ca87ba7aa18976"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::pool_type" ref="b9b545d2d31ef4b711ca87ba7aa18976" args="" -->
-typedef P </td><td class="memItemRight" valign="bottom"><b>pool_type</b></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="9f22e947018eb99cde5f44ee3d339499"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::my_pool" ref="9f22e947018eb99cde5f44ee3d339499" args="" -->
-pool_type * </td><td class="memItemRight" valign="bottom"><b>my_pool</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="193c7eeb6ed852d587b652828f52ca92"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::memory_pool_allocator" ref="193c7eeb6ed852d587b652828f52ca92" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b></td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f4fe0fa75b911081eff469ddb3e7e52a"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::operator==" ref="f4fe0fa75b911081eff469ddb3e7e52a" args="(const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)" -->
-template<typename V, typename U, typename R> </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="a00270.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00270.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4bb06a39de4a5290b4ec03be19d61c36"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::operator!=" ref="4bb06a39de4a5290b4ec03be19d61c36" args="(const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)" -->
-template<typename V, typename U, typename R> </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="a00270.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00270.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="170280ea807a22e742095de3e8c5ea38"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::accessor::operator *" ref="170280ea807a22e742095de3e8c5ea38" args="() const " -->
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#170280ea807a22e742095de3e8c5ea38">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 reference to associated value in hash table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a807920cdffe3ec5c5e282b4d1ff92a2"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::accessor::operator->" ref="a807920cdffe3ec5c5e282b4d1ff92a2" args="() const " -->
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#a807920cdffe3ec5c5e282b4d1ff92a2">operator-></a> () const </td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, typename P = internal::pool_base><br>
- class tbb::interface6::memory_pool_allocator< T, P ></h3>
+<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
+ class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</h3>
 
-Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
+Allows write access to elements and combines data access, locking, and garbage collection. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00480.html">memory_pool.h</a></ul>
+<li><a class="el" href="a00455.html">concurrent_hash_map.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00244.png b/doc/html/a00270.png
similarity index 100%
rename from doc/html/a00244.png
rename to doc/html/a00270.png
diff --git a/doc/html/a00271.html b/doc/html/a00271.html
index fdb5806..05c048d 100644
--- a/doc/html/a00271.html
+++ b/doc/html/a00271.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::interface6::memory_pool_allocator< void, P > Class Template Reference</title>
+<title>tbb::interface5::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,72 +21,42 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00271.html">memory_pool_allocator< void, P ></a></div>
-<h1>tbb::interface6::memory_pool_allocator< void, P > Class Template Reference<br>
-<small>
-[<a class="el" href="a00397.html">Memory Allocation</a>]</small>
-</h1><!-- doxytag: class="tbb::interface6::memory_pool_allocator< void, P >" -->Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  
+<a class="el" href="a00414.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00269.html">concurrent_hash_map</a>::<a class="el" href="a00271.html">bucket_accessor</a></div>
+<h1>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor Class Reference</h1><!-- doxytag: class="tbb::interface5::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="a00480.html">memory_pool.h</a>></code>
+<code>#include <<a class="el" href="a00455.html">concurrent_hash_map.h</a>></code>
 <p>
-<a href="a00070.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="7cc2e35b1d34d0543b5a029414ef41f8"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::pool_type" ref="7cc2e35b1d34d0543b5a029414ef41f8" args="" -->
-typedef P </td><td class="memItemRight" valign="bottom"><b>pool_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="48afbf9aed30662f09217c1fe229861d"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::pointer" ref="48afbf9aed30662f09217c1fe229861d" 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="94ac6954c897981fc8adf6bf5978145b"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::const_pointer" ref="94ac6954c897981fc8adf6bf5978145b" 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="2b9b8af832a8b240cf22c5cc37406f45"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::value_type" ref="2b9b8af832a8b240cf22c5cc37406f45" args="" -->
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_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="1601367c80ed73278e1234012631df24"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::memory_pool_allocator" ref="1601367c80ed73278e1234012631df24" args="(pool_type &pool)" -->
- </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (pool_type &pool)  throw ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e4ce5d3f231c9e786aee8f64d53c7f1a"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::memory_pool_allocator" ref="e4ce5d3f231c9e786aee8f64d53c7f1a" args="(const memory_pool_allocator &src)" -->
- </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00270.html">memory_pool_allocator</a> &src)  throw ()</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="49bd821cb72e23714d7efc480ac4cc9d"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::memory_pool_allocator" ref="49bd821cb72e23714d7efc480ac4cc9d" args="(const memory_pool_allocator< U, P > &src)" -->
-template<typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00270.html">memory_pool_allocator</a>< U, P > &src)  throw ()</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="67b8e6e057db62e7fdbe985ce275b039"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::my_pool" ref="67b8e6e057db62e7fdbe985ce275b039" args="" -->
-pool_type * </td><td class="memItemRight" valign="bottom"><b>my_pool</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="193c7eeb6ed852d587b652828f52ca92"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::memory_pool_allocator" ref="193c7eeb6ed852d587b652828f52ca92" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b1dcb174ab54b8612b25b6126d18d6c3"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::bucket_accessor::bucket_accessor" ref="b1dcb174ab54b8612b25b6126d18d6c3" 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="a00269.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f4fe0fa75b911081eff469ddb3e7e52a"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::operator==" ref="f4fe0fa75b911081eff469ddb3e7e52a" args="(const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)" -->
-template<typename V, typename U, typename R> </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="a00270.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00270.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d11c77f4d70a94d4fb344492bbf18007"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::bucket_accessor::acquire" ref="d11c77f4d70a94d4fb344492bbf18007" args="(concurrent_hash_map *base, const hashcode_t h, bool writer=false)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00271.html#d11c77f4d70a94d4fb344492bbf18007">acquire</a> (<a class="el" href="a00269.html">concurrent_hash_map</a> *base, const hashcode_t h, bool writer=false)</td></tr>
 
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4bb06a39de4a5290b4ec03be19d61c36"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::operator!=" ref="4bb06a39de4a5290b4ec03be19d61c36" args="(const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)" -->
-template<typename V, typename U, typename R> </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="a00270.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00270.html">memory_pool_allocator</a>< U, R > &b)</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="07d958f151a0eaa92f50fd56ad6440e2"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::bucket_accessor::is_writer" ref="07d958f151a0eaa92f50fd56ad6440e2" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00271.html#07d958f151a0eaa92f50fd56ad6440e2">is_writer</a> ()</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">check whether bucket is locked for write <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa6314b861c574f86ed189b124cf5853"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::bucket_accessor::operator()" ref="fa6314b861c574f86ed189b124cf5853" args="()" -->
+bucket * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00271.html#fa6314b861c574f86ed189b124cf5853">operator()</a> ()</td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">get bucket pointer <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename P><br>
- class tbb::interface6::memory_pool_allocator< void, P ></h3>
+<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
+ class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</h3>
 
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
+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="a00480.html">memory_pool.h</a></ul>
+<li><a class="el" href="a00455.html">concurrent_hash_map.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00272.html b/doc/html/a00272.html
index 6a898d6..1f6148c 100644
--- a/doc/html/a00272.html
+++ b/doc/html/a00272.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::missing_wait Class Reference</title>
+<title>tbb::interface5::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,27 +21,79 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00272.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 class="el" href="a00414.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00269.html">concurrent_hash_map</a>::<a class="el" href="a00272.html">const_accessor</a></div>
+<h1>tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor Class Reference</h1><!-- doxytag: class="tbb::interface5::concurrent_hash_map::const_accessor" -->Combines data access, locking, and garbage collection.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00593.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00455.html">concurrent_hash_map.h</a>></code>
 <p>
-<a href="a00140.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor:
+<p><center><img src="a00272.png" usemap="#tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor_map" border="0" alt=""></center>
+<map name="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor_map">
+<area href="a00270.html" alt="tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor" shape="rect" coords="0,56,530,80">
+</map>
+<a href="a00022.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8e50238483ba451363dccebd981d346"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::value_type" ref="a8e50238483ba451363dccebd981d346" args="" -->
+typedef const concurrent_hash_map::value_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#a8e50238483ba451363dccebd981d346">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="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>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="84c3080d0c6124d55c8bb4cf6055e65f"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::empty" ref="84c3080d0c6124d55c8bb4cf6055e65f" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#84c3080d0c6124d55c8bb4cf6055e65f">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if result is empty. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7db006d41b49dc5f1716a913769d4698"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::release" ref="7db006d41b49dc5f1716a913769d4698" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#7db006d41b49dc5f1716a913769d4698">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set to null. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9411df8197ceb4881ec4c7368a0a7f88"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::operator *" ref="9411df8197ceb4881ec4c7368a0a7f88" args="() const " -->
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#9411df8197ceb4881ec4c7368a0a7f88">operator *</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3d03a48ecb8cd9549bd8be64b09c9b0d"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::operator->" ref="3d03a48ecb8cd9549bd8be64b09c9b0d" args="() const " -->
+const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#3d03a48ecb8cd9549bd8be64b09c9b0d">operator-></a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27399c613eb1aecd4660803955dda09d"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::const_accessor" ref="27399c613eb1aecd4660803955dda09d" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#27399c613eb1aecd4660803955dda09d">const_accessor</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Create empty result. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="928769b139d53427e7075c1f86148e4c"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::~const_accessor" ref="928769b139d53427e7075c1f86148e4c" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#928769b139d53427e7075c1f86148e4c">~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>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="45ab59454c6f11fe938bbcab637cdd73"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::is_writer" ref="45ab59454c6f11fe938bbcab637cdd73" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><b>is_writer</b> ()</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="21856da696b0765cc3db90663160d95e"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::my_node" ref="21856da696b0765cc3db90663160d95e" args="" -->
+node * </td><td class="memItemRight" valign="bottom"><b>my_node</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4936cc9432926ed38f0207828b388e24"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::my_hash" ref="4936cc9432926ed38f0207828b388e24" args="" -->
+hashcode_t </td><td class="memItemRight" valign="bottom"><b>my_hash</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="d062d8ecb243a6ec62fa30bca52a1bcf"></a><!-- doxytag: member="tbb::interface5::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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ddd77aff56c12366acc02d0f1588a706"></a><!-- doxytag: member="tbb::interface5::concurrent_hash_map::const_accessor::accessor" ref="ddd77aff56c12366acc02d0f1588a706" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>accessor</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Exception for missing wait on structured_task_group. 
+<h3>template<typename Key, typename T, typename HashCompare, typename Allocator><br>
+ class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</h3>
+
+Combines data access, locking, and garbage collection. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00593.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00455.html">concurrent_hash_map.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00246.png b/doc/html/a00272.png
similarity index 100%
rename from doc/html/a00246.png
rename to doc/html/a00272.png
diff --git a/doc/html/a00273.html b/doc/html/a00273.html
index b7a6db8..2b9bf6b 100644
--- a/doc/html/a00273.html
+++ b/doc/html/a00273.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::interface5::concurrent_priority_queue< T, Compare, 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,148 +21,325 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00273.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="a00414.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00273.html">concurrent_priority_queue</a></div>
+<h1>tbb::interface5::concurrent_priority_queue< T, Compare, A > Class Template Reference</h1><!-- doxytag: class="tbb::interface5::concurrent_priority_queue" -->Concurrent priority queue.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00593.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00473.html">concurrent_priority_queue.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::movable_exception< ExceptionData >:
-<p><center><img src="a00273.png" usemap="#tbb::movable_exception< ExceptionData >_map" border="0" alt=""></center>
-<map name="tbb::movable_exception< ExceptionData >_map">
-<area href="a00319.html" alt="tbb::tbb_exception" shape="rect" coords="0,0,248,24">
-</map>
-<a href="a00144.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>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7c611a6b5b8f94b0e7f2afc97e31efb1"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::value_type" ref="7c611a6b5b8f94b0e7f2afc97e31efb1" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#7c611a6b5b8f94b0e7f2afc97e31efb1">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="5804b3c708ef4e50d603f918ef2b9e58"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::reference" ref="5804b3c708ef4e50d603f918ef2b9e58" args="" -->
+typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#5804b3c708ef4e50d603f918ef2b9e58">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="a4ded8601a434098605be0dcc4febc60"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::const_reference" ref="a4ded8601a434098605be0dcc4febc60" args="" -->
+typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#a4ded8601a434098605be0dcc4febc60">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="b679eea8d01d041625a39f719ca2b7ed"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::size_type" ref="b679eea8d01d041625a39f719ca2b7ed" args="" -->
+typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">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="77399bc76b3ecd60e33f7e35a5becd87"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::difference_type" ref="77399bc76b3ecd60e33f7e35a5becd87" args="" -->
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#77399bc76b3ecd60e33f7e35a5becd87">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="1712cb3a46bc1821fccc5e2cd83d5cd7"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::allocator_type" ref="1712cb3a46bc1821fccc5e2cd83d5cd7" args="" -->
+typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocator type. <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="43dfdc5298df3aa8a7d7d146604f84ef"></a><!-- doxytag: member="tbb::movable_exception::movable_exception" ref="43dfdc5298df3aa8a7d7d146604f84ef" 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="eefa40599afe00ea393897d8f5662e65"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::concurrent_priority_queue" ref="eefa40599afe00ea393897d8f5662e65" args="(const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a> (const <a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &a=<a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00273.html">concurrent_priority_queue</a> with default capacity. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4555b4a55415a70024c4004b51e9f385"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::concurrent_priority_queue" ref="4555b4a55415a70024c4004b51e9f385" args="(size_type init_capacity, const allocator_type &a=allocator_type())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#4555b4a55415a70024c4004b51e9f385">concurrent_priority_queue</a> (<a class="el" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> init_capacity, const <a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &a=<a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</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="a00273.html">movable_exception</a> &src)  throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00273.html">concurrent_priority_queue</a> with init_sz capacity. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="9147cb4207017c260a0c3929c12cd40f"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::concurrent_priority_queue" ref="9147cb4207017c260a0c3929c12cd40f" 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="a00273.html#9147cb4207017c260a0c3929c12cd40f">concurrent_priority_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &a=<a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>())</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="a00273.html">movable_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00273.html">movable_exception</a> &src)</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"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#509419e320f200456d89dc54a65140b3">concurrent_priority_queue</a> (const <a class="el" href="a00273.html">concurrent_priority_queue</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="mdescLeft"> </td><td class="mdescRight">Copy constructor.  <a href="#509419e320f200456d89dc54a65140b3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#c8b20e7430c5302936030bef59a562be">concurrent_priority_queue</a> (const <a class="el" href="a00273.html">concurrent_priority_queue</a> &src, const <a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> &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">Copy constructor with specific allocator.  <a href="#c8b20e7430c5302936030bef59a562be"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00273.html">concurrent_priority_queue</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#2ab7f7808891027ac0f0f5b3a4be51e9">operator=</a> (const <a class="el" href="a00273.html">concurrent_priority_queue</a> &src)</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="a00273.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a> () const   throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Assignment operator.  <a href="#2ab7f7808891027ac0f0f5b3a4be51e9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#317c508fa92df218be5d014c26c09bb7">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="b33a89bccf0c63106f1270c7bfaaf54f"></a><!-- doxytag: member="tbb::movable_exception::what" ref="b33a89bccf0c63106f1270c7bfaaf54f" args="() const " -->
-const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a> () const   throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if empty, false otherwise.  <a href="#317c508fa92df218be5d014c26c09bb7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#8b2ae25c61338c6fd59e94fe09822ba5">size</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00273.html#b33a89bccf0c63106f1270c7bfaaf54f">what()</a> method. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00273.html">movable_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a> ()  throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the current number of elements contained in the queue.  <a href="#8b2ae25c61338c6fd59e94fe09822ba5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#d905af7b8f6defff562f5ae9c3275763">push</a> (<a class="el" href="a00273.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> elem)</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="a00273.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> ()  throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pushes elem onto the queue, increasing capacity of queue if necessary.  <a href="#d905af7b8f6defff562f5ae9c3275763"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#e036461a29cc40902a2bb79abf9f5146">try_pop</a> (<a class="el" href="a00273.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a> elem)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00273.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="a00273.html#17cffba35811c92b7e65d63506b69602">throw_self</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Gets a reference to and removes highest priority element.  <a href="#e036461a29cc40902a2bb79abf9f5146"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#0bdcdf7cde9fd369edca845bec34ca94">clear</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="a00273.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear the queue; not thread-safe.  <a href="#0bdcdf7cde9fd369edca845bec34ca94"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#0ecdc6a04aa259374425d424ca2a6082">swap</a> (<a class="el" href="a00273.html">concurrent_priority_queue</a> &q)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Swap this queue with another; not thread-safe.  <a href="#0ecdc6a04aa259374425d424ca2a6082"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d545d444fb0d16148f9b61fd89f9a337"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::get_allocator" ref="d545d444fb0d16148f9b61fd89f9a337" args="() const " -->
+<a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#d545d444fb0d16148f9b61fd89f9a337">get_allocator</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return allocator object. <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"><b>cpq_operation</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>my_functor_t</b></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 ExceptionData><br>
- class tbb::movable_exception< ExceptionData ></h3>
+<h3>template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>><br>
+ class tbb::interface5::concurrent_priority_queue< T, Compare, A ></h3>
 
-Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. 
+Concurrent priority queue. 
 <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="a00319.html">tbb::tbb_exception</a> </dd></dl>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="509419e320f200456d89dc54a65140b3"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::concurrent_priority_queue" ref="509419e320f200456d89dc54a65140b3" args="(const concurrent_priority_queue &src)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00273.html">concurrent_priority_queue</a>           </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00273.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
+          <td class="paramname"> <em>src</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, explicit]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
 <p>
+Copy constructor. 
+<p>
+This operation is unsafe if there are pending concurrent operations on the src queue. 
+</div>
+</div><p>
+<a class="anchor" name="c8b20e7430c5302936030bef59a562be"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::concurrent_priority_queue" ref="c8b20e7430c5302936030bef59a562be" args="(const concurrent_priority_queue &src, const allocator_type &a)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::<a class="el" href="a00273.html">concurrent_priority_queue</a>           </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00273.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
+          <td class="paramname"> <em>src</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> & </td>
+          <td class="paramname"> <em>a</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>
+Copy constructor with specific allocator. 
+<p>
+This operation is unsafe if there are pending concurrent operations on the src queue. 
+</div>
+</div><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="0bdcdf7cde9fd369edca845bec34ca94"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::clear" ref="0bdcdf7cde9fd369edca845bec34ca94" args="()" -->
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename ExceptionData> </div>
+template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
       <table class="memname">
         <tr>
-          <td class="memname">void <a class="el" href="a00273.html">tbb::movable_exception</a>< ExceptionData >::destroy           </td>
+          <td class="memname">void <a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, 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="a00273.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. 
+Clear the queue; not thread-safe. 
 <p>
-Implements <a class="el" href="a00319.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>.
+This operation is unsafe if there are pending concurrent operations on the queue. Resets size, effectively emptying queue; does not free space. May not clear elements added in pending operations. 
 </div>
 </div><p>
-<a class="anchor" name="1aea0ad179d6f0481fe7f3495f66adf9"></a><!-- doxytag: member="tbb::movable_exception::move" ref="1aea0ad179d6f0481fe7f3495f66adf9" args="()" -->
+<a class="anchor" name="317c508fa92df218be5d014c26c09bb7"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::empty" ref="317c508fa92df218be5d014c26c09bb7" args="() const " -->
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename ExceptionData> </div>
+template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
       <table class="memname">
         <tr>
-          <td class="memname"><a class="el" href="a00273.html">movable_exception</a>* <a class="el" href="a00273.html">tbb::movable_exception</a>< ExceptionData >::move           </td>
+          <td class="memname">bool <a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::empty           </td>
           <td>(</td>
           <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%">  throw ()<code> [inline, virtual]</code></td>
+          <td width="100%"> const<code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Returns true if empty, false otherwise. 
+<p>
+Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. 
+</div>
+</div><p>
+<a class="anchor" name="2ab7f7808891027ac0f0f5b3a4be51e9"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::operator=" ref="2ab7f7808891027ac0f0f5b3a4be51e9" args="(const concurrent_priority_queue &src)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00273.html">concurrent_priority_queue</a>& <a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::operator=           </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00273.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
+          <td class="paramname"> <em>src</em>          </td>
+          <td> ) </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. 
+Assignment operator. 
 <p>
-Move semantics is allowed. 
+This operation is unsafe if there are pending concurrent operations on the src queue. 
+</div>
+</div><p>
+<a class="anchor" name="d905af7b8f6defff562f5ae9c3275763"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::push" ref="d905af7b8f6defff562f5ae9c3275763" args="(const_reference elem)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::push           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00273.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> </td>
+          <td class="paramname"> <em>elem</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
 <p>
-Implements <a class="el" href="a00319.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a>.
+Pushes elem onto the queue, increasing capacity of queue if necessary. 
+<p>
+This operation can be safely used concurrently with other push, try_pop or reserve operations. 
 </div>
 </div><p>
-<a class="anchor" name="17cffba35811c92b7e65d63506b69602"></a><!-- doxytag: member="tbb::movable_exception::throw_self" ref="17cffba35811c92b7e65d63506b69602" args="()" -->
+<a class="anchor" name="8b2ae25c61338c6fd59e94fe09822ba5"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::size" ref="8b2ae25c61338c6fd59e94fe09822ba5" args="() const " -->
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template<typename ExceptionData> </div>
+template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
       <table class="memname">
         <tr>
-          <td class="memname">void <a class="el" href="a00273.html">tbb::movable_exception</a>< ExceptionData >::throw_self           </td>
+          <td class="memname"><a class="el" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> <a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::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. 
+Returns the current number of elements contained in the queue. 
+<p>
+Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition. 
+</div>
+</div><p>
+<a class="anchor" name="0ecdc6a04aa259374425d424ca2a6082"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::swap" ref="0ecdc6a04aa259374425d424ca2a6082" args="(concurrent_priority_queue &q)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::swap           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00273.html">concurrent_priority_queue</a>< T, Compare, A > & </td>
+          <td class="paramname"> <em>q</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Swap this queue with another; not thread-safe. 
+<p>
+This operation is unsafe if there are pending concurrent operations on the queue. 
+</div>
+</div><p>
+<a class="anchor" name="e036461a29cc40902a2bb79abf9f5146"></a><!-- doxytag: member="tbb::interface5::concurrent_priority_queue::try_pop" ref="e036461a29cc40902a2bb79abf9f5146" args="(reference elem)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue</a>< T, Compare, A >::try_pop           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00273.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a> </td>
+          <td class="paramname"> <em>elem</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. 
+Gets a reference to and removes highest priority element. 
 <p>
-Implements <a class="el" href="a00319.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a>.
+If a highest priority element was found, sets elem and returns true, otherwise returns false. This operation can be safely used concurrently with other push, try_pop or reserve operations. 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00593.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00473.html">concurrent_priority_queue.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00274.html b/doc/html/a00274.html
index 8623998..ddc0616 100644
--- a/doc/html/a00274.html
+++ b/doc/html/a00274.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::flow::interface6::multioutput_function_node< Input, Output,, Allocator > Class Template 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,48 +21,146 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00274.html">multioutput_function_node</a></div>
-<h1>tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::multioutput_function_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node" -->implements a function node that supports Input -> (set of outputs)  
+<a class="el" href="a00414.html">tbb</a>::<b>strict_ppl</b>::<a class="el" href="a00274.html">concurrent_queue</a></div>
+<h1>tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference<br>
+<small>
+[<a class="el" href="a00427.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="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00476.html">concurrent_queue.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator >:
-<p><center><img src="a00274.png" usemap="#tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator >_map">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,434,24">
-</map>
-<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 Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="caf2ee1047fb85e2b4b02afe7877c385"></a><!-- doxytag: member="tbb::flow::interface6::multioutput_function_node::input_type" ref="caf2ee1047fb85e2b4b02afe7877c385" args="" -->
-typedef Input </td><td class="memItemRight" valign="bottom"><b>input_type</b></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="a00274.html#682c3978d5cb0620000994f11c44a476">value_type</a></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c49aae50bb04b3439e6e88bf449a01a9"></a><!-- doxytag: member="tbb::flow::interface6::multioutput_function_node::ports_type" ref="c49aae50bb04b3439e6e88bf449a01a9" args="" -->
-typedef internal::wrap_tuple_elements<<br>
- N, internal::function_output,<br>
- Output >::type </td><td class="memItemRight" valign="bottom"><b>ports_type</b></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="a00274.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="a00274.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="a00274.html#8fc30e93f8342a1960357f71e4fe8a2b">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="a00274.html#068576d16c7e4e05d52f9db7a45b5b65">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="a00274.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="" -->
+typedef internal::concurrent_queue_iterator<<br>
+ <a class="el" href="a00274.html">concurrent_queue</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9cd76d19af8c78be1bafc6ca0123ac0d"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::const_iterator" ref="9cd76d19af8c78be1bafc6ca0123ac0d" args="" -->
+typedef internal::concurrent_queue_iterator<<br>
+ <a class="el" href="a00274.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="memTemplParams" nowrap colspan="2"><a class="anchor" name="6054e8a5fe0159b5ec04c2a06687310c"></a><!-- doxytag: member="tbb::flow::interface6::multioutput_function_node::multioutput_function_node" ref="6054e8a5fe0159b5ec04c2a06687310c" args="(graph &g, size_t concurrency, Body body)" -->
-template<typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>multioutput_function_node</b> (<a class="el" href="a00262.html">graph</a> &g, size_t concurrency, Body body)</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="a00274.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a> (const <a class="el" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00274.html#5a3956341728eaa558d8827063718cac">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())" -->
+template<typename InputIterator> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00274.html#25209656c84f2f9b030e2f9162713341">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00274.html#5a3956341728eaa558d8827063718cac">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="a00274.html#8a6b98ea11a867db8ac868f0113ca429">concurrent_queue</a> (const <a class="el" href="a00274.html">concurrent_queue</a> &src, const <a class="el" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a> &a=<a class="el" href="a00274.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="a00274.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00274.html#73c47563ffcc4c2f6452f25a04ebe2e2">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="a00274.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a> (T &result)</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="a00274.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#eaa35a5274606779802e9a669a706260">unsafe_size</a> () const </td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="57f90e91362c343e4e80e2f305851220"></a><!-- doxytag: member="tbb::flow::interface6::multioutput_function_node::multioutput_function_node" ref="57f90e91362c343e4e80e2f305851220" args="(const multioutput_function_node &other)" -->
- </td><td class="memItemRight" valign="bottom"><b>multioutput_function_node</b> (const <a class="el" href="a00274.html">multioutput_function_node</a> &other)</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="a00274.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a> () const </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="a00274.html#c32e8e84c0524155133b4aae32d2a827">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="f034f70caef445fe8abc9113ec926a8d"></a><!-- doxytag: member="tbb::strict_ppl::concurrent_queue::get_allocator" ref="f034f70caef445fe8abc9113ec926a8d" args="() const " -->
+<a class="el" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.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="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="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>
+
+<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>
+
+<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>
+
+<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>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Input, typename Output, graph_buffer_policy = queueing, typename Allocator = cache_aligned_allocator<Input>><br>
- class tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></h3>
+<h3>template<typename T, typename A = cache_aligned_allocator<T>><br>
+ class tbb::strict_ppl::concurrent_queue< T, A ></h3>
 
-implements a function node that supports Input -> (set of outputs) 
+A high-performance thread-safe non-blocking concurrent queue. 
+<p>
+Multiple threads may each push and pop concurrently. Assignment construction is not allowed. 
+<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)" -->
+<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">bool <a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue</a>< T, A >::try_pop           </td>
+          <td>(</td>
+          <td class="paramtype">T & </td>
+          <td class="paramname"> <em>result</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>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00476.html">concurrent_queue.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00274.png b/doc/html/a00274.png
deleted file mode 100644
index f84a6bc..0000000
Binary files a/doc/html/a00274.png and /dev/null differ
diff --git a/doc/html/a00275.html b/doc/html/a00275.html
index c24ca20..4917221 100644
--- a/doc/html/a00275.html
+++ b/doc/html/a00275.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::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,95 +21,113 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00275.html">mutex</a></div>
-<h1>tbb::mutex Class Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<b>deprecated</b>::<a class="el" href="a00275.html">concurrent_queue</a></div>
+<h1>tbb::deprecated::concurrent_queue< T, A > Class Template Reference<br>
 <small>
-[<a class="el" href="a00398.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::mutex" -->Wrapper around the platform's native reader-writer lock.  
+[<a class="el" href="a00427.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="a00487.html">mutex.h</a>></code>
+<code>#include <<a class="el" href="a00476.html">concurrent_queue.h</a>></code>
 <p>
-<a href="a00074.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="a00275.png" usemap="#tbb::deprecated::concurrent_queue< T, A >_map" border="0" alt=""></center>
+<map name="tbb::deprecated::concurrent_queue< T, A >_map">
+<area href="a00268.html" alt="tbb::concurrent_bounded_queue< T, A >" shape="rect" coords="0,0,257,24">
+</map>
+<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 Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9f1ec84d5815263ceae853f06ddb4cac"></a><!-- doxytag: member="tbb::mutex::native_handle_type" ref="9f1ec84d5815263ceae853f06ddb4cac" args="" -->
-typedef LPCRITICAL_SECTION </td><td class="memItemRight" valign="bottom"><a class="el" href="a00275.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a></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="a00268.html">concurrent_bounded_queue</a><<br>
+ T, A >::iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return native_handle. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1f4d4b88a03eb3e95c76569b91a0792"></a><!-- doxytag: member="tbb::mutex::native_handle_type" ref="a1f4d4b88a03eb3e95c76569b91a0792" args="" -->
-typedef pthread_mutex_t * </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c907aa5ae5274da759c4188c8ab196034e5963fe9e27d7c4d0a2d4ffa24a50a7"></a><!-- doxytag: member="tbb::mutex::INITIALIZED" ref="c907aa5ae5274da759c4188c8ab196034e5963fe9e27d7c4d0a2d4ffa24a50a7" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>INITIALIZED</b> = 0x1234</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c907aa5ae5274da759c4188c8ab19603646f4766864612448d6f9b21ff61abcd"></a><!-- doxytag: member="tbb::mutex::DESTROYED" ref="c907aa5ae5274da759c4188c8ab19603646f4766864612448d6f9b21ff61abcd" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>DESTROYED</b> = 0x789A</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c907aa5ae5274da759c4188c8ab196031de5796ebbbaa1e30d19e5d54f0f6555"></a><!-- doxytag: member="tbb::mutex::HELD" ref="c907aa5ae5274da759c4188c8ab196031de5796ebbbaa1e30d19e5d54f0f6555" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>HELD</b> = 0x56CD</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>state_t</b> { <b>INITIALIZED</b> = 0x1234, 
-<b>DESTROYED</b> = 0x789A, 
-<b>HELD</b> = 0x56CD
- }</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="a00268.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="05313cb77d4f85213103d4dab74ed454"></a><!-- doxytag: member="tbb::mutex::mutex" ref="05313cb77d4f85213103d4dab74ed454" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00275.html#05313cb77d4f85213103d4dab74ed454">mutex</a> ()</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="a00275.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a> (const A &a=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="a00275.html#4470e61c24c129a0299ca6c17240adbb">lock</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="a00275.html#fc092b9082f233482f3513fc3bb670f7">concurrent_queue</a> (const <a class="el" href="a00275.html">concurrent_queue</a> &src, const A &a=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="a00275.html#4331652c79dea1c1131bd59ab161b234">try_lock</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="9102b897776bd2d9e908e6604ff16b5f"></a><!-- doxytag: member="tbb::deprecated::concurrent_queue::concurrent_queue" ref="9102b897776bd2d9e908e6604ff16b5f" args="(InputIterator b, InputIterator e, 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="a00275.html#9102b897776bd2d9e908e6604ff16b5f">concurrent_queue</a> (InputIterator b, InputIterator e, const A &a=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="a00275.html#5fc9ef443ae75d966695546be399cc6b">unlock</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="a00275.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a> (const T &source)</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="caf34349c0fbe7b44f1a2ca0a3150dd0"></a><!-- doxytag: member="tbb::mutex::native_handle" ref="caf34349c0fbe7b44f1a2ca0a3150dd0" args="()" -->
-<a class="el" href="a00275.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</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="a00275.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a> (T &destination)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="795649a185b0d6af6dc81c5f378616dd"></a><!-- doxytag: member="tbb::mutex::set_state" ref="795649a185b0d6af6dc81c5f378616dd" args="(state_t to)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00275.html#795649a185b0d6af6dc81c5f378616dd">set_state</a> (state_t to)</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="mdescLeft"> </td><td class="mdescRight">Set the internal state. <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="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="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="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="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="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="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="a00276.html">scoped_lock</a></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="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00276.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. 
+<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>
-For testing purposes only. 
+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="4331652c79dea1c1131bd59ab161b234"></a><!-- doxytag: member="tbb::mutex::try_lock" ref="4331652c79dea1c1131bd59ab161b234" args="()" -->
+<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="a00275.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="a00268.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 tbb::mutex::try_lock           </td>
+          <td class="memname">bool <a class="el" href="a00275.html">tbb::deprecated::concurrent_queue</a>< T, A >::push_if_not_full           </td>
           <td>(</td>
-          <td class="paramname">          </td>
+          <td class="paramtype">const T & </td>
+          <td class="paramname"> <em>source</em>          </td>
           <td> ) </td>
           <td width="100%"><code> [inline]</code></td>
         </tr>
@@ -118,16 +136,16 @@ For testing purposes only.
 <div class="memdoc">
 
 <p>
-Try acquiring lock (non-blocking). 
+Enqueue an item at tail of queue if queue is not already full. 
 <p>
-Return true if lock acquired; false otherwise. 
+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="a00487.html">mutex.h</a></ul>
+<li><a class="el" href="a00476.html">concurrent_queue.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00249.png b/doc/html/a00275.png
similarity index 100%
copy from doc/html/a00249.png
copy to doc/html/a00275.png
diff --git a/doc/html/a00276.html b/doc/html/a00276.html
index efdbef7..3ea04eb 100644
--- a/doc/html/a00276.html
+++ b/doc/html/a00276.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::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,54 +21,573 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00275.html">mutex</a>::<a class="el" href="a00276.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="a00414.html">tbb</a>::<a class="el" href="a00276.html">concurrent_vector</a></div>
+<h1>tbb::concurrent_vector< T, A > Class Template Reference<br>
+<small>
+[<a class="el" href="a00427.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="a00487.html">mutex.h</a>></code>
+<code>#include <<a class="el" href="a00487.html">concurrent_vector.h</a>></code>
 <p>
-<a href="a00075.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>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="a00276.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="a00276.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="1d403ae51b484df5d86d85ae38f11e6e"></a><!-- doxytag: member="tbb::mutex::scoped_lock::scoped_lock" ref="1d403ae51b484df5d86d85ae38f11e6e" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00276.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a> ()</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="a00276.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="a00276.html#dd8a200b99a8088435a37934b58fe335">concurrent_vector</a> (const <a class="el" href="a00276.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="a00276.html#64432f13f7b29bfe4acfb5568f34f3a8">concurrent_vector</a> (const <a class="el" href="a00276.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="a00276.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="a00276.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="a00276.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="a00276.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00276.html#691f0f3cda3e489c37a657016e375eaf">operator=</a> (const <a class="el" href="a00276.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="a00276.html">concurrent_vector</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00276.html#19f4ab88a01b0fd056af3bba463e7bd6">operator=</a> (const <a class="el" href="a00276.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="a00276.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="a00276.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="a00276.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 constructor.  <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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return false 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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.html#1693d1da41b1a8235871be9c6633be35">compact</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An alias for <a class="el" href="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.html#78a06182276ff758788d4c0623ae0d71">begin</a> () const </td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="605a6b9af0f8cdabdf81825e0de99600"></a><!-- doxytag: member="tbb::mutex::scoped_lock::scoped_lock" ref="605a6b9af0f8cdabdf81825e0de99600" args="(mutex &mutex)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00276.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a> (<a class="el" href="a00275.html">mutex</a> &<a class="el" href="a00275.html">mutex</a>)</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="a00276.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">end</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="0ebbbecaf4311e9df7362cb76ceaa368"></a><!-- doxytag: member="tbb::mutex::scoped_lock::~scoped_lock" ref="0ebbbecaf4311e9df7362cb76ceaa368" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00276.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a> ()</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="a00276.html#f88fcf1c920693c39bd9709db33c199f">cbegin</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="a00276.html#862e022841cdc522e4296a5533b22efd">acquire</a> (<a class="el" href="a00275.html">mutex</a> &<a class="el" href="a00275.html">mutex</a>)</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="a00276.html#0c15a5d0f1cf75d687dabba07da1d46b">cend</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="a00276.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a> (<a class="el" href="a00275.html">mutex</a> &<a class="el" href="a00275.html">mutex</a>)</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="a00276.html#5e220926d09236d98f04fe0721e5f9a1">rbegin</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="a00276.html#0d51d18cd99df3b2e93bf07378d0992c">release</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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.html#96c9c4bd968ed3edb8dd276854d2dae0">swap</a> (<a class="el" href="a00276.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="a00276.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="a00276.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 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="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>
-The scoped locking pattern. 
+<h3>template<typename T, class A><br>
+ class tbb::concurrent_vector< T, A ></h3>
+
+Concurrent vector container. 
+<p>
+<a class="el" href="a00276.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 guarantees 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="a00276.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="a00276.html#715fe313c4a9c22731cc404dd80c9ec9">concurrent_vector::size()</a> and <a class="el" href="a00276.html#47fe588214dd5fa06ab6e8ab78d83874">grow_to_at_least()</a> methods to assure elements are allocated.</li><li>Methods <a class="el" href="a00276.html#c0b51160e5a764982ec97a455f94f2c6">end()</a>/rbegin()/back() are partly thread-safe since they use <a class="el" href="a00276.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 guarantees</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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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 constructor. 
+<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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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="a00276.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>
-It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
+Allocate enough space to grow to size n without having to allocate more memory later. 
 <p>
+Like most of the methods provided for STL compatibility, this method is *not* thread safe. The capacity afterwards may be bigger than the requested reservation. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00487.html">mutex.h</a></ul>
+<li><a class="el" href="a00487.html">concurrent_vector.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00277.html b/doc/html/a00277.html
index b0bc02e..49751ec 100644
--- a/doc/html/a00277.html
+++ b/doc/html/a00277.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::flow::interface6::continue_msg 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,23 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00277.html">null_mutex</a></div>
-<h1>tbb::null_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00398.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::null_mutex" -->A mutex which does nothing.  
+<a class="el" href="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00277.html">continue_msg</a></div>
+<h1>tbb::flow::interface6::continue_msg Class Reference</h1><!-- doxytag: class="tbb::flow::interface6::continue_msg" -->An empty class used for messages that mean "I'm done".  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00489.html">null_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<a href="a00076.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>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 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="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>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00278.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-A mutex which does nothing. 
-<p>
-A <a class="el" href="a00277.html">null_mutex</a> does no operation and simulates success. 
+An empty class used for messages that mean "I'm done". 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00489.html">null_mutex.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00278.html b/doc/html/a00278.html
index 7218bd8..a9d32b0 100644
--- a/doc/html/a00278.html
+++ b/doc/html/a00278.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::flow::interface6::continue_node< Output > 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,36 +21,71 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00277.html">null_mutex</a>::<a class="el" href="a00278.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="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00278.html">continue_node</a></div>
+<h1>tbb::flow::interface6::continue_node< Output > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::continue_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node" -->Implements an executable node that supports <a class="el" href="a00277.html">continue_msg</a> -> Output.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00489.html">null_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<a href="a00077.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::flow::interface6::continue_node< Output >:
+<p><center><img src="a00278.png" usemap="#tbb::flow::interface6::continue_node< Output >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::continue_node< Output >_map">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,271,24">
+</map>
+<a href="a00068.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7a06613c9cda6f13a6010e7f2f8d0c23"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::input_type" ref="7a06613c9cda6f13a6010e7f2f8d0c23" args="" -->
+typedef <a class="el" href="a00277.html">continue_msg</a> </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="01b4d78a352cfb7d62b5ce2d1baa24f3"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::output_type" ref="01b4d78a352cfb7d62b5ce2d1baa24f3" args="" -->
+typedef Output </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9ae7fda69d7d69c55cf8b57ae7b4b613"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::predecessor_type" ref="9ae7fda69d7d69c55cf8b57ae7b4b613" args="" -->
+typedef <a class="el" href="a00327.html">sender</a>< <a class="el" href="a00277.html">input_type</a> > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5a647a2b302232fe9a8f44940987f21"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::successor_type" ref="d5a647a2b302232fe9a8f44940987f21" args="" -->
+typedef <a class="el" href="a00321.html">receiver</a>< output_type > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="868190ed9818d1d23eb65c87689657d5"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::fOutput_type" ref="868190ed9818d1d23eb65c87689657d5" args="" -->
+typedef internal::function_output<<br>
+ output_type > </td><td class="memItemRight" valign="bottom"><b>fOutput_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="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="a00277.html">null_mutex</a> &)</td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="2f200db877d2f80c08d09422e8bffd5a"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::continue_node" ref="2f200db877d2f80c08d09422e8bffd5a" args="(graph &g, Body body)" -->
+template<typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00278.html#2f200db877d2f80c08d09422e8bffd5a">continue_node</a> (<a class="el" href="a00288.html">graph</a> &g, Body body)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor for executable node with <a class="el" href="a00277.html">continue_msg</a> -> Output. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="7817aebf22dd125ca04df53ac488d163"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::continue_node" ref="7817aebf22dd125ca04df53ac488d163" args="(graph &g, int number_of_predecessors, Body body)" -->
+template<typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00278.html#7817aebf22dd125ca04df53ac488d163">continue_node</a> (<a class="el" href="a00288.html">graph</a> &g, int number_of_predecessors, Body body)</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="a00277.html">null_mutex</a> &)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor for executable node with <a class="el" href="a00277.html">continue_msg</a> -> Output. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="869562787fcb5c57a90aea120f26d492"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::continue_node" ref="869562787fcb5c57a90aea120f26d492" args="(const continue_node &src)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html#869562787fcb5c57a90aea120f26d492">continue_node</a> (const <a class="el" href="a00278.html">continue_node</a> &src)</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="a00277.html">null_mutex</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="67bc2d65e63f434d34c6c74ce5654b3f"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::try_put" ref="67bc2d65e63f434d34c6c74ce5654b3f" args="(const input_type &i)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>try_put</b> (const <a class="el" href="a00277.html">input_type</a> &i)</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>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="23d3b09e13e2dbc32a6308a821e8ba29"></a><!-- doxytag: member="tbb::flow::interface6::continue_node::successors" ref="23d3b09e13e2dbc32a6308a821e8ba29" args="()" -->
+internal::broadcast_cache<<br>
+ output_type > & </td><td class="memItemRight" valign="bottom"><b>successors</b> ()</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Represents acquisition of a mutex. 
+<h3>template<typename Output><br>
+ class tbb::flow::interface6::continue_node< Output ></h3>
+
+Implements an executable node that supports <a class="el" href="a00277.html">continue_msg</a> -> Output. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00489.html">null_mutex.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00252.png b/doc/html/a00278.png
similarity index 100%
copy from doc/html/a00252.png
copy to doc/html/a00278.png
diff --git a/doc/html/a00279.html b/doc/html/a00279.html
index a908754..ca025d5 100644
--- a/doc/html/a00279.html
+++ b/doc/html/a00279.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::flow::interface6::continue_receiver 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,145 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00279.html">null_rw_mutex</a></div>
-<h1>tbb::null_rw_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00398.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::null_rw_mutex" -->A rw mutex which does nothing.  
+<a class="el" href="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00279.html">continue_receiver</a></div>
+<h1>tbb::flow::interface6::continue_receiver Class Reference</h1><!-- doxytag: class="tbb::flow::interface6::continue_receiver" --><!-- doxytag: inherits="tbb::flow::interface6::receiver" -->Base class for receivers of completion messages.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00490.html">null_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<a href="a00078.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::flow::interface6::continue_receiver:
+<p><center><img src="a00279.png" usemap="#tbb::flow::interface6::continue_receiver_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::continue_receiver_map">
+<area href="a00321.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="0,0,230,24">
+</map>
+<a href="a00055.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 Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3c43c166af832d9187035985841e0a7f"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::input_type" ref="3c43c166af832d9187035985841e0a7f" args="" -->
+typedef <a class="el" href="a00277.html">continue_msg</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#3c43c166af832d9187035985841e0a7f">input_type</a></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="mdescLeft"> </td><td class="mdescRight">The input type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f9c58b3e9c46afd2518d0fd8957a5a2f"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::predecessor_type" ref="f9c58b3e9c46afd2518d0fd8957a5a2f" args="" -->
+typedef <a class="el" href="a00327.html">sender</a>< <a class="el" href="a00277.html">continue_msg</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#f9c58b3e9c46afd2518d0fd8957a5a2f">predecessor_type</a></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 class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <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="177db82d548a1f8471371331890b91a8"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::continue_receiver" ref="177db82d548a1f8471371331890b91a8" args="(int number_of_predecessors=0)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#177db82d548a1f8471371331890b91a8">continue_receiver</a> (int number_of_predecessors=0)</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="a00280.html">scoped_lock</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0b292ed7fa6556b2a735f6d1e82dc74"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::continue_receiver" ref="a0b292ed7fa6556b2a735f6d1e82dc74" args="(const continue_receiver &src)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a0b292ed7fa6556b2a735f6d1e82dc74">continue_receiver</a> (const <a class="el" href="a00279.html">continue_receiver</a> &src)</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="1e14828fa079b9835ff7267df5ee45d7"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::~continue_receiver" ref="1e14828fa079b9835ff7267df5ee45d7" args="()" -->
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#1e14828fa079b9835ff7267df5ee45d7">~continue_receiver</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="2fcfa4990a42417bbeb1f3c8b9ac8a22"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::register_predecessor" ref="2fcfa4990a42417bbeb1f3c8b9ac8a22" args="(predecessor_type &)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">register_predecessor</a> (<a class="el" href="a00327.html">predecessor_type</a> &)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Increments the trigger threshold. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#cb691b18416d4742265aed84d496ebbd">remove_predecessor</a> (<a class="el" href="a00327.html">predecessor_type</a> &)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Decrements the trigger threshold.  <a href="#cb691b18416d4742265aed84d496ebbd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#3969c70fb89c0a982f142ae9eb5facae">try_put</a> (const <a class="el" href="a00277.html">input_type</a> &)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Puts a <a class="el" href="a00277.html">continue_msg</a> to the receiver.  <a href="#3969c70fb89c0a982f142ae9eb5facae"></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">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#40ca8b7e96c5bc3428b4d1e409725ee5">execute</a> ()=0</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Does whatever should happen when the threshold is reached.  <a href="#40ca8b7e96c5bc3428b4d1e409725ee5"></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="5cddbd33109e94a68fb5457682a62110"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::my_mutex" ref="5cddbd33109e94a68fb5457682a62110" args="" -->
+<a class="el" href="a00331.html">spin_mutex</a> </td><td class="memItemRight" valign="bottom"><b>my_mutex</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="66df49f67e70e7f8e9831d0e362ba84c"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::my_predecessor_count" ref="66df49f67e70e7f8e9831d0e362ba84c" args="" -->
+int </td><td class="memItemRight" valign="bottom"><b>my_predecessor_count</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05fd1ce3c3fd7be3e74817b31fd2f068"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::my_current_count" ref="05fd1ce3c3fd7be3e74817b31fd2f068" args="" -->
+int </td><td class="memItemRight" valign="bottom"><b>my_current_count</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a0d4c3084fd13902c2d38f31c1dc232"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::my_initial_predecessor_count" ref="8a0d4c3084fd13902c2d38f31c1dc232" args="" -->
+int </td><td class="memItemRight" valign="bottom"><b>my_initial_predecessor_count</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00280.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-A rw mutex which does nothing. 
+Base class for receivers of completion messages. 
+<p>
+These receivers automatically reset, but cannot be explicitly waited on 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="40ca8b7e96c5bc3428b4d1e409725ee5"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::execute" ref="40ca8b7e96c5bc3428b4d1e409725ee5" args="()=0" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void tbb::flow::interface6::continue_receiver::execute           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [protected, pure virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Does whatever should happen when the threshold is reached. 
+<p>
+This should be very fast or else spawn a task. This is called while the sender is blocked in the <a class="el" href="a00279.html#3969c70fb89c0a982f142ae9eb5facae">try_put()</a>. 
+</div>
+</div><p>
+<a class="anchor" name="cb691b18416d4742265aed84d496ebbd"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::remove_predecessor" ref="cb691b18416d4742265aed84d496ebbd" args="(predecessor_type &)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::flow::interface6::continue_receiver::remove_predecessor           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00327.html">predecessor_type</a> & </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Decrements the trigger threshold. 
+<p>
+Does not check to see if the removal of the predecessor now makes the current count exceed the new threshold. So removing a predecessor while the graph is active can cause unexpected results. 
+</div>
+</div><p>
+<a class="anchor" name="3969c70fb89c0a982f142ae9eb5facae"></a><!-- doxytag: member="tbb::flow::interface6::continue_receiver::try_put" ref="3969c70fb89c0a982f142ae9eb5facae" args="(const input_type &)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::flow::interface6::continue_receiver::try_put           </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="a00277.html">input_type</a> & </td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
 <p>
-A <a class="el" href="a00279.html">null_rw_mutex</a> is a rw mutex that does nothing and simulates successful operation. 
+Puts a <a class="el" href="a00277.html">continue_msg</a> to the receiver. 
 <p>
+If the message causes the message count to reach the predecessor count, <a class="el" href="a00279.html#40ca8b7e96c5bc3428b4d1e409725ee5">execute()</a> is called and the message count is reset to 0. Otherwise the message count is incremented. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00490.html">null_rw_mutex.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00253.png b/doc/html/a00279.png
similarity index 100%
rename from doc/html/a00253.png
rename to doc/html/a00279.png
diff --git a/doc/html/a00280.html b/doc/html/a00280.html
index acf08f1..5307e5a 100644
--- a/doc/html/a00280.html
+++ b/doc/html/a00280.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::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,42 +21,31 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00279.html">null_rw_mutex</a>::<a class="el" href="a00280.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="a00414.html">tbb</a>::<a class="el" href="a00280.html">empty_task</a></div>
+<h1>tbb::empty_task Class Reference<br>
+<small>
+[<a class="el" href="a00431.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="a00490.html">null_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00613.html">task.h</a>></code>
 <p>
-<a href="a00079.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::empty_task:
+<p><center><img src="a00280.png" usemap="#tbb::empty_task_map" border="0" alt=""></center>
+<map name="tbb::empty_task_map">
+<area href="a00337.html" alt="tbb::task" shape="rect" coords="0,0,97,24">
+</map>
+<a href="a00134.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public 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="a00279.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="a00279.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="a00279.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>
-
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Represents acquisition of a mutex. 
+task that does nothing. Useful for synchronization. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00490.html">null_rw_mutex.h</a></ul>
+<li><a class="el" href="a00613.html">task.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00254.png b/doc/html/a00280.png
similarity index 100%
rename from doc/html/a00254.png
rename to doc/html/a00280.png
diff --git a/doc/html/a00281.html b/doc/html/a00281.html
index b818881..e78e8f9 100644
--- a/doc/html/a00281.html
+++ b/doc/html/a00281.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::interface6::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,42 +21,174 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00281.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="a00414.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00281.html">enumerable_thread_specific</a></div>
+<h1>tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference<br>
+<small>
+[<a class="el" href="a00427.html">Containers</a>]</small>
+</h1><!-- doxytag: class="tbb::interface6::enumerable_thread_specific" -->The <a class="el" href="a00281.html">enumerable_thread_specific</a> container.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00491.html">parallel_do.h</a>></code>
+<code>#include <<a class="el" href="a00499.html">enumerable_thread_specific.h</a>></code>
 <p>
-<a href="a00080.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 Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3c03eb40955b933b01987222722ac4bd"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::allocator_type" ref="3c03eb40955b933b01987222722ac4bd" args="" -->
+typedef Allocator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#3c03eb40955b933b01987222722ac4bd">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="e93f3b75e82eaa845cc1a0514eaba31a"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::value_type" ref="e93f3b75e82eaa845cc1a0514eaba31a" 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="0fd259a6b20641c768079f41d3213904"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::reference" ref="0fd259a6b20641c768079f41d3213904" 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="2c1d47e24439524fea72d9c10df25d54"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::const_reference" ref="2c1d47e24439524fea72d9c10df25d54" 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="27cf20b87f4381a69203aed11e5a34dc"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::pointer" ref="27cf20b87f4381a69203aed11e5a34dc" 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="0e132e2a40dd6ce5472f8e13a1e80947"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::const_pointer" ref="0e132e2a40dd6ce5472f8e13a1e80947" 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="c67c208bec3e8b77190d545bd1f150e3"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::size_type" ref="c67c208bec3e8b77190d545bd1f150e3" 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="eda9be9a80bed094d4657948b5b7831f"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::difference_type" ref="eda9be9a80bed094d4657948b5b7831f" 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="bd6f8e0af3c5e5166a4223f88b03e0a5"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::iterator" ref="bd6f8e0af3c5e5166a4223f88b03e0a5" args="" -->
+typedef internal::enumerable_thread_specific_iterator<<br>
+ <a class="el" href="a00276.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="8ff2ff1a117048f5d57aedebb12d57e1"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::const_iterator" ref="8ff2ff1a117048f5d57aedebb12d57e1" args="" -->
+typedef internal::enumerable_thread_specific_iterator<<br>
+ <a class="el" href="a00276.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="d4c23a666adbf88bd3280873de9d7f39"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::range_type" ref="d4c23a666adbf88bd3280873de9d7f39" 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="0ce41c6603d8f547f11df05d1ccb2184"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::const_range_type" ref="0ce41c6603d8f547f11df05d1ccb2184" 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="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="a00281.html#40baaf0f6856f4491dd0adf896c93516">add</a> (const Item &item)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0cfa3a5c8f2be3bbf313d93b1fa8cdb3"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::enumerable_thread_specific" ref="0cfa3a5c8f2be3bbf313d93b1fa8cdb3" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#0cfa3a5c8f2be3bbf313d93b1fa8cdb3">enumerable_thread_specific</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. Each local instance of T is default constructed. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="8d4b456ff9d7b289c73254eccc11db45"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::enumerable_thread_specific" ref="8d4b456ff9d7b289c73254eccc11db45" 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="a00281.html#8d4b456ff9d7b289c73254eccc11db45">enumerable_thread_specific</a> (Finit finit)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor with initializer functor. Each local instance of T is constructed by T(finit()). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7bce6829981c9efe3f59cae2355e383e"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::enumerable_thread_specific" ref="7bce6829981c9efe3f59cae2355e383e" args="(const T &exemplar)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#7bce6829981c9efe3f59cae2355e383e">enumerable_thread_specific</a> (const T &exemplar)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constuctor with exemplar. Each local instance of T is copied-constructed from the exemplar. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5a7907d9e3e5b18e7a7b55211ef3213f"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::~enumerable_thread_specific" ref="5a7907d9e3e5b18e7a7b55211ef3213f" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#5a7907d9e3e5b18e7a7b55211ef3213f">~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="c8d5265ccbd5e4485996b3f3baaa5ba1"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::local" ref="c8d5265ccbd5e4485996b3f3baaa5ba1" args="()" -->
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#c8d5265ccbd5e4485996b3f3baaa5ba1">local</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="7dc79058d2832f7447de8e691c3455ea"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::local" ref="7dc79058d2832f7447de8e691c3455ea" args="(bool &exists)" -->
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#7dc79058d2832f7447de8e691c3455ea">local</a> (bool &exists)</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="33fd6593da1ed14340f10f67d5a69130"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::size" ref="33fd6593da1ed14340f10f67d5a69130" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#33fd6593da1ed14340f10f67d5a69130">size</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="72595886d0ac8fd0543f90038570510d"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::empty" ref="72595886d0ac8fd0543f90038570510d" args="() const " -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#72595886d0ac8fd0543f90038570510d">empty</a> () const </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="01d7baf8e913ab2819e97917a2ac795f"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::begin" ref="01d7baf8e913ab2819e97917a2ac795f" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#01d7baf8e913ab2819e97917a2ac795f">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="2456ff88252fc921b01cd8907628a4ee"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::end" ref="2456ff88252fc921b01cd8907628a4ee" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#2456ff88252fc921b01cd8907628a4ee">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="84afb3906a39e399cde1c950d6351300"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::begin" ref="84afb3906a39e399cde1c950d6351300" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#84afb3906a39e399cde1c950d6351300">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="cb448bb4977ce366ceb7344085cc7050"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::end" ref="cb448bb4977ce366ceb7344085cc7050" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#cb448bb4977ce366ceb7344085cc7050">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="b22c54990b2362cd93c1a8f73de140bc"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::range" ref="b22c54990b2362cd93c1a8f73de140bc" args="(size_t grainsize=1)" -->
+range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#b22c54990b2362cd93c1a8f73de140bc">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="3b068000cf4dbf9b40f8bb7e3fc53e0b"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::range" ref="3b068000cf4dbf9b40f8bb7e3fc53e0b" args="(size_t grainsize=1) const " -->
+const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">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="a8764176d4b6014c5d65f1051851abc8"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::clear" ref="a8764176d4b6014c5d65f1051851abc8" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#a8764176d4b6014c5d65f1051851abc8">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="43bbf3a313c5431559df2946f76221e0"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::enumerable_thread_specific" ref="43bbf3a313c5431559df2946f76221e0" 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="a00281.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="25a9c336cfd5a171c29cbdd0feb84249"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::enumerable_thread_specific" ref="25a9c336cfd5a171c29cbdd0feb84249" args="(const enumerable_thread_specific &other)" -->
+ </td><td class="memItemRight" valign="bottom"><b>enumerable_thread_specific</b> (const <a class="el" href="a00281.html">enumerable_thread_specific</a> &other)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1f8f467eb4c44c58614d0f9dce687477"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::operator=" ref="1f8f467eb4c44c58614d0f9dce687477" args="(const enumerable_thread_specific &other)" -->
+<a class="el" href="a00281.html">enumerable_thread_specific</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00281.html">enumerable_thread_specific</a> &other)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="0e7ebbfd8e04eb22fe59b581206e7888"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::operator=" ref="0e7ebbfd8e04eb22fe59b581206e7888" 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="a00281.html">enumerable_thread_specific</a> & </td><td class="memTemplItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00281.html">enumerable_thread_specific</a>< U, Alloc, Cachetype > &other)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="1eac7eff6e21b7fc299b67acb36eb3c7"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::combine" ref="1eac7eff6e21b7fc299b67acb36eb3c7" 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="f671d7bd4c1d3a750b4be4c32a489c55"></a><!-- doxytag: member="tbb::interface6::enumerable_thread_specific::combine_each" ref="f671d7bd4c1d3a750b4be4c32a489c55" 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">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="45364b2f249ceb935cff05c29fcfcf5c"></a><!-- doxytag: member="tbb::interface6::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>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Item><br>
- class tbb::parallel_do_feeder< Item ></h3>
+<h3>template<typename T, typename Allocator = cache_aligned_allocator<T>, ets_key_usage_type ETS_key_type = ets_no_key><br>
+ class tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></h3>
 
-Class the user supplied algorithm body uses to add new tasks. 
+The <a class="el" href="a00281.html">enumerable_thread_specific</a> container. 
+<p>
+<a class="el" href="a00281.html">enumerable_thread_specific</a> has the following properties:<ul>
+<li>thread-local copies are lazily created, with default, exemplar or function initialization.</li><li>thread-local copies do not move (during lifetime, and excepting <a class="el" href="a00281.html#a8764176d4b6014c5d65f1051851abc8">clear()</a>) so the address of a copy is invariant.</li><li>the contained objects need not have operator=() defined if combine is not used.</li><li><a class="el" href="a00281.html">enumerable_thread_specific</a> containers may be copy-constructed or assigned. [...]
 <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>
+<dl compact><dt><b>Segmented iterator</b></dt><dd>When the thread-local objects are containers with input_iterators defined, a segmented iterator may be used to iterate over all the elements of all thread-local copies.</dd></dl>
+<dl compact><dt><b>combine and combine_each</b></dt><dd><ul>
+<li>Both methods are defined for <a class="el" href="a00281.html">enumerable_thread_specific</a>.</li><li>combine() requires the the type T have operator=() defined.</li><li>neither method modifies the contents of the object (though there is no guarantee that the applied methods do not modify the object.)</li><li>Both are evaluated in serial context (the methods are assumed to be non-benign.) </li></ul>
+</dd></dl>
 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00491.html">parallel_do.h</a></ul>
+<li><a class="el" href="a00499.html">enumerable_thread_specific.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00282.html b/doc/html/a00282.html
index f6b39db..f2cc50d 100644
--- a/doc/html/a00282.html
+++ b/doc/html/a00282.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::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,117 +21,213 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00282.html">parallel_while</a></div>
-<h1>tbb::parallel_while< Body > Class Template Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00282.html">filter</a></div>
+<h1>tbb::filter Class Reference<br>
 <small>
-[<a class="el" href="a00395.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="a00426.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="a00527.html">parallel_while.h</a>></code>
+<code>#include <<a class="el" href="a00587.html">pipeline.h</a>></code>
 <p>
-<a href="a00084.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::filter:
+<p><center><img src="a00282.png" usemap="#tbb::filter_map" border="0" alt=""></center>
+<map name="tbb::filter_map">
+<area href="a00348.html" alt="tbb::thread_bound_filter" shape="rect" coords="0,56,145,80">
+</map>
+<a href="a00105.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="a00282.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="a00282.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a> ()</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="a00282.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="a00282.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="a00282.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"><a class="anchor" name="8ec4dfe053e94a2349d56781ddea8477"></a><!-- doxytag: member="tbb::filter::object_may_be_null" ref="8ec4dfe053e94a2349d56781ddea8477" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#8ec4dfe053e94a2349d56781ddea8477">object_may_be_null</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">true if an input filter can emit null <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.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="a00282.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="a00282.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="1edba30e1e64e82ee4b7c6f227825817"></a><!-- doxytag: member="tbb::filter::x1" ref="1edba30e1e64e82ee4b7c6f227825817" args="((is_serial_?serial:parallel)|exact_exception_propagation))" -->
+ </td><td class="memItemRight" valign="bottom"><b>x1</b> ((is_serial_?serial:parallel)|<a class="el" href="a00282.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a>))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a06145c3e7ad273ece95eb8be642b0a2"></a><!-- doxytag: member="tbb::filter::prev_filter_in_pipeline" ref="a06145c3e7ad273ece95eb8be642b0a2" args="(not_in_pipeline())" -->
+ </td><td class="memItemRight" valign="bottom"><b>prev_filter_in_pipeline</b> (not_in_pipeline())</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7a54082a9165275bf7725970d756f132"></a><!-- doxytag: member="tbb::filter::my_pipeline" ref="7a54082a9165275bf7725970d756f132" args="(NULL)" -->
+ </td><td class="memItemRight" valign="bottom"><b>my_pipeline</b> (NULL)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d66d6e9e27b1be74fdb9c07f899d4837"></a><!-- doxytag: member="tbb::filter::next_segment" ref="d66d6e9e27b1be74fdb9c07f899d4837" args="(NULL)" -->
+ </td><td class="memItemRight" valign="bottom"><b>next_segment</b> (NULL)</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> (mode filter_mode)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2b9c0dd8123a8186b46bc100d9469f5"></a><!-- doxytag: member="tbb::filter::set_end_of_input" ref="b2b9c0dd8123a8186b46bc100d9469f5" args="()" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>set_end_of_input</b> ()</td></tr>
+
+<tr><td colspan="2"><br><h2>Static Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b7de3a76e744f3d9c1bc5d437ea851d"></a><!-- doxytag: member="tbb::filter::filter_is_serial" ref="4b7de3a76e744f3d9c1bc5d437ea851d" args="" -->
+static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a> = 0x1</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The lowest bit 0 is for parallel vs. serial. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a> = 0x1<<4</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="a00282.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">4th bit distinguishes ordered vs unordered filters.  <a href="#2e5eb65f95d8050186278077e433c5b1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dd6a6e7210efc9bcaf2c5e08767d92b5"></a><!-- doxytag: member="tbb::filter::filter_is_bound" ref="dd6a6e7210efc9bcaf2c5e08767d92b5" args="" -->
+static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a> = 0x1<<5</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="a00282.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a> (Stream &stream, const Body &body)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">5th bit distinguishes thread-bound and regular filters. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bdd02a434a6e7499dd1e8f43aae96793"></a><!-- doxytag: member="tbb::filter::filter_may_emit_null" ref="bdd02a434a6e7499dd1e8f43aae96793" args="" -->
+static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a> = 0x1<<6</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="a00282.html#e131c560057a58229992b61eb8dba4c6">add</a> (const <a class="el" href="a00282.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> &item)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">6th bit marks input filters emitting small objects <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">7th bit defines exception propagation mode expected by the application.  <a href="#f17200974c33be21f42a5f00893de028"></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="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">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>
+A stage in a pipeline. 
+<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">
 
-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 
+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="e131c560057a58229992b61eb8dba4c6"></a><!-- doxytag: member="tbb::parallel_while::add" ref="e131c560057a58229992b61eb8dba4c6" args="(const value_type &item)" -->
+<a class="anchor" name="56275eb889c77c4807967133e21401bd"></a><!-- doxytag: member="tbb::filter::finalize" ref="56275eb889c77c4807967133e21401bd" args="(void *)" -->
 <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="a00282.html">tbb::parallel_while</a>< Body >::add           </td>
+          <td class="memname">virtual void tbb::filter::finalize           </td>
           <td>(</td>
-          <td class="paramtype">const <a class="el" href="a00282.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> & </td>
-          <td class="paramname"> <em>item</em>          </td>
+          <td class="paramtype">void * </td>
+          <td class="paramname">          </td>
           <td> ) </td>
-          <td width="100%"></td>
+          <td width="100%"><code> [inline, virtual]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Add a work item while running. 
+Destroys item if pipeline was cancelled. 
 <p>
-Should be executed only by body.apply or a thread spawned therefrom. 
+Required to prevent memory leaks. Note it can be called concurrently even for serial filters. 
 </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="fa1b3dc1f4f47563ccab7f4d92f5b543"></a><!-- doxytag: member="tbb::filter::operator()" ref="fa1b3dc1f4f47563ccab7f4d92f5b543" args="(void *item)=0" -->
 <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="a00282.html">tbb::parallel_while</a>< Body >::run           </td>
+          <td class="memname">virtual void* tbb::filter::operator()           </td>
           <td>(</td>
-          <td class="paramtype">Stream & </td>
-          <td class="paramname"> <em>stream</em>, </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>
+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><h2>Member Data Documentation</h2>
+<a class="anchor" name="f17200974c33be21f42a5f00893de028"></a><!-- doxytag: member="tbb::filter::exact_exception_propagation" ref="f17200974c33be21f42a5f00893de028" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Body & </td>
-          <td class="paramname"> <em>body</em></td><td> </td>
+          <td class="memname">const unsigned char <a class="el" href="a00282.html#f17200974c33be21f42a5f00893de028">tbb::filter::exact_exception_propagation</a><code> [static, protected]</code>          </td>
         </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b>Initial value:</b><div class="fragment"><pre class="fragment">
+<span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<span class="preprocessor">            0x0</span>
+</pre></div>7th bit defines exception propagation mode expected by the application. 
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2e5eb65f95d8050186278077e433c5b1"></a><!-- doxytag: member="tbb::filter::filter_is_out_of_order" ref="2e5eb65f95d8050186278077e433c5b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="memname">const unsigned char <a class="el" href="a00282.html#2e5eb65f95d8050186278077e433c5b1">tbb::filter::filter_is_out_of_order</a> = 0x1<<4<code> [static, protected]</code>          </td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Apply body.apply to each item in the stream. 
+4th bit distinguishes ordered vs unordered filters. 
 <p>
-A Stream s has the requirements <br>
- "S::value_type" <br>
- "s.pop_if_present(value) is convertible to bool 
+The bit was not set for parallel filters in TBB 2.1 and earlier, but <a class="el" href="a00282.html#cd53206c4795ef2df5df26b795caf692">is_ordered()</a> function always treats parallel filters as out of order. 
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00527.html">parallel_while.h</a></ul>
+<li><a class="el" href="a00587.html">pipeline.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00256.png b/doc/html/a00282.png
similarity index 100%
rename from doc/html/a00256.png
rename to doc/html/a00282.png
diff --git a/doc/html/a00283.html b/doc/html/a00283.html
index 454d174..a7e2944 100644
--- a/doc/html/a00283.html
+++ b/doc/html/a00283.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::partition_type_base Class Reference</title>
+<title>tbb::interface6::filter_t< T, U > 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,53 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>internal</b>::<a class="el" href="a00283.html">partition_type_base</a></div>
-<h1>tbb::internal::partition_type_base Class Reference</h1><!-- doxytag: class="tbb::internal::partition_type_base" -->Provides backward-compatible methods for partition objects without affinity.  
+<a class="el" href="a00414.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00283.html">filter_t</a></div>
+<h1>tbb::interface6::filter_t< T, U > Class Template Reference</h1><!-- doxytag: class="tbb::interface6::filter_t" -->Class representing a chain of type-safe pipeline filters.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00531.html">partitioner.h</a>></code>
+<code>#include <<a class="el" href="a00587.html">pipeline.h</a>></code>
 <p>
-<a href="a00086.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00109.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5b43011addf53239ccf8cdeaeab76e7"></a><!-- doxytag: member="tbb::internal::partition_type_base::set_affinity" ref="d5b43011addf53239ccf8cdeaeab76e7" args="(task &)" -->
-void </td><td class="memItemRight" valign="bottom"><b>set_affinity</b> (<a class="el" href="a00311.html">task</a> &)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="af1a36ca22e38eacd72eb256ee2ecef0"></a><!-- doxytag: member="tbb::interface6::filter_t::filter_t" ref="af1a36ca22e38eacd72eb256ee2ecef0" args="(const filter_t< T, U > &rhs)" -->
+ </td><td class="memItemRight" valign="bottom"><b>filter_t</b> (const <a class="el" href="a00283.html">filter_t</a>< T, U > &rhs)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2bffce16dee5796448bf12c8ccecd94c"></a><!-- doxytag: member="tbb::internal::partition_type_base::note_affinity" ref="2bffce16dee5796448bf12c8ccecd94c" args="(task::affinity_id)" -->
-void </td><td class="memItemRight" valign="bottom"><b>note_affinity</b> (<a class="el" href="a00311.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a>)</td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="b80632a312f984a16b2a0db77859ee08"></a><!-- doxytag: member="tbb::interface6::filter_t::filter_t" ref="b80632a312f984a16b2a0db77859ee08" args="(tbb::filter::mode mode, const Body &body)" -->
+template<typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>filter_t</b> (tbb::filter::mode mode, const Body &body)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="87962b93599ff172cd4b64f2995ebc71"></a><!-- doxytag: member="tbb::internal::partition_type_base::continue_after_execute_range" ref="87962b93599ff172cd4b64f2995ebc71" args="()" -->
-<a class="el" href="a00311.html">task</a> * </td><td class="memItemRight" valign="bottom"><b>continue_after_execute_range</b> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2d87c68b6beaff12dcec7231d96d7b4c"></a><!-- doxytag: member="tbb::interface6::filter_t::operator=" ref="2d87c68b6beaff12dcec7231d96d7b4c" args="(const filter_t< T, U > &rhs)" -->
+void </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00283.html">filter_t</a>< T, U > &rhs)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="baca041e2b854196a411f1d0ca7ae905"></a><!-- doxytag: member="tbb::internal::partition_type_base::decide_whether_to_delay" ref="baca041e2b854196a411f1d0ca7ae905" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><b>decide_whether_to_delay</b> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f299d149b932c2c78006c6f703b83eef"></a><!-- doxytag: member="tbb::interface6::filter_t::clear" ref="f299d149b932c2c78006c6f703b83eef" 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="17686f1a5119802cad38369d0580d05f"></a><!-- doxytag: member="tbb::internal::partition_type_base::spawn_or_delay" ref="17686f1a5119802cad38369d0580d05f" args="(bool, task &b)" -->
-void </td><td class="memItemRight" valign="bottom"><b>spawn_or_delay</b> (bool, <a class="el" href="a00311.html">task</a> &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="fff802cb5656e3788a89f3314aed2efe"></a><!-- doxytag: member="tbb::interface6::filter_t::internal::pipeline_proxy" ref="fff802cb5656e3788a89f3314aed2efe" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::pipeline_proxy</b></td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="85c2892eff1fddcd06e28911e75838bd"></a><!-- doxytag: member="tbb::interface6::filter_t::make_filter" ref="85c2892eff1fddcd06e28911e75838bd" args="(tbb::filter::mode, const Body &)" -->
+template<typename T_, typename U_, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00283.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00283.html#85c2892eff1fddcd06e28911e75838bd">make_filter</a> (tbb::filter::mode, const Body &)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Create a filter to participate in parallel_pipeline. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="6b9b1f5ce7f2121f093b8cd1d84707ad"></a><!-- doxytag: member="tbb::interface6::filter_t::operator &" ref="6b9b1f5ce7f2121f093b8cd1d84707ad" args="(const filter_t< T_, V_ > &, const filter_t< V_, U_ > &)" -->
+template<typename T_, typename V_, typename U_> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00283.html">filter_t</a>< T_, U_ > </td><td class="memTemplItemRight" valign="bottom"><b>operator &</b> (const <a class="el" href="a00283.html">filter_t</a>< T_, V_ > &, const <a class="el" href="a00283.html">filter_t</a>< V_, U_ > &)</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Provides backward-compatible methods for partition objects without affinity. 
+<h3>template<typename T, typename U><br>
+ class tbb::interface6::filter_t< T, U ></h3>
+
+Class representing a chain of type-safe pipeline filters. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00531.html">partitioner.h</a></ul>
+<li><a class="el" href="a00587.html">pipeline.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00284.html b/doc/html/a00284.html
index 5f30066..7d3edb6 100644
--- a/doc/html/a00284.html
+++ b/doc/html/a00284.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::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,88 +21,30 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00284.html">pipeline</a></div>
-<h1>tbb::pipeline Class Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00284.html">final_scan_tag</a></div>
+<h1>tbb::final_scan_tag Struct Reference<br>
 <small>
-[<a class="el" href="a00395.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::pipeline" -->A processing pipeline that applies filters to items.  
+[<a class="el" href="a00426.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="a00543.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00562.html">parallel_scan.h</a>></code>
 <p>
-<a href="a00093.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00097.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="596dc3beba27099c4c8581cb419e1a59"></a><!-- doxytag: member="tbb::pipeline::pipeline" ref="596dc3beba27099c4c8581cb419e1a59" args="()" -->
-__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.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="a00284.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</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="a00284.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a> (<a class="el" href="a00256.html">filter</a> &filter_)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add filter to end of pipeline. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00284.html#f627616049b3fe36801f37ee40403ef8">run</a> (size_t max_number_of_live_tokens)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Run the pipeline to completion. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00284.html#93d7fec8cd607b803dd2d79fb46bd260">run</a> (size_t max_number_of_live_tokens, <a class="el" href="a00314.html">tbb::task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Run the pipeline to completion with user-supplied context. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c84aef5b834b555ee220b176e25931e"></a><!-- doxytag: member="tbb::pipeline::clear" ref="2c84aef5b834b555ee220b176e25931e" args="()" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#2c84aef5b834b555ee220b176e25931e">clear</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Remove all filters from the pipeline. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="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 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 class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d1ed99300bc4520a481583c448d6fafd"></a><!-- doxytag: member="tbb::pipeline::tbb::interface6::internal::pipeline_proxy" ref="d1ed99300bc4520a481583c448d6fafd" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>tbb::interface6::internal::pipeline_proxy</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>
-A processing pipeline that applies filters to items. 
-<p>
-<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">
-
+Used to indicate that the final scan is being performed. 
 <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="a00543.html">pipeline.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00562.html">parallel_scan.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00285.html b/doc/html/a00285.html
index 4c84e65..e7c54d5 100644
--- a/doc/html/a00285.html
+++ b/doc/html/a00285.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::interface6::flow_control 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,31 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00285.html">pre_scan_tag</a></div>
-<h1>tbb::pre_scan_tag Struct Reference<br>
-<small>
-[<a class="el" href="a00395.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="a00414.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00285.html">flow_control</a></div>
+<h1>tbb::interface6::flow_control Class Reference</h1><!-- doxytag: class="tbb::interface6::flow_control" -->input_filter control to signal end-of-input for parallel_pipeline  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00518.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00587.html">pipeline.h</a>></code>
 <p>
-<a href="a00082.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00108.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>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="4b2c7123577587e3c26506db3e5abe62"></a><!-- doxytag: member="tbb::interface6::flow_control::stop" ref="4b2c7123577587e3c26506db3e5abe62" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><b>stop</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="15bb80e25fbcc4213e0053d558df6462"></a><!-- doxytag: member="tbb::interface6::flow_control::internal::concrete_filter" ref="15bb80e25fbcc4213e0053d558df6462" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::concrete_filter</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Used to indicate that the initial scan is being performed. 
+input_filter control to signal end-of-input for parallel_pipeline 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00518.html">parallel_scan.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00587.html">pipeline.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00286.html b/doc/html/a00286.html
index 4a39f04..3b12c8b 100644
--- a/doc/html/a00286.html
+++ b/doc/html/a00286.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::flow::interface6::priority_queue_node< T, Compare, A > Class Template Reference</title>
+<title>tbb::flow::interface6::function_node< Input, Output,, 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,110 +21,71 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00286.html">priority_queue_node</a></div>
-<h1>tbb::flow::interface6::priority_queue_node< T, Compare, A > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::priority_queue_node" --><!-- doxytag: inherits="tbb::flow::interface6::buffer_node" -->Forwards messages in priority order.  
+<a class="el" href="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00286.html">function_node</a></div>
+<h1>tbb::flow::interface6::function_node< Input, Output,, Allocator > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::function_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node" -->Implements a function node that supports Input -> Output.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::priority_queue_node< T, Compare, A >:
-<p><center><img src="a00286.png" usemap="#tbb::flow::interface6::priority_queue_node< T, Compare, A >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::priority_queue_node< T, Compare, A >_map">
-<area href="a00237.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="362,56,714,80">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,352,24">
-<area href="a00295.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="362,0,714,24">
-<area href="a00301.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="724,0,1076,24">
+<p>Inheritance diagram for tbb::flow::interface6::function_node< Input, Output,, Allocator >:
+<p><center><img src="a00286.png" usemap="#tbb::flow::interface6::function_node< Input, Output,, Allocator >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::function_node< Input, Output,, Allocator >_map">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,368,24">
 </map>
 <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="b2829b518979874ad3d2a939e14ae7bd"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::input_type" ref="b2829b518979874ad3d2a939e14ae7bd" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eed5be58daf252aebed0df276ef9829b"></a><!-- doxytag: member="tbb::flow::interface6::function_node::input_type" ref="eed5be58daf252aebed0df276ef9829b" args="" -->
+typedef Input </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2cb099b590246b6bc93cc15e78c6ee5c"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::output_type" ref="2cb099b590246b6bc93cc15e78c6ee5c" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.html#2cb099b590246b6bc93cc15e78c6ee5c">output_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6b1ada4ae95bcc11f3ecc7d8b407038"></a><!-- doxytag: member="tbb::flow::interface6::function_node::output_type" ref="a6b1ada4ae95bcc11f3ecc7d8b407038" args="" -->
+typedef Output </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fdea783bf9d5a4c98e794ac7e0f84ccf"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::predecessor_type" ref="fdea783bf9d5a4c98e794ac7e0f84ccf" args="" -->
-typedef <a class="el" href="a00301.html">sender</a>< <a class="el" href="a00286.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.html#fdea783bf9d5a4c98e794ac7e0f84ccf">predecessor_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7bffd3b755433095325cc554ea2ae752"></a><!-- doxytag: member="tbb::flow::interface6::function_node::predecessor_type" ref="7bffd3b755433095325cc554ea2ae752" args="" -->
+typedef <a class="el" href="a00327.html">sender</a>< input_type > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="09ab5064ca8192e68c03da47603e68eb"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::successor_type" ref="09ab5064ca8192e68c03da47603e68eb" args="" -->
-typedef <a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00286.html#2cb099b590246b6bc93cc15e78c6ee5c">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.html#09ab5064ca8192e68c03da47603e68eb">successor_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c24f9bbb872a81053cea4f38e214f458"></a><!-- doxytag: member="tbb::flow::interface6::function_node::successor_type" ref="c24f9bbb872a81053cea4f38e214f458" args="" -->
+typedef <a class="el" href="a00321.html">receiver</a>< output_type > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ad406125e6938567d61b5b7ad7039a0"></a><!-- doxytag: member="tbb::flow::interface6::function_node::fInput_type" ref="3ad406125e6938567d61b5b7ad7039a0" args="" -->
+typedef internal::function_input<<br>
+ input_type, output_type,<br>
+ Allocator > </td><td class="memItemRight" valign="bottom"><b>fInput_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6bde48df8336f0bdc4fbb8c1879e13d6"></a><!-- doxytag: member="tbb::flow::interface6::function_node::fOutput_type" ref="6bde48df8336f0bdc4fbb8c1879e13d6" args="" -->
+typedef internal::function_output<<br>
+ output_type > </td><td class="memItemRight" valign="bottom"><b>fOutput_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <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="497ec2612615249bf5a294eb1b7b93b3"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::priority_queue_node" ref="497ec2612615249bf5a294eb1b7b93b3" args="(graph &g)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.html#497ec2612615249bf5a294eb1b7b93b3">priority_queue_node</a> (<a class="el" href="a00262.html">graph</a> &g)</td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="5c215b40e3daf73d1c6802ecb5aded6c"></a><!-- doxytag: member="tbb::flow::interface6::function_node::function_node" ref="5c215b40e3daf73d1c6802ecb5aded6c" args="(graph &g, size_t concurrency, Body body)" -->
+template<typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00286.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a> (<a class="el" href="a00288.html">graph</a> &g, size_t concurrency, Body body)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="17a4f66e23d54100b64805405e905d62"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::priority_queue_node" ref="17a4f66e23d54100b64805405e905d62" args="(const priority_queue_node &src)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.html#17a4f66e23d54100b64805405e905d62">priority_queue_node</a> (const <a class="el" href="a00286.html">priority_queue_node</a> &src)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5132323fd2ac6a00ea0c78beda78723"></a><!-- doxytag: member="tbb::flow::interface6::function_node::function_node" ref="d5132323fd2ac6a00ea0c78beda78723" args="(const function_node &src)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.html#d5132323fd2ac6a00ea0c78beda78723">function_node</a> (const <a class="el" href="a00286.html">function_node</a> &src)</td></tr>
 
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <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="d1c6c5e02b9cc144b2b3ccc9f18bf047"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::size_type" ref="d1c6c5e02b9cc144b2b3ccc9f18bf047" args="" -->
-typedef <a class="el" href="a00237.html">buffer_node</a>< T, A <br>
->::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="eb98634e74bee4d82676f1aca0f6864c"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::item_type" ref="eb98634e74bee4d82676f1aca0f6864c" args="" -->
-typedef <a class="el" href="a00237.html">buffer_node</a>< T, A <br>
->::item_type </td><td class="memItemRight" valign="bottom"><b>item_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f80f04dc8886a8a6b177123f094bdb43"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::prio_operation" ref="f80f04dc8886a8a6b177123f094bdb43" args="" -->
-typedef <a class="el" href="a00237.html">buffer_node</a>< T, A <br>
->::buffer_operation </td><td class="memItemRight" valign="bottom"><b>prio_operation</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="274cc306c7a22cf9e27c4c2c3a66ce8e579c547cd1c044d3e6190401d87ee101"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::WAIT" ref="274cc306c7a22cf9e27c4c2c3a66ce8e579c547cd1c044d3e6190401d87ee101" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>WAIT</b> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="274cc306c7a22cf9e27c4c2c3a66ce8e67ced6b76fb4bcd40404499619fbd0b9"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::SUCCEEDED" ref="274cc306c7a22cf9e27c4c2c3a66ce8e67ced6b76fb4bcd40404499619fbd0b9" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>SUCCEEDED</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="274cc306c7a22cf9e27c4c2c3a66ce8eb74545a431cbeaf85ab0bfcec52261ff"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::FAILED" ref="274cc306c7a22cf9e27c4c2c3a66ce8eb74545a431cbeaf85ab0bfcec52261ff" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>FAILED</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> = 0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</b>
- }</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bac36ad296662eb7e77ccd3a56688b64"></a><!-- doxytag: member="tbb::flow::interface6::function_node::try_put" ref="bac36ad296662eb7e77ccd3a56688b64" args="(const input_type &i)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>try_put</b> (const input_type &i)</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="abff2e0891477135c24f44747e991c6c"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::handle_operations" ref="abff2e0891477135c24f44747e991c6c" args="(prio_operation *op_list)" -->
-void </td><td class="memItemRight" valign="bottom"><b>handle_operations</b> (prio_operation *op_list)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ed2d8dc0a9c1c2571e4a69df2f2209e5"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_forward" ref="ed2d8dc0a9c1c2571e4a69df2f2209e5" args="(prio_operation *op)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">internal_forward</a> (prio_operation *op)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to forward valid items to successors. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05d8747ea54ca84a7196f8cacdc81ca5"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_push" ref="05d8747ea54ca84a7196f8cacdc81ca5" args="(prio_operation *op)" -->
-void </td><td class="memItemRight" valign="bottom"><b>internal_push</b> (prio_operation *op)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6c7cd11240fbe0737344f36b587492f9"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_pop" ref="6c7cd11240fbe0737344f36b587492f9" args="(prio_operation *op)" -->
-void </td><td class="memItemRight" valign="bottom"><b>internal_pop</b> (prio_operation *op)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9238c5c44ccc46ed1be218651f36feea"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_reserve" ref="9238c5c44ccc46ed1be218651f36feea" args="(prio_operation *op)" -->
-void </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (prio_operation *op)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="caefc7ba7a16a7120b6b37de42e705b4"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_consume" ref="caefc7ba7a16a7120b6b37de42e705b4" args="(prio_operation *op)" -->
-void </td><td class="memItemRight" valign="bottom"><b>internal_consume</b> (prio_operation *op)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="400304719e359e66e9560157577fc2fe"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_release" ref="400304719e359e66e9560157577fc2fe" args="(prio_operation *op)" -->
-void </td><td class="memItemRight" valign="bottom"><b>internal_release</b> (prio_operation *op)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ffad8dcf70ebebc751dcf2c82cd5e1ad"></a><!-- doxytag: member="tbb::flow::interface6::function_node::successors" ref="ffad8dcf70ebebc751dcf2c82cd5e1ad" args="()" -->
+internal::broadcast_cache<<br>
+ output_type > & </td><td class="memItemRight" valign="bottom"><b>successors</b> ()</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>><br>
- class tbb::flow::interface6::priority_queue_node< T, Compare, A ></h3>
+<h3>template<typename Input, typename Output = continue_msg, graph_buffer_policy = queueing, typename Allocator = cache_aligned_allocator<Input>><br>
+ class tbb::flow::interface6::function_node< Input, Output,, Allocator ></h3>
 
-Forwards messages in priority order. 
+Implements a function node that supports Input -> Output. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00286.png b/doc/html/a00286.png
index 1e0df07..75bb777 100644
Binary files a/doc/html/a00286.png and b/doc/html/a00286.png differ
diff --git a/doc/html/a00287.html b/doc/html/a00287.html
index 0325bb7..44f643a 100644
--- a/doc/html/a00287.html
+++ b/doc/html/a00287.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::flow::interface6::queue_node< T, A > Class Template Reference</title>
+<title>tbb::flow::interface6::function_node< Input, Output, queueing, 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,98 +21,75 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00287.html">queue_node</a></div>
-<h1>tbb::flow::interface6::queue_node< T, A > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::queue_node" --><!-- doxytag: inherits="tbb::flow::interface6::buffer_node" -->Forwards messages in FIFO order.  
+<a class="el" href="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00287.html">function_node< Input, Output, queueing, Allocator ></a></div>
+<h1>tbb::flow::interface6::function_node< Input, Output, queueing, Allocator > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node" -->Implements a function node that supports Input -> Output.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::queue_node< T, A >:
-<p><center><img src="a00287.png" usemap="#tbb::flow::interface6::queue_node< T, A >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::queue_node< T, A >_map">
-<area href="a00237.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="280,56,550,80">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,270,24">
-<area href="a00295.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="280,0,550,24">
-<area href="a00301.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="560,0,830,24">
-<area href="a00302.html" alt="tbb::flow::interface6::sequencer_node< T, A >" shape="rect" coords="280,168,550,192">
+<p>Inheritance diagram for tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >:
+<p><center><img src="a00287.png" usemap="#tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >_map">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,424,24">
 </map>
-<a href="a00060.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00063.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1e71030845210b6c4c7380eb9e11a2ac"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::input_type" ref="1e71030845210b6c4c7380eb9e11a2ac" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00287.html#1e71030845210b6c4c7380eb9e11a2ac">input_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d2d8e92791b85100f8a53f7b2335c60c"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::input_type" ref="d2d8e92791b85100f8a53f7b2335c60c" args="" -->
+typedef Input </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="25b5a53ab1f9a342644fa3759bc0b1ad"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::output_type" ref="25b5a53ab1f9a342644fa3759bc0b1ad" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00287.html#25b5a53ab1f9a342644fa3759bc0b1ad">output_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="df1b2d30d065b64efcee71021129760a"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::output_type" ref="df1b2d30d065b64efcee71021129760a" args="" -->
+typedef Output </td><td class="memItemRight" valign="bottom"><b>output_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5e2fdd33c45d44549dee9c1638e19898"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::predecessor_type" ref="5e2fdd33c45d44549dee9c1638e19898" args="" -->
-typedef <a class="el" href="a00301.html">sender</a>< <a class="el" href="a00287.html#1e71030845210b6c4c7380eb9e11a2ac">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00287.html#5e2fdd33c45d44549dee9c1638e19898">predecessor_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8d8519eb42d5ddbba668a575b24a720a"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::predecessor_type" ref="8d8519eb42d5ddbba668a575b24a720a" args="" -->
+typedef <a class="el" href="a00327.html">sender</a>< input_type > </td><td class="memItemRight" valign="bottom"><b>predecessor_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f35076a19f256f9e7a61bed77ca1ccc5"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::successor_type" ref="f35076a19f256f9e7a61bed77ca1ccc5" args="" -->
-typedef <a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00287.html#25b5a53ab1f9a342644fa3759bc0b1ad">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00287.html#f35076a19f256f9e7a61bed77ca1ccc5">successor_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="eb82369d652cd58b169f9a2e8f7ed023"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::successor_type" ref="eb82369d652cd58b169f9a2e8f7ed023" args="" -->
+typedef <a class="el" href="a00321.html">receiver</a>< output_type > </td><td class="memItemRight" valign="bottom"><b>successor_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <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="c716593a92448b0f429d1f3a38e67996"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::queue_node" ref="c716593a92448b0f429d1f3a38e67996" args="(graph &g)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00287.html#c716593a92448b0f429d1f3a38e67996">queue_node</a> (<a class="el" href="a00262.html">graph</a> &g)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0226762d9ebba28311b7b1518d948ab1"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::queue_node" ref="0226762d9ebba28311b7b1518d948ab1" args="(const queue_node &src)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00287.html#0226762d9ebba28311b7b1518d948ab1">queue_node</a> (const <a class="el" href="a00287.html">queue_node</a> &src)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6083108a1ca5a4f1464511e378e4bedf"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::fInput_type" ref="6083108a1ca5a4f1464511e378e4bedf" args="" -->
+typedef internal::function_input<<br>
+ input_type, output_type,<br>
+ Allocator > </td><td class="memItemRight" valign="bottom"><b>fInput_type</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <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="a84ab6bb43d056468ac5df3626219513"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::size_type" ref="a84ab6bb43d056468ac5df3626219513" args="" -->
-typedef <a class="el" href="a00237.html">buffer_node</a>< T, A <br>
->::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="63c3b0a76cd7964dec2f3d54afbb05f3"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::queue_operation" ref="63c3b0a76cd7964dec2f3d54afbb05f3" args="" -->
-typedef <a class="el" href="a00237.html">buffer_node</a>< T, A <br>
->::buffer_operation </td><td class="memItemRight" valign="bottom"><b>queue_operation</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4259f2853fb3af09518df3efb44ed8d5"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::queue_type" ref="4259f2853fb3af09518df3efb44ed8d5" args="" -->
+typedef internal::function_input_queue<<br>
+ input_type, Allocator > </td><td class="memItemRight" valign="bottom"><b>queue_type</b></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b748e310297e1e3f88952a2a9876bab979763449c8716cdd38fda58e607551f1"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::WAIT" ref="b748e310297e1e3f88952a2a9876bab979763449c8716cdd38fda58e607551f1" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>WAIT</b> = 0</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="431ce7232e788562d9152493961ee4b9"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::fOutput_type" ref="431ce7232e788562d9152493961ee4b9" args="" -->
+typedef internal::function_output<<br>
+ output_type > </td><td class="memItemRight" valign="bottom"><b>fOutput_type</b></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b748e310297e1e3f88952a2a9876bab923e845160e46a20fb8550132f04e94aa"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::SUCCEEDED" ref="b748e310297e1e3f88952a2a9876bab923e845160e46a20fb8550132f04e94aa" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>SUCCEEDED</b></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="5b9019c1e6e9b2c41c986a384bd179db"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::function_node" ref="5b9019c1e6e9b2c41c986a384bd179db" args="(graph &g, size_t concurrency, Body body)" -->
+template<typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00287.html#5b9019c1e6e9b2c41c986a384bd179db">function_node</a> (<a class="el" href="a00288.html">graph</a> &g, size_t concurrency, Body body)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b748e310297e1e3f88952a2a9876bab9ad699b139814d0746be2266041081474"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::FAILED" ref="b748e310297e1e3f88952a2a9876bab9ad699b139814d0746be2266041081474" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>FAILED</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="01055081ed477714503820035db3a965"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::function_node" ref="01055081ed477714503820035db3a965" args="(const function_node &src)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00287.html#01055081ed477714503820035db3a965">function_node</a> (const <a class="el" href="a00286.html">function_node</a> &src)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> = 0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</b>
- }</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="b86c76d70a008960f3261e927f846367"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::try_put" ref="b86c76d70a008960f3261e927f846367" args="(const input_type &i)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>try_put</b> (const input_type &i)</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="eadcbbb81f9a9d223afabe0f40e77ecb"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::internal_forward" ref="eadcbbb81f9a9d223afabe0f40e77ecb" args="(queue_operation *op)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00287.html#eadcbbb81f9a9d223afabe0f40e77ecb">internal_forward</a> (queue_operation *op)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to forward valid items to successors. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cfd2350a4c9d14486a8a9285acb9ca49"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::internal_pop" ref="cfd2350a4c9d14486a8a9285acb9ca49" args="(queue_operation *op)" -->
-void </td><td class="memItemRight" valign="bottom"><b>internal_pop</b> (queue_operation *op)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bf478ff2ae265ec859928191e2f7dbe3"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::internal_reserve" ref="bf478ff2ae265ec859928191e2f7dbe3" args="(queue_operation *op)" -->
-void </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (queue_operation *op)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d67eee760d9fd829064927e7fe1b54fb"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::internal_consume" ref="d67eee760d9fd829064927e7fe1b54fb" args="(queue_operation *op)" -->
-void </td><td class="memItemRight" valign="bottom"><b>internal_consume</b> (queue_operation *op)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="34125123f0c8d9c13dbd6f52148608a1"></a><!-- doxytag: member="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >::successors" ref="34125123f0c8d9c13dbd6f52148608a1" args="()" -->
+internal::broadcast_cache<<br>
+ output_type > & </td><td class="memItemRight" valign="bottom"><b>successors</b> ()</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::flow::interface6::queue_node< T, A ></h3>
+<h3>template<typename Input, typename Output, typename Allocator><br>
+ class tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></h3>
 
-Forwards messages in FIFO order. 
+Implements a function node that supports Input -> Output. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00287.png b/doc/html/a00287.png
index 09b37ae..349b919 100644
Binary files a/doc/html/a00287.png and b/doc/html/a00287.png differ
diff --git a/doc/html/a00288.html b/doc/html/a00288.html
index ef43229..39862a8 100644
--- a/doc/html/a00288.html
+++ b/doc/html/a00288.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::flow::interface6::graph Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,48 +21,253 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00288.html">queuing_mutex</a></div>
-<h1>tbb::queuing_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00398.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::queuing_mutex" -->Queuing lock with local-only spinning.  
+<a class="el" href="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00288.html">graph</a></div>
+<h1>tbb::flow::interface6::graph Class Reference</h1><!-- doxytag: class="tbb::flow::interface6::graph" -->The graph class.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00557.html">queuing_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<a href="a00096.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00057.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="ec5db0443a1320850f8fa05b5eed2ea4"></a><!-- doxytag: member="tbb::flow::interface6::graph::iterator" ref="ec5db0443a1320850f8fa05b5eed2ea4" args="" -->
+typedef graph_iterator< <a class="el" href="a00288.html">graph</a>,<br>
+ <a class="el" href="a00289.html">graph_node</a> > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3e677faaf2d66684cd32ccf5492dda4e"></a><!-- doxytag: member="tbb::flow::interface6::graph::const_iterator" ref="3e677faaf2d66684cd32ccf5492dda4e" args="" -->
+typedef graph_iterator< const <br>
+<a class="el" href="a00288.html">graph</a>, const <a class="el" href="a00289.html">graph_node</a> > </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="b389ad9c4db7293e4bdb5b8cda69ec04"></a><!-- doxytag: member="tbb::queuing_mutex::queuing_mutex" ref="b389ad9c4db7293e4bdb5b8cda69ec04" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4ab3d4b5208ece28c4c3ced647e26e12"></a><!-- doxytag: member="tbb::flow::interface6::graph::graph" ref="4ab3d4b5208ece28c4c3ced647e26e12" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#4ab3d4b5208ece28c4c3ced647e26e12">graph</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a graph with isolated <a class="el" href="a00340.html">task_group_context</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="104d4f3775f596b43177c29e6b7b7656"></a><!-- doxytag: member="tbb::flow::interface6::graph::graph" ref="104d4f3775f596b43177c29e6b7b7656" args="(task_group_context &use_this_context)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#104d4f3775f596b43177c29e6b7b7656">graph</a> (<a class="el" href="a00339.html">task_group_context</a> &use_this_context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a graph with use_this_context as context. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#8a7d424c0616a1c37a908ead182e2fe5">~graph</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys the graph.  <a href="#8a7d424c0616a1c37a908ead182e2fe5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#a993b789d1e488e0c3929135beae560e">increment_wait_count</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to register that an external entity may still interact with the graph.  <a href="#a993b789d1e488e0c3929135beae560e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#29b85506870f13a884a21655aec2a65d">decrement_wait_count</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Deregisters an external entity that may have interacted with the graph.  <a href="#29b85506870f13a884a21655aec2a65d"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template<typename Receiver, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#50a7938df01b6148ab2c0696835f002e">run</a> (Receiver &r, Body body)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawns a task that runs a body and puts its output to a specific receiver.  <a href="#50a7938df01b6148ab2c0696835f002e"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template<typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#c1145b00e063793a7e7bf994d202c7a0">run</a> (Body body)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawns a task that runs a function object.  <a href="#c1145b00e063793a7e7bf994d202c7a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all</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 class="mdescLeft"> </td><td class="mdescRight">Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls.  <a href="#a66b0020f7514b86d030fa8aea073d37"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7f4e3ae90811a5d8b597146b5b586d10"></a><!-- doxytag: member="tbb::flow::interface6::graph::root_task" ref="7f4e3ae90811a5d8b597146b5b586d10" args="()" -->
+<a class="el" href="a00337.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#7f4e3ae90811a5d8b597146b5b586d10">root_task</a> ()</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="mdescLeft"> </td><td class="mdescRight">Returns the root task of the graph. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b028cb585ec21e5de523d0075d0fa880"></a><!-- doxytag: member="tbb::flow::interface6::graph::begin" ref="b028cb585ec21e5de523d0075d0fa880" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#b028cb585ec21e5de523d0075d0fa880">begin</a> ()</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="mdescLeft"> </td><td class="mdescRight">start iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a167c62511ddacaa152daa64ab2d6aac"></a><!-- doxytag: member="tbb::flow::interface6::graph::end" ref="a167c62511ddacaa152daa64ab2d6aac" args="()" -->
+iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#a167c62511ddacaa152daa64ab2d6aac">end</a> ()</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 class="mdescLeft"> </td><td class="mdescRight">end iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f63c3b7d03098b57fc16b71c57b303e5"></a><!-- doxytag: member="tbb::flow::interface6::graph::begin" ref="f63c3b7d03098b57fc16b71c57b303e5" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#f63c3b7d03098b57fc16b71c57b303e5">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="907bd06606818c36f52420fe8d469d35"></a><!-- doxytag: member="tbb::flow::interface6::graph::end" ref="907bd06606818c36f52420fe8d469d35" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#907bd06606818c36f52420fe8d469d35">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="e183dfc3f89dc8f57c06ba165fb89f66"></a><!-- doxytag: member="tbb::flow::interface6::graph::cbegin" ref="e183dfc3f89dc8f57c06ba165fb89f66" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#e183dfc3f89dc8f57c06ba165fb89f66">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="4866156e6a31d0399b61c6eb82ee81fd"></a><!-- doxytag: member="tbb::flow::interface6::graph::cend" ref="4866156e6a31d0399b61c6eb82ee81fd" args="() const " -->
+const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#4866156e6a31d0399b61c6eb82ee81fd">cend</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="227ea140dc2c68f79a4e5a34a8367b58"></a><!-- doxytag: member="tbb::flow::interface6::graph::is_cancelled" ref="227ea140dc2c68f79a4e5a34a8367b58" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#227ea140dc2c68f79a4e5a34a8367b58">is_cancelled</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">return status of graph execution <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e48ff6b3b7433ce6ee2c2518b79d1a7c"></a><!-- doxytag: member="tbb::flow::interface6::graph::exception_thrown" ref="e48ff6b3b7433ce6ee2c2518b79d1a7c" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><b>exception_thrown</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="9143fb4f732c36d5587e467e21a0e7f6"></a><!-- doxytag: member="tbb::flow::interface6::graph::graph_node" ref="9143fb4f732c36d5587e467e21a0e7f6" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>graph_node</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="621c092f8466e55743ceef04b0bde9ce"></a><!-- doxytag: member="tbb::flow::interface6::graph::graph_iterator" ref="621c092f8466e55743ceef04b0bde9ce" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>graph_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"><a class="el" href="a00289.html">scoped_lock</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>run_and_put_task</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>run_task</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00289.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Queuing lock with local-only spinning. 
+The graph class. 
+<p>
+This class serves as a handle to the graph 
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="8a7d424c0616a1c37a908ead182e2fe5"></a><!-- doxytag: member="tbb::flow::interface6::graph::~graph" ref="8a7d424c0616a1c37a908ead182e2fe5" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::flow::interface6::graph::~graph           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Destroys the graph. 
+<p>
+Calls wait_for_all, then destroys the root task and context. 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="29b85506870f13a884a21655aec2a65d"></a><!-- doxytag: member="tbb::flow::interface6::graph::decrement_wait_count" ref="29b85506870f13a884a21655aec2a65d" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::flow::interface6::graph::decrement_wait_count           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Deregisters an external entity that may have interacted with the graph. 
+<p>
+The graph will not return from wait_for_all until all the number of decrement_wait_count calls matches the number of increment_wait_count calls. 
+</div>
+</div><p>
+<a class="anchor" name="a993b789d1e488e0c3929135beae560e"></a><!-- doxytag: member="tbb::flow::interface6::graph::increment_wait_count" ref="a993b789d1e488e0c3929135beae560e" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::flow::interface6::graph::increment_wait_count           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Used to register that an external entity may still interact with the graph. 
+<p>
+The graph will not return from wait_for_all until a matching number of decrement_wait_count calls is made. 
+</div>
+</div><p>
+<a class="anchor" name="c1145b00e063793a7e7bf994d202c7a0"></a><!-- doxytag: member="tbb::flow::interface6::graph::run" ref="c1145b00e063793a7e7bf994d202c7a0" args="(Body body)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Body> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::flow::interface6::graph::run           </td>
+          <td>(</td>
+          <td class="paramtype">Body </td>
+          <td class="paramname"> <em>body</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Spawns a task that runs a function object. 
+<p>
+The task is spawned as a child of the graph. This is useful for running tasks that need to block a <a class="el" href="a00288.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all()</a> on the graph. For example a one-off source. 
+</div>
+</div><p>
+<a class="anchor" name="50a7938df01b6148ab2c0696835f002e"></a><!-- doxytag: member="tbb::flow::interface6::graph::run" ref="50a7938df01b6148ab2c0696835f002e" args="(Receiver &r, Body body)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Receiver, typename Body> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::flow::interface6::graph::run           </td>
+          <td>(</td>
+          <td class="paramtype">Receiver & </td>
+          <td class="paramname"> <em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Body </td>
+          <td class="paramname"> <em>body</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>
+Spawns a task that runs a body and puts its output to a specific receiver. 
+<p>
+The task is spawned as a child of the graph. This is useful for running tasks that need to block a <a class="el" href="a00288.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all()</a> on the graph. For example a one-off source. 
+</div>
+</div><p>
+<a class="anchor" name="a66b0020f7514b86d030fa8aea073d37"></a><!-- doxytag: member="tbb::flow::interface6::graph::wait_for_all" ref="a66b0020f7514b86d030fa8aea073d37" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::flow::interface6::graph::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 until graph is idle and decrement_wait_count calls equals increment_wait_count calls. 
 <p>
+The waiting thread will go off and steal work while it is block in the wait_for_all. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00557.html">queuing_mutex.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00289.html b/doc/html/a00289.html
index ea58887..8fa3c46 100644
--- a/doc/html/a00289.html
+++ b/doc/html/a00289.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::flow::interface6::graph_node 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,57 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00288.html">queuing_mutex</a>::<a class="el" href="a00289.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="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00289.html">graph_node</a></div>
+<h1>tbb::flow::interface6::graph_node Class Reference</h1><!-- doxytag: class="tbb::flow::interface6::graph_node" -->The base of all graph nodes.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00557.html">queuing_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<a href="a00097.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::flow::interface6::graph_node:
+<p><center><img src="a00289.png" usemap="#tbb::flow::interface6::graph_node_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::graph_node_map">
+<area href="a00262.html" alt="tbb::flow::interface6::broadcast_node< T >" shape="rect" coords="511,56,1012,80">
+<area href="a00263.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="511,112,1012,136">
+<area href="a00278.html" alt="tbb::flow::interface6::continue_node< Output >" shape="rect" coords="511,168,1012,192">
+<area href="a00286.html" alt="tbb::flow::interface6::function_node< Input, Output,, Allocator >" shape="rect" coords="511,224,1012,248">
+<area href="a00287.html" alt="tbb::flow::interface6::function_node< Input, Output, queueing, Allocator >" shape="rect" coords="511,280,1012,304">
+<area href="a00292.html" alt="tbb::flow::interface6::limiter_node< T >" shape="rect" coords="511,336,1012,360">
+<area href="a00300.html" alt="tbb::flow::interface6::multifunction_node< Input, Output,, Allocator >" shape="rect" coords="511,392,1012,416">
+<area href="a00300.html" alt="tbb::flow::interface6::multifunction_node< TupleType, TupleType, rejecting, Allocator >" shape="rect" coords="511,448,1012,472">
+<area href="a00330.html" alt="tbb::flow::interface6::source_node< Output >" shape="rect" coords="511,504,1012,528">
+</map>
+<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 Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00289.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4f3a9aad30268e2a9f1416eab325f7e5"></a><!-- doxytag: member="tbb::flow::interface6::graph_node::graph_node" ref="4f3a9aad30268e2a9f1416eab325f7e5" args="(graph &g)" -->
+ </td><td class="memItemRight" valign="bottom"><b>graph_node</b> (<a class="el" href="a00288.html">graph</a> &g)</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"><a class="anchor" name="9b51ef972f5618ac17caadb58841ab6d"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::scoped_lock" ref="9b51ef972f5618ac17caadb58841ab6d" args="(queuing_mutex &m)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00289.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a> (<a class="el" href="a00288.html">queuing_mutex</a> &m)</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="6f51137fff91095fa3e6a736b71c27cc"></a><!-- doxytag: member="tbb::flow::interface6::graph_node::my_graph" ref="6f51137fff91095fa3e6a736b71c27cc" args="" -->
+<a class="el" href="a00288.html">graph</a> & </td><td class="memItemRight" valign="bottom"><b>my_graph</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="ac2c576a93570957d694192a5f491443"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::~scoped_lock" ref="ac2c576a93570957d694192a5f491443" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00289.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d1ce68896f6d366dcc3fad19f6fd55d1"></a><!-- doxytag: member="tbb::flow::interface6::graph_node::next" ref="d1ce68896f6d366dcc3fad19f6fd55d1" args="" -->
+<a class="el" href="a00289.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>next</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="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="a00289.html#533e4fc8355ee321206a0609c42d909d">acquire</a> (<a class="el" href="a00288.html">queuing_mutex</a> &m)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="28049e438b241b0d6051767bbeacc0b9"></a><!-- doxytag: member="tbb::flow::interface6::graph_node::prev" ref="28049e438b241b0d6051767bbeacc0b9" args="" -->
+<a class="el" href="a00289.html">graph_node</a> * </td><td class="memItemRight" valign="bottom"><b>prev</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="a00289.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a> (<a class="el" href="a00288.html">queuing_mutex</a> &m)</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="137c56ab53c02049fca0b78c49294314"></a><!-- doxytag: member="tbb::flow::interface6::graph_node::graph" ref="137c56ab53c02049fca0b78c49294314" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>graph</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="a00289.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="621c092f8466e55743ceef04b0bde9ce"></a><!-- doxytag: member="tbb::flow::interface6::graph_node::graph_iterator" ref="621c092f8466e55743ceef04b0bde9ce" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>graph_iterator</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-The scoped locking pattern. 
+The base of all graph nodes. 
 <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>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00557.html">queuing_mutex.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00289.png b/doc/html/a00289.png
new file mode 100644
index 0000000..9d49991
Binary files /dev/null and b/doc/html/a00289.png differ
diff --git a/doc/html/a00290.html b/doc/html/a00290.html
index 0114ab0..4e99ce7 100644
--- a/doc/html/a00290.html
+++ b/doc/html/a00290.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::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,58 +21,27 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00290.html">queuing_rw_mutex</a></div>
-<h1>tbb::queuing_rw_mutex Class Reference<br>
-<small>
-[<a class="el" href="a00398.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::queuing_rw_mutex" -->Reader-writer lock with local-only spinning.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00290.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="a00558.html">queuing_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00639.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00098.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00153.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="85c90877c3447690ac4e2ac4ff8dea5e"></a><!-- doxytag: member="tbb::queuing_rw_mutex::queuing_rw_mutex" ref="85c90877c3447690ac4e2ac4ff8dea5e" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00290.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a> ()</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="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="a00290.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="" -->
-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="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 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="a00291.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00291.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Reader-writer lock with local-only spinning. 
-<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> 
+Exception for PPL locks. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00558.html">queuing_rw_mutex.h</a></ul>
+<li><a class="el" href="a00639.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00291.html b/doc/html/a00291.html
index 442c9ba..9bd2357 100644
--- a/doc/html/a00291.html
+++ b/doc/html/a00291.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::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,100 +21,27 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00290.html">queuing_rw_mutex</a>::<a class="el" href="a00291.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="a00414.html">tbb</a>::<a class="el" href="a00291.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="a00558.html">queuing_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00639.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00099.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00156.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="a00291.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a> ()</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>
 
-<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"><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)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a> (<a class="el" href="a00290.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00291.html#32c7d67a660d23ebbaab1a1d2826d31a">~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="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="a00291.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a> (<a class="el" href="a00290.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00291.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a> (<a class="el" href="a00290.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00291.html#67ae221109ddc69510ab593874e435d4">release</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.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="a00291.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>
-<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. 
+Exception for repeated scheduling of the same task_handle. 
 <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="a00558.html">queuing_rw_mutex.h</a></ul>
+<li><a class="el" href="a00639.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00292.html b/doc/html/a00292.html
index 5a61803..ec23c70 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>tbb::interface5::reader_writer_lock Class Reference</title>
+<title>tbb::flow::interface6::limiter_node< 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,198 +21,120 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00292.html">reader_writer_lock</a></div>
-<h1>tbb::interface5::reader_writer_lock Class Reference<br>
-<small>
-[<a class="el" href="a00398.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::interface5::reader_writer_lock" -->Writer-preference reader-writer lock with local-only spinning on readers.  
+<a class="el" href="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00292.html">limiter_node</a></div>
+<h1>tbb::flow::interface6::limiter_node< T > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::limiter_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node,tbb::flow::interface6::receiver,tbb::flow::interface6::sender" -->Forwards messages only if the threshold has not been reached.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00559.html">reader_writer_lock.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<a href="a00100.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::flow::interface6::limiter_node< T >:
+<p><center><img src="a00292.png" usemap="#tbb::flow::interface6::limiter_node< T >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::limiter_node< T >_map">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,226,24">
+<area href="a00321.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="236,0,462,24">
+<area href="a00327.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="472,0,698,24">
+</map>
+<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="6f921f0d7c1812ceb5674418c8b6ccaf005142e2b9af377a8d33c6604d858862"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::waiting_nonblocking" ref="6f921f0d7c1812ceb5674418c8b6ccaf005142e2b9af377a8d33c6604d858862" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>waiting_nonblocking</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="035196d3c9240ef041f528ebcde8baa7"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::input_type" ref="035196d3c9240ef041f528ebcde8baa7" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#035196d3c9240ef041f528ebcde8baa7">input_type</a></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6f921f0d7c1812ceb5674418c8b6ccaf18bcc9aae8f056c34fb61bb7fc39b432"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::waiting" ref="6f921f0d7c1812ceb5674418c8b6ccaf18bcc9aae8f056c34fb61bb7fc39b432" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>waiting</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6e67fc480147c0b88a483b85db6457b0"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::output_type" ref="6e67fc480147c0b88a483b85db6457b0" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#6e67fc480147c0b88a483b85db6457b0">output_type</a></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6f921f0d7c1812ceb5674418c8b6ccaf423c082d5cdc9bb12d0eeadcae56adb5"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::active" ref="6f921f0d7c1812ceb5674418c8b6ccaf423c082d5cdc9bb12d0eeadcae56adb5" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>active</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f89fcf44f38eb33f965ee5362d3e68e9"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::predecessor_type" ref="f89fcf44f38eb33f965ee5362d3e68e9" args="" -->
+typedef <a class="el" href="a00327.html">sender</a>< <a class="el" href="a00292.html#035196d3c9240ef041f528ebcde8baa7">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#f89fcf44f38eb33f965ee5362d3e68e9">predecessor_type</a></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6f921f0d7c1812ceb5674418c8b6ccafa9a5b17bdfb0a6d59b3cd58fecbd9610"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::invalid" ref="6f921f0d7c1812ceb5674418c8b6ccafa9a5b17bdfb0a6d59b3cd58fecbd9610" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>invalid</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8945e4dd6ea759ff9e4735da13f12ef"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::successor_type" ref="e8945e4dd6ea759ff9e4735da13f12ef" args="" -->
+typedef <a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00292.html#6e67fc480147c0b88a483b85db6457b0">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#e8945e4dd6ea759ff9e4735da13f12ef">successor_type</a></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#6f921f0d7c1812ceb5674418c8b6ccaf">status_t</a> { <b>waiting_nonblocking</b>, 
-<b>waiting</b>, 
-<b>active</b>, 
-<b>invalid</b>
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Status type for nodes associated with lock instances.  <a href="a00292.html#6f921f0d7c1812ceb5674418c8b6ccaf">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <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="c1431c4293e777efd9aab9a95c2a46e1"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::reader_writer_lock" ref="c1431c4293e777efd9aab9a95c2a46e1" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#c1431c4293e777efd9aab9a95c2a46e1">reader_writer_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00292.html">reader_writer_lock</a>. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5135f64f7b7339017f33d956445edbee"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::~reader_writer_lock" ref="5135f64f7b7339017f33d956445edbee" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#5135f64f7b7339017f33d956445edbee">~reader_writer_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="831b06576f46fe2bf3ed0f86b793c1b2"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::limiter_node" ref="831b06576f46fe2bf3ed0f86b793c1b2" args="(graph &g, size_t threshold, int num_decrement_predecessors=0)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#831b06576f46fe2bf3ed0f86b793c1b2">limiter_node</a> (<a class="el" href="a00288.html">graph</a> &g, size_t threshold, int num_decrement_predecessors=0)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructs a <a class="el" href="a00292.html">reader_writer_lock</a> object. <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="a00292.html#2653d1a2d560059a51219a8ceab3ade9">lock</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="83d3ab884543b070ee5b345a87f241fa"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::limiter_node" ref="83d3ab884543b070ee5b345a87f241fa" args="(const limiter_node &src)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#83d3ab884543b070ee5b345a87f241fa">limiter_node</a> (const <a class="el" href="a00292.html">limiter_node</a> &src)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00292.html">reader_writer_lock</a> for write.  <a href="#2653d1a2d560059a51219a8ceab3ade9"></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="a00292.html#721eb173e154ab38292273e9266a9b07">try_lock</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="c76561d8d871b4769876988a4de12a9b"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::register_successor" ref="c76561d8d871b4769876988a4de12a9b" args="(receiver< output_type > &r)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#c76561d8d871b4769876988a4de12a9b">register_successor</a> (<a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00292.html#6e67fc480147c0b88a483b85db6457b0">output_type</a> > &r)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00292.html">reader_writer_lock</a> for write.  <a href="#721eb173e154ab38292273e9266a9b07"></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="a00292.html#d9d16a24d9f6c3dada73c6b9ff214f5b">lock_read</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Replace the current successor with this new successor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#275e328063c121b3e506ccef2a825d28">remove_successor</a> (<a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00292.html#6e67fc480147c0b88a483b85db6457b0">output_type</a> > &r)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00292.html">reader_writer_lock</a> for read.  <a href="#d9d16a24d9f6c3dada73c6b9ff214f5b"></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="a00292.html#595fb23952e3b89426b1f7938dea9b11">try_lock_read</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node.  <a href="#275e328063c121b3e506ccef2a825d28"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="55a02d458a4d8ffa6accd7a70605da2f"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::try_put" ref="55a02d458a4d8ffa6accd7a70605da2f" args="(const T &t)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#55a02d458a4d8ffa6accd7a70605da2f">try_put</a> (const T &t)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00292.html">reader_writer_lock</a> for read.  <a href="#595fb23952e3b89426b1f7938dea9b11"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5113b32689305599b2c36b5831547704"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::unlock" ref="5113b32689305599b2c36b5831547704" args="()" -->
-void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#5113b32689305599b2c36b5831547704">unlock</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Puts an item to this receiver. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="de70a0e88ce7655d8c14b6af57f7496f"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::register_predecessor" ref="de70a0e88ce7655d8c14b6af57f7496f" args="(predecessor_type &src)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#de70a0e88ce7655d8c14b6af57f7496f">register_predecessor</a> (<a class="el" href="a00327.html">predecessor_type</a> &src)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Releases the <a class="el" href="a00292.html">reader_writer_lock</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="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::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">Removes src from the list of cached predecessors. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c530e7b469454e2340460795f2da3317"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::remove_predecessor" ref="c530e7b469454e2340460795f2da3317" args="(predecessor_type &src)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#c530e7b469454e2340460795f2da3317">remove_predecessor</a> (<a class="el" href="a00327.html">predecessor_type</a> &src)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="680274059774b9188889d34986314f81"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read" ref="680274059774b9188889d34986314f81" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock_read</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes src from the list of cached predecessors. <br></td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3344b2461966631b6ee34b79fb105c7"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::decrement" ref="a3344b2461966631b6ee34b79fb105c7" args="" -->
+internal::decrementer< <a class="el" href="a00292.html">limiter_node</a><<br>
+ T > > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#a3344b2461966631b6ee34b79fb105c7">decrement</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="a00293.html">scoped_lock</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The internal receiver< continue_msg > that decrements the count. <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="ed05e0c262c5a8869bf1395e1fb4bcf9"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::internal::forward_task< limiter_node< T > >" ref="ed05e0c262c5a8869bf1395e1fb4bcf9" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::forward_task< limiter_node< T > ></b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for write locks.  <a href="a00293.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00294.html">scoped_lock_read</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b43677b60c786d1071a7efd6f195c3be"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::internal::decrementer< limiter_node< T > >" ref="b43677b60c786d1071a7efd6f195c3be" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::decrementer< limiter_node< T > ></b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for read locks.  <a href="a00294.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Writer-preference reader-writer lock with local-only spinning on readers. 
-<p>
-Loosely adapted from Mellor-Crummey and Scott pseudocode at <a href="http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp">http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp</a> 
-<p>
-<hr><h2>Member Enumeration Documentation</h2>
-<a class="anchor" name="6f921f0d7c1812ceb5674418c8b6ccaf"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::status_t" ref="6f921f0d7c1812ceb5674418c8b6ccaf" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="a00292.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock::status_t</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
+<h3>template<typename T><br>
+ class tbb::flow::interface6::limiter_node< T ></h3>
 
+Forwards messages only if the threshold has not been reached. 
 <p>
-Status type for nodes associated with lock instances. 
+This node forwards items until its threshold is reached. It contains no buffering. If the downstream node rejects, the message is dropped. 
 <p>
-waiting_nonblocking: the wait state for nonblocking lock instances; for writes, these transition straight to active states; for reads, these are unused.<p>
-waiting: the start and spin state for all lock instances; these will transition to active state when appropriate. Non-blocking write locks transition from this state to waiting_nonblocking immediately.<p>
-active: the active state means that the lock instance holds the lock; it will transition to invalid state during node deletion<p>
-invalid: the end state for all nodes; this is set in the destructor so if we encounter this state, we are looking at memory that has already been freed<p>
-The state diagrams below describe the status transitions. Single arrows indicate that the thread that owns the node is responsible for the transition; double arrows indicate that any thread could make the transition.<p>
-State diagram for <a class="el" href="a00293.html">scoped_lock</a> status:<p>
-waiting ----------> waiting_nonblocking | _____________/ | V V V active -----------------> invalid<p>
-State diagram for <a class="el" href="a00294.html">scoped_lock_read</a> status:<p>
-waiting | V active ----------------->invalid 
-</div>
-</div><p>
 <hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="2653d1a2d560059a51219a8ceab3ade9"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::lock" ref="2653d1a2d560059a51219a8ceab3ade9" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Acquires the <a class="el" href="a00292.html">reader_writer_lock</a> for write. 
-<p>
-If the lock is currently held in write mode by another context, the writer will block by spinning on a local variable. Exceptions thrown: <a class="el" href="a00264.html">improper_lock</a> The context tries to acquire a <a class="el" href="a00292.html">reader_writer_lock</a> that it already has write ownership of. 
-</div>
-</div><p>
-<a class="anchor" name="d9d16a24d9f6c3dada73c6b9ff214f5b"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::lock_read" ref="d9d16a24d9f6c3dada73c6b9ff214f5b" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock_read           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Acquires the <a class="el" href="a00292.html">reader_writer_lock</a> for read. 
-<p>
-If the lock is currently held by a writer, this reader will block and wait until the writers are done. Exceptions thrown: <a class="el" href="a00264.html">improper_lock</a> The context tries to acquire a <a class="el" href="a00292.html">reader_writer_lock</a> that it already has write ownership of. 
-</div>
-</div><p>
-<a class="anchor" name="721eb173e154ab38292273e9266a9b07"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::try_lock" ref="721eb173e154ab38292273e9266a9b07" args="()" -->
+<a class="anchor" name="275e328063c121b3e506ccef2a825d28"></a><!-- doxytag: member="tbb::flow::interface6::limiter_node::remove_successor" ref="275e328063c121b3e506ccef2a825d28" args="(receiver< output_type > &r)" -->
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template<typename T> </div>
       <table class="memname">
         <tr>
-          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock           </td>
+          <td class="memname">bool <a class="el" href="a00292.html">tbb::flow::interface6::limiter_node</a>< T >::remove_successor           </td>
           <td>(</td>
-          <td class="paramname">          </td>
+          <td class="paramtype"><a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00292.html#6e67fc480147c0b88a483b85db6457b0">output_type</a> > & </td>
+          <td class="paramname"> <em>r</em>          </td>
           <td> ) </td>
-          <td width="100%"></td>
+          <td width="100%"><code> [inline, virtual]</code></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Tries to acquire the <a class="el" href="a00292.html">reader_writer_lock</a> for write. 
-<p>
-This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. If the lock is already held by this acquiring context, <a class="el" href="a00292.html#721eb173e154ab38292273e9266a9b07">try_lock()</a> returns false. 
-</div>
-</div><p>
-<a class="anchor" name="595fb23952e3b89426b1f7938dea9b11"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::try_lock_read" ref="595fb23952e3b89426b1f7938dea9b11" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock_read           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
+Removes a successor from this node. 
 <p>
-Tries to acquire the <a class="el" href="a00292.html">reader_writer_lock</a> for read. 
+r.remove_predecessor(*this) is also called. 
 <p>
-This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. 
+Implements <a class="el" href="a00327.html#82f363bfb1738bb8789e167590b10ef9">tbb::flow::interface6::sender< T ></a>.
 </div>
 </div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00559.html">reader_writer_lock.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00266.png b/doc/html/a00292.png
similarity index 100%
copy from doc/html/a00266.png
copy to doc/html/a00292.png
diff --git a/doc/html/a00293.html b/doc/html/a00293.html
index e6cf4ee..68f7f6b 100644
--- a/doc/html/a00293.html
+++ b/doc/html/a00293.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::interface5::reader_writer_lock::scoped_lock Class Reference</title>
+<title>tbb::internal::machine_load_store_relaxed< T, S > 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,44 +21,30 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00292.html">reader_writer_lock</a>::<a class="el" href="a00293.html">scoped_lock</a></div>
-<h1>tbb::interface5::reader_writer_lock::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::interface5::reader_writer_lock::scoped_lock" -->The scoped lock pattern for write locks.  
-<a href="#_details">More...</a>
+<a class="el" href="a00414.html">tbb</a>::<b>internal</b>::<a class="el" href="a00293.html">machine_load_store_relaxed</a></div>
+<h1>tbb::internal::machine_load_store_relaxed< T, S > Struct Template Reference</h1><!-- doxytag: class="tbb::internal::machine_load_store_relaxed" --><code>#include <<a class="el" href="a00640.html">tbb_machine.h</a>></code>
 <p>
-<code>#include <<a class="el" href="a00559.html">reader_writer_lock.h</a>></code>
-<p>
-<a href="a00101.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00170.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="cf19f20e082887c1bb0ba6b0911c3583"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock::scoped_lock" ref="cf19f20e082887c1bb0ba6b0911c3583" args="(reader_writer_lock &lock)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00293.html#cf19f20e082887c1bb0ba6b0911c3583">scoped_lock</a> (<a class="el" href="a00292.html">reader_writer_lock</a> &lock)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct with blocking attempt to acquire write lock on the passed-in lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="70246e0260493625ff956fa5926fc71f"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock::~scoped_lock" ref="70246e0260493625ff956fa5926fc71f" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00293.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor, releases the write lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="aea1cb0e88be9874f0f72e52063d0b90"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock::operator new" ref="aea1cb0e88be9874f0f72e52063d0b90" args="(size_t s)" -->
-void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t s)</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="de10ed2fe8788773adb55f265db38587"></a><!-- doxytag: member="tbb::internal::machine_load_store_relaxed::load" ref="de10ed2fe8788773adb55f265db38587" args="(const volatile T &location)" -->
+static T </td><td class="memItemRight" valign="bottom"><b>load</b> (const volatile T &location)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db804a05fcd37f7e81b94752e45039f7"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock::operator delete" ref="db804a05fcd37f7e81b94752e45039f7" args="(void *p)" -->
-void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *p)</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="38eb53abbe72543f5967c63aa95b403e"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock::reader_writer_lock" ref="38eb53abbe72543f5967c63aa95b403e" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>reader_writer_lock</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d72090653905a4c94aa6836bc190044"></a><!-- doxytag: member="tbb::internal::machine_load_store_relaxed::store" ref="1d72090653905a4c94aa6836bc190044" args="(volatile T &location, T value)" -->
+static void </td><td class="memItemRight" valign="bottom"><b>store</b> (volatile T &location, T value)</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-The scoped lock pattern for write locks. 
-<p>
-Scoped locks help avoid the common problem of forgetting to release the lock. This type also serves as the node for queuing locks. 
+<h3>template<typename T, size_t S><br>
+ struct tbb::internal::machine_load_store_relaxed< T, S ></h3>
+
+Volatile should not incur any additional cost on IA32, Intel64, and Sparc TSO architectures. However on architectures with weak memory ordering compiler may generate code with acquire/release semantics for operations on volatile data. 
 <p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00559.html">reader_writer_lock.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00640.html">tbb_machine.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00294.html b/doc/html/a00294.html
index dd4f498..90ce8b2 100644
--- a/doc/html/a00294.html
+++ b/doc/html/a00294.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::interface5::reader_writer_lock::scoped_lock_read Class Reference</title>
+<title>tbb::internal::machine_load_store_seq_cst< T, 8 > 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,42 +21,30 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00292.html">reader_writer_lock</a>::<a class="el" href="a00294.html">scoped_lock_read</a></div>
-<h1>tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference</h1><!-- doxytag: class="tbb::interface5::reader_writer_lock::scoped_lock_read" -->The scoped lock pattern for read locks.  
-<a href="#_details">More...</a>
+<a class="el" href="a00414.html">tbb</a>::<b>internal</b>::<a class="el" href="a00294.html">machine_load_store_seq_cst< T, 8 ></a></div>
+<h1>tbb::internal::machine_load_store_seq_cst< T, 8 > Struct Template Reference</h1><!-- doxytag: class="tbb::internal::machine_load_store_seq_cst< T, 8 >" --><code>#include <<a class="el" href="a00640.html">tbb_machine.h</a>></code>
 <p>
-<code>#include <<a class="el" href="a00559.html">reader_writer_lock.h</a>></code>
-<p>
-<a href="a00102.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00169.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="87ab0dc8f7216e6ba0f7acd6aec33064"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read::scoped_lock_read" ref="87ab0dc8f7216e6ba0f7acd6aec33064" args="(reader_writer_lock &lock)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00294.html#87ab0dc8f7216e6ba0f7acd6aec33064">scoped_lock_read</a> (<a class="el" href="a00292.html">reader_writer_lock</a> &lock)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct with blocking attempt to acquire read lock on the passed-in lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bd21c5f3d555d64d1de8658e15bf4966"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read::~scoped_lock_read" ref="bd21c5f3d555d64d1de8658e15bf4966" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00294.html#bd21c5f3d555d64d1de8658e15bf4966">~scoped_lock_read</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor, releases the read lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f09e1817dddf97cc2182a573945eef91"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read::operator new" ref="f09e1817dddf97cc2182a573945eef91" args="(size_t s)" -->
-void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t s)</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="e765439a2cd7ddd871b20dc72148d600"></a><!-- doxytag: member="tbb::internal::machine_load_store_seq_cst< T, 8 >::load" ref="e765439a2cd7ddd871b20dc72148d600" args="(const volatile T &location)" -->
+static T </td><td class="memItemRight" valign="bottom"><b>load</b> (const volatile T &location)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4f9e148ec33895c0d2669ff6820cf164"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read::operator delete" ref="4f9e148ec33895c0d2669ff6820cf164" args="(void *p)" -->
-void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *p)</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="38eb53abbe72543f5967c63aa95b403e"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read::reader_writer_lock" ref="38eb53abbe72543f5967c63aa95b403e" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>reader_writer_lock</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05fcfe2752cabb32ff9db4fbef59bb8b"></a><!-- doxytag: member="tbb::internal::machine_load_store_seq_cst< T, 8 >::store" ref="05fcfe2752cabb32ff9db4fbef59bb8b" args="(volatile T &location, T value)" -->
+static void </td><td class="memItemRight" valign="bottom"><b>store</b> (volatile T &location, T value)</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-The scoped lock pattern for read locks. 
+<h3>template<typename T><br>
+ struct tbb::internal::machine_load_store_seq_cst< T, 8 ></h3>
+
+The implementation does not use functions __TBB_machine_load8/store8 as they are not required to be sequentially consistent. 
 <p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00559.html">reader_writer_lock.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00640.html">tbb_machine.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00295.html b/doc/html/a00295.html
index 8589e2a..c405804 100644
--- a/doc/html/a00295.html
+++ b/doc/html/a00295.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::flow::interface6::receiver< T > Class Template Reference</title>
+<title>tbb::interface6::memory_pool< Alloc > 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,63 +21,35 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00295.html">receiver</a></div>
-<h1>tbb::flow::interface6::receiver< T > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::receiver" -->Pure virtual template class that defines a receiver of messages of type T.  
+<a class="el" href="a00414.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00295.html">memory_pool</a></div>
+<h1>tbb::interface6::memory_pool< Alloc > Class Template Reference</h1><!-- doxytag: class="tbb::interface6::memory_pool" -->Thread-safe growable pool allocator for variable-size requests.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00524.html">memory_pool.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::receiver< T >:
-<p><center><img src="a00295.png" usemap="#tbb::flow::interface6::receiver< T >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::receiver< T >_map">
-<area href="a00236.html" alt="tbb::flow::interface6::broadcast_node< T >" shape="rect" coords="0,56,352,80">
-<area href="a00237.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="362,56,714,80">
-<area href="a00253.html" alt="tbb::flow::interface6::continue_receiver" shape="rect" coords="724,56,1076,80">
-<area href="a00266.html" alt="tbb::flow::interface6::limiter_node< T >" shape="rect" coords="1086,56,1438,80">
-<area href="a00286.html" alt="tbb::flow::interface6::priority_queue_node< T, Compare, A >" shape="rect" coords="181,112,533,136">
-<area href="a00287.html" alt="tbb::flow::interface6::queue_node< T, A >" shape="rect" coords="543,112,895,136">
-<area href="a00302.html" alt="tbb::flow::interface6::sequencer_node< T, A >" shape="rect" coords="543,168,895,192">
-</map>
-<a href="a00042.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 Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d0524c99313dedea1e04464bbf2f7ef"></a><!-- doxytag: member="tbb::flow::interface6::receiver::input_type" ref="0d0524c99313dedea1e04464bbf2f7ef" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00295.html#0d0524c99313dedea1e04464bbf2f7ef">input_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7fa8cff811e7c1589b805a4bb4c7a74f"></a><!-- doxytag: member="tbb::flow::interface6::receiver::predecessor_type" ref="7fa8cff811e7c1589b805a4bb4c7a74f" args="" -->
-typedef <a class="el" href="a00301.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00295.html#7fa8cff811e7c1589b805a4bb4c7a74f">predecessor_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <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="b00699b235435f7b65b663d5063624a1"></a><!-- doxytag: member="tbb::flow::interface6::receiver::~receiver" ref="b00699b235435f7b65b663d5063624a1" args="()" -->
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00295.html#b00699b235435f7b65b663d5063624a1">~receiver</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="c6d5d0cb8ebe5771be91933609fe31b8"></a><!-- doxytag: member="tbb::flow::interface6::receiver::try_put" ref="c6d5d0cb8ebe5771be91933609fe31b8" args="(const T &t)=0" -->
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00295.html#c6d5d0cb8ebe5771be91933609fe31b8">try_put</a> (const T &t)=0</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="30e3316466efe3a713c23062b6e806f3"></a><!-- doxytag: member="tbb::flow::interface6::receiver::register_predecessor" ref="30e3316466efe3a713c23062b6e806f3" args="(predecessor_type &)" -->
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00295.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a> (<a class="el" href="a00301.html">predecessor_type</a> &)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2822528265718a4c779591fc37c02ca8"></a><!-- doxytag: member="tbb::interface6::memory_pool::memory_pool" ref="2822528265718a4c779591fc37c02ca8" args="(const Alloc &src=Alloc())" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00295.html#2822528265718a4c779591fc37c02ca8">memory_pool</a> (const Alloc &src=Alloc())</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3bc76547b51d3c9b633e3987d22dce95"></a><!-- doxytag: member="tbb::flow::interface6::receiver::remove_predecessor" ref="3bc76547b51d3c9b633e3987d22dce95" args="(predecessor_type &)" -->
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a> (<a class="el" href="a00301.html">predecessor_type</a> &)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">construct pool with underlying allocator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fdad7c4ed08332ec384491a71b721957"></a><!-- doxytag: member="tbb::interface6::memory_pool::~memory_pool" ref="fdad7c4ed08332ec384491a71b721957" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00295.html#fdad7c4ed08332ec384491a71b721957">~memory_pool</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">destroy pool <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- class tbb::flow::interface6::receiver< T ></h3>
+<h3>template<typename Alloc><br>
+ class tbb::interface6::memory_pool< Alloc ></h3>
 
-Pure virtual template class that defines a receiver of messages of type T. 
+Thread-safe growable pool allocator for variable-size requests. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00524.html">memory_pool.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00296.html b/doc/html/a00296.html
index 022bbab..2edbf1f 100644
--- a/doc/html/a00296.html
+++ b/doc/html/a00296.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::interface6::memory_pool_allocator< T, P > 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,95 +21,109 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00296.html">recursive_mutex</a></div>
-<h1>tbb::recursive_mutex Class Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00296.html">memory_pool_allocator</a></div>
+<h1>tbb::interface6::memory_pool_allocator< T, P > Class Template Reference<br>
 <small>
-[<a class="el" href="a00398.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::recursive_mutex" -->Mutex that allows recursive mutex acquisition.  
+[<a class="el" href="a00428.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::interface6::memory_pool_allocator" -->Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00560.html">recursive_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00524.html">memory_pool.h</a>></code>
 <p>
-<a href="a00103.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00082.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="889fa8cc32dd707eef7c0f52dda09c0d"></a><!-- doxytag: member="tbb::recursive_mutex::native_handle_type" ref="889fa8cc32dd707eef7c0f52dda09c0d" args="" -->
-typedef LPCRITICAL_SECTION </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="364d1a4b2174091802a0c1a7177fd037"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::value_type" ref="364d1a4b2174091802a0c1a7177fd037" args="" -->
+typedef tbb::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">Return native_handle. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="26a40fae42bf6cd9f3f77ee7482d6164"></a><!-- doxytag: member="tbb::recursive_mutex::native_handle_type" ref="26a40fae42bf6cd9f3f77ee7482d6164" args="" -->
-typedef pthread_mutex_t * </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="841174744c7bebbe9a8ec4cd35b7e8c8"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::pointer" ref="841174744c7bebbe9a8ec4cd35b7e8c8" 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="8867631698ca08b5b8c849693f45cef4"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::const_pointer" ref="8867631698ca08b5b8c849693f45cef4" 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="4419d14b95793fea5e80c1a7ad85b4b3"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::reference" ref="4419d14b95793fea5e80c1a7ad85b4b3" 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="57a51cd687993c94d486a0ff0b7a783f"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::const_reference" ref="57a51cd687993c94d486a0ff0b7a783f" 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="fd9f0aaee1039cc64fa4342ee93fd43e"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::size_type" ref="fd9f0aaee1039cc64fa4342ee93fd43e" 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="4340f60415582d0eca834b47b22f5d62"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::difference_type" ref="4340f60415582d0eca834b47b22f5d62" 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="d2fceb7f95c24a8cd1457d4527e4b8c6"></a><!-- doxytag: member="tbb::recursive_mutex::recursive_mutex" ref="d2fceb7f95c24a8cd1457d4527e4b8c6" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d06264c6dc8ed178d8c14998f0511b27"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::memory_pool_allocator" ref="d06264c6dc8ed178d8c14998f0511b27" args="(pool_type &pool)" -->
+ </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (pool_type &pool)  throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="655f7aef5ba5dbe79f76b493270794af"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::memory_pool_allocator" ref="655f7aef5ba5dbe79f76b493270794af" args="(const memory_pool_allocator &src)" -->
+ </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00296.html">memory_pool_allocator</a> &src)  throw ()</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="0d1d98389a82d65a4229db8e28363420"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::memory_pool_allocator" ref="0d1d98389a82d65a4229db8e28363420" args="(const memory_pool_allocator< U, P > &src)" -->
+template<typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00296.html">memory_pool_allocator</a>< U, P > &src)  throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired <a class="el" href="a00296.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="a00296.html#4c342c69d47f4bb0b393535dee4015d6">lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="727129bc029510733b3e95ea10f6bee3"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::address" ref="727129bc029510733b3e95ea10f6bee3" 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">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="a00296.html#86e719b0afee25704af11ab97694d240">try_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e250b83998b01dbea88c43085e15139a"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::address" ref="e250b83998b01dbea88c43085e15139a" 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">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="a00296.html#f0a96e26b7f074588dc31e32524856ae">unlock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="365bd64d284c80d85bb2149a12681526"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::allocate" ref="365bd64d284c80d85bb2149a12681526" args="(size_type n, const void *=0)" -->
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#365bd64d284c80d85bb2149a12681526">allocate</a> (size_type n, const void *=0)</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="6baa9ce4b394c39622456fd8a68f8bd8"></a><!-- doxytag: member="tbb::recursive_mutex::native_handle" ref="6baa9ce4b394c39622456fd8a68f8bd8" args="()" -->
-<a class="el" href="a00296.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a> </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</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="4e24a03de38638af07548383024c54ab"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::deallocate" ref="4e24a03de38638af07548383024c54ab" args="(pointer p, size_type)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#4e24a03de38638af07548383024c54ab">deallocate</a> (pointer p, size_type)</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">Free previously allocated block of memory. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="beebdb6144df8ba219fadfad4de866ea"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::max_size" ref="beebdb6144df8ba219fadfad4de866ea" args="() const " -->
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#beebdb6144df8ba219fadfad4de866ea">max_size</a> () const   throw ()</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">Largest value for which method allocate might succeed. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="3491a81e0597c1696a163e7c8fa8706a"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::construct" ref="3491a81e0597c1696a163e7c8fa8706a" args="(pointer p, Args &&...args)" -->
+template<typename... Args> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00296.html#3491a81e0597c1696a163e7c8fa8706a">construct</a> (pointer p, Args &&...args)</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="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <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="b9b545d2d31ef4b711ca87ba7aa18976"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::pool_type" ref="b9b545d2d31ef4b711ca87ba7aa18976" args="" -->
+typedef P </td><td class="memItemRight" valign="bottom"><b>pool_type</b></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="9f22e947018eb99cde5f44ee3d339499"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::my_pool" ref="9f22e947018eb99cde5f44ee3d339499" args="" -->
+pool_type * </td><td class="memItemRight" valign="bottom"><b>my_pool</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::recursive_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="193c7eeb6ed852d587b652828f52ca92"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::memory_pool_allocator" ref="193c7eeb6ed852d587b652828f52ca92" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b></td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f4fe0fa75b911081eff469ddb3e7e52a"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::operator==" ref="f4fe0fa75b911081eff469ddb3e7e52a" args="(const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)" -->
+template<typename V, typename U, typename R> </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="a00296.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00296.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4bb06a39de4a5290b4ec03be19d61c36"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator::operator!=" ref="4bb06a39de4a5290b4ec03be19d61c36" args="(const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)" -->
+template<typename V, typename U, typename R> </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="a00296.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00296.html">memory_pool_allocator</a>< U, R > &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="a00297.html">scoped_lock</a></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">The scoped locking pattern.  <a href="a00297.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 T, typename P = internal::pool_base><br>
+ class tbb::interface6::memory_pool_allocator< T, P ></h3>
 
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
 <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="a00560.html">recursive_mutex.h</a></ul>
+<li><a class="el" href="a00524.html">memory_pool.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00297.html b/doc/html/a00297.html
index ab61ed6..afd1246 100644
--- a/doc/html/a00297.html
+++ b/doc/html/a00297.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::interface6::memory_pool_allocator< void, P > 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,54 +21,72 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00296.html">recursive_mutex</a>::<a class="el" href="a00297.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="a00414.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00297.html">memory_pool_allocator< void, P ></a></div>
+<h1>tbb::interface6::memory_pool_allocator< void, P > Class Template Reference<br>
+<small>
+[<a class="el" href="a00428.html">Memory Allocation</a>]</small>
+</h1><!-- doxytag: class="tbb::interface6::memory_pool_allocator< void, P >" -->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="a00560.html">recursive_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00524.html">memory_pool.h</a>></code>
 <p>
-<a href="a00104.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>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="a00297.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a> ()</td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7cc2e35b1d34d0543b5a029414ef41f8"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::pool_type" ref="7cc2e35b1d34d0543b5a029414ef41f8" args="" -->
+typedef P </td><td class="memItemRight" valign="bottom"><b>pool_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="48afbf9aed30662f09217c1fe229861d"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::pointer" ref="48afbf9aed30662f09217c1fe229861d" args="" -->
+typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00296.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="a00297.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a> (<a class="el" href="a00296.html">recursive_mutex</a> &<a class="el" href="a00275.html">mutex</a>)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="94ac6954c897981fc8adf6bf5978145b"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::const_pointer" ref="94ac6954c897981fc8adf6bf5978145b" args="" -->
+typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c1197ffb8f3cd9d4fed71d7e06265b7c"></a><!-- doxytag: member="tbb::recursive_mutex::scoped_lock::~scoped_lock" ref="c1197ffb8f3cd9d4fed71d7e06265b7c" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00297.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2b9b8af832a8b240cf22c5cc37406f45"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::value_type" ref="2b9b8af832a8b240cf22c5cc37406f45" args="" -->
+typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</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="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="a00297.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a> (<a class="el" href="a00296.html">recursive_mutex</a> &<a class="el" href="a00275.html">mutex</a>)</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="1601367c80ed73278e1234012631df24"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::memory_pool_allocator" ref="1601367c80ed73278e1234012631df24" args="(pool_type &pool)" -->
+ </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (pool_type &pool)  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"><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="a00297.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a> (<a class="el" href="a00296.html">recursive_mutex</a> &<a class="el" href="a00275.html">mutex</a>)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e4ce5d3f231c9e786aee8f64d53c7f1a"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::memory_pool_allocator" ref="e4ce5d3f231c9e786aee8f64d53c7f1a" args="(const memory_pool_allocator &src)" -->
+ </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00296.html">memory_pool_allocator</a> &src)  throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00296.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="a00297.html#ac480ea0e9d5ea0345a67d57008b6263">release</a> ()</td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="49bd821cb72e23714d7efc480ac4cc9d"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::memory_pool_allocator" ref="49bd821cb72e23714d7efc480ac4cc9d" args="(const memory_pool_allocator< U, P > &src)" -->
+template<typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>memory_pool_allocator</b> (const <a class="el" href="a00296.html">memory_pool_allocator</a>< U, P > &src)  throw ()</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="67b8e6e057db62e7fdbe985ce275b039"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::my_pool" ref="67b8e6e057db62e7fdbe985ce275b039" args="" -->
+pool_type * </td><td class="memItemRight" valign="bottom"><b>my_pool</b></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>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="193c7eeb6ed852d587b652828f52ca92"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::memory_pool_allocator" ref="193c7eeb6ed852d587b652828f52ca92" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>memory_pool_allocator</b></td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="f4fe0fa75b911081eff469ddb3e7e52a"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::operator==" ref="f4fe0fa75b911081eff469ddb3e7e52a" args="(const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)" -->
+template<typename V, typename U, typename R> </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="a00296.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00296.html">memory_pool_allocator</a>< U, R > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4bb06a39de4a5290b4ec03be19d61c36"></a><!-- doxytag: member="tbb::interface6::memory_pool_allocator< void, P >::operator!=" ref="4bb06a39de4a5290b4ec03be19d61c36" args="(const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)" -->
+template<typename V, typename U, typename R> </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="a00296.html">memory_pool_allocator</a>< V, R > &a, const <a class="el" href="a00296.html">memory_pool_allocator</a>< U, R > &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>
-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. 
+<h3>template<typename P><br>
+ class tbb::interface6::memory_pool_allocator< void, P ></h3>
+
+Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00560.html">recursive_mutex.h</a></ul>
+<li><a class="el" href="a00524.html">memory_pool.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00298.html b/doc/html/a00298.html
index bc032fb..d8e0333 100644
--- a/doc/html/a00298.html
+++ b/doc/html/a00298.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::interface6::runtime_loader Class 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,302 +21,27 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00298.html">runtime_loader</a></div>
-<h1>tbb::interface6::runtime_loader Class Reference</h1><!-- doxytag: class="tbb::interface6::runtime_loader" -->Load TBB at runtime.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00298.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="a00561.html">runtime_loader.h</a>></code>
+<code>#include <<a class="el" href="a00639.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00105.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00155.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="a00298.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">em_status</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Save status of operation and continue.  <a href="#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">em_throw</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Throw an exception of tbb::runtime_loader::error_code type.  <a href="#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Print message to <code>stderr</code> and call <code>abort()</code>.  <a href="#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">ec_ok</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">No errors.  <a href="#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">ec_bad_call</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Invalid function call (e. g. <a class="el" href="a00298.html#5f3f6f1683386705a6931acae45f0862">load()</a> called when TBB is already loaded).  <a href="#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">ec_bad_arg</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Invalid argument passed.  <a href="#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">ec_bad_lib</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Invalid library found (e. g. <code>TBB_runtime_version</code> symbol not found).  <a href="#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">ec_bad_ver</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">TBB found but version is not suitable.  <a href="#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">ec_no_lib</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">No suitable TBB library found.  <a href="#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> { <a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">em_status</a>, 
-<a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">em_throw</a>, 
-<a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a>
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Error mode constants.  <a href="a00298.html#bb0130fe0f596399707e61431231ebcb">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="a00298.html#6831be91cdc64e57e565ce0dde018789">error_code</a> { <br>
-  <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">ec_ok</a>, 
-<a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">ec_bad_call</a>, 
-<a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">ec_bad_arg</a>, 
-<a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">ec_bad_lib</a>, 
-<br>
-  <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">ec_bad_ver</a>, 
-<a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">ec_no_lib</a>
-<br>
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Error codes.  <a href="a00298.html#6831be91cdc64e57e565ce0dde018789">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="7caa4ff6e44c2348e67f601cc5d97c34"></a><!-- doxytag: member="tbb::interface6::runtime_loader::runtime_loader" ref="7caa4ff6e44c2348e67f601cc5d97c34" args="(error_mode mode=em_abort)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#7caa4ff6e44c2348e67f601cc5d97c34">runtime_loader</a> (<a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> mode=em_abort)</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>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize object but do not load TBB. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#7ae5330beb48fce0c702c32a5df0094a">runtime_loader</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, <a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> mode=em_abort)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize object and load TBB.  <a href="#7ae5330beb48fce0c702c32a5df0094a"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c25fec923a751a3e03f5cbe969f1f0c5"></a><!-- doxytag: member="tbb::interface6::runtime_loader::~runtime_loader" ref="c25fec923a751a3e03f5cbe969f1f0c5" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#c25fec923a751a3e03f5cbe969f1f0c5">~runtime_loader</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy object. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789">error_code</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#5f3f6f1683386705a6931acae45f0862">load</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Load TBB.  <a href="#5f3f6f1683386705a6931acae45f0862"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789">error_code</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#78d938ed2e54d38dd38d6609e6c60389">status</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Report status.  <a href="#78d938ed2e54d38dd38d6609e6c60389"></a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Load TBB at runtime. 
-<p>
-<b>Usage:</b> <p>
-In source code:<p>
-<div class="fragment"><pre class="fragment"><span class="preprocessor">#include "tbb/runtime_loader.h"</span>
-
-<span class="keywordtype">char</span> <span class="keyword">const</span> * path[] = { <span class="stringliteral">"<install dir>/lib/ia32"</span>, NULL };
-tbb::runtime_loader loader( path );
-
-<span class="comment">// Now use TBB.</span>
-</pre></div><p>
-Link with <code>tbbproxy.lib</code> (or <code>libtbbproxy.a</code>) instead of <code>tbb.lib</code> (<code>libtbb.dylib</code>, <code>libtbb.so</code>).<p>
-TBB library will be loaded at runtime from <code></code> <install dir>="">/lib/ia32 directory.<p>
-<b>Attention:</b> <p>
-All <code><a class="el" href="a00298.html">runtime_loader</a></code> objects (in the same module, i.e. exe or dll) share some global state. The most noticeable piece of global state is loaded TBB library. There are some implications:<p>
-<ul>
-<li>Only one TBB library can be loaded per module.</li></ul>
-<p>
-<ul>
-<li>If one object has already loaded TBB library, another object will not load TBB. If the loaded TBB library is suitable for the second object, both will use TBB cooperatively, otherwise the second object will report an error.</li></ul>
-<p>
-<ul>
-<li><code><a class="el" href="a00298.html">runtime_loader</a></code> objects will not work (correctly) in parallel due to absence of syncronization. </li></ul>
-
-<p>
-<hr><h2>Member Enumeration Documentation</h2>
-<a class="anchor" name="6831be91cdc64e57e565ce0dde018789"></a><!-- doxytag: member="tbb::interface6::runtime_loader::error_code" ref="6831be91cdc64e57e565ce0dde018789" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789">tbb::interface6::runtime_loader::error_code</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Error codes. 
-<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="6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27"></a><!-- doxytag: member="ec_ok" ref="6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27" args="" -->ec_ok</em> </td><td>
-No errors. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1"></a><!-- doxytag: member="ec_bad_call" ref="6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1" args="" -->ec_bad_call</em> </td><td>
-Invalid function call (e. g. <a class="el" href="a00298.html#5f3f6f1683386705a6931acae45f0862">load()</a> called when TBB is already loaded). </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703"></a><!-- doxytag: member="ec_bad_arg" ref="6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703" args="" -->ec_bad_arg</em> </td><td>
-Invalid argument passed. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6"></a><!-- doxytag: member="ec_bad_lib" ref="6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6" args="" -->ec_bad_lib</em> </td><td>
-Invalid library found (e. g. <code>TBB_runtime_version</code> symbol not found). </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6"></a><!-- doxytag: member="ec_bad_ver" ref="6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6" args="" -->ec_bad_ver</em> </td><td>
-TBB found but version is not suitable. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb"></a><!-- doxytag: member="ec_no_lib" ref="6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb" args="" -->ec_no_lib</em> </td><td>
-No suitable TBB library found. </td></tr>
-</table>
-</dl>
-
-</div>
-</div><p>
-<a class="anchor" name="bb0130fe0f596399707e61431231ebcb"></a><!-- doxytag: member="tbb::interface6::runtime_loader::error_mode" ref="bb0130fe0f596399707e61431231ebcb" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb">tbb::interface6::runtime_loader::error_mode</a>          </td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Error mode constants. 
-<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="bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38"></a><!-- doxytag: member="em_status" ref="bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38" args="" -->em_status</em> </td><td>
-Save status of operation and continue. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b"></a><!-- doxytag: member="em_throw" ref="bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b" args="" -->em_throw</em> </td><td>
-Throw an exception of tbb::runtime_loader::error_code type. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94"></a><!-- doxytag: member="em_abort" ref="bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94" args="" -->em_abort</em> </td><td>
-Print message to <code>stderr</code> and call <code>abort()</code>. </td></tr>
-</table>
-</dl>
-
-</div>
-</div><p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="7ae5330beb48fce0c702c32a5df0094a"></a><!-- doxytag: member="tbb::interface6::runtime_loader::runtime_loader" ref="7ae5330beb48fce0c702c32a5df0094a" args="(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, error_mode mode=em_abort)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">tbb::interface6::runtime_loader::runtime_loader           </td>
-          <td>(</td>
-          <td class="paramtype">char const * </td>
-          <td class="paramname"> <em>path</em>[], </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>max_ver</em> = <code>INT_MAX</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> </td>
-          <td class="paramname"> <em>mode</em> = <code>em_abort</code></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Initialize object and load TBB. 
-<p>
-See <a class="el" href="a00298.html#5f3f6f1683386705a6931acae45f0862">load()</a> for details.<p>
-If error mode is <code>em_status</code>, call <a class="el" href="a00298.html#78d938ed2e54d38dd38d6609e6c60389">status()</a> to check whether TBB was loaded or not. <dl compact><dt><b>Parameters: </b></dt><dd>
-<table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em>path</em> </td><td>
-List of directories to search TBB in. </td></tr>
-<tr><td valign="top"><em>min_ver</em> </td><td>
-Minimal suitable version of TBB. </td></tr>
-<tr><td valign="top"><em>max_ver</em> </td><td>
-Maximal suitable version of TBB. </td></tr>
-<tr><td valign="top"><em>mode</em> </td><td>
-Error mode for this object. </td></tr>
-</table>
-</dl>
-</div>
-</div><p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="5f3f6f1683386705a6931acae45f0862"></a><!-- doxytag: member="tbb::interface6::runtime_loader::load" ref="5f3f6f1683386705a6931acae45f0862" args="(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789">error_code</a> tbb::interface6::runtime_loader::load           </td>
-          <td>(</td>
-          <td class="paramtype">char const * </td>
-          <td class="paramname"> <em>path</em>[], </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>max_ver</em> = <code>INT_MAX</code></td><td> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Load TBB. 
-<p>
-The method searches the directories specified in <code>path</code>[] array for the TBB library. When the library is found, it is loaded and its version is checked. If the version is not suitable, the library is unloaded, and the search continues.<p>
-<b>Note:</b> <p>
-For security reasons, avoid using relative directory names. For example, never load TBB from current (<code>"."</code>), parent (<code>".."</code>) or any other relative directory (like <code>"lib"</code> ). Use only absolute directory names (e. g. "/usr/local/lib").<p>
-For the same security reasons, avoid using system default directories (<code>""</code>) on Windows. (See <a href="http://www.microsoft.com/technet/security/advisory/2269637.mspx">http://www.microsoft.com/technet/security/advisory/2269637.mspx</a> for details.)<p>
-Neglecting these rules may cause your program to execute 3-rd party malicious code.<p>
-<b>Errors:</b> <ul>
-<li><code>ec_bad_call</code> - TBB already loaded by this object.</li><li><code>ec_bad_arg</code> - <code>min_ver</code> and/or <code>max_ver</code> negative or zero, or <code>min_ver</code> > <code>max_ver</code>.</li><li><code>ec_bad_ver</code> - TBB of unsuitable version already loaded by another object.</li><li><code>ec_no_lib</code> - No suitable library found. </li></ul>
-<dl compact><dt><b>Parameters: </b></dt><dd>
-<table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em>path</em> </td><td>
-List of directories to search TBB in. </td></tr>
-<tr><td valign="top"><em>min_ver</em> </td><td>
-Minimal suitable version of TBB. </td></tr>
-<tr><td valign="top"><em>max_ver</em> </td><td>
-Maximal suitable version of TBB. </td></tr>
-</table>
-</dl>
-</div>
-</div><p>
-<a class="anchor" name="78d938ed2e54d38dd38d6609e6c60389"></a><!-- doxytag: member="tbb::interface6::runtime_loader::status" ref="78d938ed2e54d38dd38d6609e6c60389" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789">error_code</a> tbb::interface6::runtime_loader::status           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Report status. 
+Exception for missing wait on structured_task_group. 
 <p>
-If error mode is <code>em_status</code>, the function returns status of the last operation. 
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00561.html">runtime_loader.h</a></ul>
+<li><a class="el" href="a00639.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00299.html b/doc/html/a00299.html
index c5ac2f8..b081baf 100644
--- a/doc/html/a00299.html
+++ b/doc/html/a00299.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::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,89 +21,148 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00299.html">scalable_allocator</a></div>
-<h1>tbb::scalable_allocator< T > Class Template Reference<br>
-<small>
-[<a class="el" href="a00397.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="a00414.html">tbb</a>::<a class="el" href="a00299.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="a00562.html">scalable_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00639.html">tbb_exception.h</a>></code>
 <p>
-<a href="a00107.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="a00299.png" usemap="#tbb::movable_exception< ExceptionData >_map" border="0" alt=""></center>
+<map name="tbb::movable_exception< ExceptionData >_map">
+<area href="a00345.html" alt="tbb::tbb_exception" shape="rect" coords="0,0,248,24">
+</map>
+<a href="a00159.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 colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="43dfdc5298df3aa8a7d7d146604f84ef"></a><!-- doxytag: member="tbb::movable_exception::movable_exception" ref="43dfdc5298df3aa8a7d7d146604f84ef" 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="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="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="a00299.html">movable_exception</a> &src)  throw ()</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="dfafefe27f2afaa7c7894ca9c71cc568"></a><!-- doxytag: member="tbb::movable_exception::operator=" ref="dfafefe27f2afaa7c7894ca9c71cc568" args="(const movable_exception &src)" -->
+const <a class="el" href="a00299.html">movable_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00299.html">movable_exception</a> &src)</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="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="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="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="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="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="a00299.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a> () const   throw ()</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="a00299.html">scalable_allocator</a> &)  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="a00299.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a> () const   throw ()</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="a00299.html">scalable_allocator</a>< U > &)  throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00299.html#b33a89bccf0c63106f1270c7bfaaf54f">what()</a> method. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00299.html">movable_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00299.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a> ()  throw ()</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">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="a00299.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> ()  throw ()</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">Destroys objects created by the <a class="el" href="a00299.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="a00299.html#17cffba35811c92b7e65d63506b69602">throw_self</a> ()</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="a00299.html#726b1586d05d44665a36e1c7b2699bfd">allocate</a> (size_type n, const void *=0)</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="a00299.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</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="a00299.html#f806a238c18cbcfb531e1e0a0d2ec59d">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="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="a00299.html#880e766f1d913988c21973dbdd874fd5">max_size</a> () const   throw ()</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 ExceptionData><br>
+ class tbb::movable_exception< ExceptionData ></h3>
 
-<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>
+Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. 
+<p>
+Code using TBB can instantiate this template with an arbitrary ExceptionData type and throw this exception object. Such exceptions are intercepted by the TBB scheduler and delivered to the root thread (). <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00345.html">tbb::tbb_exception</a> </dd></dl>
 
-<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>
+<p>
+<hr><h2>Member Function Documentation</h2>
+<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 ExceptionData> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="a00299.html">tbb::movable_exception</a>< ExceptionData >::destroy           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">  throw ()<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-<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>
+<p>
+Destroys objects created by the <a class="el" href="a00299.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>
+Implements <a class="el" href="a00345.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>.
+</div>
+</div><p>
+<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 ExceptionData> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00299.html">movable_exception</a>* <a class="el" href="a00299.html">tbb::movable_exception</a>< ExceptionData >::move           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%">  throw ()<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><br>
- class tbb::scalable_allocator< T ></h3>
+<p>
+Creates and returns pointer to the deep copy of this exception object. 
+<p>
+Move semantics is allowed. 
+<p>
+Implements <a class="el" href="a00345.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 class="memname">void <a class="el" href="a00299.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">
 
-Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
 <p>
-The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
+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="a00345.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="a00562.html">scalable_allocator.h</a></ul>
+<li><a class="el" href="a00639.html">tbb_exception.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00273.png b/doc/html/a00299.png
similarity index 100%
rename from doc/html/a00273.png
rename to doc/html/a00299.png
diff --git a/doc/html/a00300.html b/doc/html/a00300.html
index e78bd34..38a6f25 100644
--- a/doc/html/a00300.html
+++ b/doc/html/a00300.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::flow::interface6::multifunction_node< Input, Output,, 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,42 +21,48 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00300.html">scalable_allocator< void ></a></div>
-<h1>tbb::scalable_allocator< void > Class Template Reference<br>
-<small>
-[<a class="el" href="a00397.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="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00300.html">multifunction_node</a></div>
+<h1>tbb::flow::interface6::multifunction_node< Input, Output,, Allocator > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::multifunction_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node" -->implements a function node that supports Input -> (set of outputs)  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00562.html">scalable_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<a href="a00109.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::flow::interface6::multifunction_node< Input, Output,, Allocator >:
+<p><center><img src="a00300.png" usemap="#tbb::flow::interface6::multifunction_node< Input, Output,, Allocator >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::multifunction_node< Input, Output,, Allocator >_map">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,393,24">
+</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"><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="9f8f076085598fc5687fdc00d7756ad4"></a><!-- doxytag: member="tbb::flow::interface6::multifunction_node::input_type" ref="9f8f076085598fc5687fdc00d7756ad4" args="" -->
+typedef Input </td><td class="memItemRight" valign="bottom"><b>input_type</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="48523618e24d62c7d60f55d58e1323fd"></a><!-- doxytag: member="tbb::flow::interface6::multifunction_node::output_ports_type" ref="48523618e24d62c7d60f55d58e1323fd" args="" -->
+typedef internal::wrap_tuple_elements<<br>
+ N, internal::function_output,<br>
+ Output >::type </td><td class="memItemRight" valign="bottom"><b>output_ports_type</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>Public Member Functions</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="5112769f6063d733734c1631ab105911"></a><!-- doxytag: member="tbb::flow::interface6::multifunction_node::multifunction_node" ref="5112769f6063d733734c1631ab105911" args="(graph &g, size_t concurrency, Body body)" -->
+template<typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>multifunction_node</b> (<a class="el" href="a00288.html">graph</a> &g, size_t concurrency, Body body)</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="4aa18bfb6faef08ddf94364013ef0f28"></a><!-- doxytag: member="tbb::flow::interface6::multifunction_node::multifunction_node" ref="4aa18bfb6faef08ddf94364013ef0f28" args="(const multifunction_node &other)" -->
+ </td><td class="memItemRight" valign="bottom"><b>multifunction_node</b> (const <a class="el" href="a00300.html">multifunction_node</a> &other)</td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<><br>
- class tbb::scalable_allocator< void ></h3>
+<h3>template<typename Input, typename Output, graph_buffer_policy = queueing, typename Allocator = cache_aligned_allocator<Input>><br>
+ class tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></h3>
 
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
+implements a function node that supports Input -> (set of outputs) 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00562.html">scalable_allocator.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00300.png b/doc/html/a00300.png
new file mode 100644
index 0000000..cdab3e3
Binary files /dev/null and b/doc/html/a00300.png differ
diff --git a/doc/html/a00301.html b/doc/html/a00301.html
index 9600b99..06efb66 100644
--- a/doc/html/a00301.html
+++ b/doc/html/a00301.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::flow::interface6::sender< T > Class Template 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,70 +21,113 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00301.html">sender</a></div>
-<h1>tbb::flow::interface6::sender< T > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::sender" -->Pure virtual template class that defines a sender of messages of type T.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00301.html">mutex</a></div>
+<h1>tbb::mutex Class Reference<br>
+<small>
+[<a class="el" href="a00429.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="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00531.html">mutex.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::sender< T >:
-<p><center><img src="a00301.png" usemap="#tbb::flow::interface6::sender< T >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::sender< T >_map">
-<area href="a00236.html" alt="tbb::flow::interface6::broadcast_node< T >" shape="rect" coords="0,56,352,80">
-<area href="a00237.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="362,56,714,80">
-<area href="a00266.html" alt="tbb::flow::interface6::limiter_node< T >" shape="rect" coords="724,56,1076,80">
-<area href="a00286.html" alt="tbb::flow::interface6::priority_queue_node< T, Compare, A >" shape="rect" coords="181,112,533,136">
-<area href="a00287.html" alt="tbb::flow::interface6::queue_node< T, A >" shape="rect" coords="543,112,895,136">
-<area href="a00302.html" alt="tbb::flow::interface6::sequencer_node< T, A >" shape="rect" coords="543,168,895,192">
-</map>
-<a href="a00041.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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 Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="127af99916cc085cd9dbc09c53299928"></a><!-- doxytag: member="tbb::flow::interface6::sender::output_type" ref="127af99916cc085cd9dbc09c53299928" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#127af99916cc085cd9dbc09c53299928">output_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9f1ec84d5815263ceae853f06ddb4cac"></a><!-- doxytag: member="tbb::mutex::native_handle_type" ref="9f1ec84d5815263ceae853f06ddb4cac" args="" -->
+typedef LPCRITICAL_SECTION </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d690e8a54e358968f0ee4fdf9ee73068"></a><!-- doxytag: member="tbb::flow::interface6::sender::successor_type" ref="d690e8a54e358968f0ee4fdf9ee73068" args="" -->
-typedef <a class="el" href="a00295.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#d690e8a54e358968f0ee4fdf9ee73068">successor_type</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return native_handle. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1f4d4b88a03eb3e95c76569b91a0792"></a><!-- doxytag: member="tbb::mutex::native_handle_type" ref="a1f4d4b88a03eb3e95c76569b91a0792" args="" -->
+typedef pthread_mutex_t * </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c907aa5ae5274da759c4188c8ab196034e5963fe9e27d7c4d0a2d4ffa24a50a7"></a><!-- doxytag: member="tbb::mutex::INITIALIZED" ref="c907aa5ae5274da759c4188c8ab196034e5963fe9e27d7c4d0a2d4ffa24a50a7" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>INITIALIZED</b> = 0x1234</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c907aa5ae5274da759c4188c8ab19603646f4766864612448d6f9b21ff61abcd"></a><!-- doxytag: member="tbb::mutex::DESTROYED" ref="c907aa5ae5274da759c4188c8ab19603646f4766864612448d6f9b21ff61abcd" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>DESTROYED</b> = 0x789A</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c907aa5ae5274da759c4188c8ab196031de5796ebbbaa1e30d19e5d54f0f6555"></a><!-- doxytag: member="tbb::mutex::HELD" ref="c907aa5ae5274da759c4188c8ab196031de5796ebbbaa1e30d19e5d54f0f6555" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>HELD</b> = 0x56CD</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>state_t</b> { <b>INITIALIZED</b> = 0x1234, 
+<b>DESTROYED</b> = 0x789A, 
+<b>HELD</b> = 0x56CD
+ }</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <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="68b8941ad77b9303cf3bcb8cf1f2d28a"></a><!-- doxytag: member="tbb::flow::interface6::sender::register_successor" ref="68b8941ad77b9303cf3bcb8cf1f2d28a" args="(successor_type &r)=0" -->
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#68b8941ad77b9303cf3bcb8cf1f2d28a">register_successor</a> (<a class="el" href="a00295.html">successor_type</a> &r)=0</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="a00301.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="a00301.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="a00301.html#4331652c79dea1c1131bd59ab161b234">try_lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a new successor to this node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="82f363bfb1738bb8789e167590b10ef9"></a><!-- doxytag: member="tbb::flow::interface6::sender::remove_successor" ref="82f363bfb1738bb8789e167590b10ef9" args="(successor_type &r)=0" -->
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#82f363bfb1738bb8789e167590b10ef9">remove_successor</a> (<a class="el" href="a00295.html">successor_type</a> &r)=0</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="a00301.html#5fc9ef443ae75d966695546be399cc6b">unlock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="922fb56b0aad090b90a98b7d56b76a59"></a><!-- doxytag: member="tbb::flow::interface6::sender::try_get" ref="922fb56b0aad090b90a98b7d56b76a59" args="(T &)" -->
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#922fb56b0aad090b90a98b7d56b76a59">try_get</a> (T &)</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="caf34349c0fbe7b44f1a2ca0a3150dd0"></a><!-- doxytag: member="tbb::mutex::native_handle" ref="caf34349c0fbe7b44f1a2ca0a3150dd0" args="()" -->
+<a class="el" href="a00301.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="02c05b472271db1b68a48ea2618fa72f"></a><!-- doxytag: member="tbb::flow::interface6::sender::try_reserve" ref="02c05b472271db1b68a48ea2618fa72f" args="(T &)" -->
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#02c05b472271db1b68a48ea2618fa72f">try_reserve</a> (T &)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="795649a185b0d6af6dc81c5f378616dd"></a><!-- doxytag: member="tbb::mutex::set_state" ref="795649a185b0d6af6dc81c5f378616dd" args="(state_t to)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#795649a185b0d6af6dc81c5f378616dd">set_state</a> (state_t to)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item in the sender. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27036b06d6a91e97007e14f400529199"></a><!-- doxytag: member="tbb::flow::interface6::sender::try_release" ref="27036b06d6a91e97007e14f400529199" args="()" -->
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#27036b06d6a91e97007e14f400529199">try_release</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the internal state. <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">Releases the reserved item. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7b840f50da117a0d6848707c1857ea2e"></a><!-- doxytag: member="tbb::flow::interface6::sender::try_consume" ref="7b840f50da117a0d6848707c1857ea2e" args="()" -->
-virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#7b840f50da117a0d6848707c1857ea2e">try_consume</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">Consumes the reserved item. <br></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="a00302.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00302.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- class tbb::flow::interface6::sender< T ></h3>
+Wrapper around the platform's native reader-writer lock. 
+<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">
 
-Pure virtual template class that defines a sender of messages of type T. 
 <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="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00531.html">mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00302.html b/doc/html/a00302.html
index cf624b9..b3cc37f 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>tbb::flow::interface6::sequencer_node< T, A > Class Template 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,89 +21,54 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00302.html">sequencer_node</a></div>
-<h1>tbb::flow::interface6::sequencer_node< T, A > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::sequencer_node" --><!-- doxytag: inherits="tbb::flow::interface6::queue_node" -->Forwards messages in sequence order.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00301.html">mutex</a>::<a class="el" href="a00302.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="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00531.html">mutex.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::sequencer_node< T, A >:
-<p><center><img src="a00302.png" usemap="#tbb::flow::interface6::sequencer_node< T, A >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::sequencer_node< T, A >_map">
-<area href="a00287.html" alt="tbb::flow::interface6::queue_node< T, A >" shape="rect" coords="280,112,550,136">
-<area href="a00237.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="280,56,550,80">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,270,24">
-<area href="a00295.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="280,0,550,24">
-<area href="a00301.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="560,0,830,24">
-</map>
-<a href="a00061.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<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="af629f26832ff4e476e240637a78bc0c"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::input_type" ref="af629f26832ff4e476e240637a78bc0c" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#af629f26832ff4e476e240637a78bc0c">input_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ca026eaef70e35791c407323199031a7"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::output_type" ref="ca026eaef70e35791c407323199031a7" args="" -->
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#ca026eaef70e35791c407323199031a7">output_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8127e36811832563fe1e9bc3ba391f79"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::predecessor_type" ref="8127e36811832563fe1e9bc3ba391f79" args="" -->
-typedef <a class="el" href="a00301.html">sender</a>< <a class="el" href="a00302.html#af629f26832ff4e476e240637a78bc0c">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#8127e36811832563fe1e9bc3ba391f79">predecessor_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="795f3ee75f133b9d3b159172fc4a197f"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::successor_type" ref="795f3ee75f133b9d3b159172fc4a197f" args="" -->
-typedef <a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00302.html#ca026eaef70e35791c407323199031a7">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#795f3ee75f133b9d3b159172fc4a197f">successor_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br></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="7e71cbdf78f989091bc162b89bee7e66"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::sequencer_node" ref="7e71cbdf78f989091bc162b89bee7e66" args="(graph &g, const Sequencer &s)" -->
-template<typename Sequencer> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00302.html#7e71cbdf78f989091bc162b89bee7e66">sequencer_node</a> (<a class="el" href="a00262.html">graph</a> &g, const Sequencer &s)</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="a00302.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b38e7a070552960384bcc1d91af13a5c"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::sequencer_node" ref="b38e7a070552960384bcc1d91af13a5c" args="(const sequencer_node &src)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#b38e7a070552960384bcc1d91af13a5c">sequencer_node</a> (const <a class="el" href="a00302.html">sequencer_node</a> &src)</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"><a class="anchor" name="605a6b9af0f8cdabdf81825e0de99600"></a><!-- doxytag: member="tbb::mutex::scoped_lock::scoped_lock" ref="605a6b9af0f8cdabdf81825e0de99600" args="(mutex &mutex)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#605a6b9af0f8cdabdf81825e0de99600">scoped_lock</a> (<a class="el" href="a00301.html">mutex</a> &<a class="el" href="a00301.html">mutex</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="93d3d8f6a72b3e1387047282116ed6ee"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::~sequencer_node" ref="93d3d8f6a72b3e1387047282116ed6ee" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#93d3d8f6a72b3e1387047282116ed6ee">~sequencer_node</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="0ebbbecaf4311e9df7362cb76ceaa368"></a><!-- doxytag: member="tbb::mutex::scoped_lock::~scoped_lock" ref="0ebbbecaf4311e9df7362cb76ceaa368" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <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="6a0608d8fbfa05edde1e1da559f9eb40"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::size_type" ref="6a0608d8fbfa05edde1e1da559f9eb40" args="" -->
-typedef <a class="el" href="a00237.html">buffer_node</a>< T, A <br>
->::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</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="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="a00302.html#862e022841cdc522e4296a5533b22efd">acquire</a> (<a class="el" href="a00301.html">mutex</a> &<a class="el" href="a00301.html">mutex</a>)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d50b89267bddf58afeb3e784aba0f0d6"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::sequencer_operation" ref="d50b89267bddf58afeb3e784aba0f0d6" args="" -->
-typedef <a class="el" href="a00237.html">buffer_node</a>< T, A <br>
->::buffer_operation </td><td class="memItemRight" valign="bottom"><b>sequencer_operation</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="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="a00302.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a> (<a class="el" href="a00301.html">mutex</a> &<a class="el" href="a00301.html">mutex</a>)</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1372a379c01bc269b36bf3128560879e1cdf6bcff9743d2be54bc70c4300cd28"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::WAIT" ref="1372a379c01bc269b36bf3128560879e1cdf6bcff9743d2be54bc70c4300cd28" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>WAIT</b> = 0</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="a00302.html#0d51d18cd99df3b2e93bf07378d0992c">release</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1372a379c01bc269b36bf3128560879e544c3030ddd97ba489e7d2bf1c612bc8"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::SUCCEEDED" ref="1372a379c01bc269b36bf3128560879e544c3030ddd97ba489e7d2bf1c612bc8" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>SUCCEEDED</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1372a379c01bc269b36bf3128560879ee298eb3257a044e4d0aca8a58f2f62b0"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::FAILED" ref="1372a379c01bc269b36bf3128560879ee298eb3257a044e4d0aca8a58f2f62b0" args="" -->
- </td><td class="memItemRight" valign="bottom"><b>FAILED</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> = 0, 
-<b>SUCCEEDED</b>, 
-<b>FAILED</b>
- }</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>
-<h3>template<typename T, typename A = cache_aligned_allocator<T>><br>
- class tbb::flow::interface6::sequencer_node< T, A ></h3>
-
-Forwards messages in sequence order. 
+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>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00531.html">mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00303.html b/doc/html/a00303.html
index 6d9e038..03fde40 100644
--- a/doc/html/a00303.html
+++ b/doc/html/a00303.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::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,44 +21,42 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00303.html">simple_partitioner</a></div>
-<h1>tbb::simple_partitioner Class Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00303.html">null_mutex</a></div>
+<h1>tbb::null_mutex Class Reference<br>
 <small>
-[<a class="el" href="a00395.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::simple_partitioner" -->A simple partitioner.  
+[<a class="el" href="a00429.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="a00531.html">partitioner.h</a>></code>
+<code>#include <<a class="el" href="a00533.html">null_mutex.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>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5f730f70d21df405adaebfc2018f59cd"></a><!-- doxytag: member="tbb::simple_partitioner::serial::interface6::start_for" ref="5f730f70d21df405adaebfc2018f59cd" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>serial::interface6::start_for</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="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="8a4cd0ffed4fad0d9af2c5efdaf586a8"></a><!-- doxytag: member="tbb::simple_partitioner::interface6::internal::start_for" ref="8a4cd0ffed4fad0d9af2c5efdaf586a8" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>interface6::internal::start_for</b></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="86f0750233dd6c83b65fb684338fd09f"></a><!-- doxytag: member="tbb::simple_partitioner::interface6::internal::start_reduce" ref="86f0750233dd6c83b65fb684338fd09f" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>interface6::internal::start_reduce</b></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="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>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="a00304.html">scoped_lock</a></td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00304.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-A simple partitioner. 
+A mutex which does nothing. 
 <p>
-Divides the range until the range is not divisible. 
+A <a class="el" href="a00303.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="a00531.html">partitioner.h</a></ul>
+<li><a class="el" href="a00533.html">null_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00304.html b/doc/html/a00304.html
index e72f0cc..3b24d67 100644
--- a/doc/html/a00304.html
+++ b/doc/html/a00304.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::flow::interface6::source_node< Output > Class Template 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,112 +21,36 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00304.html">source_node</a></div>
-<h1>tbb::flow::interface6::source_node< Output > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::source_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node,tbb::flow::interface6::sender< Output >" -->An executable node that acts as a source, i.e. it has no predecessors.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00303.html">null_mutex</a>::<a class="el" href="a00304.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="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00533.html">null_mutex.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::source_node< Output >:
-<p><center><img src="a00304.png" usemap="#tbb::flow::interface6::source_node< Output >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::source_node< Output >_map">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,262,24">
-<area href="a00301.html" alt="tbb::flow::interface6::sender< Output >" shape="rect" coords="272,0,534,24">
-</map>
-<a href="a00047.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="407533487cc3f6032c1072cba19c609c"></a><!-- doxytag: member="tbb::flow::interface6::source_node::output_type" ref="407533487cc3f6032c1072cba19c609c" args="" -->
-typedef Output </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#407533487cc3f6032c1072cba19c609c">output_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The type of the output message, which is complete. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dd7b8fe78f0bec9d6b70cbf1018a69fe"></a><!-- doxytag: member="tbb::flow::interface6::source_node::successor_type" ref="dd7b8fe78f0bec9d6b70cbf1018a69fe" args="" -->
-typedef <a class="el" href="a00295.html">receiver</a>< Output > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#dd7b8fe78f0bec9d6b70cbf1018a69fe">successor_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The type of successors of this node. <br></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="503c3b395c629296bf5cccd96d6388c1"></a><!-- doxytag: member="tbb::flow::interface6::source_node::source_node" ref="503c3b395c629296bf5cccd96d6388c1" args="(graph &g, Body body, bool is_active=true)" -->
-template<typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00304.html#503c3b395c629296bf5cccd96d6388c1">source_node</a> (<a class="el" href="a00262.html">graph</a> &g, Body body, bool is_active=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor for a node with a successor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="adaac111fbcace95804219a5f2929304"></a><!-- doxytag: member="tbb::flow::interface6::source_node::source_node" ref="adaac111fbcace95804219a5f2929304" args="(const source_node &src)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#adaac111fbcace95804219a5f2929304">source_node</a> (const <a class="el" href="a00304.html">source_node</a> &src)</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="61700b0865fc17188b0abe26bbde65b6"></a><!-- doxytag: member="tbb::flow::interface6::source_node::~source_node" ref="61700b0865fc17188b0abe26bbde65b6" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#61700b0865fc17188b0abe26bbde65b6">~source_node</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The destructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="22960d499df9f1569a9d8a544e35afe3"></a><!-- doxytag: member="tbb::flow::interface6::source_node::register_successor" ref="22960d499df9f1569a9d8a544e35afe3" args="(receiver< output_type > &r)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#22960d499df9f1569a9d8a544e35afe3">register_successor</a> (<a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00304.html#407533487cc3f6032c1072cba19c609c">output_type</a> > &r)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a new successor to this node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="222484bf295f39df36415a29e508e5c9"></a><!-- doxytag: member="tbb::flow::interface6::source_node::remove_successor" ref="222484bf295f39df36415a29e508e5c9" args="(receiver< output_type > &r)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#222484bf295f39df36415a29e508e5c9">remove_successor</a> (<a class="el" href="a00295.html">receiver</a>< <a class="el" href="a00304.html#407533487cc3f6032c1072cba19c609c">output_type</a> > &r)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="41073ad4d3510ed5a8b6bda9c0f58636"></a><!-- doxytag: member="tbb::flow::interface6::source_node::try_get" ref="41073ad4d3510ed5a8b6bda9c0f58636" args="(output_type &v)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#41073ad4d3510ed5a8b6bda9c0f58636">try_get</a> (<a class="el" href="a00304.html#407533487cc3f6032c1072cba19c609c">output_type</a> &v)</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="a00303.html">null_mutex</a> &)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the node. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ad459713ff3c1c9ad0f4826daa141f65"></a><!-- doxytag: member="tbb::flow::interface6::source_node::try_reserve" ref="ad459713ff3c1c9ad0f4826daa141f65" args="(output_type &v)" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#ad459713ff3c1c9ad0f4826daa141f65">try_reserve</a> (<a class="el" href="a00304.html#407533487cc3f6032c1072cba19c609c">output_type</a> &v)</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="a00303.html">null_mutex</a> &)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#494678baf9096835268736b800824460">try_release</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="a00303.html">null_mutex</a> &)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release a reserved item.  <a href="#494678baf9096835268736b800824460"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c7fcc29e2894b29138be3c1edce9bc9"></a><!-- doxytag: member="tbb::flow::interface6::source_node::try_consume" ref="2c7fcc29e2894b29138be3c1edce9bc9" args="()" -->
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#2c7fcc29e2894b29138be3c1edce9bc9">try_consume</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Consumes a reserved item. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b647e4a93d08ccdd8d323279e4eaaa6"></a><!-- doxytag: member="tbb::flow::interface6::source_node::activate" ref="4b647e4a93d08ccdd8d323279e4eaaa6" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#4b647e4a93d08ccdd8d323279e4eaaa6">activate</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Activates a node that was created in the inactive state. <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="15fb463802e1e30f5f836535d490874c"></a><!-- doxytag: member="tbb::flow::interface6::source_node::internal::source_task< source_node< output_type > >" ref="15fb463802e1e30f5f836535d490874c" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>internal::source_task< source_node< output_type > ></b></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>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Output><br>
- class tbb::flow::interface6::source_node< Output ></h3>
-
-An executable node that acts as a source, i.e. it has no predecessors. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="494678baf9096835268736b800824460"></a><!-- doxytag: member="tbb::flow::interface6::source_node::try_release" ref="494678baf9096835268736b800824460" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename Output> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">bool <a class="el" href="a00304.html">tbb::flow::interface6::source_node</a>< Output >::try_release           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, virtual]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Release a reserved item. 
-<p>
-true = item has been released and so remains in sender, dest must request or reserve future items 
+Represents acquisition of a mutex. 
 <p>
-Reimplemented from <a class="el" href="a00301.html#27036b06d6a91e97007e14f400529199">tbb::flow::interface6::sender< Output ></a>.
-</div>
-</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00533.html">null_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00305.html b/doc/html/a00305.html
index e213f6a..696e0f3 100644
--- a/doc/html/a00305.html
+++ b/doc/html/a00305.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::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,48 +21,26 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00305.html">spin_mutex</a></div>
-<h1>tbb::spin_mutex Class Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00305.html">null_rw_mutex</a></div>
+<h1>tbb::null_rw_mutex Class Reference<br>
 <small>
-[<a class="el" href="a00398.html">Synchronization</a>]</small>
-</h1><!-- doxytag: class="tbb::spin_mutex" -->A lock that occupies a single byte.  
+[<a class="el" href="a00429.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="a00565.html">spin_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00534.html">null_rw_mutex.h</a>></code>
 <p>
-<a href="a00111.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00092.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>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="a00305.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</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="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="a00305.html#4f748989e19b6045e3a2d2ee73626a28">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="a00305.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</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="a00305.html#0e843ee6265f57f27d228ba91e7308ef">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="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="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="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 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 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="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="a00306.html">scoped_lock</a></td></tr>
@@ -70,59 +48,15 @@ class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td>
 <tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00306.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-A lock that occupies a single byte. 
-<p>
-A <a class="el" href="a00305.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 less than 20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld. 
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="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">tbb::spin_mutex::spin_mutex           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Construct unacquired lock. 
-<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="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool tbb::spin_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">
-
+A rw mutex which does nothing. 
 <p>
-Try acquiring lock (non-blocking). 
+A <a class="el" href="a00305.html">null_rw_mutex</a> is a rw mutex that does nothing and simulates successful operation. 
 <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="a00565.html">spin_mutex.h</a></ul>
+<li><a class="el" href="a00534.html">null_rw_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00306.html b/doc/html/a00306.html
index 732ed3e..a7a346e 100644
--- a/doc/html/a00306.html
+++ b/doc/html/a00306.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::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,74 +21,42 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00305.html">spin_mutex</a>::<a class="el" href="a00306.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="a00414.html">tbb</a>::<a class="el" href="a00305.html">null_rw_mutex</a>::<a class="el" href="a00306.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="a00565.html">spin_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00534.html">null_rw_mutex.h</a>></code>
 <p>
-<a href="a00112.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00093.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="a00306.html#29ae680ae7f5e685c2e15535b9c855b3">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="a00305.html">null_rw_mutex</a> &, bool=true)</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="a00306.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a> (<a class="el" href="a00305.html">spin_mutex</a> &m)</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="a00305.html">null_rw_mutex</a> &, bool=true)</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="a00306.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a> (<a class="el" href="a00305.html">spin_mutex</a> &m)</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">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="a00306.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a> (<a class="el" href="a00305.html">spin_mutex</a> &m)</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">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="a00306.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a> ()</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="a00305.html">null_rw_mutex</a> &, bool=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="ac6fa425d1f06c56d8b70abc51aac844"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::~scoped_lock" ref="ac6fa425d1f06c56d8b70abc51aac844" args="()" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy lock. If holding a lock, releases the lock first. <br></td></tr>
-<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="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>
 
 </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="a00305.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">
-
-<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="a00565.html">spin_mutex.h</a></ul>
+<li><a class="el" href="a00534.html">null_rw_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00307.html b/doc/html/a00307.html
index ed41ffb..6e27b82 100644
--- a/doc/html/a00307.html
+++ b/doc/html/a00307.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::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,110 +21,42 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00307.html">spin_rw_mutex_v3</a></div>
-<h1>tbb::spin_rw_mutex_v3 Class Reference<br>
-<small>
-[<a class="el" href="a00398.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="a00414.html">tbb</a>::<a class="el" href="a00307.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="a00566.html">spin_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00535.html">parallel_do.h</a>></code>
 <p>
-<a href="a00113.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00094.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>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="a00307.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a> ()</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="a00307.html#40baaf0f6856f4491dd0adf896c93516">add</a> (const Item &item)</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="a00307.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a work item to a running parallel_do. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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">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="a00307.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="a00307.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="a00307.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="a00307.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="a00307.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">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00308.html">scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00308.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-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">
+<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 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">
+<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>
-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="a00566.html">spin_rw_mutex.h</a></ul>
+<li><a class="el" href="a00535.html">parallel_do.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00308.html b/doc/html/a00308.html
index 6c9c2dd..bcf4c07 100644
--- a/doc/html/a00308.html
+++ b/doc/html/a00308.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::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,126 +21,117 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00307.html">spin_rw_mutex_v3</a>::<a class="el" href="a00308.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="a00414.html">tbb</a>::<a class="el" href="a00308.html">parallel_while</a></div>
+<h1>tbb::parallel_while< Body > Class Template Reference<br>
+<small>
+[<a class="el" href="a00426.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="a00566.html">spin_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00571.html">parallel_while.h</a>></code>
 <p>
-<a href="a00114.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00098.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00308.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"><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)" -->
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00308.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a> (<a class="el" href="a00307.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><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="a00308.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~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="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="a00308.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a> (<a class="el" href="a00307.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00308.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a> ()</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="a00308.html#61b14d00a78185c9b2d206ebfc379124">release</a> ()</td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00308.html#fa297e53d3af2a101e712bc200233e9c">value_type</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="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="a00308.html#c2c2c38a08cb9080e87099fac3e5bc94">downgrade_to_reader</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="a00308.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</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="a00308.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a> (<a class="el" href="a00307.html">spin_rw_mutex</a> &m, bool write=true)</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="a00308.html#6fcfc973cc56b79c6d0fbb8a31be7e84">~parallel_while</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <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="d96d1a1fcc3d79ef3e5c06a53b8ffeaa"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::mutex" ref="d96d1a1fcc3d79ef3e5c06a53b8ffeaa" args="" -->
-<a class="el" href="a00307.html">spin_rw_mutex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00308.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">mutex</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="a00308.html#b32a0a6e5e09ebb7fad3e6652c19afe5">run</a> (Stream &stream, const Body &body)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The pointer to the current mutex that is held, or NULL if no mutex is held. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00308.html#6b5a7c3c67a36b05c4df8410d32627d8">is_writer</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="a00308.html#e131c560057a58229992b61eb8dba4c6">add</a> (const <a class="el" href="a00308.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> &item)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.  <a href="#6b5a7c3c67a36b05c4df8410d32627d8"></a><br></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>
-The scoped locking pattern. 
+<h3>template<typename Body><br>
+ class tbb::parallel_while< Body ></h3>
+
+Parallel iteration over a stream, with optional addition of more work. 
 <p>
-It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
+The Body b has the requirement: <br>
+ "b(v)" <br>
+ "b.argument_type" <br>
+ where v is an argument_type 
 <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="()" -->
+<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">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock           </td>
+          <td class="memname">void <a class="el" href="a00308.html">tbb::parallel_while</a>< Body >::add           </td>
           <td>(</td>
-          <td class="paramname">          </td>
+          <td class="paramtype">const <a class="el" href="a00308.html#fa297e53d3af2a101e712bc200233e9c">value_type</a> & </td>
+          <td class="paramname"> <em>item</em>          </td>
           <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
+          <td width="100%"></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-Construct lock that has not acquired a mutex. 
+Add a work item while running. 
 <p>
-Equivalent to zero-initialization of *this. 
+Should be executed only by body.apply or a thread spawned therefrom. 
 </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="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">bool tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer           </td>
+          <td class="memname">void <a class="el" href="a00308.html">tbb::parallel_while</a>< Body >::run           </td>
           <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></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>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Upgrade reader to become a writer. 
-<p>
-Returns true if the upgrade happened without re-acquiring the lock and false if opposite 
-</div>
-</div><p>
-<hr><h2>Member Data Documentation</h2>
-<a class="anchor" name="6b5a7c3c67a36b05c4df8410d32627d8"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::is_writer" ref="6b5a7c3c67a36b05c4df8410d32627d8" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
         <tr>
-          <td class="memname">bool <a class="el" href="a00308.html#6b5a7c3c67a36b05c4df8410d32627d8">tbb::spin_rw_mutex_v3::scoped_lock::is_writer</a><code> [protected]</code>          </td>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
         </tr>
       </table>
 </div>
 <div class="memdoc">
 
 <p>
-If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock. 
+Apply body.apply to each item in the stream. 
 <p>
-Not defined if not holding a lock. 
+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="a00566.html">spin_rw_mutex.h</a></ul>
+<li><a class="el" href="a00571.html">parallel_while.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00309.html b/doc/html/a00309.html
index 7cf548e..a1b9bda 100644
--- a/doc/html/a00309.html
+++ b/doc/html/a00309.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::internal::partition_type_base Class Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -21,28 +21,39 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00309.html">split</a></div>
-<h1>tbb::split Class Reference<br>
-<small>
-[<a class="el" href="a00395.html">Algorithms</a>]</small>
-</h1><!-- doxytag: class="tbb::split" -->Dummy type that distinguishes splitting constructor from copy constructor.  
+<a class="el" href="a00414.html">tbb</a>::<b>internal</b>::<a class="el" href="a00309.html">partition_type_base</a></div>
+<h1>tbb::internal::partition_type_base Class Reference</h1><!-- doxytag: class="tbb::internal::partition_type_base" -->Provides backward-compatible methods for partition objects without affinity.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00601.html">tbb_stddef.h</a>></code>
+<code>#include <<a class="el" href="a00575.html">partitioner.h</a>></code>
 <p>
-<table border="0" cellpadding="0" cellspacing="0">
+<a href="a00100.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d5b43011addf53239ccf8cdeaeab76e7"></a><!-- doxytag: member="tbb::internal::partition_type_base::set_affinity" ref="d5b43011addf53239ccf8cdeaeab76e7" args="(task &)" -->
+void </td><td class="memItemRight" valign="bottom"><b>set_affinity</b> (<a class="el" href="a00337.html">task</a> &)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2bffce16dee5796448bf12c8ccecd94c"></a><!-- doxytag: member="tbb::internal::partition_type_base::note_affinity" ref="2bffce16dee5796448bf12c8ccecd94c" args="(task::affinity_id)" -->
+void </td><td class="memItemRight" valign="bottom"><b>note_affinity</b> (<a class="el" href="a00337.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="87962b93599ff172cd4b64f2995ebc71"></a><!-- doxytag: member="tbb::internal::partition_type_base::continue_after_execute_range" ref="87962b93599ff172cd4b64f2995ebc71" args="()" -->
+<a class="el" href="a00337.html">task</a> * </td><td class="memItemRight" valign="bottom"><b>continue_after_execute_range</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="baca041e2b854196a411f1d0ca7ae905"></a><!-- doxytag: member="tbb::internal::partition_type_base::decide_whether_to_delay" ref="baca041e2b854196a411f1d0ca7ae905" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><b>decide_whether_to_delay</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="17686f1a5119802cad38369d0580d05f"></a><!-- doxytag: member="tbb::internal::partition_type_base::spawn_or_delay" ref="17686f1a5119802cad38369d0580d05f" args="(bool, task &b)" -->
+void </td><td class="memItemRight" valign="bottom"><b>spawn_or_delay</b> (bool, <a class="el" href="a00337.html">task</a> &b)</td></tr>
+
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Dummy type that distinguishes splitting constructor from copy constructor. 
-<p>
-See description of parallel_for and parallel_reduce for example usages. 
+Provides backward-compatible methods for partition objects without affinity. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00601.html">tbb_stddef.h</a></ul>
+<li><a class="el" href="a00575.html">partitioner.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00310.html b/doc/html/a00310.html
index 6154720..b04898f 100644
--- a/doc/html/a00310.html
+++ b/doc/html/a00310.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::flow::interface6::split_node< TupleType, Allocator > 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,52 +21,88 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00310.html">split_node</a></div>
-<h1>tbb::flow::interface6::split_node< TupleType, Allocator > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::split_node" --><!-- doxytag: inherits="tbb::flow::interface6::multioutput_function_node< TupleType, TupleType, rejecting, Allocator >" --><a class="el" href="a00310.html">split_node</a>: accepts a tuple as input, forwards each element of the tuple to its  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00310.html">pipeline</a></div>
+<h1>tbb::pipeline Class Reference<br>
+<small>
+[<a class="el" href="a00426.html">Algorithms</a>]</small>
+</h1><!-- doxytag: class="tbb::pipeline" -->A processing pipeline that applies filters to items.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00468.html">flow_graph.h</a>></code>
+<code>#include <<a class="el" href="a00587.html">pipeline.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::flow::interface6::split_node< TupleType, Allocator >:
-<p><center><img src="a00310.png" usemap="#tbb::flow::interface6::split_node< TupleType, Allocator >_map" border="0" alt=""></center>
-<map name="tbb::flow::interface6::split_node< TupleType, Allocator >_map">
-<area href="a00274.html" alt="tbb::flow::interface6::multioutput_function_node< TupleType, TupleType, rejecting, Allocator >" shape="rect" coords="474,56,1412,80">
-<area href="a00263.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,938,24">
-</map>
-<a href="a00052.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00107.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="2be7c82940654e1ac75a0027748388a2"></a><!-- doxytag: member="tbb::flow::interface6::split_node::ports_type" ref="2be7c82940654e1ac75a0027748388a2" args="" -->
-typedef base_type::ports_type </td><td class="memItemRight" valign="bottom"><b>ports_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="596dc3beba27099c4c8581cb419e1a59"></a><!-- doxytag: member="tbb::pipeline::pipeline" ref="596dc3beba27099c4c8581cb419e1a59" args="()" -->
+__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="414872500f7ab2cecd98edc6945dea47"></a><!-- doxytag: member="tbb::flow::interface6::split_node::input_type" ref="414872500f7ab2cecd98edc6945dea47" args="" -->
-typedef TupleType </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty pipeline. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a> ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="06f32ac2a6bc1043ef6dd9ec40044522"></a><!-- doxytag: member="tbb::flow::interface6::split_node::allocator_type" ref="06f32ac2a6bc1043ef6dd9ec40044522" 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="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="a00310.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a> (<a class="el" href="a00282.html">filter</a> &filter_)</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="ce8ee443d310145fc36e152c608c2e49"></a><!-- doxytag: member="tbb::flow::interface6::split_node::split_node" ref="ce8ee443d310145fc36e152c608c2e49" args="(graph &g)" -->
- </td><td class="memItemRight" valign="bottom"><b>split_node</b> (<a class="el" href="a00262.html">graph</a> &g)</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="a00310.html#f627616049b3fe36801f37ee40403ef8">run</a> (size_t max_number_of_live_tokens)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Run the pipeline to completion. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00310.html#93d7fec8cd607b803dd2d79fb46bd260">run</a> (size_t max_number_of_live_tokens, <a class="el" href="a00339.html">tbb::task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Run the pipeline to completion with user-supplied context. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c84aef5b834b555ee220b176e25931e"></a><!-- doxytag: member="tbb::pipeline::clear" ref="2c84aef5b834b555ee220b176e25931e" args="()" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#2c84aef5b834b555ee220b176e25931e">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Remove all filters from the pipeline. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="c16a1c429bb2e3a33f6c56de84e63405"></a><!-- doxytag: member="tbb::flow::interface6::split_node::split_node" ref="c16a1c429bb2e3a33f6c56de84e63405" args="(const split_node &other)" -->
- </td><td class="memItemRight" valign="bottom"><b>split_node</b> (const <a class="el" href="a00310.html">split_node</a> &other)</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 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>splitting_body</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="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 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 class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d1ed99300bc4520a481583c448d6fafd"></a><!-- doxytag: member="tbb::pipeline::tbb::interface6::internal::pipeline_proxy" ref="d1ed99300bc4520a481583c448d6fafd" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>tbb::interface6::internal::pipeline_proxy</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename TupleType, typename Allocator = cache_aligned_allocator<TupleType>><br>
- class tbb::flow::interface6::split_node< TupleType, Allocator ></h3>
+A processing pipeline that applies filters to items. 
+<p>
+<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">
 
-<a class="el" href="a00310.html">split_node</a>: accepts a tuple as input, forwards each element of the tuple to its 
 <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="a00468.html">flow_graph.h</a></ul>
+<li><a class="el" href="a00587.html">pipeline.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00310.png b/doc/html/a00310.png
deleted file mode 100644
index 3645f7a..0000000
Binary files a/doc/html/a00310.png and /dev/null differ
diff --git a/doc/html/a00311.html b/doc/html/a00311.html
index 57ad344..9ac5444 100644
--- a/doc/html/a00311.html
+++ b/doc/html/a00311.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::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,602 +21,30 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00311.html">task</a></div>
-<h1>tbb::task Class Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00311.html">pre_scan_tag</a></div>
+<h1>tbb::pre_scan_tag Struct Reference<br>
 <small>
-[<a class="el" href="a00400.html">Task Scheduling</a>]</small>
-</h1><!-- doxytag: class="tbb::task" -->Base class for user-defined tasks.  
+[<a class="el" href="a00426.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="a00567.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00562.html">parallel_scan.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::task:
-<p><center><img src="a00311.png" usemap="#tbb::task_map" border="0" alt=""></center>
-<map name="tbb::task_map">
-<area href="a00254.html" alt="tbb::empty_task" shape="rect" coords="0,56,97,80">
-</map>
-<a href="a00119.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00096.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>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="a00311.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="a00311.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="a00311.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="a00311.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="a00311.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="a00311.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="a00311.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="a00311.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="a00311.html#4a3c415562d17905390ea5b49d12293e">state_type</a> { <br>
-  <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>, 
-<a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>, 
-<a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>, 
-<a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>, 
-<br>
-  <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>, 
-<a class="el" href="a00311.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="a00311.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="a00311.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="a00311.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.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="a00311.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="a00311.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">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a> (<a class="el" href="a00311.html">task</a> &t)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy a task.  <a href="#dfaacf92685e5f86393bf657b2853bf8"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.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="a00311.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="a00311.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a> (<a class="el" href="a00311.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="a00311.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="a00311.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="a00311.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="a00311.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Atomically increment reference count and returns its old value.  <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="a00311.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Atomically decrement reference count and returns its new value.  <a href="#ef4680f5c148020c5e7e43ddef44cd5d"></a><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="a00311.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a> (<a class="el" href="a00311.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="a00311.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a> (<a class="el" href="a00315.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="a00311.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="a00311.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.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="d2eaf79fcaa3ae473e3bd3f44bd8a464"></a><!-- doxytag: member="tbb::task::set_parent" ref="d2eaf79fcaa3ae473e3bd3f44bd8a464" args="(task *p)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">set_parent</a> (<a class="el" href="a00311.html">task</a> *p)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">sets parent task pointer to specified value <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00314.html">task_group_context</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">This method is deprecated and will be removed in the future.  <a href="#d8c36a93f3972590fbb65ff1cef3173b"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5987123486afca36ddebb9e2a8b7779a"></a><!-- doxytag: member="tbb::task::group" ref="5987123486afca36ddebb9e2a8b7779a" args="()" -->
-<a class="el" href="a00314.html">task_group_context</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html#5987123486afca36ddebb9e2a8b7779a">group</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the task group descriptor. <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="a00311.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if task was stolen from the task pool of another thread. <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="a00311.html#4a3c415562d17905390ea5b49d12293e">state_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.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="a00311.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="a00311.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="a00311.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a> (<a class="el" href="a00311.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="a00311.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.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="a00311.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a> (<a class="el" href="a00311.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">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html#62247be9a637a814c8e8f4bcfb3a1908">change_group</a> (<a class="el" href="a00314.html">task_group_context</a> &ctx)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Moves this task from its current group into another one.  <a href="#62247be9a637a814c8e8f4bcfb3a1908"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.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="a00311.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if the context has received cancellation request. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9ac8d1542d67d9d80121ff986801ac26"></a><!-- doxytag: member="tbb::task::set_group_priority" ref="9ac8d1542d67d9d80121ff986801ac26" args="(priority_t p)" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html#9ac8d1542d67d9d80121ff986801ac26">set_group_priority</a> (priority_t p)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Changes priority of the task group this task belongs to. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e1d969a1ccab6796e3b8b2c1a5be33d2"></a><!-- doxytag: member="tbb::task::group_priority" ref="e1d969a1ccab6796e3b8b2c1a5be33d2" args="() const " -->
-priority_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html#e1d969a1ccab6796e3b8b2c1a5be33d2">group_priority</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Retrieves current priority of the task group this task belongs to. <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="a00311.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="a00311.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a> (<a class="el" href="a00314.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"><a class="anchor" name="ce8ce689c26a4ddf343829bc3c73290a"></a><!-- doxytag: member="tbb::task::spawn_root_and_wait" ref="ce8ce689c26a4ddf343829bc3c73290a" args="(task &root)" -->
-static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a> (<a class="el" href="a00311.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. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a> (<a class="el" href="a00315.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">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a> (<a class="el" href="a00311.html">task</a> &t)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue task for starvation-resistant execution.  <a href="#8365d063c0cc9d7bd616bca47256b93c"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fe6bf6aaf84e664134fabb6c4f409ea9"></a><!-- doxytag: member="tbb::task::enqueue" ref="fe6bf6aaf84e664134fabb6c4f409ea9" args="(task &t, priority_t p)" -->
-static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html#fe6bf6aaf84e664134fabb6c4f409ea9">enqueue</a> (<a class="el" href="a00311.html">task</a> &t, priority_t p)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue task for starvation-resistant execution on the specified priority level. <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="a00311.html">task</a> &__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.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="a00311.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="81d0122aee4ddae419a743ee50d7038e"></a><!-- doxytag: member="tbb::task::interface5::internal::task_base" ref="81d0122aee4ddae419a743ee50d7038e" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>interface5::internal::task_base</b></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="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>
-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="a00311.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="a00311.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="a00311.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="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="62247be9a637a814c8e8f4bcfb3a1908"></a><!-- doxytag: member="tbb::task::change_group" ref="62247be9a637a814c8e8f4bcfb3a1908" args="(task_group_context &ctx)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task::change_group           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00314.html">task_group_context</a> & </td>
-          <td class="paramname"> <em>ctx</em>          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Moves this task from its current group into another one. 
-<p>
-Argument ctx specifies the new group.<p>
-The primary purpose of this method is to associate unique task group context with a task allocated for subsequent enqueuing. In contrast to spawned tasks enqueued ones normally outlive the scope where they were created. This makes traditional usage model where task group context are allocated locally on the stack inapplicable. Dynamic allocation of context objects is performance inefficient. Method <a class="el" href="a00311.html#62247be9a637a814c8e8f4bcfb3a1908">change_group()</a> allow [...]
-</div>
-</div><p>
-<a class="anchor" name="d8c36a93f3972590fbb65ff1cef3173b"></a><!-- doxytag: member="tbb::task::context" ref="d8c36a93f3972590fbb65ff1cef3173b" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="a00314.html">task_group_context</a>* tbb::task::context           </td>
-          <td>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-This method is deprecated and will be removed in the future. 
-<p>
-Use method <a class="el" href="a00311.html#5987123486afca36ddebb9e2a8b7779a">group()</a> instead. 
-</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 and returns its new value. 
-<p>
-Has release semantics. 
-</div>
-</div><p>
-<a class="anchor" name="dfaacf92685e5f86393bf657b2853bf8"></a><!-- doxytag: member="tbb::task::destroy" ref="dfaacf92685e5f86393bf657b2853bf8" args="(task &t)" -->
-<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="a00311.html">task</a> & </td>
-          <td class="paramname"> <em>t</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="a00311.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="8365d063c0cc9d7bd616bca47256b93c"></a><!-- doxytag: member="tbb::task::enqueue" ref="8365d063c0cc9d7bd616bca47256b93c" args="(task &t)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void tbb::task::enqueue           </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="a00311.html">task</a> & </td>
-          <td class="paramname"> <em>t</em>          </td>
-          <td> ) </td>
-          <td width="100%"><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-Enqueue task for starvation-resistant execution. 
-<p>
-The task will be enqueued on the normal priority level disregarding the priority of its task group.<p>
-The rationale of such semantics is that priority of an enqueued task is statically fixed at the moment of its enqueuing, while task group priority is dynamic. Thus automatic priority inheritance would be generally a subject to the race, which may result in unexpected behavior.<p>
-Use <a class="el" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">enqueue()</a> overload with explicit priority value and <a class="el" href="a00311.html#e1d969a1ccab6796e3b8b2c1a5be33d2">task::group_priority()</a> method to implement such priority inheritance when it is really necessary. 
-</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 and returns its old value. 
-<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="a00311.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="a00311.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="a00311.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. Typically, this is done by having method <a class="el" href="a00311.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. With no descendants and ref_count of 1, it has the semantics of recycle_to_reexecute. 
-</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="a00311.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. 
-<p>
-Made obsolete by recycle_as_safe_continuation; may become deprecated. 
-</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="a00315.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="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. 
+Used to indicate that the initial scan is being performed. 
 <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="a00567.html">task.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00562.html">parallel_scan.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00312.html b/doc/html/a00312.html
index ba52a82..14f3f9d 100644
--- a/doc/html/a00312.html
+++ b/doc/html/a00312.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::interface5::internal::task_base Class Reference</title>
+<title>tbb::flow::interface6::priority_queue_node< T, Compare, 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,25 +21,110 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>interface5</b>::<b>internal</b>::<a class="el" href="a00312.html">task_base</a></div>
-<h1>tbb::interface5::internal::task_base Class Reference</h1><!-- doxytag: class="tbb::interface5::internal::task_base" -->Base class for methods that became static in TBB 3.0.  
+<a class="el" href="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00312.html">priority_queue_node</a></div>
+<h1>tbb::flow::interface6::priority_queue_node< T, Compare, A > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::priority_queue_node" --><!-- doxytag: inherits="tbb::flow::interface6::buffer_node" -->Forwards messages in priority order.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00567.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<a href="a00116.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::flow::interface6::priority_queue_node< T, Compare, A >:
+<p><center><img src="a00312.png" usemap="#tbb::flow::interface6::priority_queue_node< T, Compare, A >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::priority_queue_node< T, Compare, A >_map">
+<area href="a00263.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="362,56,714,80">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,352,24">
+<area href="a00321.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="362,0,714,24">
+<area href="a00327.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="724,0,1076,24">
+</map>
+<a href="a00076.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2829b518979874ad3d2a939e14ae7bd"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::input_type" ref="b2829b518979874ad3d2a939e14ae7bd" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2cb099b590246b6bc93cc15e78c6ee5c"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::output_type" ref="2cb099b590246b6bc93cc15e78c6ee5c" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html#2cb099b590246b6bc93cc15e78c6ee5c">output_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fdea783bf9d5a4c98e794ac7e0f84ccf"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::predecessor_type" ref="fdea783bf9d5a4c98e794ac7e0f84ccf" args="" -->
+typedef <a class="el" href="a00327.html">sender</a>< <a class="el" href="a00312.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html#fdea783bf9d5a4c98e794ac7e0f84ccf">predecessor_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="09ab5064ca8192e68c03da47603e68eb"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::successor_type" ref="09ab5064ca8192e68c03da47603e68eb" args="" -->
+typedef <a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00312.html#2cb099b590246b6bc93cc15e78c6ee5c">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html#09ab5064ca8192e68c03da47603e68eb">successor_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <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="497ec2612615249bf5a294eb1b7b93b3"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::priority_queue_node" ref="497ec2612615249bf5a294eb1b7b93b3" args="(graph &g)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html#497ec2612615249bf5a294eb1b7b93b3">priority_queue_node</a> (<a class="el" href="a00288.html">graph</a> &g)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="17a4f66e23d54100b64805405e905d62"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::priority_queue_node" ref="17a4f66e23d54100b64805405e905d62" args="(const priority_queue_node &src)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html#17a4f66e23d54100b64805405e905d62">priority_queue_node</a> (const <a class="el" href="a00312.html">priority_queue_node</a> &src)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <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="d1c6c5e02b9cc144b2b3ccc9f18bf047"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::size_type" ref="d1c6c5e02b9cc144b2b3ccc9f18bf047" args="" -->
+typedef <a class="el" href="a00263.html">buffer_node</a>< T, A <br>
+>::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="eb98634e74bee4d82676f1aca0f6864c"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::item_type" ref="eb98634e74bee4d82676f1aca0f6864c" args="" -->
+typedef <a class="el" href="a00263.html">buffer_node</a>< T, A <br>
+>::item_type </td><td class="memItemRight" valign="bottom"><b>item_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f80f04dc8886a8a6b177123f094bdb43"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::prio_operation" ref="f80f04dc8886a8a6b177123f094bdb43" args="" -->
+typedef <a class="el" href="a00263.html">buffer_node</a>< T, A <br>
+>::buffer_operation </td><td class="memItemRight" valign="bottom"><b>prio_operation</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="274cc306c7a22cf9e27c4c2c3a66ce8e579c547cd1c044d3e6190401d87ee101"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::WAIT" ref="274cc306c7a22cf9e27c4c2c3a66ce8e579c547cd1c044d3e6190401d87ee101" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>WAIT</b> = 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="274cc306c7a22cf9e27c4c2c3a66ce8e67ced6b76fb4bcd40404499619fbd0b9"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::SUCCEEDED" ref="274cc306c7a22cf9e27c4c2c3a66ce8e67ced6b76fb4bcd40404499619fbd0b9" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>SUCCEEDED</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="274cc306c7a22cf9e27c4c2c3a66ce8eb74545a431cbeaf85ab0bfcec52261ff"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::FAILED" ref="274cc306c7a22cf9e27c4c2c3a66ce8eb74545a431cbeaf85ab0bfcec52261ff" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>FAILED</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> = 0, 
+<b>SUCCEEDED</b>, 
+<b>FAILED</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="abff2e0891477135c24f44747e991c6c"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::handle_operations" ref="abff2e0891477135c24f44747e991c6c" args="(prio_operation *op_list)" -->
+void </td><td class="memItemRight" valign="bottom"><b>handle_operations</b> (prio_operation *op_list)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ed2d8dc0a9c1c2571e4a69df2f2209e5"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_forward" ref="ed2d8dc0a9c1c2571e4a69df2f2209e5" args="(prio_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">internal_forward</a> (prio_operation *op)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to forward valid items to successors. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="05d8747ea54ca84a7196f8cacdc81ca5"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_push" ref="05d8747ea54ca84a7196f8cacdc81ca5" args="(prio_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><b>internal_push</b> (prio_operation *op)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6c7cd11240fbe0737344f36b587492f9"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_pop" ref="6c7cd11240fbe0737344f36b587492f9" args="(prio_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><b>internal_pop</b> (prio_operation *op)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9238c5c44ccc46ed1be218651f36feea"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_reserve" ref="9238c5c44ccc46ed1be218651f36feea" args="(prio_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (prio_operation *op)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="caefc7ba7a16a7120b6b37de42e705b4"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_consume" ref="caefc7ba7a16a7120b6b37de42e705b4" args="(prio_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><b>internal_consume</b> (prio_operation *op)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="400304719e359e66e9560157577fc2fe"></a><!-- doxytag: member="tbb::flow::interface6::priority_queue_node::internal_release" ref="400304719e359e66e9560157577fc2fe" args="(prio_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><b>internal_release</b> (prio_operation *op)</td></tr>
+
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Base class for methods that became static in TBB 3.0. 
-<p>
-TBB's evolution caused the "this" argument for several methods to become obsolete. However, for backwards binary compatibility, the new methods need distinct names, otherwise the One Definition Rule would be broken. Hence the new methods are defined in this private base class, and then exposed in class task via using declarations. 
+<h3>template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>><br>
+ class tbb::flow::interface6::priority_queue_node< T, Compare, A ></h3>
+
+Forwards messages in priority order. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00567.html">task.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00286.png b/doc/html/a00312.png
similarity index 100%
copy from doc/html/a00286.png
copy to doc/html/a00312.png
diff --git a/doc/html/a00313.html b/doc/html/a00313.html
new file mode 100644
index 0000000..4c75268
--- /dev/null
+++ b/doc/html/a00313.html
@@ -0,0 +1,121 @@
+<!DOCTYPE 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::flow::interface6::queue_node< 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>
+<!-- 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="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00313.html">queue_node</a></div>
+<h1>tbb::flow::interface6::queue_node< T, A > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::queue_node" --><!-- doxytag: inherits="tbb::flow::interface6::buffer_node" -->Forwards messages in FIFO order.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::flow::interface6::queue_node< T, A >:
+<p><center><img src="a00313.png" usemap="#tbb::flow::interface6::queue_node< T, A >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::queue_node< T, A >_map">
+<area href="a00263.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="280,56,550,80">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,270,24">
+<area href="a00321.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="280,0,550,24">
+<area href="a00327.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="560,0,830,24">
+<area href="a00328.html" alt="tbb::flow::interface6::sequencer_node< T, A >" shape="rect" coords="280,168,550,192">
+</map>
+<a href="a00074.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1e71030845210b6c4c7380eb9e11a2ac"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::input_type" ref="1e71030845210b6c4c7380eb9e11a2ac" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#1e71030845210b6c4c7380eb9e11a2ac">input_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="25b5a53ab1f9a342644fa3759bc0b1ad"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::output_type" ref="25b5a53ab1f9a342644fa3759bc0b1ad" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#25b5a53ab1f9a342644fa3759bc0b1ad">output_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5e2fdd33c45d44549dee9c1638e19898"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::predecessor_type" ref="5e2fdd33c45d44549dee9c1638e19898" args="" -->
+typedef <a class="el" href="a00327.html">sender</a>< <a class="el" href="a00313.html#1e71030845210b6c4c7380eb9e11a2ac">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#5e2fdd33c45d44549dee9c1638e19898">predecessor_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f35076a19f256f9e7a61bed77ca1ccc5"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::successor_type" ref="f35076a19f256f9e7a61bed77ca1ccc5" args="" -->
+typedef <a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00313.html#25b5a53ab1f9a342644fa3759bc0b1ad">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#f35076a19f256f9e7a61bed77ca1ccc5">successor_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <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="c716593a92448b0f429d1f3a38e67996"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::queue_node" ref="c716593a92448b0f429d1f3a38e67996" args="(graph &g)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#c716593a92448b0f429d1f3a38e67996">queue_node</a> (<a class="el" href="a00288.html">graph</a> &g)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0226762d9ebba28311b7b1518d948ab1"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::queue_node" ref="0226762d9ebba28311b7b1518d948ab1" args="(const queue_node &src)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#0226762d9ebba28311b7b1518d948ab1">queue_node</a> (const <a class="el" href="a00313.html">queue_node</a> &src)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <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="a84ab6bb43d056468ac5df3626219513"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::size_type" ref="a84ab6bb43d056468ac5df3626219513" args="" -->
+typedef <a class="el" href="a00263.html">buffer_node</a>< T, A <br>
+>::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="63c3b0a76cd7964dec2f3d54afbb05f3"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::queue_operation" ref="63c3b0a76cd7964dec2f3d54afbb05f3" args="" -->
+typedef <a class="el" href="a00263.html">buffer_node</a>< T, A <br>
+>::buffer_operation </td><td class="memItemRight" valign="bottom"><b>queue_operation</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b748e310297e1e3f88952a2a9876bab979763449c8716cdd38fda58e607551f1"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::WAIT" ref="b748e310297e1e3f88952a2a9876bab979763449c8716cdd38fda58e607551f1" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>WAIT</b> = 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b748e310297e1e3f88952a2a9876bab923e845160e46a20fb8550132f04e94aa"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::SUCCEEDED" ref="b748e310297e1e3f88952a2a9876bab923e845160e46a20fb8550132f04e94aa" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>SUCCEEDED</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b748e310297e1e3f88952a2a9876bab9ad699b139814d0746be2266041081474"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::FAILED" ref="b748e310297e1e3f88952a2a9876bab9ad699b139814d0746be2266041081474" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>FAILED</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> = 0, 
+<b>SUCCEEDED</b>, 
+<b>FAILED</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="eadcbbb81f9a9d223afabe0f40e77ecb"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::internal_forward" ref="eadcbbb81f9a9d223afabe0f40e77ecb" args="(queue_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#eadcbbb81f9a9d223afabe0f40e77ecb">internal_forward</a> (queue_operation *op)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to forward valid items to successors. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cfd2350a4c9d14486a8a9285acb9ca49"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::internal_pop" ref="cfd2350a4c9d14486a8a9285acb9ca49" args="(queue_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><b>internal_pop</b> (queue_operation *op)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bf478ff2ae265ec859928191e2f7dbe3"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::internal_reserve" ref="bf478ff2ae265ec859928191e2f7dbe3" args="(queue_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (queue_operation *op)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d67eee760d9fd829064927e7fe1b54fb"></a><!-- doxytag: member="tbb::flow::interface6::queue_node::internal_consume" ref="d67eee760d9fd829064927e7fe1b54fb" args="(queue_operation *op)" -->
+void </td><td class="memItemRight" valign="bottom"><b>internal_consume</b> (queue_operation *op)</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::flow::interface6::queue_node< T, A ></h3>
+
+Forwards messages in FIFO order. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00287.png b/doc/html/a00313.png
similarity index 100%
copy from doc/html/a00287.png
copy to doc/html/a00313.png
diff --git a/doc/html/a00314.html b/doc/html/a00314.html
index bfa3bf0..0690b93 100644
--- a/doc/html/a00314.html
+++ b/doc/html/a00314.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 Struct 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,20 +21,48 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00314.html">task_group_context</a></div>
-<h1>tbb::task_group_context Struct Reference</h1><!-- doxytag: class="tbb::task_group_context" --><code>#include <<a class="el" href="a00506.html">parallel_invoke.h</a>></code>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00314.html">queuing_mutex</a></div>
+<h1>tbb::queuing_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00429.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::queuing_mutex" -->Queuing mutex with local-only spinning.  
+<a href="#_details">More...</a>
 <p>
-<table border="0" cellpadding="0" cellspacing="0">
+<code>#include <<a class="el" href="a00603.html">queuing_mutex.h</a>></code>
+<p>
+<a href="a00110.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b389ad9c4db7293e4bdb5b8cda69ec04"></a><!-- doxytag: member="tbb::queuing_mutex::queuing_mutex" ref="b389ad9c4db7293e4bdb5b8cda69ec04" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00314.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="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="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>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00315.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Dummy to avoid cluttering the bulk of the header with enormous amount of ifdefs. 
+Queuing mutex with local-only spinning. 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00506.html">parallel_invoke.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00603.html">queuing_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00315.html b/doc/html/a00315.html
index c229fcb..82298ac 100644
--- a/doc/html/a00315.html
+++ b/doc/html/a00315.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::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,60 +21,71 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00315.html">task_list</a></div>
-<h1>tbb::task_list Class Reference<br>
-<small>
-[<a class="el" href="a00400.html">Task Scheduling</a>]</small>
-</h1><!-- doxytag: class="tbb::task_list" -->A list of children.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00314.html">queuing_mutex</a>::<a class="el" href="a00315.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="a00567.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00603.html">queuing_mutex.h</a>></code>
 <p>
-<a href="a00121.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00111.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><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="a00315.html#416341c2047eaef50417b41eaf7e9de6">task_list</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#db0fa3967491014572e24d6607bdc971">scoped_lock</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="a00315.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</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"><a class="anchor" name="9b51ef972f5618ac17caadb58841ab6d"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::scoped_lock" ref="9b51ef972f5618ac17caadb58841ab6d" args="(queuing_mutex &m)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#9b51ef972f5618ac17caadb58841ab6d">scoped_lock</a> (<a class="el" href="a00314.html">queuing_mutex</a> &m)</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="a00315.html#f3ac31e092814b90929f81bb30441959">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="ac2c576a93570957d694192a5f491443"></a><!-- doxytag: member="tbb::queuing_mutex::scoped_lock::~scoped_lock" ref="ac2c576a93570957d694192a5f491443" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a> ()</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="a00315.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a> (<a class="el" href="a00311.html">task</a> &<a class="el" href="a00311.html">task</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="a00315.html#533e4fc8355ee321206a0609c42d909d">acquire</a> (<a class="el" href="a00314.html">queuing_mutex</a> &m)</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="a00311.html">task</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#5fe85df5ed524418389d34051750347d">pop_front</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="a00315.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a> (<a class="el" href="a00314.html">queuing_mutex</a> &m)</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="a00315.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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="81d0122aee4ddae419a743ee50d7038e"></a><!-- doxytag: member="tbb::task_list::interface5::internal::task_base" ref="81d0122aee4ddae419a743ee50d7038e" args="" -->
-class </td><td class="memItemRight" valign="bottom"><b>interface5::internal::task_base</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="a00315.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>
-A list of children. 
+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>
-Used for method task::spawn_children 
+Construct lock that has not acquired a mutex. 
 <p>
+Equivalent to zero-initialization of *this. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00567.html">task.h</a></ul>
+<li><a class="el" href="a00603.html">queuing_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00316.html b/doc/html/a00316.html
index cbc055e..0c5953b 100644
--- a/doc/html/a00316.html
+++ b/doc/html/a00316.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::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,145 +21,54 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00316.html">task_scheduler_init</a></div>
-<h1>tbb::task_scheduler_init Class Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00316.html">queuing_rw_mutex</a></div>
+<h1>tbb::queuing_rw_mutex Class Reference<br>
 <small>
-[<a class="el" href="a00400.html">Task Scheduling</a>]</small>
-</h1><!-- doxytag: class="tbb::task_scheduler_init" -->Class delimiting the scope of task scheduler activity.  
+[<a class="el" href="a00429.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::queuing_rw_mutex" -->Queuing reader-writer mutex with local-only spinning.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00584.html">task_scheduler_init.h</a>></code>
+<code>#include <<a class="el" href="a00604.html">queuing_rw_mutex.h</a>></code>
 <p>
-<a href="a00128.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00112.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="a00316.html#d476053cc712e572554823492a5229ce">initialize</a> (int number_of_threads=<a class="el" href="a00316.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</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="a00316.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_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="a00316.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 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="a00316.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a> ()</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="a00316.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</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 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="a00316.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a> (int number_of_threads=<a class="el" href="a00316.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for default constructor followed by call to initialize(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="a00316.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy scheduler for this thread if thread has no other live task_scheduler_inits. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00316.html#12752282977029f23416642bc03e8b74">is_active</a> () const </td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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">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="a00316.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</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">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="a00316.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1</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">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="a00316.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="a00317.html">scoped_lock</a></td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Argument to <a class="el" href="a00316.html#d476053cc712e572554823492a5229ce">initialize()</a> or constructor that causes initialization to be deferred. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00317.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Class delimiting the scope of task scheduler activity. 
-<p>
-A thread can construct a <a class="el" href="a00316.html">task_scheduler_init</a> object and keep it alive while it uses TBB's tasking subsystem (including parallel algorithms).<p>
-This class allows to customize properties of the TBB task pool to some extent. For example it can limit concurrency level of parallel work initiated by the given thread. It also can be used to specify stack size of the TBB worker threads, though this setting is not effective if the thread pool has already been created.<p>
-If a parallel construct is used without <a class="el" href="a00316.html">task_scheduler_init</a> object previously created, the scheduler will be initialized automatically with default settings, and will persist until this thread exits. Default concurrency level is defined as described in <a class="el" href="a00316.html#d476053cc712e572554823492a5229ce">task_scheduler_init::initialize()</a>. 
-<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.<p>
-Before TBB 3.0 U4 this method returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.<p>
-NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool. 
-</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="a00316.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a></code>          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
+Queuing reader-writer mutex with local-only spinning. 
 <p>
-Ensure that scheduler exists for this thread. 
+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>
-A value of -1 lets TBB decide on the number of threads, which is usually maximal hardware concurrency for this process, that is the number of logical CPUs on the machine (possibly limited by the processor affinity mask of this process (Windows) or of this thread (Linux, FreeBSD). It is preferable option for production code because it helps to avoid nasty surprises when several TBB based components run side-by-side or in a nested fashion inside the same process.<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="a00584.html">task_scheduler_init.h</a></ul>
+<li><a class="el" href="a00604.html">queuing_rw_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00317.html b/doc/html/a00317.html
index afd87d6..53e1ba5 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>tbb::tbb_allocator< T > Class Template 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,107 +21,100 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00317.html">tbb_allocator</a></div>
-<h1>tbb::tbb_allocator< T > Class Template Reference<br>
-<small>
-[<a class="el" href="a00397.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="a00414.html">tbb</a>::<a class="el" href="a00316.html">queuing_rw_mutex</a>::<a class="el" href="a00317.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="a00588.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00604.html">queuing_rw_mutex.h</a>></code>
 <p>
-<a href="a00130.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00113.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="a00317.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="a00317.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="a00317.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"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00317.html#c62e365be7bcbba091c9ea7454a4d22c">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 lock that has not acquired a mutex.  <a href="#c62e365be7bcbba091c9ea7454a4d22c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><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)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00317.html#fbb8798792d3aebb136c46fc63d2529e">scoped_lock</a> (<a class="el" href="a00316.html">queuing_rw_mutex</a> &m, bool write=true)</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="a00317.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a> (size_type n, const void *=0)</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="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="a00317.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</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="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="a00317.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a> (pointer p, size_type)</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="a00317.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a> (<a class="el" href="a00316.html">queuing_rw_mutex</a> &m, bool write=true)</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="a00317.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a> () const   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"><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="a00317.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a> (<a class="el" href="a00316.html">queuing_rw_mutex</a> &m, bool write=true)</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="a00317.html#ab228ab9e324ed041c2226e1d717df5f">construct</a> (pointer p, const value_type &value)</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="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="a00317.html#67ae221109ddc69510ab593874e435d4">release</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="a00317.html#ef133522bf55f05a605bee0763208281">destroy</a> (pointer 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">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00317.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a> ()</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="a00317.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00317.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">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="a00317.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>
-<h3>template<typename T><br>
- class tbb::tbb_allocator< T ></h3>
+The scoped locking pattern. 
+<p>
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks. 
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="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>
+<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">
 
-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. 
+Upgrade reader to become a writer. 
 <p>
+Returns whether the upgrade happened without releasing and re-acquiring the lock 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00588.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00604.html">queuing_rw_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00318.html b/doc/html/a00318.html
index cbb4c69..4036939 100644
--- a/doc/html/a00318.html
+++ b/doc/html/a00318.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::interface5::reader_writer_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,42 +21,198 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00318.html">tbb_allocator< void ></a></div>
-<h1>tbb::tbb_allocator< void > Class Template Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00318.html">reader_writer_lock</a></div>
+<h1>tbb::interface5::reader_writer_lock Class Reference<br>
 <small>
-[<a class="el" href="a00397.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="a00429.html">Synchronization</a>]</small>
+</h1><!-- doxytag: class="tbb::interface5::reader_writer_lock" -->Writer-preference reader-writer lock with local-only spinning on readers.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00588.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00605.html">reader_writer_lock.h</a>></code>
 <p>
-<a href="a00132.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00114.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 class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6f921f0d7c1812ceb5674418c8b6ccaf005142e2b9af377a8d33c6604d858862"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::waiting_nonblocking" ref="6f921f0d7c1812ceb5674418c8b6ccaf005142e2b9af377a8d33c6604d858862" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>waiting_nonblocking</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="6f921f0d7c1812ceb5674418c8b6ccaf18bcc9aae8f056c34fb61bb7fc39b432"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::waiting" ref="6f921f0d7c1812ceb5674418c8b6ccaf18bcc9aae8f056c34fb61bb7fc39b432" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>waiting</b></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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6f921f0d7c1812ceb5674418c8b6ccaf423c082d5cdc9bb12d0eeadcae56adb5"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::active" ref="6f921f0d7c1812ceb5674418c8b6ccaf423c082d5cdc9bb12d0eeadcae56adb5" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>active</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6f921f0d7c1812ceb5674418c8b6ccafa9a5b17bdfb0a6d59b3cd58fecbd9610"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::invalid" ref="6f921f0d7c1812ceb5674418c8b6ccafa9a5b17bdfb0a6d59b3cd58fecbd9610" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>invalid</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#6f921f0d7c1812ceb5674418c8b6ccaf">status_t</a> { <b>waiting_nonblocking</b>, 
+<b>waiting</b>, 
+<b>active</b>, 
+<b>invalid</b>
+ }</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Status type for nodes associated with lock instances.  <a href="a00318.html#6f921f0d7c1812ceb5674418c8b6ccaf">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="c1431c4293e777efd9aab9a95c2a46e1"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::reader_writer_lock" ref="c1431c4293e777efd9aab9a95c2a46e1" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#c1431c4293e777efd9aab9a95c2a46e1">reader_writer_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="a00318.html">reader_writer_lock</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5135f64f7b7339017f33d956445edbee"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::~reader_writer_lock" ref="5135f64f7b7339017f33d956445edbee" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#5135f64f7b7339017f33d956445edbee">~reader_writer_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructs a <a class="el" href="a00318.html">reader_writer_lock</a> object. <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="a00318.html#2653d1a2d560059a51219a8ceab3ade9">lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00318.html">reader_writer_lock</a> for write.  <a href="#2653d1a2d560059a51219a8ceab3ade9"></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="a00318.html#721eb173e154ab38292273e9266a9b07">try_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00318.html">reader_writer_lock</a> for write.  <a href="#721eb173e154ab38292273e9266a9b07"></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="a00318.html#d9d16a24d9f6c3dada73c6b9ff214f5b">lock_read</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquires the <a class="el" href="a00318.html">reader_writer_lock</a> for read.  <a href="#d9d16a24d9f6c3dada73c6b9ff214f5b"></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="a00318.html#595fb23952e3b89426b1f7938dea9b11">try_lock_read</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Tries to acquire the <a class="el" href="a00318.html">reader_writer_lock</a> for read.  <a href="#595fb23952e3b89426b1f7938dea9b11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5113b32689305599b2c36b5831547704"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::unlock" ref="5113b32689305599b2c36b5831547704" args="()" -->
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#5113b32689305599b2c36b5831547704">unlock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Releases the <a class="el" href="a00318.html">reader_writer_lock</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="a36f15b770a1bb0b56e33d7fa75ebd1a"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::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="680274059774b9188889d34986314f81"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read" ref="680274059774b9188889d34986314f81" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock_read</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">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html">scoped_lock</a></td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for write locks.  <a href="a00319.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00320.html">scoped_lock_read</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped lock pattern for read locks.  <a href="a00320.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>
+Writer-preference reader-writer lock with local-only spinning on readers. 
+<p>
+Loosely adapted from Mellor-Crummey and Scott pseudocode at <a href="http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp">http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp</a> 
+<p>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="6f921f0d7c1812ceb5674418c8b6ccaf"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::status_t" ref="6f921f0d7c1812ceb5674418c8b6ccaf" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00318.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock::status_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
 
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
 <p>
+Status type for nodes associated with lock instances. 
+<p>
+waiting_nonblocking: the wait state for nonblocking lock instances; for writes, these transition straight to active states; for reads, these are unused.<p>
+waiting: the start and spin state for all lock instances; these will transition to active state when appropriate. Non-blocking write locks transition from this state to waiting_nonblocking immediately.<p>
+active: the active state means that the lock instance holds the lock; it will transition to invalid state during node deletion<p>
+invalid: the end state for all nodes; this is set in the destructor so if we encounter this state, we are looking at memory that has already been freed<p>
+The state diagrams below describe the status transitions. Single arrows indicate that the thread that owns the node is responsible for the transition; double arrows indicate that any thread could make the transition.<p>
+State diagram for <a class="el" href="a00319.html">scoped_lock</a> status:<p>
+waiting ----------> waiting_nonblocking | _____________/ | V V V active -----------------> invalid<p>
+State diagram for <a class="el" href="a00320.html">scoped_lock_read</a> status:<p>
+waiting | V active ----------------->invalid 
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="2653d1a2d560059a51219a8ceab3ade9"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::lock" ref="2653d1a2d560059a51219a8ceab3ade9" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Acquires the <a class="el" href="a00318.html">reader_writer_lock</a> for write. 
+<p>
+If the lock is currently held in write mode by another context, the writer will block by spinning on a local variable. Exceptions thrown: <a class="el" href="a00290.html">improper_lock</a> The context tries to acquire a <a class="el" href="a00318.html">reader_writer_lock</a> that it already has write ownership of. 
+</div>
+</div><p>
+<a class="anchor" name="d9d16a24d9f6c3dada73c6b9ff214f5b"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::lock_read" ref="d9d16a24d9f6c3dada73c6b9ff214f5b" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock_read           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Acquires the <a class="el" href="a00318.html">reader_writer_lock</a> for read. 
+<p>
+If the lock is currently held by a writer, this reader will block and wait until the writers are done. Exceptions thrown: <a class="el" href="a00290.html">improper_lock</a> The context tries to acquire a <a class="el" href="a00318.html">reader_writer_lock</a> that it already has write ownership of. 
+</div>
+</div><p>
+<a class="anchor" name="721eb173e154ab38292273e9266a9b07"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::try_lock" ref="721eb173e154ab38292273e9266a9b07" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Tries to acquire the <a class="el" href="a00318.html">reader_writer_lock</a> for write. 
+<p>
+This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. If the lock is already held by this acquiring context, <a class="el" href="a00318.html#721eb173e154ab38292273e9266a9b07">try_lock()</a> returns false. 
+</div>
+</div><p>
+<a class="anchor" name="595fb23952e3b89426b1f7938dea9b11"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::try_lock_read" ref="595fb23952e3b89426b1f7938dea9b11" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock_read           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Tries to acquire the <a class="el" href="a00318.html">reader_writer_lock</a> for read. 
+<p>
+This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00588.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00605.html">reader_writer_lock.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00319.html b/doc/html/a00319.html
index 2146d84..c4a8de5 100644
--- a/doc/html/a00319.html
+++ b/doc/html/a00319.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::interface5::reader_writer_lock::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,145 +21,44 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00319.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="a00414.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00318.html">reader_writer_lock</a>::<a class="el" href="a00319.html">scoped_lock</a></div>
+<h1>tbb::interface5::reader_writer_lock::scoped_lock Class Reference</h1><!-- doxytag: class="tbb::interface5::reader_writer_lock::scoped_lock" -->The scoped lock pattern for write locks.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00593.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00605.html">reader_writer_lock.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::tbb_exception:
-<p><center><img src="a00319.png" usemap="#tbb::tbb_exception_map" border="0" alt=""></center>
-<map name="tbb::tbb_exception_map">
-<area href="a00240.html" alt="tbb::captured_exception" shape="rect" coords="0,56,248,80">
-<area href="a00273.html" alt="tbb::movable_exception< ExceptionData >" shape="rect" coords="258,56,506,80">
-</map>
-<a href="a00142.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00115.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="a00319.html">tbb_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#3e3482bf264d4ca4dde046cd9c02c766">move</a> ()=0  throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cf19f20e082887c1bb0ba6b0911c3583"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock::scoped_lock" ref="cf19f20e082887c1bb0ba6b0911c3583" args="(reader_writer_lock &lock)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#cf19f20e082887c1bb0ba6b0911c3583">scoped_lock</a> (<a class="el" href="a00318.html">reader_writer_lock</a> &lock)</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="a00319.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a> ()=0  throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct with blocking attempt to acquire write lock on the passed-in lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="70246e0260493625ff956fa5926fc71f"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock::~scoped_lock" ref="70246e0260493625ff956fa5926fc71f" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00319.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="a00319.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a> ()=0</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor, releases the write lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="aea1cb0e88be9874f0f72e52063d0b90"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock::operator new" ref="aea1cb0e88be9874f0f72e52063d0b90" args="(size_t s)" -->
+void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t s)</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="a00319.html#d00f6497e552fee978a02bfcbebf46e2">name</a> () const =0  throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db804a05fcd37f7e81b94752e45039f7"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock::operator delete" ref="db804a05fcd37f7e81b94752e45039f7" args="(void *p)" -->
+void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *p)</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="a00319.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="a00319.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="a00319.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a> (void *p)</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="38eb53abbe72543f5967c63aa95b403e"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock::reader_writer_lock" ref="38eb53abbe72543f5967c63aa95b403e" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>reader_writer_lock</b></td></tr>
 
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. 
-<p>
-If an unhandled exception of the type derived from <a class="el" href="a00319.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="a00313.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="a00240.html">tbb::captured_exception</a> and template class <a class="el" href="a00273.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="a00319.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="a00240.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, and <a class="el" href="a00273.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="a00319.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">
-
-<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="a00240.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, and <a class="el" href="a00273.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="a00319.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> operation on an exception thrown out of TBB scheduler.<p>
-When overriding method <a class="el" href="a00319.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. 
+The scoped lock pattern for write locks. 
 <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. 
+Scoped locks help avoid the common problem of forgetting to release the lock. This type also serves as the node for queuing locks. 
 <p>
-Implemented in <a class="el" href="a00240.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, and <a class="el" href="a00273.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="a00593.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00605.html">reader_writer_lock.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00320.html b/doc/html/a00320.html
index a5f307b..6692689 100644
--- a/doc/html/a00320.html
+++ b/doc/html/a00320.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::interface5::reader_writer_lock::scoped_lock_read 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,42 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>internal</b>::<a class="el" href="a00320.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="a00414.html">tbb</a>::<b>interface5</b>::<a class="el" href="a00318.html">reader_writer_lock</a>::<a class="el" href="a00320.html">scoped_lock_read</a></div>
+<h1>tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference</h1><!-- doxytag: class="tbb::interface5::reader_writer_lock::scoped_lock_read" -->The scoped lock pattern for read locks.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00593.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00605.html">reader_writer_lock.h</a>></code>
 <p>
-<a href="a00145.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00116.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="a00320.html#921875bbacd2c8a5f324c7da7a415262">destroy</a> ()  throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="87ab0dc8f7216e6ba0f7acd6aec33064"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read::scoped_lock_read" ref="87ab0dc8f7216e6ba0f7acd6aec33064" args="(reader_writer_lock &lock)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00320.html#87ab0dc8f7216e6ba0f7acd6aec33064">scoped_lock_read</a> (<a class="el" href="a00318.html">reader_writer_lock</a> &lock)</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="a00320.html#292832fd5c523e3d8081a22247840a1d">throw_self</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct with blocking attempt to acquire read lock on the passed-in lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bd21c5f3d555d64d1de8658e15bf4966"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read::~scoped_lock_read" ref="bd21c5f3d555d64d1de8658e15bf4966" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00320.html#bd21c5f3d555d64d1de8658e15bf4966">~scoped_lock_read</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="a00320.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor, releases the read lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f09e1817dddf97cc2182a573945eef91"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read::operator new" ref="f09e1817dddf97cc2182a573945eef91" args="(size_t s)" -->
+void * </td><td class="memItemRight" valign="bottom"><b>operator new</b> (size_t s)</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="a00320.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const <a class="el" href="a00319.html">tbb_exception</a> &tag)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4f9e148ec33895c0d2669ff6820cf164"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read::operator delete" ref="4f9e148ec33895c0d2669ff6820cf164" args="(void *p)" -->
+void </td><td class="memItemRight" valign="bottom"><b>operator delete</b> (void *p)</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="a00320.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00320.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a> (<a class="el" href="a00240.html">captured_exception</a> &src)</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="38eb53abbe72543f5967c63aa95b403e"></a><!-- doxytag: member="tbb::interface5::reader_writer_lock::scoped_lock_read::reader_writer_lock" ref="38eb53abbe72543f5967c63aa95b403e" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>reader_writer_lock</b></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. 
+The scoped lock pattern for read locks. 
 <p>
-This class can be used only when the appropriate runtime support (mandated by C++0x) is present 
-<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="a00593.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00605.html">reader_writer_lock.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00321.html b/doc/html/a00321.html
index a8beaa8..052c3af 100644
--- a/doc/html/a00321.html
+++ b/doc/html/a00321.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< Key > Struct Template Reference</title>
+<title>tbb::flow::interface6::receiver< 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,33 +21,63 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00321.html">tbb_hash_compare</a></div>
-<h1>tbb::tbb_hash_compare< Key > Struct Template Reference</h1><!-- doxytag: class="tbb::tbb_hash_compare" -->hash_compare that is default argument for concurrent_hash_map  
+<a class="el" href="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00321.html">receiver</a></div>
+<h1>tbb::flow::interface6::receiver< T > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::receiver" -->Pure virtual template class that defines a receiver of messages of type T.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00418.html">concurrent_hash_map.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.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::flow::interface6::receiver< T >:
+<p><center><img src="a00321.png" usemap="#tbb::flow::interface6::receiver< T >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::receiver< T >_map">
+<area href="a00262.html" alt="tbb::flow::interface6::broadcast_node< T >" shape="rect" coords="0,56,352,80">
+<area href="a00263.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="362,56,714,80">
+<area href="a00279.html" alt="tbb::flow::interface6::continue_receiver" shape="rect" coords="724,56,1076,80">
+<area href="a00292.html" alt="tbb::flow::interface6::limiter_node< T >" shape="rect" coords="1086,56,1438,80">
+<area href="a00312.html" alt="tbb::flow::interface6::priority_queue_node< T, Compare, A >" shape="rect" coords="181,112,533,136">
+<area href="a00313.html" alt="tbb::flow::interface6::queue_node< T, A >" shape="rect" coords="543,112,895,136">
+<area href="a00328.html" alt="tbb::flow::interface6::sequencer_node< T, A >" shape="rect" coords="543,168,895,192">
+</map>
+<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>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c35d106ad65aa6ca5ba9008c1c86f80d"></a><!-- doxytag: member="tbb::tbb_hash_compare::hash" ref="c35d106ad65aa6ca5ba9008c1c86f80d" args="(const Key &a)" -->
-static size_t </td><td class="memItemRight" valign="bottom"><b>hash</b> (const Key &a)</td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d0524c99313dedea1e04464bbf2f7ef"></a><!-- doxytag: member="tbb::flow::interface6::receiver::input_type" ref="0d0524c99313dedea1e04464bbf2f7ef" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html#0d0524c99313dedea1e04464bbf2f7ef">input_type</a></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b4d302049aabea046e392ddfad8b3f06"></a><!-- doxytag: member="tbb::tbb_hash_compare::equal" ref="b4d302049aabea046e392ddfad8b3f06" args="(const Key &a, const Key &b)" -->
-static bool </td><td class="memItemRight" valign="bottom"><b>equal</b> (const Key &a, const Key &b)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7fa8cff811e7c1589b805a4bb4c7a74f"></a><!-- doxytag: member="tbb::flow::interface6::receiver::predecessor_type" ref="7fa8cff811e7c1589b805a4bb4c7a74f" args="" -->
+typedef <a class="el" href="a00327.html">sender</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html#7fa8cff811e7c1589b805a4bb4c7a74f">predecessor_type</a></td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <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="b00699b235435f7b65b663d5063624a1"></a><!-- doxytag: member="tbb::flow::interface6::receiver::~receiver" ref="b00699b235435f7b65b663d5063624a1" args="()" -->
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html#b00699b235435f7b65b663d5063624a1">~receiver</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="c6d5d0cb8ebe5771be91933609fe31b8"></a><!-- doxytag: member="tbb::flow::interface6::receiver::try_put" ref="c6d5d0cb8ebe5771be91933609fe31b8" args="(const T &t)=0" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html#c6d5d0cb8ebe5771be91933609fe31b8">try_put</a> (const T &t)=0</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Put an item to the receiver. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="30e3316466efe3a713c23062b6e806f3"></a><!-- doxytag: member="tbb::flow::interface6::receiver::register_predecessor" ref="30e3316466efe3a713c23062b6e806f3" args="(predecessor_type &)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a> (<a class="el" href="a00327.html">predecessor_type</a> &)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a predecessor to the node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3bc76547b51d3c9b633e3987d22dce95"></a><!-- doxytag: member="tbb::flow::interface6::receiver::remove_predecessor" ref="3bc76547b51d3c9b633e3987d22dce95" args="(predecessor_type &)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a> (<a class="el" href="a00327.html">predecessor_type</a> &)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Remove a predecessor from the node. <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Key><br>
- struct tbb::tbb_hash_compare< Key ></h3>
+<h3>template<typename T><br>
+ class tbb::flow::interface6::receiver< T ></h3>
 
-hash_compare that is default argument for concurrent_hash_map 
+Pure virtual template class that defines a receiver of messages of type T. 
 <p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00418.html">concurrent_hash_map.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00295.png b/doc/html/a00321.png
similarity index 100%
rename from doc/html/a00295.png
rename to doc/html/a00321.png
diff --git a/doc/html/a00322.html b/doc/html/a00322.html
index 38ef4e0..f0829d9 100644
--- a/doc/html/a00322.html
+++ b/doc/html/a00322.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::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,100 +21,95 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00322.html">thread_bound_filter</a></div>
-<h1>tbb::thread_bound_filter Class Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00322.html">recursive_mutex</a></div>
+<h1>tbb::recursive_mutex Class Reference<br>
 <small>
-[<a class="el" href="a00395.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="a00429.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="a00543.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00606.html">recursive_mutex.h</a>></code>
 <p>
-<p>Inheritance diagram for tbb::thread_bound_filter:
-<p><center><img src="a00322.png" usemap="#tbb::thread_bound_filter_map" border="0" alt=""></center>
-<map name="tbb::thread_bound_filter_map">
-<area href="a00256.html" alt="tbb::filter" shape="rect" coords="0,0,145,24">
-</map>
-<a href="a00092.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00117.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="889fa8cc32dd707eef7c0f52dda09c0d"></a><!-- doxytag: member="tbb::recursive_mutex::native_handle_type" ref="889fa8cc32dd707eef7c0f52dda09c0d" args="" -->
+typedef LPCRITICAL_SECTION </td><td class="memItemRight" valign="bottom"><a class="el" href="a00322.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a></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="mdescLeft"> </td><td class="mdescRight">Return native_handle. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="26a40fae42bf6cd9f3f77ee7482d6164"></a><!-- doxytag: member="tbb::recursive_mutex::native_handle_type" ref="26a40fae42bf6cd9f3f77ee7482d6164" args="" -->
+typedef pthread_mutex_t * </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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 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="a00322.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a> ()</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>
- }</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired <a class="el" href="a00322.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="a00322.html#4c342c69d47f4bb0b393535dee4015d6">lock</a> ()</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="a00322.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</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="a00322.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="a00322.html#f0a96e26b7f074588dc31e32524856ae">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="6baa9ce4b394c39622456fd8a68f8bd8"></a><!-- doxytag: member="tbb::recursive_mutex::native_handle" ref="6baa9ce4b394c39622456fd8a68f8bd8" args="()" -->
+<a class="el" href="a00322.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a> </td><td class="memItemRight" valign="bottom"><b>native_handle</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="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="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="a00322.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</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 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> (mode 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="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="a00323.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00323.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-A stage in a pipeline served by a user thread. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="5e726bdc7fbd924c0b07bd558b1d4d5d"></a><!-- doxytag: member="tbb::thread_bound_filter::process_item" ref="5e726bdc7fbd924c0b07bd558b1d4d5d" 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>(</td>
-          <td class="paramname">          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
+Mutex that allows recursive mutex acquisition. 
 <p>
-Wait until a data item becomes available, and invoke operator() on that item. 
+Mutex that allows recursive mutex acquisition. 
 <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. 
-</div>
-</div><p>
-<a class="anchor" name="c4f90f2c771bce748beb9be734fa286c"></a><!-- doxytag: member="tbb::thread_bound_filter::try_process_item" ref="c4f90f2c771bce748beb9be734fa286c" args="()" -->
+<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">result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::try_process_item           </td>
+          <td class="memname">bool tbb::recursive_mutex::try_lock           </td>
           <td>(</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>
-If a data item is available, invoke operator() on that item. 
+Try acquiring lock (non-blocking). 
 <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. 
+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="a00543.html">pipeline.h</a></ul>
+<li><a class="el" href="a00606.html">recursive_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00323.html b/doc/html/a00323.html
index 30b831a..6a62752 100644
--- a/doc/html/a00323.html
+++ b/doc/html/a00323.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::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,45 +21,54 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00323.html">tick_count</a></div>
-<h1>tbb::tick_count Class Reference<br>
-<small>
-[<a class="el" href="a00399.html">Timing</a>]</small>
-</h1><!-- doxytag: class="tbb::tick_count" -->Absolute timestamp.  
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00322.html">recursive_mutex</a>::<a class="el" href="a00323.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="a00618.html">tick_count.h</a>></code>
+<code>#include <<a class="el" href="a00606.html">recursive_mutex.h</a>></code>
 <p>
-<a href="a00168.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00118.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="a00323.html#34593326ae4191e02a13c7cbdab9de4c">tick_count</a> ()</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="a00323.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</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="a00323.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00323.html#fb7f78ca61cf28398645ace66e284473">now</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00322.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="a00323.html#dec17713c4c1321ac8fec66816d0c602">scoped_lock</a> (<a class="el" href="a00322.html">recursive_mutex</a> &<a class="el" href="a00301.html">mutex</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="a00324.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00323.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00323.html">tick_count</a> &t1, const <a class="el" href="a00323.html">tick_count</a> &t0)</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="a00323.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="a00323.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a> (<a class="el" href="a00322.html">recursive_mutex</a> &<a class="el" href="a00301.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="a00323.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a> (<a class="el" href="a00322.html">recursive_mutex</a> &<a class="el" href="a00301.html">mutex</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="a00324.html">interval_t</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00322.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="a00323.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>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Relative time interval.  <a href="a00324.html#_details">More...</a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Absolute timestamp. 
+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>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00618.html">tick_count.h</a></ul>
+<li><a class="el" href="a00606.html">recursive_mutex.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00324.html b/doc/html/a00324.html
index 7b213ca..46f100a 100644
--- a/doc/html/a00324.html
+++ b/doc/html/a00324.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::interface6::runtime_loader Class 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,302 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00323.html">tick_count</a>::<a class="el" href="a00324.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="a00414.html">tbb</a>::<b>interface6</b>::<a class="el" href="a00324.html">runtime_loader</a></div>
+<h1>tbb::interface6::runtime_loader Class Reference</h1><!-- doxytag: class="tbb::interface6::runtime_loader" -->Load TBB at runtime.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00618.html">tick_count.h</a>></code>
+<code>#include <<a class="el" href="a00607.html">runtime_loader.h</a>></code>
 <p>
-<a href="a00169.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00119.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>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="a00324.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a> ()</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="a00324.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">em_status</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Save status of operation and continue.  <a href="#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">em_throw</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Throw an exception of tbb::runtime_loader::error_code type.  <a href="#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Print message to <code>stderr</code> and call <code>abort()</code>.  <a href="#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">ec_ok</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">No errors.  <a href="#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">ec_bad_call</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="a00324.html#1a21a428e00cced2e6a49e0f5f2258bf">interval_t</a> (double sec)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Invalid function call (e. g. <a class="el" href="a00324.html#5f3f6f1683386705a6931acae45f0862">load()</a> called when TBB is already loaded).  <a href="#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">ec_bad_arg</a></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="a00324.html#d5d8429c0bc59cf6131b2abc7929fa59">seconds</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Invalid argument passed.  <a href="#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">ec_bad_lib</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="a00324.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#cd9814947902e26463a69a111530f81b">operator+=</a> (const <a class="el" href="a00324.html">interval_t</a> &i)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Invalid library found (e. g. <code>TBB_runtime_version</code> symbol not found).  <a href="#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">ec_bad_ver</a></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="a00324.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a> (const <a class="el" href="a00324.html">interval_t</a> &i)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">TBB found but version is not suitable.  <a href="#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">ec_no_lib</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">No suitable TBB library found.  <a href="#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> { <a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">em_status</a>, 
+<a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">em_throw</a>, 
+<a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a>
+ }</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Error mode constants.  <a href="a00324.html#bb0130fe0f596399707e61431231ebcb">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="a00324.html#6831be91cdc64e57e565ce0dde018789">error_code</a> { <br>
+  <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">ec_ok</a>, 
+<a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">ec_bad_call</a>, 
+<a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">ec_bad_arg</a>, 
+<a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">ec_bad_lib</a>, 
+<br>
+  <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">ec_bad_ver</a>, 
+<a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">ec_no_lib</a>
+<br>
+ }</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Error codes.  <a href="a00324.html#6831be91cdc64e57e565ce0dde018789">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="7caa4ff6e44c2348e67f601cc5d97c34"></a><!-- doxytag: member="tbb::interface6::runtime_loader::runtime_loader" ref="7caa4ff6e44c2348e67f601cc5d97c34" args="(error_mode mode=em_abort)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#7caa4ff6e44c2348e67f601cc5d97c34">runtime_loader</a> (<a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> mode=em_abort)</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="a00324.html#cc3a7ad7000317951ce61f706163efe8">tbb::tick_count</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize object but do not load TBB. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#7ae5330beb48fce0c702c32a5df0094a">runtime_loader</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, <a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> mode=em_abort)</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="a00324.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00323.html">tick_count</a> &t1, const <a class="el" href="a00323.html">tick_count</a> &t0)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize object and load TBB.  <a href="#7ae5330beb48fce0c702c32a5df0094a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c25fec923a751a3e03f5cbe969f1f0c5"></a><!-- doxytag: member="tbb::interface6::runtime_loader::~runtime_loader" ref="c25fec923a751a3e03f5cbe969f1f0c5" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#c25fec923a751a3e03f5cbe969f1f0c5">~runtime_loader</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="a00324.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#5871ead1ca230efbe52a5008470e6428">operator+</a> (const <a class="el" href="a00324.html">interval_t</a> &i, const <a class="el" href="a00324.html">interval_t</a> &j)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy object. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789">error_code</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#5f3f6f1683386705a6931acae45f0862">load</a> (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)</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="a00324.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#fa509691e1d689830931e36edd274f76">operator-</a> (const <a class="el" href="a00324.html">interval_t</a> &i, const <a class="el" href="a00324.html">interval_t</a> &j)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Load TBB.  <a href="#5f3f6f1683386705a6931acae45f0862"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789">error_code</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#78d938ed2e54d38dd38d6609e6c60389">status</a> ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Subtract two intervals. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Report status.  <a href="#78d938ed2e54d38dd38d6609e6c60389"></a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-Relative time interval. 
+Load TBB at runtime. 
+<p>
+<b>Usage:</b> <p>
+In source code:<p>
+<div class="fragment"><pre class="fragment"><span class="preprocessor">#include "tbb/runtime_loader.h"</span>
+
+<span class="keywordtype">char</span> <span class="keyword">const</span> * path[] = { <span class="stringliteral">"<install dir>/lib/ia32"</span>, NULL };
+tbb::runtime_loader loader( path );
+
+<span class="comment">// Now use TBB.</span>
+</pre></div><p>
+Link with <code>tbbproxy.lib</code> (or <code>libtbbproxy.a</code>) instead of <code>tbb.lib</code> (<code>libtbb.dylib</code>, <code>libtbb.so</code>).<p>
+TBB library will be loaded at runtime from <code></code> <install dir>="">/lib/ia32 directory.<p>
+<b>Attention:</b> <p>
+All <code><a class="el" href="a00324.html">runtime_loader</a></code> objects (in the same module, i.e. exe or dll) share some global state. The most noticeable piece of global state is loaded TBB library. There are some implications:<p>
+<ul>
+<li>Only one TBB library can be loaded per module.</li></ul>
+<p>
+<ul>
+<li>If one object has already loaded TBB library, another object will not load TBB. If the loaded TBB library is suitable for the second object, both will use TBB cooperatively, otherwise the second object will report an error.</li></ul>
+<p>
+<ul>
+<li><code><a class="el" href="a00324.html">runtime_loader</a></code> objects will not work (correctly) in parallel due to absence of syncronization. </li></ul>
+
+<p>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="6831be91cdc64e57e565ce0dde018789"></a><!-- doxytag: member="tbb::interface6::runtime_loader::error_code" ref="6831be91cdc64e57e565ce0dde018789" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789">tbb::interface6::runtime_loader::error_code</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Error codes. 
+<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="6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27"></a><!-- doxytag: member="ec_ok" ref="6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27" args="" -->ec_ok</em> </td><td>
+No errors. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1"></a><!-- doxytag: member="ec_bad_call" ref="6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1" args="" -->ec_bad_call</em> </td><td>
+Invalid function call (e. g. <a class="el" href="a00324.html#5f3f6f1683386705a6931acae45f0862">load()</a> called when TBB is already loaded). </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703"></a><!-- doxytag: member="ec_bad_arg" ref="6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703" args="" -->ec_bad_arg</em> </td><td>
+Invalid argument passed. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6"></a><!-- doxytag: member="ec_bad_lib" ref="6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6" args="" -->ec_bad_lib</em> </td><td>
+Invalid library found (e. g. <code>TBB_runtime_version</code> symbol not found). </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6"></a><!-- doxytag: member="ec_bad_ver" ref="6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6" args="" -->ec_bad_ver</em> </td><td>
+TBB found but version is not suitable. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb"></a><!-- doxytag: member="ec_no_lib" ref="6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb" args="" -->ec_no_lib</em> </td><td>
+No suitable TBB library found. </td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="bb0130fe0f596399707e61431231ebcb"></a><!-- doxytag: member="tbb::interface6::runtime_loader::error_mode" ref="bb0130fe0f596399707e61431231ebcb" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb">tbb::interface6::runtime_loader::error_mode</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Error mode constants. 
+<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="bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38"></a><!-- doxytag: member="em_status" ref="bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38" args="" -->em_status</em> </td><td>
+Save status of operation and continue. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b"></a><!-- doxytag: member="em_throw" ref="bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b" args="" -->em_throw</em> </td><td>
+Throw an exception of tbb::runtime_loader::error_code type. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94"></a><!-- doxytag: member="em_abort" ref="bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94" args="" -->em_abort</em> </td><td>
+Print message to <code>stderr</code> and call <code>abort()</code>. </td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="7ae5330beb48fce0c702c32a5df0094a"></a><!-- doxytag: member="tbb::interface6::runtime_loader::runtime_loader" ref="7ae5330beb48fce0c702c32a5df0094a" args="(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, error_mode mode=em_abort)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">tbb::interface6::runtime_loader::runtime_loader           </td>
+          <td>(</td>
+          <td class="paramtype">char const * </td>
+          <td class="paramname"> <em>path</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>max_ver</em> = <code>INT_MAX</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> </td>
+          <td class="paramname"> <em>mode</em> = <code>em_abort</code></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Initialize object and load TBB. 
+<p>
+See <a class="el" href="a00324.html#5f3f6f1683386705a6931acae45f0862">load()</a> for details.<p>
+If error mode is <code>em_status</code>, call <a class="el" href="a00324.html#78d938ed2e54d38dd38d6609e6c60389">status()</a> to check whether TBB was loaded or not. <dl compact><dt><b>Parameters: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em>path</em> </td><td>
+List of directories to search TBB in. </td></tr>
+<tr><td valign="top"><em>min_ver</em> </td><td>
+Minimal suitable version of TBB. </td></tr>
+<tr><td valign="top"><em>max_ver</em> </td><td>
+Maximal suitable version of TBB. </td></tr>
+<tr><td valign="top"><em>mode</em> </td><td>
+Error mode for this object. </td></tr>
+</table>
+</dl>
+</div>
+</div><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="5f3f6f1683386705a6931acae45f0862"></a><!-- doxytag: member="tbb::interface6::runtime_loader::load" ref="5f3f6f1683386705a6931acae45f0862" args="(char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789">error_code</a> tbb::interface6::runtime_loader::load           </td>
+          <td>(</td>
+          <td class="paramtype">char const * </td>
+          <td class="paramname"> <em>path</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>min_ver</em> = <code>TBB_INTERFACE_VERSION</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"> <em>max_ver</em> = <code>INT_MAX</code></td><td> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Load TBB. 
+<p>
+The method searches the directories specified in <code>path</code>[] array for the TBB library. When the library is found, it is loaded and its version is checked. If the version is not suitable, the library is unloaded, and the search continues.<p>
+<b>Note:</b> <p>
+For security reasons, avoid using relative directory names. For example, never load TBB from current (<code>"."</code>), parent (<code>".."</code>) or any other relative directory (like <code>"lib"</code> ). Use only absolute directory names (e. g. "/usr/local/lib").<p>
+For the same security reasons, avoid using system default directories (<code>""</code>) on Windows. (See <a href="http://www.microsoft.com/technet/security/advisory/2269637.mspx">http://www.microsoft.com/technet/security/advisory/2269637.mspx</a> for details.)<p>
+Neglecting these rules may cause your program to execute 3-rd party malicious code.<p>
+<b>Errors:</b> <ul>
+<li><code>ec_bad_call</code> - TBB already loaded by this object.</li><li><code>ec_bad_arg</code> - <code>min_ver</code> and/or <code>max_ver</code> negative or zero, or <code>min_ver</code> > <code>max_ver</code>.</li><li><code>ec_bad_ver</code> - TBB of unsuitable version already loaded by another object.</li><li><code>ec_no_lib</code> - No suitable library found. </li></ul>
+<dl compact><dt><b>Parameters: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em>path</em> </td><td>
+List of directories to search TBB in. </td></tr>
+<tr><td valign="top"><em>min_ver</em> </td><td>
+Minimal suitable version of TBB. </td></tr>
+<tr><td valign="top"><em>max_ver</em> </td><td>
+Maximal suitable version of TBB. </td></tr>
+</table>
+</dl>
+</div>
+</div><p>
+<a class="anchor" name="78d938ed2e54d38dd38d6609e6c60389"></a><!-- doxytag: member="tbb::interface6::runtime_loader::status" ref="78d938ed2e54d38dd38d6609e6c60389" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789">error_code</a> tbb::interface6::runtime_loader::status           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Report status. 
 <p>
+If error mode is <code>em_status</code>, the function returns status of the last operation. 
+</div>
+</div><p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00618.html">tick_count.h</a></ul>
+<li><a class="el" href="a00607.html">runtime_loader.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00325.html b/doc/html/a00325.html
index 5f12ffe..97c2c3f 100644
--- a/doc/html/a00325.html
+++ b/doc/html/a00325.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::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,32 +21,87 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<b>internal</b>::<a class="el" href="a00325.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="a00414.html">tbb</a>::<a class="el" href="a00325.html">scalable_allocator</a></div>
+<h1>tbb::scalable_allocator< T > Class Template Reference<br>
+<small>
+[<a class="el" href="a00428.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="a00594.html">tbb_machine.h</a>></code>
+<code>#include <<a class="el" href="a00608.html">scalable_allocator.h</a>></code>
 <p>
-<a href="a00164.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00121.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="14283941aefd819871be2f5e24f5cb37"></a><!-- doxytag: member="tbb::internal::work_around_alignment_bug::alignment" ref="14283941aefd819871be2f5e24f5cb37" args="" -->
-static const size_t </td><td class="memItemRight" valign="bottom"><b>alignment</b> = __TBB_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="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="a00325.html">scalable_allocator</a> &)  throw ()</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="a00325.html">scalable_allocator</a>< U > &)  throw ()</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="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="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="a00325.html#726b1586d05d44665a36e1c7b2699bfd">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="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="a00325.html#f806a238c18cbcfb531e1e0a0d2ec59d">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="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="a00325.html#880e766f1d913988c21973dbdd874fd5">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="memTemplParams" nowrap colspan="2"><a class="anchor" name="ed8bb152d79ff46a1d03b095e62f9291"></a><!-- doxytag: member="tbb::scalable_allocator::construct" ref="ed8bb152d79ff46a1d03b095e62f9291" args="(pointer p, Args &&...args)" -->
+template<typename... Args> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>construct</b> (pointer p, Args &&...args)</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::scalable_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 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="a00594.html">tbb_machine.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00608.html">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00326.html b/doc/html/a00326.html
index 84281d3..bb877d6 100644
--- a/doc/html/a00326.html
+++ b/doc/html/a00326.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::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,70 +21,42 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00326.html">zero_allocator</a></div>
-<h1>tbb::zero_allocator< T, Allocator > Class Template Reference<br>
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00326.html">scalable_allocator< void ></a></div>
+<h1>tbb::scalable_allocator< void > Class Template Reference<br>
 <small>
-[<a class="el" href="a00397.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="a00428.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="a00588.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00608.html">scalable_allocator.h</a>></code>
 <p>
-<a href="a00134.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00123.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public 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="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="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="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="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="a00326.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="a00326.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="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>
 
 </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::scalable_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="a00588.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00608.html">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00327.html b/doc/html/a00327.html
index 598c711..f5078f7 100644
--- a/doc/html/a00327.html
+++ b/doc/html/a00327.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::flow::interface6::sender< 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,45 +21,70 @@
     <li><a href="functions.html"><span>Class Members</span></a></li>
   </ul></div>
 <div class="nav">
-<a class="el" href="a00383.html">tbb</a>::<a class="el" href="a00327.html">zero_allocator< void, Allocator ></a></div>
-<h1>tbb::zero_allocator< void, Allocator > Class Template Reference<br>
-<small>
-[<a class="el" href="a00397.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="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00327.html">sender</a></div>
+<h1>tbb::flow::interface6::sender< T > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::sender" -->Pure virtual template class that defines a sender of messages of type T.  
 <a href="#_details">More...</a>
 <p>
-<code>#include <<a class="el" href="a00588.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
 <p>
-<a href="a00136.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<p>Inheritance diagram for tbb::flow::interface6::sender< T >:
+<p><center><img src="a00327.png" usemap="#tbb::flow::interface6::sender< T >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::sender< T >_map">
+<area href="a00262.html" alt="tbb::flow::interface6::broadcast_node< T >" shape="rect" coords="0,56,352,80">
+<area href="a00263.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="362,56,714,80">
+<area href="a00292.html" alt="tbb::flow::interface6::limiter_node< T >" shape="rect" coords="724,56,1076,80">
+<area href="a00312.html" alt="tbb::flow::interface6::priority_queue_node< T, Compare, A >" shape="rect" coords="181,112,533,136">
+<area href="a00313.html" alt="tbb::flow::interface6::queue_node< T, A >" shape="rect" coords="543,112,895,136">
+<area href="a00328.html" alt="tbb::flow::interface6::sequencer_node< T, A >" shape="rect" coords="543,168,895,192">
+</map>
+<a href="a00053.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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 class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="127af99916cc085cd9dbc09c53299928"></a><!-- doxytag: member="tbb::flow::interface6::sender::output_type" ref="127af99916cc085cd9dbc09c53299928" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00327.html#127af99916cc085cd9dbc09c53299928">output_type</a></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">The output type of this sender. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d690e8a54e358968f0ee4fdf9ee73068"></a><!-- doxytag: member="tbb::flow::interface6::sender::successor_type" ref="d690e8a54e358968f0ee4fdf9ee73068" args="" -->
+typedef <a class="el" href="a00321.html">receiver</a>< T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00327.html#d690e8a54e358968f0ee4fdf9ee73068">successor_type</a></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">The successor type for this node. <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="68b8941ad77b9303cf3bcb8cf1f2d28a"></a><!-- doxytag: member="tbb::flow::interface6::sender::register_successor" ref="68b8941ad77b9303cf3bcb8cf1f2d28a" args="(successor_type &r)=0" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00327.html#68b8941ad77b9303cf3bcb8cf1f2d28a">register_successor</a> (<a class="el" href="a00321.html">successor_type</a> &r)=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">Add a new successor to this node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="82f363bfb1738bb8789e167590b10ef9"></a><!-- doxytag: member="tbb::flow::interface6::sender::remove_successor" ref="82f363bfb1738bb8789e167590b10ef9" args="(successor_type &r)=0" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00327.html#82f363bfb1738bb8789e167590b10ef9">remove_successor</a> (<a class="el" href="a00321.html">successor_type</a> &r)=0</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">Removes a successor from this node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="922fb56b0aad090b90a98b7d56b76a59"></a><!-- doxytag: member="tbb::flow::interface6::sender::try_get" ref="922fb56b0aad090b90a98b7d56b76a59" args="(T &)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00327.html#922fb56b0aad090b90a98b7d56b76a59">try_get</a> (T &)</td></tr>
 
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the sender. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="02c05b472271db1b68a48ea2618fa72f"></a><!-- doxytag: member="tbb::flow::interface6::sender::try_reserve" ref="02c05b472271db1b68a48ea2618fa72f" args="(T &)" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00327.html#02c05b472271db1b68a48ea2618fa72f">try_reserve</a> (T &)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item in the sender. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27036b06d6a91e97007e14f400529199"></a><!-- doxytag: member="tbb::flow::interface6::sender::try_release" ref="27036b06d6a91e97007e14f400529199" args="()" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00327.html#27036b06d6a91e97007e14f400529199">try_release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Releases the reserved item. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7b840f50da117a0d6848707c1857ea2e"></a><!-- doxytag: member="tbb::flow::interface6::sender::try_consume" ref="7b840f50da117a0d6848707c1857ea2e" args="()" -->
+virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00327.html#7b840f50da117a0d6848707c1857ea2e">try_consume</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Consumes the reserved item. <br></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>
+<h3>template<typename T><br>
+ class tbb::flow::interface6::sender< T ></h3>
 
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
+Pure virtual template class that defines a sender of messages of type T. 
 <p>
 <hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00588.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00301.png b/doc/html/a00327.png
similarity index 100%
rename from doc/html/a00301.png
rename to doc/html/a00327.png
diff --git a/doc/html/a00328.html b/doc/html/a00328.html
new file mode 100644
index 0000000..b48bfa4
--- /dev/null
+++ b/doc/html/a00328.html
@@ -0,0 +1,112 @@
+<!DOCTYPE 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::flow::interface6::sequencer_node< 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>
+<!-- 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="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00328.html">sequencer_node</a></div>
+<h1>tbb::flow::interface6::sequencer_node< T, A > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::sequencer_node" --><!-- doxytag: inherits="tbb::flow::interface6::queue_node" -->Forwards messages in sequence order.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::flow::interface6::sequencer_node< T, A >:
+<p><center><img src="a00328.png" usemap="#tbb::flow::interface6::sequencer_node< T, A >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::sequencer_node< T, A >_map">
+<area href="a00313.html" alt="tbb::flow::interface6::queue_node< T, A >" shape="rect" coords="280,112,550,136">
+<area href="a00263.html" alt="tbb::flow::interface6::buffer_node< T, A >" shape="rect" coords="280,56,550,80">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,270,24">
+<area href="a00321.html" alt="tbb::flow::interface6::receiver< T >" shape="rect" coords="280,0,550,24">
+<area href="a00327.html" alt="tbb::flow::interface6::sender< T >" shape="rect" coords="560,0,830,24">
+</map>
+<a href="a00075.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="af629f26832ff4e476e240637a78bc0c"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::input_type" ref="af629f26832ff4e476e240637a78bc0c" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00328.html#af629f26832ff4e476e240637a78bc0c">input_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The input type of this receiver. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ca026eaef70e35791c407323199031a7"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::output_type" ref="ca026eaef70e35791c407323199031a7" args="" -->
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00328.html#ca026eaef70e35791c407323199031a7">output_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The output type of this sender. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8127e36811832563fe1e9bc3ba391f79"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::predecessor_type" ref="8127e36811832563fe1e9bc3ba391f79" args="" -->
+typedef <a class="el" href="a00327.html">sender</a>< <a class="el" href="a00328.html#af629f26832ff4e476e240637a78bc0c">input_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00328.html#8127e36811832563fe1e9bc3ba391f79">predecessor_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The predecessor type for this node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="795f3ee75f133b9d3b159172fc4a197f"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::successor_type" ref="795f3ee75f133b9d3b159172fc4a197f" args="" -->
+typedef <a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00328.html#ca026eaef70e35791c407323199031a7">output_type</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00328.html#795f3ee75f133b9d3b159172fc4a197f">successor_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The successor type for this node. <br></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="7e71cbdf78f989091bc162b89bee7e66"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::sequencer_node" ref="7e71cbdf78f989091bc162b89bee7e66" args="(graph &g, const Sequencer &s)" -->
+template<typename Sequencer> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00328.html#7e71cbdf78f989091bc162b89bee7e66">sequencer_node</a> (<a class="el" href="a00288.html">graph</a> &g, const Sequencer &s)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b38e7a070552960384bcc1d91af13a5c"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::sequencer_node" ref="b38e7a070552960384bcc1d91af13a5c" args="(const sequencer_node &src)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00328.html#b38e7a070552960384bcc1d91af13a5c">sequencer_node</a> (const <a class="el" href="a00328.html">sequencer_node</a> &src)</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="93d3d8f6a72b3e1387047282116ed6ee"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::~sequencer_node" ref="93d3d8f6a72b3e1387047282116ed6ee" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00328.html#93d3d8f6a72b3e1387047282116ed6ee">~sequencer_node</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <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="6a0608d8fbfa05edde1e1da559f9eb40"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::size_type" ref="6a0608d8fbfa05edde1e1da559f9eb40" args="" -->
+typedef <a class="el" href="a00263.html">buffer_node</a>< T, A <br>
+>::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="d50b89267bddf58afeb3e784aba0f0d6"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::sequencer_operation" ref="d50b89267bddf58afeb3e784aba0f0d6" args="" -->
+typedef <a class="el" href="a00263.html">buffer_node</a>< T, A <br>
+>::buffer_operation </td><td class="memItemRight" valign="bottom"><b>sequencer_operation</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1372a379c01bc269b36bf3128560879e1cdf6bcff9743d2be54bc70c4300cd28"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::WAIT" ref="1372a379c01bc269b36bf3128560879e1cdf6bcff9743d2be54bc70c4300cd28" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>WAIT</b> = 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1372a379c01bc269b36bf3128560879e544c3030ddd97ba489e7d2bf1c612bc8"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::SUCCEEDED" ref="1372a379c01bc269b36bf3128560879e544c3030ddd97ba489e7d2bf1c612bc8" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>SUCCEEDED</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1372a379c01bc269b36bf3128560879ee298eb3257a044e4d0aca8a58f2f62b0"></a><!-- doxytag: member="tbb::flow::interface6::sequencer_node::FAILED" ref="1372a379c01bc269b36bf3128560879ee298eb3257a044e4d0aca8a58f2f62b0" args="" -->
+ </td><td class="memItemRight" valign="bottom"><b>FAILED</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>op_stat</b> { <b>WAIT</b> = 0, 
+<b>SUCCEEDED</b>, 
+<b>FAILED</b>
+ }</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::flow::interface6::sequencer_node< T, A ></h3>
+
+Forwards messages in sequence order. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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.png b/doc/html/a00328.png
similarity index 100%
rename from doc/html/a00302.png
rename to doc/html/a00328.png
diff --git a/doc/html/a00329.html b/doc/html/a00329.html
new file mode 100644
index 0000000..701d7fd
--- /dev/null
+++ b/doc/html/a00329.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>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>
+<!-- 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="a00414.html">tbb</a>::<a class="el" href="a00329.html">simple_partitioner</a></div>
+<h1>tbb::simple_partitioner Class Reference<br>
+<small>
+[<a class="el" href="a00426.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="a00575.html">partitioner.h</a>></code>
+<p>
+<a href="a00101.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5f730f70d21df405adaebfc2018f59cd"></a><!-- doxytag: member="tbb::simple_partitioner::serial::interface6::start_for" ref="5f730f70d21df405adaebfc2018f59cd" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>serial::interface6::start_for</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a4cd0ffed4fad0d9af2c5efdaf586a8"></a><!-- doxytag: member="tbb::simple_partitioner::interface6::internal::start_for" ref="8a4cd0ffed4fad0d9af2c5efdaf586a8" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>interface6::internal::start_for</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="86f0750233dd6c83b65fb684338fd09f"></a><!-- doxytag: member="tbb::simple_partitioner::interface6::internal::start_reduce" ref="86f0750233dd6c83b65fb684338fd09f" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>interface6::internal::start_reduce</b></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 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 simple partitioner. 
+<p>
+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="a00575.html">partitioner.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00330.html b/doc/html/a00330.html
new file mode 100644
index 0000000..cea9942
--- /dev/null
+++ b/doc/html/a00330.html
@@ -0,0 +1,135 @@
+<!DOCTYPE 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::flow::interface6::source_node< Output > 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="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00330.html">source_node</a></div>
+<h1>tbb::flow::interface6::source_node< Output > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::source_node" --><!-- doxytag: inherits="tbb::flow::interface6::graph_node,tbb::flow::interface6::sender< Output >" -->An executable node that acts as a source, i.e. it has no predecessors.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::flow::interface6::source_node< Output >:
+<p><center><img src="a00330.png" usemap="#tbb::flow::interface6::source_node< Output >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::source_node< Output >_map">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,262,24">
+<area href="a00327.html" alt="tbb::flow::interface6::sender< Output >" shape="rect" coords="272,0,534,24">
+</map>
+<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 Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="407533487cc3f6032c1072cba19c609c"></a><!-- doxytag: member="tbb::flow::interface6::source_node::output_type" ref="407533487cc3f6032c1072cba19c609c" args="" -->
+typedef Output </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#407533487cc3f6032c1072cba19c609c">output_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The type of the output message, which is complete. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dd7b8fe78f0bec9d6b70cbf1018a69fe"></a><!-- doxytag: member="tbb::flow::interface6::source_node::successor_type" ref="dd7b8fe78f0bec9d6b70cbf1018a69fe" args="" -->
+typedef <a class="el" href="a00321.html">receiver</a>< Output > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#dd7b8fe78f0bec9d6b70cbf1018a69fe">successor_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The type of successors of this node. <br></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="503c3b395c629296bf5cccd96d6388c1"></a><!-- doxytag: member="tbb::flow::interface6::source_node::source_node" ref="503c3b395c629296bf5cccd96d6388c1" args="(graph &g, Body body, bool is_active=true)" -->
+template<typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00330.html#503c3b395c629296bf5cccd96d6388c1">source_node</a> (<a class="el" href="a00288.html">graph</a> &g, Body body, bool is_active=true)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor for a node with a successor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="adaac111fbcace95804219a5f2929304"></a><!-- doxytag: member="tbb::flow::interface6::source_node::source_node" ref="adaac111fbcace95804219a5f2929304" args="(const source_node &src)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#adaac111fbcace95804219a5f2929304">source_node</a> (const <a class="el" href="a00330.html">source_node</a> &src)</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="61700b0865fc17188b0abe26bbde65b6"></a><!-- doxytag: member="tbb::flow::interface6::source_node::~source_node" ref="61700b0865fc17188b0abe26bbde65b6" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#61700b0865fc17188b0abe26bbde65b6">~source_node</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The destructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="22960d499df9f1569a9d8a544e35afe3"></a><!-- doxytag: member="tbb::flow::interface6::source_node::register_successor" ref="22960d499df9f1569a9d8a544e35afe3" args="(receiver< output_type > &r)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#22960d499df9f1569a9d8a544e35afe3">register_successor</a> (<a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00330.html#407533487cc3f6032c1072cba19c609c">output_type</a> > &r)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a new successor to this node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="222484bf295f39df36415a29e508e5c9"></a><!-- doxytag: member="tbb::flow::interface6::source_node::remove_successor" ref="222484bf295f39df36415a29e508e5c9" args="(receiver< output_type > &r)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#222484bf295f39df36415a29e508e5c9">remove_successor</a> (<a class="el" href="a00321.html">receiver</a>< <a class="el" href="a00330.html#407533487cc3f6032c1072cba19c609c">output_type</a> > &r)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Removes a successor from this node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="41073ad4d3510ed5a8b6bda9c0f58636"></a><!-- doxytag: member="tbb::flow::interface6::source_node::try_get" ref="41073ad4d3510ed5a8b6bda9c0f58636" args="(output_type &v)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#41073ad4d3510ed5a8b6bda9c0f58636">try_get</a> (<a class="el" href="a00330.html#407533487cc3f6032c1072cba19c609c">output_type</a> &v)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Request an item from the node. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ad459713ff3c1c9ad0f4826daa141f65"></a><!-- doxytag: member="tbb::flow::interface6::source_node::try_reserve" ref="ad459713ff3c1c9ad0f4826daa141f65" args="(output_type &v)" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#ad459713ff3c1c9ad0f4826daa141f65">try_reserve</a> (<a class="el" href="a00330.html#407533487cc3f6032c1072cba19c609c">output_type</a> &v)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reserves an item. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#494678baf9096835268736b800824460">try_release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release a reserved item.  <a href="#494678baf9096835268736b800824460"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2c7fcc29e2894b29138be3c1edce9bc9"></a><!-- doxytag: member="tbb::flow::interface6::source_node::try_consume" ref="2c7fcc29e2894b29138be3c1edce9bc9" args="()" -->
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#2c7fcc29e2894b29138be3c1edce9bc9">try_consume</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Consumes a reserved item. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b647e4a93d08ccdd8d323279e4eaaa6"></a><!-- doxytag: member="tbb::flow::interface6::source_node::activate" ref="4b647e4a93d08ccdd8d323279e4eaaa6" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#4b647e4a93d08ccdd8d323279e4eaaa6">activate</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Activates a node that was created in the inactive state. <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="15fb463802e1e30f5f836535d490874c"></a><!-- doxytag: member="tbb::flow::interface6::source_node::internal::source_task< source_node< output_type > >" ref="15fb463802e1e30f5f836535d490874c" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>internal::source_task< source_node< output_type > ></b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename Output><br>
+ class tbb::flow::interface6::source_node< Output ></h3>
+
+An executable node that acts as a source, i.e. it has no predecessors. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="494678baf9096835268736b800824460"></a><!-- doxytag: member="tbb::flow::interface6::source_node::try_release" ref="494678baf9096835268736b800824460" args="()" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename Output> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00330.html">tbb::flow::interface6::source_node</a>< Output >::try_release           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Release a reserved item. 
+<p>
+true = item has been released and so remains in sender, dest must request or reserve future items 
+<p>
+Reimplemented from <a class="el" href="a00327.html#27036b06d6a91e97007e14f400529199">tbb::flow::interface6::sender< Output ></a>.
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00304.png b/doc/html/a00330.png
similarity index 100%
rename from doc/html/a00304.png
rename to doc/html/a00330.png
diff --git a/doc/html/a00331.html b/doc/html/a00331.html
new file mode 100644
index 0000000..63d8419
--- /dev/null
+++ b/doc/html/a00331.html
@@ -0,0 +1,131 @@
+<!DOCTYPE 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>
+<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="a00414.html">tbb</a>::<a class="el" href="a00331.html">spin_mutex</a></div>
+<h1>tbb::spin_mutex Class Reference<br>
+<small>
+[<a class="el" href="a00429.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="a00611.html">spin_mutex.h</a>></code>
+<p>
+<a href="a00125.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00331.html#3d8fb44644fd8d41ada1fbeba7409be3">spin_mutex</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="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="a00331.html#4f748989e19b6045e3a2d2ee73626a28">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="a00331.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">try_lock</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="a00331.html#0e843ee6265f57f27d228ba91e7308ef">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="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 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="a00332.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex.  <a href="a00332.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A lock that occupies a single byte. 
+<p>
+A <a class="el" href="a00331.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 less than 20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld. 
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="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">tbb::spin_mutex::spin_mutex           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Construct unacquired lock. 
+<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="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tbb::spin_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="a00611.html">spin_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00332.html b/doc/html/a00332.html
new file mode 100644
index 0000000..a9b527d
--- /dev/null
+++ b/doc/html/a00332.html
@@ -0,0 +1,97 @@
+<!DOCTYPE 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>
+<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="a00414.html">tbb</a>::<a class="el" href="a00331.html">spin_mutex</a>::<a class="el" href="a00332.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="a00611.html">spin_mutex.h</a>></code>
+<p>
+<a href="a00126.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="a00332.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</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="a00332.html#5ce6807050a9e8f87bcb4a65dccb12ef">scoped_lock</a> (<a class="el" href="a00331.html">spin_mutex</a> &m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct and acquire lock on a mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00332.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a> (<a class="el" href="a00331.html">spin_mutex</a> &m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00332.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a> (<a class="el" href="a00331.html">spin_mutex</a> &m)</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="a00332.html#eeb615e68e963e6bf8d9c11402d0ce8e">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ac6fa425d1f06c56d8b70abc51aac844"></a><!-- doxytag: member="tbb::spin_mutex::scoped_lock::~scoped_lock" ref="ac6fa425d1f06c56d8b70abc51aac844" args="()" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00332.html#ac6fa425d1f06c56d8b70abc51aac844">~scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy lock. If holding a lock, releases the lock first. <br></td></tr>
+<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>
+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="a00331.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">
+
+<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="a00611.html">spin_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00333.html b/doc/html/a00333.html
new file mode 100644
index 0000000..1b1dbd6
--- /dev/null
+++ b/doc/html/a00333.html
@@ -0,0 +1,133 @@
+<!DOCTYPE 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>
+<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="a00414.html">tbb</a>::<a class="el" href="a00333.html">spin_rw_mutex_v3</a></div>
+<h1>tbb::spin_rw_mutex_v3 Class Reference<br>
+<small>
+[<a class="el" href="a00429.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="a00612.html">spin_rw_mutex.h</a>></code>
+<p>
+<a href="a00127.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public 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="a00333.html#61332b2756de89f3f5f69310cbb6e70c">spin_rw_mutex_v3</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00333.html#9a815fb2759e55072ed413f1b6970cf3">~spin_rw_mutex_v3</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor asserts if the mutex is acquired, i.e. state is zero. <br></td></tr>
+<tr><td 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="a00333.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="a00333.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="a00333.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="a00333.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="a00333.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">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00334.html">scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern.  <a href="a00334.html#_details">More...</a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+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">
+
+<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="a00612.html">spin_rw_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00334.html b/doc/html/a00334.html
new file mode 100644
index 0000000..09c4189
--- /dev/null
+++ b/doc/html/a00334.html
@@ -0,0 +1,149 @@
+<!DOCTYPE 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>
+<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="a00414.html">tbb</a>::<a class="el" href="a00333.html">spin_rw_mutex_v3</a>::<a class="el" href="a00334.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="a00612.html">spin_rw_mutex.h</a>></code>
+<p>
+<a href="a00128.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="a00334.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"><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)" -->
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00334.html#42a92d4f8fdde425b111cfa8a9228071">scoped_lock</a> (<a class="el" href="a00333.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><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="a00334.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">~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="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="a00334.html#b0b646ec5be02a127d159bbb7ca65353">acquire</a> (<a class="el" href="a00333.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00334.html#3f0b1e3f2efab63336400348bd070226">upgrade_to_writer</a> ()</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="a00334.html#61b14d00a78185c9b2d206ebfc379124">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00334.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="a00334.html#9879626968d9b9a04cd2ec0fb2e84ae1">try_acquire</a> (<a class="el" href="a00333.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>
+<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d96d1a1fcc3d79ef3e5c06a53b8ffeaa"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::mutex" ref="d96d1a1fcc3d79ef3e5c06a53b8ffeaa" args="" -->
+<a class="el" href="a00333.html">spin_rw_mutex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00334.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The pointer to the current mutex that is held, or NULL if no mutex is held. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00334.html#6b5a7c3c67a36b05c4df8410d32627d8">is_writer</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.  <a href="#6b5a7c3c67a36b05c4df8410d32627d8"></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. 
+<p>
+Equivalent to zero-initialization of *this. 
+</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="()" -->
+<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>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Upgrade reader to become a writer. 
+<p>
+Returns whether the upgrade happened without releasing and re-acquiring the lock 
+</div>
+</div><p>
+<hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="6b5a7c3c67a36b05c4df8410d32627d8"></a><!-- doxytag: member="tbb::spin_rw_mutex_v3::scoped_lock::is_writer" ref="6b5a7c3c67a36b05c4df8410d32627d8" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="a00334.html#6b5a7c3c67a36b05c4df8410d32627d8">tbb::spin_rw_mutex_v3::scoped_lock::is_writer</a><code> [protected]</code>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock. 
+<p>
+Not defined if not holding a lock. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00612.html">spin_rw_mutex.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00335.html b/doc/html/a00335.html
new file mode 100644
index 0000000..c157ee6
--- /dev/null
+++ b/doc/html/a00335.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::split 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="a00414.html">tbb</a>::<a class="el" href="a00335.html">split</a></div>
+<h1>tbb::split Class Reference<br>
+<small>
+[<a class="el" href="a00426.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="a00648.html">tbb_stddef.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Dummy type that distinguishes splitting constructor from copy constructor. 
+<p>
+See description of parallel_for and parallel_reduce for example usages. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00648.html">tbb_stddef.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00336.html b/doc/html/a00336.html
new file mode 100644
index 0000000..8958aba
--- /dev/null
+++ b/doc/html/a00336.html
@@ -0,0 +1,75 @@
+<!DOCTYPE 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::flow::interface6::split_node< TupleType, 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>
+<!-- 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="a00414.html">tbb</a>::<b>flow</b>::<b>interface6</b>::<a class="el" href="a00336.html">split_node</a></div>
+<h1>tbb::flow::interface6::split_node< TupleType, Allocator > Class Template Reference</h1><!-- doxytag: class="tbb::flow::interface6::split_node" --><!-- doxytag: inherits="tbb::flow::interface6::multifunction_node< TupleType, TupleType, rejecting, Allocator >" --><a class="el" href="a00336.html">split_node</a>: accepts a tuple as input, forwards each element of the tuple to its  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00511.html">flow_graph.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::flow::interface6::split_node< TupleType, Allocator >:
+<p><center><img src="a00336.png" usemap="#tbb::flow::interface6::split_node< TupleType, Allocator >_map" border="0" alt=""></center>
+<map name="tbb::flow::interface6::split_node< TupleType, Allocator >_map">
+<area href="a00300.html" alt="tbb::flow::interface6::multifunction_node< TupleType, TupleType, rejecting, Allocator >" shape="rect" coords="453,56,1350,80">
+<area href="a00289.html" alt="tbb::flow::interface6::graph_node" shape="rect" coords="0,0,897,24">
+</map>
+<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 Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0a153f789b0faa7b343c29d9b97c0f71"></a><!-- doxytag: member="tbb::flow::interface6::split_node::output_ports_type" ref="0a153f789b0faa7b343c29d9b97c0f71" args="" -->
+typedef base_type::output_ports_type </td><td class="memItemRight" valign="bottom"><b>output_ports_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="414872500f7ab2cecd98edc6945dea47"></a><!-- doxytag: member="tbb::flow::interface6::split_node::input_type" ref="414872500f7ab2cecd98edc6945dea47" args="" -->
+typedef TupleType </td><td class="memItemRight" valign="bottom"><b>input_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="06f32ac2a6bc1043ef6dd9ec40044522"></a><!-- doxytag: member="tbb::flow::interface6::split_node::allocator_type" ref="06f32ac2a6bc1043ef6dd9ec40044522" 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="ce8ee443d310145fc36e152c608c2e49"></a><!-- doxytag: member="tbb::flow::interface6::split_node::split_node" ref="ce8ee443d310145fc36e152c608c2e49" args="(graph &g)" -->
+ </td><td class="memItemRight" valign="bottom"><b>split_node</b> (<a class="el" href="a00288.html">graph</a> &g)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c16a1c429bb2e3a33f6c56de84e63405"></a><!-- doxytag: member="tbb::flow::interface6::split_node::split_node" ref="c16a1c429bb2e3a33f6c56de84e63405" args="(const split_node &other)" -->
+ </td><td class="memItemRight" valign="bottom"><b>split_node</b> (const <a class="el" href="a00336.html">split_node</a> &other)</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>splitting_body</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename TupleType, typename Allocator = cache_aligned_allocator<TupleType>><br>
+ class tbb::flow::interface6::split_node< TupleType, Allocator ></h3>
+
+<a class="el" href="a00336.html">split_node</a>: accepts a tuple as input, forwards each element of the tuple to its 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00511.html">flow_graph.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00336.png b/doc/html/a00336.png
new file mode 100644
index 0000000..b0f2ab0
Binary files /dev/null and b/doc/html/a00336.png differ
diff --git a/doc/html/a00337.html b/doc/html/a00337.html
new file mode 100644
index 0000000..9c2e5d6
--- /dev/null
+++ b/doc/html/a00337.html
@@ -0,0 +1,625 @@
+<!DOCTYPE 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>
+<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="a00414.html">tbb</a>::<a class="el" href="a00337.html">task</a></div>
+<h1>tbb::task Class Reference<br>
+<small>
+[<a class="el" href="a00431.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="a00613.html">task.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::task:
+<p><center><img src="a00337.png" usemap="#tbb::task_map" border="0" alt=""></center>
+<map name="tbb::task_map">
+<area href="a00280.html" alt="tbb::empty_task" shape="rect" coords="0,56,97,80">
+</map>
+<a href="a00133.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public 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="a00337.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="a00337.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="a00337.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="a00337.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="a00337.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="a00337.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="a00337.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="a00337.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="a00337.html#4a3c415562d17905390ea5b49d12293e">state_type</a> { <br>
+  <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>, 
+<a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>, 
+<a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>, 
+<a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>, 
+<br>
+  <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>, 
+<a class="el" href="a00337.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="a00337.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="a00337.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="a00337.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.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="a00337.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="a00337.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">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a> (<a class="el" href="a00337.html">task</a> &t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy a task.  <a href="#dfaacf92685e5f86393bf657b2853bf8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.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="a00337.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="a00337.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a> (<a class="el" href="a00337.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="a00337.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="a00337.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="a00337.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="a00337.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Atomically increment reference count and returns its old value.  <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="a00337.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Atomically decrement reference count and returns its new value.  <a href="#ef4680f5c148020c5e7e43ddef44cd5d"></a><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="a00337.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a> (<a class="el" href="a00337.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="a00337.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a> (<a class="el" href="a00341.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="a00337.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="a00337.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.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="d2eaf79fcaa3ae473e3bd3f44bd8a464"></a><!-- doxytag: member="tbb::task::set_parent" ref="d2eaf79fcaa3ae473e3bd3f44bd8a464" args="(task *p)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">set_parent</a> (<a class="el" href="a00337.html">task</a> *p)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">sets parent task pointer to specified value <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00339.html">task_group_context</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">This method is deprecated and will be removed in the future.  <a href="#d8c36a93f3972590fbb65ff1cef3173b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5987123486afca36ddebb9e2a8b7779a"></a><!-- doxytag: member="tbb::task::group" ref="5987123486afca36ddebb9e2a8b7779a" args="()" -->
+<a class="el" href="a00339.html">task_group_context</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#5987123486afca36ddebb9e2a8b7779a">group</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the task group descriptor. <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="a00337.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if task was stolen from the task pool of another thread. <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="a00337.html#4a3c415562d17905390ea5b49d12293e">state_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.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="a00337.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="a00337.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="a00337.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a> (<a class="el" href="a00337.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="a00337.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.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="a00337.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a> (<a class="el" href="a00337.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">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#62247be9a637a814c8e8f4bcfb3a1908">change_group</a> (<a class="el" href="a00339.html">task_group_context</a> &ctx)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Moves this task from its current group into another one.  <a href="#62247be9a637a814c8e8f4bcfb3a1908"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.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="a00337.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if the context has received cancellation request. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9ac8d1542d67d9d80121ff986801ac26"></a><!-- doxytag: member="tbb::task::set_group_priority" ref="9ac8d1542d67d9d80121ff986801ac26" args="(priority_t p)" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#9ac8d1542d67d9d80121ff986801ac26">set_group_priority</a> (priority_t p)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Changes priority of the task group this task belongs to. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e1d969a1ccab6796e3b8b2c1a5be33d2"></a><!-- doxytag: member="tbb::task::group_priority" ref="e1d969a1ccab6796e3b8b2c1a5be33d2" args="() const " -->
+priority_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#e1d969a1ccab6796e3b8b2c1a5be33d2">group_priority</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Retrieves current priority of the task group this task belongs to. <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="a00337.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="a00337.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a> (<a class="el" href="a00339.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"><a class="anchor" name="ce8ce689c26a4ddf343829bc3c73290a"></a><!-- doxytag: member="tbb::task::spawn_root_and_wait" ref="ce8ce689c26a4ddf343829bc3c73290a" args="(task &root)" -->
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a> (<a class="el" href="a00337.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. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a> (<a class="el" href="a00341.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">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a> (<a class="el" href="a00337.html">task</a> &t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue task for starvation-resistant execution.  <a href="#8365d063c0cc9d7bd616bca47256b93c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fe6bf6aaf84e664134fabb6c4f409ea9"></a><!-- doxytag: member="tbb::task::enqueue" ref="fe6bf6aaf84e664134fabb6c4f409ea9" args="(task &t, priority_t p)" -->
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#fe6bf6aaf84e664134fabb6c4f409ea9">enqueue</a> (<a class="el" href="a00337.html">task</a> &t, priority_t p)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue task for starvation-resistant execution on the specified priority level. <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="a00337.html">task</a> &__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.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="a00337.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="81d0122aee4ddae419a743ee50d7038e"></a><!-- doxytag: member="tbb::task::interface5::internal::task_base" ref="81d0122aee4ddae419a743ee50d7038e" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>interface5::internal::task_base</b></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>
+
+</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="a00337.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="a00337.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="a00337.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="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="62247be9a637a814c8e8f4bcfb3a1908"></a><!-- doxytag: member="tbb::task::change_group" ref="62247be9a637a814c8e8f4bcfb3a1908" args="(task_group_context &ctx)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_METHOD tbb::task::change_group           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00339.html">task_group_context</a> & </td>
+          <td class="paramname"> <em>ctx</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Moves this task from its current group into another one. 
+<p>
+Argument ctx specifies the new group.<p>
+The primary purpose of this method is to associate unique task group context with a task allocated for subsequent enqueuing. In contrast to spawned tasks enqueued ones normally outlive the scope where they were created. This makes traditional usage model where task group context are allocated locally on the stack inapplicable. Dynamic allocation of context objects is performance inefficient. Method <a class="el" href="a00337.html#62247be9a637a814c8e8f4bcfb3a1908">change_group()</a> allow [...]
+</div>
+</div><p>
+<a class="anchor" name="d8c36a93f3972590fbb65ff1cef3173b"></a><!-- doxytag: member="tbb::task::context" ref="d8c36a93f3972590fbb65ff1cef3173b" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00339.html">task_group_context</a>* tbb::task::context           </td>
+          <td>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+This method is deprecated and will be removed in the future. 
+<p>
+Use method <a class="el" href="a00337.html#5987123486afca36ddebb9e2a8b7779a">group()</a> instead. 
+</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 and returns its new value. 
+<p>
+Has release semantics. 
+</div>
+</div><p>
+<a class="anchor" name="dfaacf92685e5f86393bf657b2853bf8"></a><!-- doxytag: member="tbb::task::destroy" ref="dfaacf92685e5f86393bf657b2853bf8" args="(task &t)" -->
+<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="a00337.html">task</a> & </td>
+          <td class="paramname"> <em>t</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="a00337.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="8365d063c0cc9d7bd616bca47256b93c"></a><!-- doxytag: member="tbb::task::enqueue" ref="8365d063c0cc9d7bd616bca47256b93c" args="(task &t)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void tbb::task::enqueue           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00337.html">task</a> & </td>
+          <td class="paramname"> <em>t</em>          </td>
+          <td> ) </td>
+          <td width="100%"><code> [inline, static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Enqueue task for starvation-resistant execution. 
+<p>
+The task will be enqueued on the normal priority level disregarding the priority of its task group.<p>
+The rationale of such semantics is that priority of an enqueued task is statically fixed at the moment of its enqueuing, while task group priority is dynamic. Thus automatic priority inheritance would be generally a subject to the race, which may result in unexpected behavior.<p>
+Use <a class="el" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">enqueue()</a> overload with explicit priority value and <a class="el" href="a00337.html#e1d969a1ccab6796e3b8b2c1a5be33d2">task::group_priority()</a> method to implement such priority inheritance when it is really necessary. 
+</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 and returns its old value. 
+<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="a00337.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="a00337.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="a00337.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. Typically, this is done by having method <a class="el" href="a00337.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. With no descendants and ref_count of 1, it has the semantics of recycle_to_reexecute. 
+</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="a00337.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. 
+<p>
+Made obsolete by recycle_as_safe_continuation; may become deprecated. 
+</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="a00341.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="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="a00613.html">task.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00311.png b/doc/html/a00337.png
similarity index 100%
rename from doc/html/a00311.png
rename to doc/html/a00337.png
diff --git a/doc/html/a00338.html b/doc/html/a00338.html
new file mode 100644
index 0000000..5c918ce
--- /dev/null
+++ b/doc/html/a00338.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::interface5::internal::task_base 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="a00414.html">tbb</a>::<b>interface5</b>::<b>internal</b>::<a class="el" href="a00338.html">task_base</a></div>
+<h1>tbb::interface5::internal::task_base Class Reference</h1><!-- doxytag: class="tbb::interface5::internal::task_base" -->Base class for methods that became static in TBB 3.0.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00613.html">task.h</a>></code>
+<p>
+<a href="a00130.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Base class for methods that became static in TBB 3.0. 
+<p>
+TBB's evolution caused the "this" argument for several methods to become obsolete. However, for backwards binary compatibility, the new methods need distinct names, otherwise the One Definition Rule would be broken. Hence the new methods are defined in this private base class, and then exposed in class task via using declarations. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00613.html">task.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00339.html b/doc/html/a00339.html
new file mode 100644
index 0000000..d7a08fe
--- /dev/null
+++ b/doc/html/a00339.html
@@ -0,0 +1,43 @@
+<!DOCTYPE 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 Struct 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="a00414.html">tbb</a>::<a class="el" href="a00339.html">task_group_context</a></div>
+<h1>tbb::task_group_context Struct Reference</h1><!-- doxytag: class="tbb::task_group_context" --><code>#include <<a class="el" href="a00550.html">parallel_invoke.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Dummy to avoid cluttering the bulk of the header with enormous amount of ifdefs. 
+<p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00550.html">parallel_invoke.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00341.html b/doc/html/a00341.html
new file mode 100644
index 0000000..eb061d6
--- /dev/null
+++ b/doc/html/a00341.html
@@ -0,0 +1,83 @@
+<!DOCTYPE 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>
+<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="a00414.html">tbb</a>::<a class="el" href="a00341.html">task_list</a></div>
+<h1>tbb::task_list Class Reference<br>
+<small>
+[<a class="el" href="a00431.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="a00613.html">task.h</a>></code>
+<p>
+<a href="a00135.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>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="a00341.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="a00341.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="a00341.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="a00341.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a> (<a class="el" href="a00337.html">task</a> &<a class="el" href="a00337.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="a00337.html">task</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00341.html#5fe85df5ed524418389d34051750347d">pop_front</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pop the front task from the list. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fce446ee13e025969945328f3ff59b95"></a><!-- doxytag: member="tbb::task_list::clear" ref="fce446ee13e025969945328f3ff59b95" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00341.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="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="81d0122aee4ddae419a743ee50d7038e"></a><!-- doxytag: member="tbb::task_list::interface5::internal::task_base" ref="81d0122aee4ddae419a743ee50d7038e" args="" -->
+class </td><td class="memItemRight" valign="bottom"><b>interface5::internal::task_base</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+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="a00613.html">task.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00342.html
new file mode 100644
index 0000000..d4ca23f
--- /dev/null
+++ b/doc/html/a00342.html
@@ -0,0 +1,168 @@
+<!DOCTYPE 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>
+<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="a00414.html">tbb</a>::<a class="el" href="a00342.html">task_scheduler_init</a></div>
+<h1>tbb::task_scheduler_init Class Reference<br>
+<small>
+[<a class="el" href="a00431.html">Task Scheduling</a>]</small>
+</h1><!-- doxytag: class="tbb::task_scheduler_init" -->Class delimiting the scope of task scheduler activity.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00630.html">task_scheduler_init.h</a>></code>
+<p>
+<a href="a00142.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>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="a00342.html#d476053cc712e572554823492a5229ce">initialize</a> (int number_of_threads=<a class="el" href="a00342.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</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="a00342.html#d5ed214a8bb53b0466ed91ff4734b9a3">initialize</a> (int number_of_threads, stack_size_type thread_stack_size)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The overloaded method with stack size parameter.  <a href="#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="a00342.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Inverse of method initialize. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00342.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a> (int number_of_threads=<a class="el" href="a00342.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for default constructor followed by call to initialize(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="a00342.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy scheduler for this thread if thread has no other live task_scheduler_inits. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00342.html#12752282977029f23416642bc03e8b74">is_active</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if scheduler is active (initialized); false otherwise. <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00342.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of threads TBB scheduler would create if initialized by default.  <a href="#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="a00342.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Typedef for number of threads that is automatic. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00342.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Argument to <a class="el" href="a00342.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>
+Class delimiting the scope of task scheduler activity. 
+<p>
+A thread can construct a <a class="el" href="a00342.html">task_scheduler_init</a> object and keep it alive while it uses TBB's tasking subsystem (including parallel algorithms).<p>
+This class allows to customize properties of the TBB task pool to some extent. For example it can limit concurrency level of parallel work initiated by the given thread. It also can be used to specify stack size of the TBB worker threads, though this setting is not effective if the thread pool has already been created.<p>
+If a parallel construct is used without <a class="el" href="a00342.html">task_scheduler_init</a> object previously created, the scheduler will be initialized automatically with default settings, and will persist until this thread exits. Default concurrency level is defined as described in <a class="el" href="a00342.html#d476053cc712e572554823492a5229ce">task_scheduler_init::initialize()</a>. 
+<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.<p>
+Before TBB 3.0 U4 this method returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.<p>
+NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool. 
+</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="a00342.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 usually maximal hardware concurrency for this process, that is the number of logical CPUs on the machine (possibly limited by the processor affinity mask of this process (Windows) or of this thread (Linux, FreeBSD). It is preferable option for production code because it helps to avoid nasty surprises when several TBB based components run side-by-side or in a nested fashion inside the same process.<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="a00630.html">task_scheduler_init.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00343.html b/doc/html/a00343.html
index e693a50..880528b 100644
--- a/doc/html/a00343.html
+++ b/doc/html/a00343.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>flow_graph.h File 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>
@@ -10,138 +10,110 @@
     <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 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="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
+    <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>flow_graph.h File Reference</h1>The graph related classes and functions. <a href="#_details">More...</a>
+<div class="nav">
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00343.html">tbb_allocator</a></div>
+<h1>tbb::tbb_allocator< T > Class Template Reference<br>
+<small>
+[<a class="el" href="a00428.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="a00634.html">tbb_allocator.h</a>></code>
 <p>
-<a href="a00468.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00144.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00383.html">tbb</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>tbb::flow</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>internal::graph_policy_namespace</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>interface6::internal::graph_policy_namespace</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="a00263.html">tbb::flow::interface6::graph_node</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The base of all graph nodes. Allows them to be stored in a collection for deletion.  <a href="a00263.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00251.html">tbb::flow::interface6::continue_msg</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An empty class used for messages that mean "I'm done".  <a href="a00251.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a sender of messages of type T.  <a href="a00301.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a receiver of messages of type T.  <a href="a00295.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for receivers of completion messages.  <a href="a00253.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html">tbb::flow::interface6::graph</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The graph class.  <a href="a00262.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::graph::run_task< Body ></b></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::graph::run_and_put_task< Receiver, Body ></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">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></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="mdescLeft"> </td><td class="mdescRight">An executable node that acts as a source, i.e. it has no predecessors.  <a href="a00304.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></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="mdescLeft"> </td><td class="mdescRight">Implements a function node that supports Input -> Output.  <a href="a00260.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></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="mdescLeft"> </td><td class="mdescRight">Implements a function node that supports Input -> Output.  <a href="a00261.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a></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="mdescLeft"> </td><td class="mdescRight">implements a function node that supports Input -> (set of outputs)  <a href="a00274.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::multioutput_function_node< Input, Output, queueing, Allocator ></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">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></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="mdescLeft"> </td><td class="mdescRight"><a class="el" href="a00310.html">split_node</a>: accepts a tuple as input, forwards each element of the tuple to its  <a href="a00310.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::flow::interface6::split_node< TupleType, Allocator >::splitting_body</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">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Implements an executable node that supports <a class="el" href="a00251.html">continue_msg</a> -> Output.  <a href="a00252.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::overwrite_node< T ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::write_once_node< T ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages of type T to all successors.  <a href="a00236.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in arbitrary order.  <a href="a00237.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::buffer_node< T, A >::buffer_operation</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in FIFO order.  <a href="a00287.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in sequence order.  <a href="a00302.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00343.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> { <b>scalable</b>, 
+<b>standard</b>
+ }</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in priority order.  <a href="a00286.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a></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="a00343.html">tbb_allocator</a> &)  throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages only if the threshold has not been reached.  <a href="a00266.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::join_node< OutputTuple, reserving ></b></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="a00343.html">tbb_allocator</a>< U > &)  throw ()</td></tr>
 
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::join_node< OutputTuple, queueing ></b></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">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::join_node< OutputTuple, tag_matching ></b></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">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::or_node< InputTuple ></b></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="a00343.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a> (size_type n, const void *=0)</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"><b>concurrency</b> { <b>unlimited</b> =  0, 
-<b>serial</b> =  1
- }</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="a00343.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a> (pointer p, size_type)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An enumeration the provides the two most common concurrency levels: unlimited and serial. <br></td></tr>
-<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="511941e0793451ab18c6ccf489a67e47"></a><!-- doxytag: member="flow_graph.h::make_edge" ref="511941e0793451ab18c6ccf489a67e47" args="(sender< T > &p, receiver< T > &s)" -->
-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="a00386.html#511941e0793451ab18c6ccf489a67e47">tbb::flow::interface6::make_edge</a> (sender< T > &p, receiver< T > &s)</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="a00343.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a> () const   throw ()</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Makes an edge between a single predecessor and a single successor. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="15f0356fd7bcade4868d3b083ea671c2"></a><!-- doxytag: member="flow_graph.h::remove_edge" ref="15f0356fd7bcade4868d3b083ea671c2" args="(sender< T > &p, receiver< T > &s)" -->
-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="a00386.html#15f0356fd7bcade4868d3b083ea671c2">tbb::flow::interface6::remove_edge</a> (sender< T > &p, receiver< T > &s)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="15c431ccb5ccc5a30e5d496edad4c143"></a><!-- doxytag: member="tbb::tbb_allocator::construct" ref="15c431ccb5ccc5a30e5d496edad4c143" args="(pointer p, Args &&...args)" -->
+template<typename... Args> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00343.html#15c431ccb5ccc5a30e5d496edad4c143">construct</a> (pointer p, Args &&...args)</td></tr>
 
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Makes an edge between a single predecessor and a single successor. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="c8a3ee78426f0aa4df0c5a5e4bcd53e1"></a><!-- doxytag: member="flow_graph.h::copy_body" ref="c8a3ee78426f0aa4df0c5a5e4bcd53e1" args="(Node &n)" -->
-template<typename Body, typename Node> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Body </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00386.html#c8a3ee78426f0aa4df0c5a5e4bcd53e1">tbb::flow::interface6::copy_body</a> (Node &n)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct 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="mdescLeft"> </td><td class="mdescRight">Returns a copy of the body from a function or continue node. <br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
-The graph related classes and functions. 
+<h3>template<typename T><br>
+ class tbb::tbb_allocator< T ></h3>
+
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. 
+<p>
+The class selects the best memory allocation mechanism available from scalable_malloc and standard malloc. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard. 
 <p>
-There are some applications that best express dependencies as messages passed between nodes in a graph. These messages may contain data or simply act as signals that a predecessors has completed. The graph class and its associated node classes can be used to express such applcations. <hr>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00634.html">tbb_allocator.h</a></ul>
+<hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00344.html b/doc/html/a00344.html
index 1b3c8b5..e070fb6 100644
--- a/doc/html/a00344.html
+++ b/doc/html/a00344.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>memory_pool.h File 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>
@@ -10,54 +10,53 @@
     <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 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="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
+    <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>memory_pool.h File Reference</h1>
+<div class="nav">
+<a class="el" href="a00414.html">tbb</a>::<a class="el" href="a00344.html">tbb_allocator< void ></a></div>
+<h1>tbb::tbb_allocator< void > Class Template Reference<br>
+<small>
+[<a class="el" href="a00428.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>
-<a href="a00480.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<code>#include <<a class="el" href="a00634.html">tbb_allocator.h</a>></code>
+<p>
+<a href="a00146.html">List of all members.</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="a00383.html">tbb</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>tbb::interface6</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="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00270.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::interface6::memory_pool_allocator< T, P >::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="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.  <a href="a00271.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><b>tbb::interface6::memory_pool_allocator< void, P >::rebind< U ></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">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html">tbb::interface6::memory_pool< Alloc ></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">Thread-safe growable pool allocator for variable-size requests.  <a href="a00269.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::interface6::fixed_pool</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="157d737026f35a661bbb784af7e16cd4"></a><!-- doxytag: member="memory_pool.h::operator==" ref="157d737026f35a661bbb784af7e16cd4" args="(const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)" -->
-template<typename T, typename U, typename P> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::interface6::operator==</b> (const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4665e8f86e3bc274708bf7994beec895"></a><!-- doxytag: member="memory_pool.h::operator!=" ref="4665e8f86e3bc274708bf7994beec895" args="(const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)" -->
-template<typename T, typename U, typename P> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::interface6::operator!=</b> (const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &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<><br>
+ class tbb::tbb_allocator< void ></h3>
+
+Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00634.html">tbb_allocator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00345.html b/doc/html/a00345.html
new file mode 100644
index 0000000..00bdd33
--- /dev/null
+++ b/doc/html/a00345.html
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::tbb_exception Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<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="a00414.html">tbb</a>::<a class="el" href="a00345.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="a00639.html">tbb_exception.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::tbb_exception:
+<p><center><img src="a00345.png" usemap="#tbb::tbb_exception_map" border="0" alt=""></center>
+<map name="tbb::tbb_exception_map">
+<area href="a00266.html" alt="tbb::captured_exception" shape="rect" coords="0,56,248,80">
+<area href="a00299.html" alt="tbb::movable_exception< ExceptionData >" shape="rect" coords="258,56,506,80">
+</map>
+<a href="a00157.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="a00345.html">tbb_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00345.html#3e3482bf264d4ca4dde046cd9c02c766">move</a> ()=0  throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object.  <a href="#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="a00345.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a> ()=0  throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00345.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="a00345.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a> ()=0</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="a00345.html#d00f6497e552fee978a02bfcbebf46e2">name</a> () const =0  throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="a00345.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="a00345.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="a00345.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete</a> (void *p)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. 
+<p>
+If an unhandled exception of the type derived from <a class="el" href="a00345.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="a00340.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="a00266.html">tbb::captured_exception</a> and template class <a class="el" href="a00299.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="a00345.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="a00266.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, and <a class="el" href="a00299.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="a00345.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">
+
+<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="a00266.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, and <a class="el" href="a00299.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="a00345.html#3e3482bf264d4ca4dde046cd9c02c766">move()</a> operation on an exception thrown out of TBB scheduler.<p>
+When overriding method <a class="el" href="a00345.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="a00266.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, and <a class="el" href="a00299.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="a00639.html">tbb_exception.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00319.png b/doc/html/a00345.png
similarity index 100%
rename from doc/html/a00319.png
rename to doc/html/a00345.png
diff --git a/doc/html/a00346.html b/doc/html/a00346.html
new file mode 100644
index 0000000..0834f10
--- /dev/null
+++ b/doc/html/a00346.html
@@ -0,0 +1,89 @@
+<!DOCTYPE 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>
+<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="a00414.html">tbb</a>::<b>internal</b>::<a class="el" href="a00346.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="a00639.html">tbb_exception.h</a>></code>
+<p>
+<a href="a00160.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="a00346.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="a00346.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="a00346.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="a00346.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><b>allocate</b> (const <a class="el" href="a00345.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="a00346.html">tbb_exception_ptr</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00346.html#c35e5db8e9cdff5d1387db5b0bad2e4a">allocate</a> (<a class="el" href="a00266.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. 
+<p>
+This class can be used only when the appropriate runtime support (mandated by C++0x) is present 
+<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="a00639.html">tbb_exception.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00347.html b/doc/html/a00347.html
new file mode 100644
index 0000000..ff67c30
--- /dev/null
+++ b/doc/html/a00347.html
@@ -0,0 +1,56 @@
+<!DOCTYPE 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< Key > 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="a00414.html">tbb</a>::<a class="el" href="a00347.html">tbb_hash_compare</a></div>
+<h1>tbb::tbb_hash_compare< Key > Struct Template Reference</h1><!-- doxytag: class="tbb::tbb_hash_compare" -->hash_compare that is default argument for concurrent_hash_map  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00455.html">concurrent_hash_map.h</a>></code>
+<p>
+<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>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c35d106ad65aa6ca5ba9008c1c86f80d"></a><!-- doxytag: member="tbb::tbb_hash_compare::hash" ref="c35d106ad65aa6ca5ba9008c1c86f80d" args="(const Key &a)" -->
+static size_t </td><td class="memItemRight" valign="bottom"><b>hash</b> (const Key &a)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b4d302049aabea046e392ddfad8b3f06"></a><!-- doxytag: member="tbb::tbb_hash_compare::equal" ref="b4d302049aabea046e392ddfad8b3f06" args="(const Key &a, const Key &b)" -->
+static bool </td><td class="memItemRight" valign="bottom"><b>equal</b> (const Key &a, const Key &b)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename Key><br>
+ struct tbb::tbb_hash_compare< Key ></h3>
+
+hash_compare that is default argument for concurrent_hash_map 
+<p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00455.html">concurrent_hash_map.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00348.html b/doc/html/a00348.html
new file mode 100644
index 0000000..16f0a1b
--- /dev/null
+++ b/doc/html/a00348.html
@@ -0,0 +1,123 @@
+<!DOCTYPE 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>
+<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="a00414.html">tbb</a>::<a class="el" href="a00348.html">thread_bound_filter</a></div>
+<h1>tbb::thread_bound_filter Class Reference<br>
+<small>
+[<a class="el" href="a00426.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="a00587.html">pipeline.h</a>></code>
+<p>
+<p>Inheritance diagram for tbb::thread_bound_filter:
+<p><center><img src="a00348.png" usemap="#tbb::thread_bound_filter_map" border="0" alt=""></center>
+<map name="tbb::thread_bound_filter_map">
+<area href="a00282.html" alt="tbb::filter" shape="rect" coords="0,0,145,24">
+</map>
+<a href="a00106.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="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="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="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">enum  </td><td class="memItemRight" valign="bottom"><b>result_type</b> { <b>success</b>, 
+<b>item_not_available</b>, 
+<b>end_of_stream</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="a00348.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="a00348.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> (mode filter_mode)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A stage in a pipeline served by a user thread. 
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="5e726bdc7fbd924c0b07bd558b1d4d5d"></a><!-- doxytag: member="tbb::thread_bound_filter::process_item" ref="5e726bdc7fbd924c0b07bd558b1d4d5d" 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>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Wait until a data item becomes available, and invoke operator() on that item. 
+<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. 
+</div>
+</div><p>
+<a class="anchor" name="c4f90f2c771bce748beb9be734fa286c"></a><!-- doxytag: member="tbb::thread_bound_filter::try_process_item" ref="c4f90f2c771bce748beb9be734fa286c" 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>(</td>
+          <td class="paramname">          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+If a data item is available, invoke operator() on that item. 
+<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. 
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00587.html">pipeline.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00322.png b/doc/html/a00348.png
similarity index 100%
rename from doc/html/a00322.png
rename to doc/html/a00348.png
diff --git a/doc/html/a00349.html b/doc/html/a00349.html
new file mode 100644
index 0000000..e18a148
--- /dev/null
+++ b/doc/html/a00349.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::tick_count 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="a00414.html">tbb</a>::<a class="el" href="a00349.html">tick_count</a></div>
+<h1>tbb::tick_count Class Reference<br>
+<small>
+[<a class="el" href="a00430.html">Timing</a>]</small>
+</h1><!-- doxytag: class="tbb::tick_count" -->Absolute timestamp.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00665.html">tick_count.h</a>></code>
+<p>
+<a href="a00183.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="a00349.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="a00349.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00349.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="a00350.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00349.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00349.html">tick_count</a> &t1, const <a class="el" href="a00349.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="a00350.html">interval_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Relative time interval.  <a href="a00350.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="a00665.html">tick_count.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00350.html b/doc/html/a00350.html
new file mode 100644
index 0000000..2832a20
--- /dev/null
+++ b/doc/html/a00350.html
@@ -0,0 +1,83 @@
+<!DOCTYPE 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>
+<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="a00414.html">tbb</a>::<a class="el" href="a00349.html">tick_count</a>::<a class="el" href="a00350.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="a00665.html">tick_count.h</a>></code>
+<p>
+<a href="a00184.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="a00350.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="a00350.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="a00350.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="a00350.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00350.html#cd9814947902e26463a69a111530f81b">operator+=</a> (const <a class="el" href="a00350.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="a00350.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00350.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a> (const <a class="el" href="a00350.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="a00350.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="a00350.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00350.html#09dde78a4100800c11bb883d6204b586">operator-</a> (const <a class="el" href="a00349.html">tick_count</a> &t1, const <a class="el" href="a00349.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="a00350.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00350.html#5871ead1ca230efbe52a5008470e6428">operator+</a> (const <a class="el" href="a00350.html">interval_t</a> &i, const <a class="el" href="a00350.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="a00350.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00350.html#fa509691e1d689830931e36edd274f76">operator-</a> (const <a class="el" href="a00350.html">interval_t</a> &i, const <a class="el" href="a00350.html">interval_t</a> &j)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Subtract two intervals. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Relative time interval. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00665.html">tick_count.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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
new file mode 100644
index 0000000..88e1c1b
--- /dev/null
+++ b/doc/html/a00351.html
@@ -0,0 +1,50 @@
+<!DOCTYPE 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::user_abort 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="a00414.html">tbb</a>::<a class="el" href="a00351.html">user_abort</a></div>
+<h1>tbb::user_abort Class Reference</h1><!-- doxytag: class="tbb::user_abort" -->Exception for user-initiated abort.  
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00639.html">tbb_exception.h</a>></code>
+<p>
+<a href="a00154.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="989461aff2934fede08b969ed4bf4e16"></a><!-- doxytag: member="tbb::user_abort::what" ref="989461aff2934fede08b969ed4bf4e16" 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>
+Exception for user-initiated abort. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00639.html">tbb_exception.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00352.html b/doc/html/a00352.html
new file mode 100644
index 0000000..8b990af
--- /dev/null
+++ b/doc/html/a00352.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::internal::work_around_alignment_bug< Size, 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="a00414.html">tbb</a>::<b>internal</b>::<a class="el" href="a00352.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="a00640.html">tbb_machine.h</a>></code>
+<p>
+<a href="a00179.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="14283941aefd819871be2f5e24f5cb37"></a><!-- doxytag: member="tbb::internal::work_around_alignment_bug::alignment" ref="14283941aefd819871be2f5e24f5cb37" args="" -->
+static const size_t </td><td class="memItemRight" valign="bottom"><b>alignment</b> = __TBB_alignof(T)</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>
+
+Work around for bug in GNU 3.2 and MSVC compilers. 
+<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). 
+<p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00640.html">tbb_machine.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00353.html b/doc/html/a00353.html
new file mode 100644
index 0000000..4374787
--- /dev/null
+++ b/doc/html/a00353.html
@@ -0,0 +1,93 @@
+<!DOCTYPE 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>
+<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="a00414.html">tbb</a>::<a class="el" href="a00353.html">zero_allocator</a></div>
+<h1>tbb::zero_allocator< T, Allocator > Class Template Reference<br>
+<small>
+[<a class="el" href="a00428.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="a00634.html">tbb_allocator.h</a>></code>
+<p>
+<a href="a00148.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="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="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="a00353.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="a00353.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 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>
+
+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. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00634.html">tbb_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00354.html b/doc/html/a00354.html
new file mode 100644
index 0000000..787fc5f
--- /dev/null
+++ b/doc/html/a00354.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::zero_allocator< void, 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>
+<!-- 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="a00414.html">tbb</a>::<a class="el" href="a00354.html">zero_allocator< void, Allocator ></a></div>
+<h1>tbb::zero_allocator< void, Allocator > Class Template Reference<br>
+<small>
+[<a class="el" href="a00428.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="a00634.html">tbb_allocator.h</a>></code>
+<p>
+<a href="a00150.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 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="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="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 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<template< typename T > class Allocator><br>
+ class tbb::zero_allocator< void, Allocator ></h3>
+
+Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. 
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00634.html">tbb_allocator.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00363.html b/doc/html/a00363.html
deleted file mode 100644
index 7edb342..0000000
--- a/doc/html/a00363.html
+++ /dev/null
@@ -1,106 +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>scalable_allocator.h File 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><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>scalable_allocator.h File Reference</h1>
-<p>
-<a href="a00562.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"><b>rml</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00383.html">tbb</a></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>rml::MemPoolPolicy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00299.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="a00299.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="a00300.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="a00300.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>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5af06ad025ac20cff3a1c13aa5bded5c"></a><!-- doxytag: member="scalable_allocator.h::rawAllocType" ref="5af06ad025ac20cff3a1c13aa5bded5c" args="(intptr_t pool_id, size_t &bytes)" -->
-typedef void *(*) </td><td class="memItemRight" valign="bottom"><b>rml::rawAllocType</b> (intptr_t pool_id, size_t &bytes)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="49f1efbc1496ae2c1492093bb222051b"></a><!-- doxytag: member="scalable_allocator.h::rawFreeType" ref="49f1efbc1496ae2c1492093bb222051b" args="(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)" -->
-typedef int(*) </td><td class="memItemRight" valign="bottom"><b>rml::rawFreeType</b> (intptr_t pool_id, void *raw_ptr, size_t raw_bytes)</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="a00397.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="a00397.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="a00397.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="a00397.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="a00397.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="a00397.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="a00397.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="a00397.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="a00397.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8ed52400cba22b7c02913eca8135f782"></a><!-- doxytag: member="scalable_allocator.h::pool_create" ref="8ed52400cba22b7c02913eca8135f782" args="(intptr_t pool_id, const MemPoolPolicy *memPoolPolicy)" -->
-MemoryPool * </td><td class="memItemRight" valign="bottom"><b>rml::pool_create</b> (intptr_t pool_id, const MemPoolPolicy *memPoolPolicy)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="66dafd186fef3ce07c5acfa57309671d"></a><!-- doxytag: member="scalable_allocator.h::pool_destroy" ref="66dafd186fef3ce07c5acfa57309671d" args="(MemoryPool *memPool)" -->
-bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_destroy</b> (MemoryPool *memPool)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1f68622d83e291b152ba9bdb5eb54c4c"></a><!-- doxytag: member="scalable_allocator.h::pool_malloc" ref="1f68622d83e291b152ba9bdb5eb54c4c" args="(MemoryPool *memPool, size_t size)" -->
-void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_malloc</b> (MemoryPool *memPool, size_t size)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c46ef1c26429df31030d3278e5479fc"></a><!-- doxytag: member="scalable_allocator.h::pool_realloc" ref="4c46ef1c26429df31030d3278e5479fc" args="(MemoryPool *memPool, void *object, size_t size)" -->
-void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_realloc</b> (MemoryPool *memPool, void *object, size_t size)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3eab1c7294baade9d21fad92f979890a"></a><!-- doxytag: member="scalable_allocator.h::pool_reset" ref="3eab1c7294baade9d21fad92f979890a" args="(MemoryPool *memPool)" -->
-bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_reset</b> (MemoryPool *memPool)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e43a04a5b9e84bb26345945b1a15ed28"></a><!-- doxytag: member="scalable_allocator.h::pool_free" ref="e43a04a5b9e84bb26345945b1a15ed28" args="(MemoryPool *memPool, void *object)" -->
-bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_free</b> (MemoryPool *memPool, void *object)</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>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::operator==</b> (const scalable_allocator< T > &, const scalable_allocator< U > &)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a92757aca0a69082eb8dc223eb257433"></a><!-- doxytag: member="scalable_allocator.h::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>tbb::operator!=</b> (const scalable_allocator< T > &, const scalable_allocator< U > &)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00372.html b/doc/html/a00372.html
new file mode 100644
index 0000000..d818ad2
--- /dev/null
+++ b/doc/html/a00372.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>flow_graph.h File 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><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>flow_graph.h File Reference</h1>The graph related classes and functions. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="a00511.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="a00414.html">tbb</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>tbb::flow</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>internal::graph_policy_namespace</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>interface6::internal::graph_policy_namespace</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="a00277.html">tbb::flow::interface6::continue_msg</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An empty class used for messages that mean "I'm done".  <a href="a00277.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a sender of messages of type T.  <a href="a00327.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pure virtual template class that defines a receiver of messages of type T.  <a href="a00321.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for receivers of completion messages.  <a href="a00279.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::graph_iterator< GraphContainerType, GraphNodeType ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The graph class.  <a href="a00288.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::graph::run_task< Body ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::graph::run_and_put_task< Receiver, Body ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The base of all graph nodes.  <a href="a00289.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An executable node that acts as a source, i.e. it has no predecessors.  <a href="a00330.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Implements a function node that supports Input -> Output.  <a href="a00286.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Implements a function node that supports Input -> Output.  <a href="a00287.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">implements a function node that supports Input -> (set of outputs)  <a href="a00300.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::multifunction_node< Input, Output, queueing, Allocator ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="a00336.html">split_node</a>: accepts a tuple as input, forwards each element of the tuple to its  <a href="a00336.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::flow::interface6::split_node< TupleType, Allocator >::splitting_body</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Implements an executable node that supports <a class="el" href="a00277.html">continue_msg</a> -> Output.  <a href="a00278.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::overwrite_node< T ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::write_once_node< T ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages of type T to all successors.  <a href="a00262.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in arbitrary order.  <a href="a00263.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::buffer_node< T, A >::buffer_operation</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in FIFO order.  <a href="a00313.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in sequence order.  <a href="a00328.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages in priority order.  <a href="a00312.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forwards messages only if the threshold has not been reached.  <a href="a00292.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::join_node< OutputTuple, reserving ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::join_node< OutputTuple, queueing ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::join_node< OutputTuple, tag_matching ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::flow::interface6::or_node< InputTuple ></b></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"><b>concurrency</b> { <b>unlimited</b> =  0, 
+<b>serial</b> =  1
+ }</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An enumeration the provides the two most common concurrency levels: unlimited and serial. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="511941e0793451ab18c6ccf489a67e47"></a><!-- doxytag: member="flow_graph.h::make_edge" ref="511941e0793451ab18c6ccf489a67e47" args="(sender< T > &p, receiver< T > &s)" -->
+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="a00417.html#511941e0793451ab18c6ccf489a67e47">tbb::flow::interface6::make_edge</a> (sender< T > &p, receiver< T > &s)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Makes an edge between a single predecessor and a single successor. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="15f0356fd7bcade4868d3b083ea671c2"></a><!-- doxytag: member="flow_graph.h::remove_edge" ref="15f0356fd7bcade4868d3b083ea671c2" args="(sender< T > &p, receiver< T > &s)" -->
+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="a00417.html#15f0356fd7bcade4868d3b083ea671c2">tbb::flow::interface6::remove_edge</a> (sender< T > &p, receiver< T > &s)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Makes an edge between a single predecessor and a single successor. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="c8a3ee78426f0aa4df0c5a5e4bcd53e1"></a><!-- doxytag: member="flow_graph.h::copy_body" ref="c8a3ee78426f0aa4df0c5a5e4bcd53e1" args="(Node &n)" -->
+template<typename Body, typename Node> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Body </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00417.html#c8a3ee78426f0aa4df0c5a5e4bcd53e1">tbb::flow::interface6::copy_body</a> (Node &n)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns a copy of the body from a function or continue node. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The graph related classes and functions. 
+<p>
+There are some applications that best express dependencies as messages passed between nodes in a graph. These messages may contain data or simply act as signals that a predecessors has completed. The graph class and its associated node classes can be used to express such applcations. <hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00373.html b/doc/html/a00373.html
new file mode 100644
index 0000000..66fd77b
--- /dev/null
+++ b/doc/html/a00373.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>memory_pool.h File 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><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>memory_pool.h File Reference</h1>
+<p>
+<a href="a00524.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="a00414.html">tbb</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><b>tbb::interface6</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="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00296.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::interface6::memory_pool_allocator< T, P >::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="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></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="a00297.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::interface6::memory_pool_allocator< void, P >::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="a00295.html">tbb::interface6::memory_pool< Alloc ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-safe growable pool allocator for variable-size requests.  <a href="a00295.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>tbb::interface6::fixed_pool</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="157d737026f35a661bbb784af7e16cd4"></a><!-- doxytag: member="memory_pool.h::operator==" ref="157d737026f35a661bbb784af7e16cd4" args="(const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)" -->
+template<typename T, typename U, typename P> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::interface6::operator==</b> (const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="4665e8f86e3bc274708bf7994beec895"></a><!-- doxytag: member="memory_pool.h::operator!=" ref="4665e8f86e3bc274708bf7994beec895" args="(const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)" -->
+template<typename T, typename U, typename P> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::interface6::operator!=</b> (const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00383.html b/doc/html/a00383.html
deleted file mode 100644
index 1f46da7..0000000
--- a/doc/html/a00383.html
+++ /dev/null
@@ -1,714 +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="a00227.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="a00227.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="a00228.html">atomic</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00228.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="a00229.html">atomic< void * ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Specialization for <a class="el" href="a00229.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  <a href="a00229.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html">blocked_range</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00233.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.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="a00234.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.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="a00235.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html">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="a00238.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html">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="a00239.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html">combinable</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00241.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="a00321.html">tbb_hash_compare</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">hash_compare that is default argument for concurrent_hash_map  <a href="a00321.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html">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="a00242.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html">concurrent_vector</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00250.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00275.html">mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <a href="a00275.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html">null_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00277.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html">null_rw_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00279.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.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="a00281.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="a00314.html">task_group_context</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00285.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="a00285.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="a00258.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="a00258.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.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="a00282.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00303.html">simple_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <a href="a00303.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html">auto_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00231.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html">affinity_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An affinity partitioner.  <a href="a00225.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html">filter</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00256.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00322.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="a00322.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html">pipeline</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <a href="a00284.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html">queuing_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning.  <a href="a00288.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00290.html">queuing_rw_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reader-writer lock with local-only spinning.  <a href="a00290.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html">recursive_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00296.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00299.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="a00299.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.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="a00300.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00305.html">spin_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00305.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00307.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="a00307.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html">task</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <a href="a00311.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html">empty_task</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00254.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html">task_list</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <a href="a00315.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="a00316.html">task_scheduler_init</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Class delimiting the scope of task scheduler activity.  <a href="a00316.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00317.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="a00317.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.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="a00318.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00326.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="a00326.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00327.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="a00327.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html">bad_last_alloc</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for concurrent containers.  <a href="a00232.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html">improper_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for PPL locks.  <a href="a00264.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html">missing_wait</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for missing wait on structured_task_group.  <a href="a00272.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.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="a00265.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.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="a00319.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">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="a00240.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.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="a00273.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html">split</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor.  <a href="a00309.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00323.html">tick_count</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00323.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="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="a00395.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="a00395.html#g2617dc9b88b3285a7212599d49f74228">parallel_do</a> (Iterator first, Iterator last, const Body &body, <a class="el" href="a00314.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="a00395.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="a00395.html#g13cac5dd55c7533bccea43a51c33d0e5">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00303.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="a00395.html#ga7ac75d532389b55b9247f3fdb0b00d1">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00231.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00231.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="a00395.html#g9cd1b210ceb1c040f30e390b4a21bde8">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00225.html">affinity_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00225.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="a00395.html#g2d317a5e0078cd193125439fed60dfdc">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00303.html">simple_partitioner</a> &partitioner, <a class="el" href="a00314.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="a00395.html#g1c0700e3f85e83a788ff3ede88ebb7e9">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00231.html">auto_partitioner</a> &partitioner, <a class="el" href="a00314.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="a00231.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="a00395.html#g04b4696b67370c01353ff5974c8f1196">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00225.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00314.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="a00225.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="a00395.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f, <a class="el" href="a00314.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="a00395.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="a00395.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a> (const F0 &f0, const F1 &f1, <a class="el" href="a00314.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="a00314.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="a00314.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="a00314.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="a00314.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="a00314.html">tbb::task_group_context</a> &context)</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="a00314.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="a00314.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="a00314.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="a00395.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="a00395.html#gec1b7c03f9da909bef5db12e3d41bed3">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00303.html">simple_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00303.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="a00395.html#g18a19157e6245992fc00ca0adeb7dd37">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00231.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00231.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="a00395.html#gc61e73fcc36c92d79a217fc355ff4a6b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00225.html">affinity_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00225.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="a00395.html#g45cb00c42a18e334bbde8b7535afe460">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00303.html">simple_partitioner</a> &partitioner, <a class="el" href="a00314.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="a00395.html#g1c1ea1d7c61b3c225e92c70d669a53a5">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00231.html">auto_partitioner</a> &partitioner, <a class="el" href="a00314.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00231.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="a00395.html#gd9ac3a3811060314695f33b703c6e11b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00225.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00314.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00225.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="a00395.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="a00395.html#gaddffeec0e892ac3d6fc7fc2053e1eca">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00303.html">simple_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00303.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="a00395.html#gb175401f0729e40dd2c5860a17c14385">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00231.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00231.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="a00395.html#gb7f1f1828ae2b330ce05b8513a495154">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00225.html">affinity_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00225.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="a00395.html#gfbc0cc2026d87f11a96bcd62788f5bb5">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00303.html">simple_partitioner</a> &partitioner, <a class="el" href="a00314.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="a00395.html#g630c90a399937d9d4ae70ff883186dfd">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00231.html">auto_partitioner</a> &partitioner, <a class="el" href="a00314.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00231.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="a00395.html#g496bd7eadb3b97495ccb5655ef90319e">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00225.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00314.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00225.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g873006cc80868b5b4604822bf100ddeb"></a><!-- doxytag: member="tbb::parallel_deterministic_reduce" ref="g873006cc80868b5b4604822bf100ddeb" 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="a00395.html#g873006cc80868b5b4604822bf100ddeb">parallel_deterministic_reduce</a> (const Range &range, Body &body)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gfd08c56b3a98d4437dadc5365326928a"></a><!-- doxytag: member="tbb::parallel_deterministic_reduce" ref="gfd08c56b3a98d4437dadc5365326928a" args="(const Range &range, Body &body, 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="a00395.html#gfd08c56b3a98d4437dadc5365326928a">parallel_deterministic_reduce</a> (const Range &range, Body &body, <a class="el" href="a00314.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3edb17bb1967c291d227556e0e47e507"></a><!-- doxytag: member="tbb::parallel_deterministic_reduce" ref="g3edb17bb1967c291d227556e0e47e507" 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="a00395.html#g3edb17bb1967c291d227556e0e47e507">parallel_deterministic_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 deterministic reduction and default partitioner. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g0a66bc67567b2d01d709b59b9bddf84a"></a><!-- doxytag: member="tbb::parallel_deterministic_reduce" ref="g0a66bc67567b2d01d709b59b9bddf84a" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, 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="a00395.html#g0a66bc67567b2d01d709b59b9bddf84a">parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00314.html">task_group_context</a> &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner 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="a00395.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="a00395.html#gc9fac8870b2e6365fb337014404529df">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00303.html">simple_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00303.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="a00395.html#g62fde400a37bbca1a2fddc8e3d22f556">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00231.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00231.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="a00395.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="a00395.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="a00395.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="a00395.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="a00307.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="a00383.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="a00383.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> { <a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>, 
-<a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>, 
-<a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>, 
-<a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">relaxed</a>
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies memory fencing.  <a href="a00383.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="a00383.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>priority_t</b> { <b>priority_normal</b> =  internal::priority_stride_v4 * 2, 
-<b>priority_low</b> =  priority_normal - internal::priority_stride_v4, 
-<b>priority_high</b> =  priority_normal + internal::priority_stride_v4
- }</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="a00383.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="a00228.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="1ef5059a6b85fad2e4d510a5a095f2a1"></a><!-- doxytag: member="tbb::load" ref="1ef5059a6b85fad2e4d510a5a095f2a1" args="(const atomic< T > &a)" -->
-template<memory_semantics M, typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>load</b> (const <a class="el" href="a00228.html">atomic</a>< T > &a)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="0fc5e34a898372157343886babe84045"></a><!-- doxytag: member="tbb::store" ref="0fc5e34a898372157343886babe84045" args="(atomic< T > &a, T value)" -->
-template<memory_semantics M, typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>store</b> (<a class="el" href="a00228.html">atomic</a>< T > &a, T value)</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="a00238.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00238.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="a00238.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00238.html">cache_aligned_allocator</a>< U > &)</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="a00243.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00243.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="a00243.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00243.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="a00243.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &a, <a class="el" href="a00243.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="a00250.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00250.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="a00250.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00250.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="a00250.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00250.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="a00250.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00250.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="a00250.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00250.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="a00250.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00250.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="a00250.html">concurrent_vector</a>< T, A > &a, <a class="el" href="a00250.html">concurrent_vector</a>< T, A > &b)</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="a00299.html">scalable_allocator</a>< T > &, const <a class="el" href="a00299.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="a00299.html">scalable_allocator</a>< T > &, const <a class="el" href="a00299.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="a00317.html">tbb_allocator</a>< T > &, const <a class="el" href="a00317.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="a00317.html">tbb_allocator</a>< T > &, const <a class="el" href="a00317.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="a00326.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00326.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="a00326.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00326.html">zero_allocator</a>< T2, B2 > &b)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="250275615f10d5b5de6ad466ae2f54de"></a><!-- doxytag: member="tbb::atomic_fence" ref="250275615f10d5b5de6ad466ae2f54de" args="()" -->
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00383.html#250275615f10d5b5de6ad466ae2f54de">atomic_fence</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Sequentially consistent full memory fence. <br></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="a00383.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00383.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a> (<a class="el" href="a00383.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="a00383.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="a00383.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="a00324.html">tick_count::interval_t</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00323.html">tick_count</a> &t1, const <a class="el" href="a00323.html">tick_count</a> &t0)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-The namespace tbb contains all components of the library. 
-<p>
-This header provides basic platform abstraction layer by hooking up appropriate architecture/OS/compiler specific headers from the /include/tbb/machine directory. If a plug-in header does not implement all the required APIs, it must specify the missing ones by setting one or more of the following macros:<p>
-__TBB_USE_GENERIC_PART_WORD_CAS __TBB_USE_GENERIC_PART_WORD_FETCH_ADD __TBB_USE_GENERIC_PART_WORD_FETCH_STORE __TBB_USE_GENERIC_FETCH_ADD __TBB_USE_GENERIC_FETCH_STORE __TBB_USE_GENERIC_DWORD_FETCH_ADD __TBB_USE_GENERIC_DWORD_FETCH_STORE __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE __TBB_USE_GENERIC_FULL_FENCED_LOAD_STORE __TBB_USE_GENERIC_RELAXED_LOAD_STORE __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE<p>
-In this case <a class="el" href="a00594.html">tbb_machine.h</a> will add missing functionality based on a minimal set of APIs that are required to be implemented by all plug-n headers as described futher. Note that these generic implementations may be sub-optimal for a particular architecture, and thus should be relied upon only after careful evaluation or as the last resort.<p>
-Additionally __TBB_64BIT_ATOMICS can be set to 0 on a 32-bit architecture to indicate that the port is not going to support double word atomics. It may also be set to 1 explicitly, though normally this is not necessary as <a class="el" href="a00594.html">tbb_machine.h</a> will set it automatically.<p>
-Prerequisites for each architecture port ---------------------------------------- The following functions have no generic implementation. Therefore they must be implemented in each machine architecture specific header either as a conventional function or as a functional macro.<p>
-__TBB_Yield() Signals OS that the current thread is willing to relinquish the remainder of its time quantum.<p>
-__TBB_full_memory_fence() Must prevent all memory operations from being reordered across it (both by hardware and compiler). All such fences must be totally ordered (or sequentially consistent).<p>
-__TBB_machine_cmpswp4( volatile void *ptr, int32_t value, int32_t comparand ) Must be provided if __TBB_USE_FENCED_ATOMICS is not set.<p>
-__TBB_machine_cmpswp8( volatile void *ptr, int32_t value, int64_t comparand ) Must be provided for 64-bit architectures if __TBB_USE_FENCED_ATOMICS is not set, and for 32-bit architectures if __TBB_64BIT_ATOMICS is set<p>
-__TBB_machine_<op><S><fence>(...), where <op> = {cmpswp, fetchadd, fetchstore} <S> = {1, 2, 4, 8} <fence> = {full_fence, acquire, release, relaxed} Must be provided if __TBB_USE_FENCED_ATOMICS is set.<p>
-__TBB_control_consistency_helper() Bridges the memory-semantics gap between architectures providing only implicit C++0x "consume" semantics (like Power Architecture) and those also implicitly obeying control dependencies (like Itanium). It must be used only in conditional code where the condition is itself data-dependent, and will then make subsequent code behave as if the original data dependency were acquired. It needs only an empty definition where implied by the architecture either s [...]
-__TBB_acquire_consistency_helper(), __TBB_release_consistency_helper() Must be provided if __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE is set. Enforce acquire and release semantics in generic implementations of fenced store and load operations. Depending on the particular architecture/compiler combination they may be a hardware fence, a compiler fence, both or nothing. 
-<p>
-<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="a00383.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="a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff"></a><!-- doxytag: member="full_fence" ref="a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff" args="" -->full_fence</em> </td><td>
-Sequentially consistent fence. </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>
-<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900"></a><!-- doxytag: member="relaxed" ref="a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900" args="" -->relaxed</em> </td><td>
-No ordering. </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-2011 Intel Corporation.  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/a00392.html b/doc/html/a00392.html
new file mode 100644
index 0000000..caf2a9b
--- /dev/null
+++ b/doc/html/a00392.html
@@ -0,0 +1,119 @@
+<!DOCTYPE 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 File 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><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>scalable_allocator.h File Reference</h1>
+<p>
+<a href="a00608.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="a00411.html">rml</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00414.html">tbb</a></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>rml::MemPoolPolicy</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00325.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="a00325.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="a00326.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="a00326.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>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5af06ad025ac20cff3a1c13aa5bded5c"></a><!-- doxytag: member="scalable_allocator.h::rawAllocType" ref="5af06ad025ac20cff3a1c13aa5bded5c" args="(intptr_t pool_id, size_t &bytes)" -->
+typedef void *(*) </td><td class="memItemRight" valign="bottom"><b>rml::rawAllocType</b> (intptr_t pool_id, size_t &bytes)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="49f1efbc1496ae2c1492093bb222051b"></a><!-- doxytag: member="scalable_allocator.h::rawFreeType" ref="49f1efbc1496ae2c1492093bb222051b" args="(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)" -->
+typedef int(*) </td><td class="memItemRight" valign="bottom"><b>rml::rawFreeType</b> (intptr_t pool_id, void *raw_ptr, size_t raw_bytes)</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"><b>MemPoolError</b> { <b>POOL_OK</b>, 
+<b>INVALID_POLICY</b>, 
+<b>UNSUPPORTED_POLICY</b>, 
+<b>NO_MEMORY</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="a00428.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="a00428.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="a00428.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="a00428.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="a00428.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="a00428.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="a00428.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="a00428.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="a00428.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7be7b591205c8bf497261d40c0304ab9"></a><!-- doxytag: member="scalable_allocator.h::pool_create_v1" ref="7be7b591205c8bf497261d40c0304ab9" args="(intptr_t pool_id, const MemPoolPolicy *policy, rml::MemoryPool **pool)" -->
+MemPoolError </td><td class="memItemRight" valign="bottom"><b>rml::pool_create_v1</b> (intptr_t pool_id, const MemPoolPolicy *policy, rml::MemoryPool **pool)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="66dafd186fef3ce07c5acfa57309671d"></a><!-- doxytag: member="scalable_allocator.h::pool_destroy" ref="66dafd186fef3ce07c5acfa57309671d" args="(MemoryPool *memPool)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_destroy</b> (MemoryPool *memPool)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1f68622d83e291b152ba9bdb5eb54c4c"></a><!-- doxytag: member="scalable_allocator.h::pool_malloc" ref="1f68622d83e291b152ba9bdb5eb54c4c" args="(MemoryPool *memPool, size_t size)" -->
+void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_malloc</b> (MemoryPool *memPool, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c46ef1c26429df31030d3278e5479fc"></a><!-- doxytag: member="scalable_allocator.h::pool_realloc" ref="4c46ef1c26429df31030d3278e5479fc" args="(MemoryPool *memPool, void *object, size_t size)" -->
+void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_realloc</b> (MemoryPool *memPool, void *object, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b5691c8c9d0b5760f98af1b0f932fb2b"></a><!-- doxytag: member="scalable_allocator.h::pool_aligned_malloc" ref="b5691c8c9d0b5760f98af1b0f932fb2b" args="(MemoryPool *mPool, size_t size, size_t alignment)" -->
+void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_aligned_malloc</b> (MemoryPool *mPool, size_t size, size_t alignment)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e72b27fec45be45319d732b5cdb8ef3c"></a><!-- doxytag: member="scalable_allocator.h::pool_aligned_realloc" ref="e72b27fec45be45319d732b5cdb8ef3c" args="(MemoryPool *mPool, void *ptr, size_t size, size_t alignment)" -->
+void * </td><td class="memItemRight" valign="bottom"><b>rml::pool_aligned_realloc</b> (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3eab1c7294baade9d21fad92f979890a"></a><!-- doxytag: member="scalable_allocator.h::pool_reset" ref="3eab1c7294baade9d21fad92f979890a" args="(MemoryPool *memPool)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_reset</b> (MemoryPool *memPool)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e43a04a5b9e84bb26345945b1a15ed28"></a><!-- doxytag: member="scalable_allocator.h::pool_free" ref="e43a04a5b9e84bb26345945b1a15ed28" args="(MemoryPool *memPool, void *object)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>rml::pool_free</b> (MemoryPool *memPool, void *object)</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>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>tbb::operator==</b> (const scalable_allocator< T > &, const scalable_allocator< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a92757aca0a69082eb8dc223eb257433"></a><!-- doxytag: member="scalable_allocator.h::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>tbb::operator!=</b> (const scalable_allocator< T > &, const scalable_allocator< U > &)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00395.html b/doc/html/a00395.html
deleted file mode 100644
index 6640b97..0000000
--- a/doc/html/a00395.html
+++ /dev/null
@@ -1,364 +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>Algorithms</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>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="a00233.html">tbb::blocked_range< Value ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00233.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.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="a00234.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.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="a00235.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="a00285.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="a00285.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="a00258.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="a00258.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.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="a00282.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00303.html">tbb::simple_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <a href="a00303.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html">tbb::auto_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00231.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html">tbb::filter</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00256.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00322.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="a00322.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html">tbb::pipeline</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <a href="a00284.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.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="a00309.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="a00395.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="a00395.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="a00395.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="a00395.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="a00395.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="a00231.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="a00395.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="a00225.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="a00395.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="a00395.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="a00231.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="a00395.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="a00225.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="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">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00395.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="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">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00395.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="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="a00395.html#gd3e2998f171494f94c2103f4eb924084">tbb::parallel_invoke</a> (const F0 &f0, const F1 &f1, <a class="el" href="a00314.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="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> (const F0 &f0, const F1 &f1, const F2 &f2, <a class="el" href="a00314.html">tbb::task_group_context</a> &context)</td></tr>
-
-<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> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, <a class="el" href="a00314.html">tbb::task_group_context</a> &context)</td></tr>
-
-<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> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, <a class="el" href="a00314.html">tbb::task_group_context</a> &context)</td></tr>
-
-<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> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, <a class="el" href="a00314.html">tbb::task_group_context</a> &context)</td></tr>
-
-<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> (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="a00314.html">tbb::task_group_context</a> &context)</td></tr>
-
-<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> (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="a00314.html">tbb::task_group_context</a> &context)</td></tr>
-
-<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> (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="a00314.html">tbb::task_group_context</a> &context)</td></tr>
-
-<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> (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="a00314.html">tbb::task_group_context</a> &context)</td></tr>
-
-<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> (const F0 &f0, const F1 &f1)</td></tr>
-
-<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> (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="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> (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="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> (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="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> (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="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> (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="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> (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="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> (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="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> (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="a00395.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="a00395.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="a00303.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="a00395.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="a00231.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="a00395.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="a00225.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="a00395.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="a00395.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="a00231.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="a00395.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="a00225.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="a00395.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="a00395.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="a00303.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="a00395.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="a00231.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="a00395.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="a00225.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="a00395.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="a00395.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="a00231.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="a00395.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="a00225.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g873006cc80868b5b4604822bf100ddeb"></a><!-- doxytag: member="algorithms::parallel_deterministic_reduce" ref="g873006cc80868b5b4604822bf100ddeb" 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="a00395.html#g873006cc80868b5b4604822bf100ddeb">tbb::parallel_deterministic_reduce</a> (const Range &range, Body &body)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gfd08c56b3a98d4437dadc5365326928a"></a><!-- doxytag: member="algorithms::parallel_deterministic_reduce" ref="gfd08c56b3a98d4437dadc5365326928a" args="(const Range &range, Body &body, 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="a00395.html#gfd08c56b3a98d4437dadc5365326928a">tbb::parallel_deterministic_reduce</a> (const Range &range, Body &body, task_group_context &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3edb17bb1967c291d227556e0e47e507"></a><!-- doxytag: member="algorithms::parallel_deterministic_reduce" ref="g3edb17bb1967c291d227556e0e47e507" 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="a00395.html#g3edb17bb1967c291d227556e0e47e507">tbb::parallel_deterministic_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 deterministic reduction and default partitioner. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g0a66bc67567b2d01d709b59b9bddf84a"></a><!-- doxytag: member="algorithms::parallel_deterministic_reduce" ref="g0a66bc67567b2d01d709b59b9bddf84a" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, 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="a00395.html#g0a66bc67567b2d01d709b59b9bddf84a">tbb::parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, task_group_context &context)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner 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="a00395.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="a00395.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="a00303.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="a00395.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="a00231.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="a00395.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="a00395.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="a00395.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>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="g49edcf9447cd91a9527a3f8e8512b7aa"></a><!-- doxytag: member="tbb::parallel_sort" ref="g49edcf9447cd91a9527a3f8e8512b7aa" args="(RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename RandomAccessIterator, typename Compare> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">void tbb::parallel_sort           </td>
-          <td>(</td>
-          <td class="paramtype">RandomAccessIterator </td>
-          <td class="paramname"> <em>begin</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">RandomAccessIterator </td>
-          <td class="paramname"> <em>end</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const Compare & </td>
-          <td class="paramname"> <em>comp</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>
-Sorts the data in [begin,end) using the given comparator. 
-<p>
-The compare function object is used for all comparisons between elements during sorting. The compare object must define a bool operator() function. 
-</div>
-</div><p>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00396.html b/doc/html/a00396.html
deleted file mode 100644
index f6ebde6..0000000
--- a/doc/html/a00396.html
+++ /dev/null
@@ -1,50 +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>Containers</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>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="a00241.html">tbb::combinable< T ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00241.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html">tbb::interface5::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="a00243.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html">tbb::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="a00248.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html">tbb::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="a00242.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00249.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="a00249.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00250.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="a00255.html">enumerable_thread_specific</a> container.  <a href="a00255.html#_details">More...</a><br></td></tr>
-</table>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00397.html b/doc/html/a00397.html
deleted file mode 100644
index 6346401..0000000
--- a/doc/html/a00397.html
+++ /dev/null
@@ -1,319 +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>Memory Allocation</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>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="a00227.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="a00227.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.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="a00238.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html">tbb::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="a00239.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00270.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></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="a00271.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00299.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="a00299.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.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="a00300.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00317.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="a00317.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.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="a00318.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00326.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="a00326.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00327.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="a00327.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="a00397.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="a00397.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="a00397.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="a00397.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="a00397.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="a00397.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="a00397.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="a00397.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="a00397.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</td></tr>
-
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="g65a20e812012f15ec7442d5b45d0cba5"></a><!-- doxytag: member="scalable_allocator.h::scalable_aligned_free" ref="g65a20e812012f15ec7442d5b45d0cba5" args="(void *ptr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_FUNC scalable_aligned_free           </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"> <em>ptr</em>          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-The "_aligned_free" analogue. 
-</div>
-</div><p>
-<a class="anchor" name="gc1c7aaa1fe85c17ba5a3a96f7e8d89e7"></a><!-- doxytag: member="scalable_allocator.h::scalable_aligned_malloc" ref="gc1c7aaa1fe85c17ba5a3a96f7e8d89e7" args="(size_t size, size_t alignment)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_aligned_malloc           </td>
-          <td>(</td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"> <em>size</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"> <em>alignment</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 "_aligned_malloc" analogue. 
-</div>
-</div><p>
-<a class="anchor" name="gbaea91376be80dfabd7c93eaffd9abaa"></a><!-- doxytag: member="scalable_allocator.h::scalable_aligned_realloc" ref="gbaea91376be80dfabd7c93eaffd9abaa" args="(void *ptr, size_t size, size_t alignment)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_aligned_realloc           </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"> <em>ptr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"> <em>size</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"> <em>alignment</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 "_aligned_realloc" analogue. 
-</div>
-</div><p>
-<a class="anchor" name="g3f5a2fde0bcaa3eda35be32c8658f444"></a><!-- doxytag: member="scalable_allocator.h::scalable_calloc" ref="g3f5a2fde0bcaa3eda35be32c8658f444" args="(size_t nobj, size_t size)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_calloc           </td>
-          <td>(</td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"> <em>nobj</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"> <em>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 "calloc" analogue complementing scalable_malloc. 
-</div>
-</div><p>
-<a class="anchor" name="gca3579c21244dba9f0c351e5984d4565"></a><!-- doxytag: member="scalable_allocator.h::scalable_free" ref="gca3579c21244dba9f0c351e5984d4565" args="(void *ptr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void __TBB_EXPORTED_FUNC scalable_free           </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"> <em>ptr</em>          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-The "free" analogue to discard a previously allocated piece of memory. 
-</div>
-</div><p>
-<a class="anchor" name="gc25b8e6c76db0b346a8249796a7a2475"></a><!-- doxytag: member="scalable_allocator.h::scalable_malloc" ref="gc25b8e6c76db0b346a8249796a7a2475" args="(size_t size)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_malloc           </td>
-          <td>(</td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"> <em>size</em>          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-The "malloc" analogue to allocate block of memory of size bytes. 
-</div>
-</div><p>
-<a class="anchor" name="g0965ce1b4b7835f92869c7fd867265f7"></a><!-- doxytag: member="scalable_allocator.h::scalable_msize" ref="g0965ce1b4b7835f92869c7fd867265f7" args="(void *ptr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">size_t __TBB_EXPORTED_FUNC scalable_msize           </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"> <em>ptr</em>          </td>
-          <td> ) </td>
-          <td width="100%"></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>
-The analogue of _msize/malloc_size/malloc_usable_size. Returns the usable size of a memory block previously allocated by scalable_*, or 0 (zero) if ptr does not point to such a block. 
-</div>
-</div><p>
-<a class="anchor" name="g05dcec987480bb2c82ecdead6a085899"></a><!-- doxytag: member="scalable_allocator.h::scalable_posix_memalign" ref="g05dcec987480bb2c82ecdead6a085899" args="(void **memptr, size_t alignment, size_t size)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int __TBB_EXPORTED_FUNC scalable_posix_memalign           </td>
-          <td>(</td>
-          <td class="paramtype">void ** </td>
-          <td class="paramname"> <em>memptr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"> <em>alignment</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"> <em>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 "posix_memalign" analogue. 
-</div>
-</div><p>
-<a class="anchor" name="g951bbbbd2d041acb59ba5fa910b52543"></a><!-- doxytag: member="scalable_allocator.h::scalable_realloc" ref="g951bbbbd2d041acb59ba5fa910b52543" args="(void *ptr, size_t size)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_realloc           </td>
-          <td>(</td>
-          <td class="paramtype">void * </td>
-          <td class="paramname"> <em>ptr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"> <em>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 "realloc" analogue complementing scalable_malloc. 
-</div>
-</div><p>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00398.html b/doc/html/a00398.html
deleted file mode 100644
index c5e70a7..0000000
--- a/doc/html/a00398.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>Synchronization</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>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="a00228.html">tbb::atomic< T ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00228.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00275.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="a00275.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html">tbb::null_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00277.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html">tbb::null_rw_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00279.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html">tbb::queuing_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning.  <a href="a00288.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00290.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="a00290.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Writer-preference reader-writer lock with local-only spinning on readers.  <a href="a00292.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html">tbb::recursive_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00296.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00305.html">tbb::spin_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00305.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00307.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="a00307.html#_details">More...</a><br></td></tr>
-</table>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00399.html b/doc/html/a00399.html
deleted file mode 100644
index 417436a..0000000
--- a/doc/html/a00399.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Timing</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>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="a00323.html">tbb::tick_count</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00323.html#_details">More...</a><br></td></tr>
-</table>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00400.html b/doc/html/a00400.html
deleted file mode 100644
index f7a8d60..0000000
--- a/doc/html/a00400.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Task Scheduling</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>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="a00313.html">tbb::task_group_context</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to form groups of tasks.  <a href="a00313.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.html">tbb::task</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <a href="a00311.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html">tbb::empty_task</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00254.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html">tbb::task_list</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <a href="a00315.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00316.html">tbb::task_scheduler_init</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Class delimiting the scope of task scheduler activity.  <a href="a00316.html#_details">More...</a><br></td></tr>
-</table>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00401.html b/doc/html/a00401.html
deleted file mode 100644
index 48227c6..0000000
--- a/doc/html/a00401.html
+++ /dev/null
@@ -1,73 +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>aligned_space.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>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-2011 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_aligned_space_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_aligned_space_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><a class="code" href="a00383.html">00027</a> <span class="keyword">namespace </span>tbb {
-<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="a00227.html">00033</a> <span class="keyword">class </span><a class="code" href="a00227.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="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">00039</a>     T* <a class="code" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>() {<span class="keywordflow">return</span> internal::punned_cast<T*>(<span class="keyword">this</span>);}
-<a name="l00040"></a>00040 
-<a name="l00042"></a><a class="code" href="a00227.html#024be075c23c0394c9a2518d993bcd9e">00042</a>     T* <a class="code" href="a00227.html#024be075c23c0394c9a2518d993bcd9e">end</a>() {<span class="keywordflow">return</span> <a class="code" href="a00227.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>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_aligned_space_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00403.html b/doc/html/a00403.html
deleted file mode 100644
index 4b66fa4..0000000
--- a/doc/html/a00403.html
+++ /dev/null
@@ -1,433 +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-2011 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="a00383.html#a8686246bb5d3664bd07563749970fef">00044</a> <span class="keyword">enum</span> <a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> {
-<a name="l00046"></a>00046     <a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>,
-<a name="l00048"></a>00048     <a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>,
-<a name="l00050"></a>00050     <a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>,
-<a name="l00052"></a>00052     <a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">relaxed</a>
-<a name="l00053"></a>00053 };
-<a name="l00054"></a>00054 
-<a name="l00056"></a>00056 <span class="keyword">namespace </span>internal {
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="preprocessor">#if __TBB_ATTRIBUTE_ALIGNED_PRESENT</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#elif __TBB_DECLSPEC_ALIGN_PRESENT</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;</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">    #error Do not know syntax for forcing alignment.</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span>
-<a name="l00066"></a>00066 <span class="keyword">template</span><size_t S>
-<a name="l00067"></a>00067 <span class="keyword">struct </span>atomic_rep;           <span class="comment">// Primary template declared, but never defined.</span>
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="keyword">template</span><>
-<a name="l00070"></a>00070 <span class="keyword">struct </span>atomic_rep<1> {       <span class="comment">// Specialization</span>
-<a name="l00071"></a>00071     <span class="keyword">typedef</span> int8_t word;
-<a name="l00072"></a>00072     int8_t value;
-<a name="l00073"></a>00073 };
-<a name="l00074"></a>00074 <span class="keyword">template</span><>
-<a name="l00075"></a>00075 <span class="keyword">struct </span>atomic_rep<2> {       <span class="comment">// Specialization</span>
-<a name="l00076"></a>00076     <span class="keyword">typedef</span> int16_t word;
-<a name="l00077"></a>00077     __TBB_DECL_ATOMIC_FIELD(int16_t,value,2)
-<a name="l00078"></a>00078 };
-<a name="l00079"></a>00079 <span class="keyword">template</span><>
-<a name="l00080"></a>00080 <span class="keyword">struct </span>atomic_rep<4> {       <span class="comment">// Specialization</span>
-<a name="l00081"></a>00081 <span class="preprocessor">#if _MSC_VER && __TBB_WORDSIZE==4</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span>    <span class="comment">// Work-around that avoids spurious /Wp64 warnings</span>
-<a name="l00083"></a>00083     <span class="keyword">typedef</span> intptr_t word;
-<a name="l00084"></a>00084 <span class="preprocessor">#else</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span>    <span class="keyword">typedef</span> int32_t word;
-<a name="l00086"></a>00086 <span class="preprocessor">#endif</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span>    __TBB_DECL_ATOMIC_FIELD(int32_t,value,4)
-<a name="l00088"></a>00088 };
-<a name="l00089"></a>00089 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="keyword">template</span><>
-<a name="l00091"></a>00091 <span class="keyword">struct </span>atomic_rep<8> {       <span class="comment">// Specialization</span>
-<a name="l00092"></a>00092     <span class="keyword">typedef</span> int64_t word;
-<a name="l00093"></a>00093     __TBB_DECL_ATOMIC_FIELD(int64_t,value,8)
-<a name="l00094"></a>00094 };
-<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>
-<a name="l00097"></a>00097 <span class="keyword">template</span><size_t Size, memory_semantics M>
-<a name="l00098"></a>00098 <span class="keyword">struct </span>atomic_traits;        <span class="comment">// Primary template declared, but not defined.</span>
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="preprocessor">#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M)                                                         \</span>
-<a name="l00101"></a>00101 <span class="preprocessor">    template<> struct atomic_traits<S,M> {                                                               \</span>
-<a name="l00102"></a>00102 <span class="preprocessor">        typedef atomic_rep<S>::word word;                                                                \</span>
-<a name="l00103"></a>00103 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) { \</span>
-<a name="l00104"></a>00104 <span class="preprocessor">            return __TBB_machine_cmpswp##S##M(location,new_value,comparand);                             \</span>
-<a name="l00105"></a>00105 <span class="preprocessor">        }                                                                                                \</span>
-<a name="l00106"></a>00106 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) {                       \</span>
-<a name="l00107"></a>00107 <span class="preprocessor">            return __TBB_machine_fetchadd##S##M(location,addend);                                        \</span>
-<a name="l00108"></a>00108 <span class="preprocessor">        }                                                                                                \</span>
-<a name="l00109"></a>00109 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {                      \</span>
-<a name="l00110"></a>00110 <span class="preprocessor">            return __TBB_machine_fetchstore##S##M(location,value);                                       \</span>
-<a name="l00111"></a>00111 <span class="preprocessor">        }                                                                                                \</span>
-<a name="l00112"></a>00112 <span class="preprocessor">    };</span>
-<a name="l00113"></a>00113 <span class="preprocessor"></span>
-<a name="l00114"></a>00114 <span class="preprocessor">#define __TBB_DECL_ATOMIC_PRIMITIVES(S)                                                                  \</span>
-<a name="l00115"></a>00115 <span class="preprocessor">    template<memory_semantics M>                                                                         \</span>
-<a name="l00116"></a>00116 <span class="preprocessor">    struct atomic_traits<S,M> {                                                                          \</span>
-<a name="l00117"></a>00117 <span class="preprocessor">        typedef atomic_rep<S>::word word;                                                                \</span>
-<a name="l00118"></a>00118 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) { \</span>
-<a name="l00119"></a>00119 <span class="preprocessor">            return __TBB_machine_cmpswp##S(location,new_value,comparand);                                \</span>
-<a name="l00120"></a>00120 <span class="preprocessor">        }                                                                                                \</span>
-<a name="l00121"></a>00121 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) {                       \</span>
-<a name="l00122"></a>00122 <span class="preprocessor">            return __TBB_machine_fetchadd##S(location,addend);                                           \</span>
-<a name="l00123"></a>00123 <span class="preprocessor">        }                                                                                                \</span>
-<a name="l00124"></a>00124 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {                      \</span>
-<a name="l00125"></a>00125 <span class="preprocessor">            return __TBB_machine_fetchstore##S(location,value);                                          \</span>
-<a name="l00126"></a>00126 <span class="preprocessor">        }                                                                                                \</span>
-<a name="l00127"></a>00127 <span class="preprocessor">    };</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span>
-<a name="l00129"></a>00129 <span class="keyword">template</span><memory_semantics M>
-<a name="l00130"></a>00130 <span class="keyword">struct </span>atomic_load_store_traits;    <span class="comment">// Primary template declaration</span>
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132 <span class="preprocessor">#define __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(M)                      \</span>
-<a name="l00133"></a>00133 <span class="preprocessor">    template<> struct atomic_load_store_traits<M> {                     \</span>
-<a name="l00134"></a>00134 <span class="preprocessor">        template <typename T>                                           \</span>
-<a name="l00135"></a>00135 <span class="preprocessor">        inline static T load( const volatile T& location ) {            \</span>
-<a name="l00136"></a>00136 <span class="preprocessor">            return __TBB_load_##M( location );                          \</span>
-<a name="l00137"></a>00137 <span class="preprocessor">        }                                                               \</span>
-<a name="l00138"></a>00138 <span class="preprocessor">        template <typename T>                                           \</span>
-<a name="l00139"></a>00139 <span class="preprocessor">        inline static void store( volatile T& location, T value ) {     \</span>
-<a name="l00140"></a>00140 <span class="preprocessor">            __TBB_store_##M( location, value );                         \</span>
-<a name="l00141"></a>00141 <span class="preprocessor">        }                                                               \</span>
-<a name="l00142"></a>00142 <span class="preprocessor">    }</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span>
-<a name="l00144"></a>00144 <span class="preprocessor">#if __TBB_USE_FENCED_ATOMICS</span>
-<a name="l00145"></a>00145 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>)
-<a name="l00146"></a>00146 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>)
-<a name="l00147"></a>00147 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>)
-<a name="l00148"></a>00148 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00149"></a>00149 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00150"></a>00150 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00151"></a>00151 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00152"></a>00152 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00153"></a>00153 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00154"></a>00154 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">relaxed</a>)
-<a name="l00155"></a>00155 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">relaxed</a>)
-<a name="l00156"></a>00156 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">relaxed</a>)
-<a name="l00157"></a>00157 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
-<a name="l00158"></a>00158 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>)
-<a name="l00159"></a>00159 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
-<a name="l00160"></a>00160 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
-<a name="l00161"></a>00161 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,relaxed)
-<a name="l00162"></a>00162 <span class="preprocessor">#endif</span>
-<a name="l00163"></a>00163 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !__TBB_USE_FENCED_ATOMICS */</span>
-<a name="l00164"></a>00164 __TBB_DECL_ATOMIC_PRIMITIVES(1)
-<a name="l00165"></a>00165 __TBB_DECL_ATOMIC_PRIMITIVES(2)
-<a name="l00166"></a>00166 __TBB_DECL_ATOMIC_PRIMITIVES(4)
-<a name="l00167"></a>00167 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
-<a name="l00168"></a>00168 <span class="preprocessor"></span>__TBB_DECL_ATOMIC_PRIMITIVES(8)
-<a name="l00169"></a>00169 <span class="preprocessor">#endif</span>
-<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__TBB_USE_FENCED_ATOMICS */</span>
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>);
-<a name="l00173"></a>00173 __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>);
-<a name="l00174"></a>00174 __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(<a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>);
-<a name="l00175"></a>00175 __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(relaxed);
-<a name="l00176"></a>00176 
-<a name="l00178"></a>00178 
-<a name="l00180"></a>00180 <span class="preprocessor">#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))</span>
-<a name="l00181"></a>00181 <span class="preprocessor"></span>
-<a name="l00183"></a>00183 
-<a name="l00185"></a>00185 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00186"></a>00186 <span class="keyword">struct </span>atomic_impl {
-<a name="l00187"></a>00187 <span class="keyword">protected</span>:
-<a name="l00188"></a>00188     atomic_rep<sizeof(T)> rep;
-<a name="l00189"></a>00189 <span class="keyword">private</span>:
-<a name="l00191"></a>00191     <span class="keyword">union </span>converter {
-<a name="l00192"></a>00192         T value;
-<a name="l00193"></a>00193         <span class="keyword">typename</span> atomic_rep<sizeof(T)>::word bits;
-<a name="l00194"></a>00194     };
-<a name="l00195"></a>00195 <span class="keyword">public</span>:
-<a name="l00196"></a>00196     <span class="keyword">typedef</span> T value_type;
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     <span class="keyword">template</span><memory_semantics M>
-<a name="l00199"></a>00199     value_type fetch_and_store( value_type value ) {
-<a name="l00200"></a>00200         converter u, w;
-<a name="l00201"></a>00201         u.value = value;
-<a name="l00202"></a>00202         w.bits = internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&rep.value,u.bits);
-<a name="l00203"></a>00203         <span class="keywordflow">return</span> w.value;
-<a name="l00204"></a>00204     }
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     value_type fetch_and_store( value_type value ) {
-<a name="l00207"></a>00207         <span class="keywordflow">return</span> fetch_and_store<full_fence>(value);
-<a name="l00208"></a>00208     }
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210     <span class="keyword">template</span><memory_semantics M>
-<a name="l00211"></a>00211     value_type compare_and_swap( value_type value, value_type comparand ) {
-<a name="l00212"></a>00212         converter u, v, w;
-<a name="l00213"></a>00213         u.value = value;
-<a name="l00214"></a>00214         v.value = comparand;
-<a name="l00215"></a>00215         w.bits = internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&rep.value,u.bits,v.bits);
-<a name="l00216"></a>00216         <span class="keywordflow">return</span> w.value;
-<a name="l00217"></a>00217     }
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219     value_type compare_and_swap( value_type value, value_type comparand ) {
-<a name="l00220"></a>00220         <span class="keywordflow">return</span> compare_and_swap<full_fence>(value,comparand);
-<a name="l00221"></a>00221     }
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223     operator value_type()<span class="keyword"> const volatile </span>{                <span class="comment">// volatile qualifier here for backwards compatibility </span>
-<a name="l00224"></a>00224         converter w;
-<a name="l00225"></a>00225         w.bits = __TBB_load_with_acquire( rep.value );
-<a name="l00226"></a>00226         <span class="keywordflow">return</span> w.value;
-<a name="l00227"></a>00227     }
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229     <span class="keyword">template</span><memory_semantics M>
-<a name="l00230"></a>00230     value_type load ()<span class="keyword"> const </span>{
-<a name="l00231"></a>00231         converter u;
-<a name="l00232"></a>00232         u.bits = internal::atomic_load_store_traits<M>::load( rep.value );
-<a name="l00233"></a>00233         <span class="keywordflow">return</span> u.value;
-<a name="l00234"></a>00234     }
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236     value_type load ()<span class="keyword"> const </span>{
-<a name="l00237"></a>00237         <span class="keywordflow">return</span> load<acquire>();
-<a name="l00238"></a>00238     }
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240     <span class="keyword">template</span><memory_semantics M>
-<a name="l00241"></a>00241     <span class="keywordtype">void</span> store ( value_type value ) {
-<a name="l00242"></a>00242         converter u;
-<a name="l00243"></a>00243         u.value = value;
-<a name="l00244"></a>00244         internal::atomic_load_store_traits<M>::store( rep.value, u.bits );
-<a name="l00245"></a>00245     }
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247     <span class="keywordtype">void</span> store ( value_type value ) {
-<a name="l00248"></a>00248         store<release>( value );
-<a name="l00249"></a>00249     }
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251 <span class="keyword">protected</span>:
-<a name="l00252"></a>00252     value_type store_with_release( value_type rhs ) {
-<a name="l00253"></a>00253         converter u;
-<a name="l00254"></a>00254         u.value = rhs;
-<a name="l00255"></a>00255         __TBB_store_with_release(rep.value,u.bits);
-<a name="l00256"></a>00256         <span class="keywordflow">return</span> rhs;
-<a name="l00257"></a>00257     }
-<a name="l00258"></a>00258 };
-<a name="l00259"></a>00259 
-<a name="l00261"></a>00261 
-<a name="l00264"></a>00264 <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="l00265"></a>00265 <span class="keyword">struct </span>atomic_impl_with_arithmetic: atomic_impl<I> {
-<a name="l00266"></a>00266 <span class="keyword">public</span>:
-<a name="l00267"></a>00267     <span class="keyword">typedef</span> I value_type;
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269     <span class="keyword">template</span><memory_semantics M>
-<a name="l00270"></a>00270     value_type fetch_and_add( D addend ) {
-<a name="l00271"></a>00271         <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="l00272"></a>00272     }
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274     value_type fetch_and_add( D addend ) {
-<a name="l00275"></a>00275         <span class="keywordflow">return</span> fetch_and_add<full_fence>(addend);
-<a name="l00276"></a>00276     }
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278     <span class="keyword">template</span><memory_semantics M>
-<a name="l00279"></a>00279     value_type fetch_and_increment() {
-<a name="l00280"></a>00280         <span class="keywordflow">return</span> fetch_and_add<M>(1);
-<a name="l00281"></a>00281     }
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283     value_type fetch_and_increment() {
-<a name="l00284"></a>00284         <span class="keywordflow">return</span> fetch_and_add(1);
-<a name="l00285"></a>00285     }
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287     <span class="keyword">template</span><memory_semantics M>
-<a name="l00288"></a>00288     value_type fetch_and_decrement() {
-<a name="l00289"></a>00289         <span class="keywordflow">return</span> fetch_and_add<M>(__TBB_MINUS_ONE(D));
-<a name="l00290"></a>00290     }
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292     value_type fetch_and_decrement() {
-<a name="l00293"></a>00293         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
-<a name="l00294"></a>00294     }
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296 <span class="keyword">public</span>:
-<a name="l00297"></a>00297     value_type operator+=( D addend ) {
-<a name="l00298"></a>00298         <span class="keywordflow">return</span> fetch_and_add(addend)+addend;
-<a name="l00299"></a>00299     }
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301     value_type operator-=( D addend ) {
-<a name="l00302"></a>00302         <span class="comment">// Additive inverse of addend computed using binary minus,</span>
-<a name="l00303"></a>00303         <span class="comment">// instead of unary minus, for sake of avoiding compiler warnings.</span>
-<a name="l00304"></a>00304         <span class="keywordflow">return</span> operator+=(D(0)-addend);    
-<a name="l00305"></a>00305     }
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307     value_type operator++() {
-<a name="l00308"></a>00308         <span class="keywordflow">return</span> fetch_and_add(1)+1;
-<a name="l00309"></a>00309     }
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311     value_type operator--() {
-<a name="l00312"></a>00312         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D))-1;
-<a name="l00313"></a>00313     }
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315     value_type operator++(<span class="keywordtype">int</span>) {
-<a name="l00316"></a>00316         <span class="keywordflow">return</span> fetch_and_add(1);
-<a name="l00317"></a>00317     }
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319     value_type operator--(<span class="keywordtype">int</span>) {
-<a name="l00320"></a>00320         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
-<a name="l00321"></a>00321     }
-<a name="l00322"></a>00322 };
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324 } <span class="comment">/* Internal */</span>
-<a name="l00326"></a>00326 
-<a name="l00328"></a>00328 
-<a name="l00330"></a>00330 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00331"></a><a class="code" href="a00228.html">00331</a> <span class="keyword">struct </span><a class="code" href="a00228.html">atomic</a>: internal::atomic_impl<T> {
-<a name="l00332"></a>00332     T operator=( T rhs ) {
-<a name="l00333"></a>00333         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
-<a name="l00334"></a>00334         <span class="keywordflow">return</span> this->store_with_release(rhs);
-<a name="l00335"></a>00335     }
-<a name="l00336"></a>00336     <a class="code" href="a00228.html">atomic<T></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00228.html">atomic<T></a>& rhs ) {this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
-<a name="l00337"></a>00337 };
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339 <span class="preprocessor">#define __TBB_DECL_ATOMIC(T) \</span>
-<a name="l00340"></a>00340 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
-<a name="l00341"></a>00341 <span class="preprocessor">        T operator=( T rhs ) {return store_with_release(rhs);}  \</span>
-<a name="l00342"></a>00342 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
-<a name="l00343"></a>00343 <span class="preprocessor">    };</span>
-<a name="l00344"></a>00344 <span class="preprocessor"></span>
-<a name="l00345"></a>00345 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
-<a name="l00346"></a>00346 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(__TBB_LONG_LONG)
-<a name="l00347"></a>00347 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> __TBB_LONG_LONG)
-<a name="l00348"></a>00348 <span class="preprocessor">#else</span>
-<a name="l00349"></a>00349 <span class="preprocessor"></span><span class="comment">// test_atomic will verify that sizeof(long long)==8</span>
-<a name="l00350"></a>00350 <span class="preprocessor">#endif</span>
-<a name="l00351"></a>00351 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">long</span>)
-<a name="l00352"></a>00352 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354 <span class="preprocessor">#if defined(_MSC_VER) && __TBB_WORDSIZE==4</span>
-<a name="l00355"></a>00355 <span class="preprocessor"></span><span class="comment">/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option. </span>
-<a name="l00356"></a>00356 <span class="comment">   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T) </span>
-<a name="l00357"></a>00357 <span class="comment">   with an operator=(U) that explicitly converts the U to a T.  Types T and U should be</span>
-<a name="l00358"></a>00358 <span class="comment">   type synonyms on the platform.  Type U should be the wider variant of T from the</span>
-<a name="l00359"></a>00359 <span class="comment">   perspective of /Wp64. */</span>
-<a name="l00360"></a>00360 <span class="preprocessor">#define __TBB_DECL_ATOMIC_ALT(T,U) \</span>
-<a name="l00361"></a>00361 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
-<a name="l00362"></a>00362 <span class="preprocessor">        T operator=( U rhs ) {return store_with_release(T(rhs));}  \</span>
-<a name="l00363"></a>00363 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
-<a name="l00364"></a>00364 <span class="preprocessor">    };</span>
-<a name="l00365"></a>00365 <span class="preprocessor"></span><a class="code" href="a00383.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a>(<span class="keywordtype">unsigned</span>,size_t)
-<a name="l00366"></a><a class="code" href="a00383.html#ad165cf61abbe349d413df2589679add">00366</a> <a class="code" href="a00383.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a>(<span class="keywordtype">int</span>,ptrdiff_t)
-<a name="l00367"></a>00367 <span class="preprocessor">#else</span>
-<a name="l00368"></a>00368 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span>)
-<a name="l00369"></a>00369 __TBB_DECL_ATOMIC(<span class="keywordtype">int</span>)
-<a name="l00370"></a>00370 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && __TBB_WORDSIZE==4 */</span>
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)
-<a name="l00373"></a>00373 __TBB_DECL_ATOMIC(<span class="keywordtype">short</span>)
-<a name="l00374"></a>00374 __TBB_DECL_ATOMIC(<span class="keywordtype">char</span>)
-<a name="l00375"></a>00375 __TBB_DECL_ATOMIC(<span class="keywordtype">signed</span> <span class="keywordtype">char</span>)
-<a name="l00376"></a>00376 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378 <span class="preprocessor">#if !defined(_MSC_VER)||defined(_NATIVE_WCHAR_T_DEFINED) </span>
-<a name="l00379"></a>00379 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">wchar_t</span>)
-<a name="l00380"></a>00380 <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */</span>
-<a name="l00381"></a>00381 
-<a name="l00383"></a>00383 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="a00228.html">atomic</a><T*>: internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T> {
-<a name="l00384"></a>00384     T* operator=( T* rhs ) {
-<a name="l00385"></a>00385         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
-<a name="l00386"></a>00386         <span class="keywordflow">return</span> this->store_with_release(rhs);
-<a name="l00387"></a>00387     }
-<a name="l00388"></a>00388     <a class="code" href="a00228.html">atomic<T*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00228.html">atomic<T*></a>& rhs ) {
-<a name="l00389"></a>00389         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00390"></a>00390     }
-<a name="l00391"></a>00391     T* operator->()<span class="keyword"> const </span>{
-<a name="l00392"></a>00392         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
-<a name="l00393"></a>00393     }
-<a name="l00394"></a>00394 };
-<a name="l00395"></a>00395 
-<a name="l00397"></a><a class="code" href="a00229.html">00397</a> <span class="keyword">template</span><> <span class="keyword">struct </span><a class="code" href="a00228.html">atomic</a><void*>: internal::atomic_impl<void*> {
-<a name="l00398"></a>00398     <span class="keywordtype">void</span>* operator=( <span class="keywordtype">void</span>* rhs ) {
-<a name="l00399"></a>00399         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
-<a name="l00400"></a>00400         <span class="keywordflow">return</span> this->store_with_release(rhs);
-<a name="l00401"></a>00401     }
-<a name="l00402"></a>00402     <a class="code" href="a00228.html">atomic<void*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00228.html">atomic<void*></a>& rhs ) {
-<a name="l00403"></a>00403         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00404"></a>00404     }
-<a name="l00405"></a>00405 };
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407 <span class="comment">// Helpers to workaround ugly syntax of calling template member function of a</span>
-<a name="l00408"></a>00408 <span class="comment">// template class with template argument dependent on template parameters.</span>
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410 <span class="keyword">template</span> <memory_semantics M, <span class="keyword">typename</span> T>
-<a name="l00411"></a>00411 T load ( <span class="keyword">const</span> <a class="code" href="a00228.html">atomic<T></a>& a ) { <span class="keywordflow">return</span> a.template load<M>(); }
-<a name="l00412"></a>00412 
-<a name="l00413"></a>00413 <span class="keyword">template</span> <memory_semantics M, <span class="keyword">typename</span> T>
-<a name="l00414"></a>00414 <span class="keywordtype">void</span> store ( atomic<T>& a, T value ) { <span class="keywordflow">return</span> a.template store<M>(value); }
-<a name="l00415"></a>00415 
-<a name="l00416"></a>00416 } <span class="comment">// namespace tbb</span>
-<a name="l00417"></a>00417 
-<a name="l00418"></a>00418 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
-<a name="l00419"></a>00419 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00420"></a>00420 <span class="preprocessor"></span><span class="preprocessor">#endif // warnings 4244, 4267 are back</span>
-<a name="l00421"></a>00421 <span class="preprocessor"></span>
-<a name="l00422"></a>00422 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_atomic_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00411.html b/doc/html/a00411.html
new file mode 100644
index 0000000..4d62363
--- /dev/null
+++ b/doc/html/a00411.html
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>rml 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>rml Namespace Reference</h1>Assert that x is true.  
+<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">struct  </td><td class="memItemRight" valign="bottom"><b>MemPoolPolicy</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5af06ad025ac20cff3a1c13aa5bded5c"></a><!-- doxytag: member="rml::rawAllocType" ref="5af06ad025ac20cff3a1c13aa5bded5c" args="(intptr_t pool_id, size_t &bytes)" -->
+typedef void *(*) </td><td class="memItemRight" valign="bottom"><b>rawAllocType</b> (intptr_t pool_id, size_t &bytes)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="49f1efbc1496ae2c1492093bb222051b"></a><!-- doxytag: member="rml::rawFreeType" ref="49f1efbc1496ae2c1492093bb222051b" args="(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)" -->
+typedef int(*) </td><td class="memItemRight" valign="bottom"><b>rawFreeType</b> (intptr_t pool_id, void *raw_ptr, size_t raw_bytes)</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"><b>MemPoolError</b> { <b>POOL_OK</b>, 
+<b>INVALID_POLICY</b>, 
+<b>UNSUPPORTED_POLICY</b>, 
+<b>NO_MEMORY</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="7be7b591205c8bf497261d40c0304ab9"></a><!-- doxytag: member="rml::pool_create_v1" ref="7be7b591205c8bf497261d40c0304ab9" args="(intptr_t pool_id, const MemPoolPolicy *policy, rml::MemoryPool **pool)" -->
+MemPoolError </td><td class="memItemRight" valign="bottom"><b>pool_create_v1</b> (intptr_t pool_id, const MemPoolPolicy *policy, rml::MemoryPool **pool)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="66dafd186fef3ce07c5acfa57309671d"></a><!-- doxytag: member="rml::pool_destroy" ref="66dafd186fef3ce07c5acfa57309671d" args="(MemoryPool *memPool)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>pool_destroy</b> (MemoryPool *memPool)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1f68622d83e291b152ba9bdb5eb54c4c"></a><!-- doxytag: member="rml::pool_malloc" ref="1f68622d83e291b152ba9bdb5eb54c4c" args="(MemoryPool *memPool, size_t size)" -->
+void * </td><td class="memItemRight" valign="bottom"><b>pool_malloc</b> (MemoryPool *memPool, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c46ef1c26429df31030d3278e5479fc"></a><!-- doxytag: member="rml::pool_realloc" ref="4c46ef1c26429df31030d3278e5479fc" args="(MemoryPool *memPool, void *object, size_t size)" -->
+void * </td><td class="memItemRight" valign="bottom"><b>pool_realloc</b> (MemoryPool *memPool, void *object, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b5691c8c9d0b5760f98af1b0f932fb2b"></a><!-- doxytag: member="rml::pool_aligned_malloc" ref="b5691c8c9d0b5760f98af1b0f932fb2b" args="(MemoryPool *mPool, size_t size, size_t alignment)" -->
+void * </td><td class="memItemRight" valign="bottom"><b>pool_aligned_malloc</b> (MemoryPool *mPool, size_t size, size_t alignment)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e72b27fec45be45319d732b5cdb8ef3c"></a><!-- doxytag: member="rml::pool_aligned_realloc" ref="e72b27fec45be45319d732b5cdb8ef3c" args="(MemoryPool *mPool, void *ptr, size_t size, size_t alignment)" -->
+void * </td><td class="memItemRight" valign="bottom"><b>pool_aligned_realloc</b> (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3eab1c7294baade9d21fad92f979890a"></a><!-- doxytag: member="rml::pool_reset" ref="3eab1c7294baade9d21fad92f979890a" args="(MemoryPool *memPool)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>pool_reset</b> (MemoryPool *memPool)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e43a04a5b9e84bb26345945b1a15ed28"></a><!-- doxytag: member="rml::pool_free" ref="e43a04a5b9e84bb26345945b1a15ed28" args="(MemoryPool *memPool, void *object)" -->
+bool </td><td class="memItemRight" valign="bottom"><b>pool_free</b> (MemoryPool *memPool, void *object)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Assert that x is true. 
+<p>
+If x is false, print assertion failure message. If the comment argument is not NULL, it is printed as part of the failure message. The comment argument has no other effect. 
+<p>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00412.html b/doc/html/a00412.html
deleted file mode 100644
index d4d404c..0000000
--- a/doc/html/a00412.html
+++ /dev/null
@@ -1,127 +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>blocked_range.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>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-2011 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_blocked_range_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_blocked_range_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="a00233.html">00040</a> <span class="keyword">class </span><a class="code" href="a00233.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="a00233.html#1a8d05842c2b3dfc177bc4d347e4cef7">00045</a>     <span class="keyword">typedef</span> Value <a class="code" href="a00233.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>;
-<a name="l00046"></a>00046 
-<a name="l00048"></a><a class="code" href="a00233.html#f5707bffea38eee5c9680f37358afb8e">00048</a>     <span class="keyword">typedef</span> std::size_t <a class="code" href="a00233.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>;
-<a name="l00049"></a>00049 
-<a name="l00051"></a>00051 
-<a name="l00052"></a><a class="code" href="a00233.html#94607755c5110d199202234d58d022ac">00052</a>     <a class="code" href="a00233.html#94607755c5110d199202234d58d022ac">blocked_range</a>() : my_end(), my_begin() {}
-<a name="l00053"></a>00053 
-<a name="l00055"></a><a class="code" href="a00233.html#14795a36ead1414b4371dbe1a4656359">00055</a>     <a class="code" href="a00233.html#94607755c5110d199202234d58d022ac">blocked_range</a>( Value begin_, Value end_, <a class="code" href="a00233.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="a00233.html#18d2258400756ac1446dac7676b18df3">00062</a>     <a class="code" href="a00233.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00233.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="a00233.html#8b929d93ddc13f148b11bceef3a3bdf8">00065</a>     <a class="code" href="a00233.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00233.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="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">00069</a>     <a class="code" href="a00233.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()<span class="keyword"> const </span>{
-<a name="l00070"></a>00070         __TBB_ASSERT( !(<a class="code" href="a00233.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<<a class="code" href="a00233.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="a00233.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="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">00075</a>     <a class="code" href="a00233.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00233.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="a00233.html#8f4f02f530eb3f2e7ea26e06f76aef9d">00082</a>     <span class="keywordtype">bool</span> <a class="code" href="a00233.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="a00233.html#41a58b703d574b6e1ca155df3576f578">00086</a>     <span class="keywordtype">bool</span> <a class="code" href="a00233.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize<<a class="code" href="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>();}
-<a name="l00087"></a>00087 
-<a name="l00089"></a>00089 
-<a name="l00091"></a><a class="code" href="a00233.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">00091</a>     <a class="code" href="a00233.html#94607755c5110d199202234d58d022ac">blocked_range</a>( <a class="code" href="a00233.html">blocked_range</a>& r, <a class="code" href="a00309.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="a00233.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="a00233.html">blocked_range</a>& r ) {
-<a name="l00106"></a>00106         __TBB_ASSERT( r.<a class="code" href="a00233.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="a00233.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> + (r.<a class="code" href="a00233.html#1ec95c8988b50064dd603998b16f3930">my_end</a>-r.<a class="code" href="a00233.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a>)/2u;
-<a name="l00108"></a>00108         r.<a class="code" href="a00233.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>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00413.html b/doc/html/a00413.html
deleted file mode 100644
index 286df5b..0000000
--- a/doc/html/a00413.html
+++ /dev/null
@@ -1,113 +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>blocked_range2d.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>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-2011 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_blocked_range2d_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_blocked_range2d_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 "blocked_range.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="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="a00234.html">00032</a> <span class="keyword">class </span><a class="code" href="a00234.html">blocked_range2d</a> {
-<a name="l00033"></a>00033 <span class="keyword">public</span>:
-<a name="l00035"></a><a class="code" href="a00234.html#a807a22fe658ec38b8edfd69521d0383">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00233.html">blocked_range<RowValue></a> <a class="code" href="a00233.html">row_range_type</a>;
-<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00233.html">blocked_range<ColValue></a> <a class="code" href="a00233.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="a00233.html">row_range_type</a> my_rows;
-<a name="l00040"></a>00040     <a class="code" href="a00233.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="a00234.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end, <span class="keyword">typename</span> <a class="code" href="a00233.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="a00233.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="a00234.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="a00234.html#d144cb2d88cef553420311aca8667a44">00059</a>     <span class="keywordtype">bool</span> <a class="code" href="a00234.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="a00233.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00233.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
-<a name="l00062"></a>00062     }
-<a name="l00063"></a>00063 
-<a name="l00065"></a><a class="code" href="a00234.html#ad36a9b38e4fef26d376f99552ce2d92">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00234.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="a00233.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00233.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
-<a name="l00067"></a>00067     }
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069     <a class="code" href="a00234.html">blocked_range2d</a>( <a class="code" href="a00234.html">blocked_range2d</a>& r, <a class="code" href="a00309.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="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00074"></a>00074             my_cols.<a class="code" href="a00233.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00234.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="a00233.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00234.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="a00234.html#f496e7348a82652fba581203477cc07c">00081</a>     <span class="keyword">const</span> <a class="code" href="a00233.html">row_range_type</a>& <a class="code" href="a00234.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="a00234.html#392a46759af2c884957115771affa7f4">00084</a>     <span class="keyword">const</span> <a class="code" href="a00233.html">col_range_type</a>& <a class="code" href="a00234.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>
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_blocked_range2d_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00414.html b/doc/html/a00414.html
index 2816ac7..16b5c0d 100644
--- a/doc/html/a00414.html
+++ b/doc/html/a00414.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_range3d.h Source File</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,120 +9,656 @@
   <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 id="current"><a href="files.html"><span>Files</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="files.html"><span>File List</span></a></li>
-    <li><a href="globals.html"><span>File Members</span></a></li>
+    <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>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-2011 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_blocked_range3d_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_blocked_range3d_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 "blocked_range.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="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="a00235.html">00032</a> <span class="keyword">class </span><a class="code" href="a00235.html">blocked_range3d</a> {
-<a name="l00033"></a>00033 <span class="keyword">public</span>:
-<a name="l00035"></a><a class="code" href="a00235.html#b8ebf17a552ba47825e9b3887855b719">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00233.html">blocked_range<PageValue></a> <a class="code" href="a00233.html">page_range_type</a>;
-<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00233.html">blocked_range<RowValue></a>  <a class="code" href="a00233.html">row_range_type</a>;
-<a name="l00037"></a>00037     <span class="keyword">typedef</span> <a class="code" href="a00233.html">blocked_range<ColValue></a>  <a class="code" href="a00233.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="a00233.html">page_range_type</a> my_pages;
-<a name="l00041"></a>00041     <a class="code" href="a00233.html">row_range_type</a>  my_rows;
-<a name="l00042"></a>00042     <a class="code" href="a00233.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="a00235.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),
-<a name="l00050"></a>00050         my_rows(row_begin,row_end),
-<a name="l00051"></a>00051         my_cols(col_begin,col_end)
-<a name="l00052"></a>00052     {
-<a name="l00053"></a>00053     }
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055     <a class="code" href="a00235.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end, <span class="keyword">typename</span> <a class="code" href="a00233.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="a00233.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="a00233.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="a00235.html#356860e1c977d91711e8216bd55c0b25">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00235.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="a00233.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_rows.<a class="code" href="a00233.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00233.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
-<a name="l00068"></a>00068     }
-<a name="l00069"></a>00069 
-<a name="l00071"></a><a class="code" href="a00235.html#39d69191721c488e737ae5d9c5336b9c">00071</a>     <span class="keywordtype">bool</span> <a class="code" href="a00235.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="a00233.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_rows.<a class="code" href="a00233.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00233.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
-<a name="l00073"></a>00073     }
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075     <a class="code" href="a00235.html">blocked_range3d</a>( <a class="code" href="a00235.html">blocked_range3d</a>& r, <a class="code" href="a00309.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="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_rows.<a class="code" href="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00081"></a>00081             <span class="keywordflow">if</span> ( my_rows.<a class="code" href="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00082"></a>00082                 my_cols.<a class="code" href="a00233.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00235.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="a00233.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00235.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="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
-<a name="l00088"></a>00088                 my_cols.<a class="code" href="a00233.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00235.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="a00233.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = page_range_type::do_split(r.<a class="code" href="a00235.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="a00235.html#cf971430aa12361d3ed245344b7c6764">00096</a>     <span class="keyword">const</span> <a class="code" href="a00233.html">page_range_type</a>& <a class="code" href="a00235.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="a00235.html#1584623e59ff32a8aa82006827508be4">00099</a>     <span class="keyword">const</span> <a class="code" href="a00233.html">row_range_type</a>& <a class="code" href="a00235.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="a00235.html#3336ba9480fd6c43e158f9beb024c050">00102</a>     <span class="keyword">const</span> <a class="code" href="a00233.html">col_range_type</a>& <a class="code" href="a00235.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 
-<a name="l00106"></a>00106 } <span class="comment">// namespace tbb </span>
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_blocked_range3d_H */</span>
-</pre></div><hr>
+<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="a00253.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="a00253.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="a00254.html">atomic</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00254.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="a00255.html">atomic< void * ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specialization for <a class="el" href="a00255.html">atomic<void*></a>, for sake of not allowing arithmetic or operator->.  <a href="a00255.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.html">blocked_range</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00259.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html">blocked_range2d</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A 2-dimensional range that models the Range concept.  <a href="a00260.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.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="a00261.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.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="a00264.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html">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="a00265.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00267.html">combinable</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00267.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00347.html">tbb_hash_compare</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">hash_compare that is default argument for concurrent_hash_map  <a href="a00347.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html">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="a00268.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00276.html">concurrent_vector</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00276.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html">mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock.  <a href="a00301.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00303.html">null_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00303.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00305.html">null_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00305.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00307.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="a00307.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="a00339.html">task_group_context</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00311.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="a00311.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="a00284.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="a00284.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00308.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="a00308.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00329.html">simple_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <a href="a00329.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html">auto_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00257.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00249.html">affinity_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An affinity partitioner.  <a href="a00249.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html">filter</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00282.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00348.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="a00348.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html">pipeline</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <a href="a00310.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00314.html">queuing_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing mutex with local-only spinning.  <a href="a00314.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00316.html">queuing_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing reader-writer mutex with local-only spinning.  <a href="a00316.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00322.html">recursive_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00322.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00325.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="a00325.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00326.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="a00326.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00331.html">spin_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00331.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00333.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="a00333.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html">task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <a href="a00337.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00280.html">empty_task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00280.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00341.html">task_list</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <a href="a00341.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="a00342.html">task_scheduler_init</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class delimiting the scope of task scheduler activity.  <a href="a00342.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00343.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="a00343.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00344.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="a00344.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00353.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="a00353.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00354.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="a00354.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html">bad_last_alloc</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for concurrent containers.  <a href="a00258.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00290.html">improper_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for PPL locks.  <a href="a00290.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00351.html">user_abort</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for user-initiated abort.  <a href="a00351.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html">missing_wait</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for missing wait on structured_task_group.  <a href="a00298.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.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="a00291.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00345.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="a00345.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html">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="a00266.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00299.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="a00299.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00335.html">split</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor.  <a href="a00335.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00349.html">tick_count</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00349.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="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="a00426.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="a00426.html#g2617dc9b88b3285a7212599d49f74228">parallel_do</a> (Iterator first, Iterator last, const Body &body, <a class="el" href="a00339.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="a00426.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="a00426.html#g13cac5dd55c7533bccea43a51c33d0e5">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00329.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="a00426.html#ga7ac75d532389b55b9247f3fdb0b00d1">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00257.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00257.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="a00426.html#g9cd1b210ceb1c040f30e390b4a21bde8">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00249.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00249.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="a00426.html#g2d317a5e0078cd193125439fed60dfdc">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00329.html">simple_partitioner</a> &partitioner, <a class="el" href="a00339.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="a00426.html#g1c0700e3f85e83a788ff3ede88ebb7e9">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00257.html">auto_partitioner</a> &partitioner, <a class="el" href="a00339.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="a00257.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="a00426.html#g04b4696b67370c01353ff5974c8f1196">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00249.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00339.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="a00249.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="a00426.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a> (InputIterator first, InputIterator last, const Function &f, <a class="el" href="a00339.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="a00426.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="a00426.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a> (const F0 &f0, const F1 &f1, <a class="el" href="a00339.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="a00339.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="a00339.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="a00339.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="a00339.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="a00339.html">tbb::task_group_context</a> &context)</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="a00339.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="a00339.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="a00339.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="a00426.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="a00426.html#gec1b7c03f9da909bef5db12e3d41bed3">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00329.html">simple_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00329.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="a00426.html#g18a19157e6245992fc00ca0adeb7dd37">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00257.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00257.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="a00426.html#gc61e73fcc36c92d79a217fc355ff4a6b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00249.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00249.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="a00426.html#g45cb00c42a18e334bbde8b7535afe460">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00329.html">simple_partitioner</a> &partitioner, <a class="el" href="a00339.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="a00426.html#g1c1ea1d7c61b3c225e92c70d669a53a5">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00257.html">auto_partitioner</a> &partitioner, <a class="el" href="a00339.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00257.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="a00426.html#gd9ac3a3811060314695f33b703c6e11b">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00249.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00339.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00249.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="a00426.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="a00426.html#gaddffeec0e892ac3d6fc7fc2053e1eca">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00329.html">simple_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00329.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="a00426.html#gb175401f0729e40dd2c5860a17c14385">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00257.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00257.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="a00426.html#gb7f1f1828ae2b330ce05b8513a495154">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00249.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00249.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="a00426.html#gfbc0cc2026d87f11a96bcd62788f5bb5">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00329.html">simple_partitioner</a> &partitioner, <a class="el" href="a00339.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="a00426.html#g630c90a399937d9d4ae70ff883186dfd">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00257.html">auto_partitioner</a> &partitioner, <a class="el" href="a00339.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00257.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="a00426.html#g496bd7eadb3b97495ccb5655ef90319e">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00249.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00339.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00249.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g873006cc80868b5b4604822bf100ddeb"></a><!-- doxytag: member="tbb::parallel_deterministic_reduce" ref="g873006cc80868b5b4604822bf100ddeb" 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="a00426.html#g873006cc80868b5b4604822bf100ddeb">parallel_deterministic_reduce</a> (const Range &range, Body &body)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gfd08c56b3a98d4437dadc5365326928a"></a><!-- doxytag: member="tbb::parallel_deterministic_reduce" ref="gfd08c56b3a98d4437dadc5365326928a" args="(const Range &range, Body &body, 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="a00426.html#gfd08c56b3a98d4437dadc5365326928a">parallel_deterministic_reduce</a> (const Range &range, Body &body, <a class="el" href="a00339.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3edb17bb1967c291d227556e0e47e507"></a><!-- doxytag: member="tbb::parallel_deterministic_reduce" ref="g3edb17bb1967c291d227556e0e47e507" 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="a00426.html#g3edb17bb1967c291d227556e0e47e507">parallel_deterministic_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 deterministic reduction and default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g0a66bc67567b2d01d709b59b9bddf84a"></a><!-- doxytag: member="tbb::parallel_deterministic_reduce" ref="g0a66bc67567b2d01d709b59b9bddf84a" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, 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="a00426.html#g0a66bc67567b2d01d709b59b9bddf84a">parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00339.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner 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="a00426.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="a00426.html#gc9fac8870b2e6365fb337014404529df">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00329.html">simple_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00329.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="a00426.html#g62fde400a37bbca1a2fddc8e3d22f556">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00257.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00257.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="a00426.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="a00426.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="a00426.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="a00426.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="a00333.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 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="a00414.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> { <a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>, 
+<a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>, 
+<a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>, 
+<a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">relaxed</a>
+ }</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies memory semantics.  <a href="a00414.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="a00414.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>priority_t</b> { <b>priority_normal</b> =  internal::priority_stride_v4 * 2, 
+<b>priority_low</b> =  priority_normal - internal::priority_stride_v4, 
+<b>priority_high</b> =  priority_normal + internal::priority_stride_v4
+ }</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="a00414.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="a00254.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="1ef5059a6b85fad2e4d510a5a095f2a1"></a><!-- doxytag: member="tbb::load" ref="1ef5059a6b85fad2e4d510a5a095f2a1" args="(const atomic< T > &a)" -->
+template<memory_semantics M, typename T> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>load</b> (const <a class="el" href="a00254.html">atomic</a>< T > &a)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="0fc5e34a898372157343886babe84045"></a><!-- doxytag: member="tbb::store" ref="0fc5e34a898372157343886babe84045" args="(atomic< T > &a, T value)" -->
+template<memory_semantics M, typename T> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>store</b> (<a class="el" href="a00254.html">atomic</a>< T > &a, T value)</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="a00264.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00264.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="a00264.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00264.html">cache_aligned_allocator</a>< U > &)</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="a00269.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00269.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="a00269.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00269.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="a00269.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &a, <a class="el" href="a00269.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="a00276.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00276.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="a00276.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00276.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="a00276.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00276.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="a00276.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00276.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="a00276.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00276.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="a00276.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00276.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="a00276.html">concurrent_vector</a>< T, A > &a, <a class="el" href="a00276.html">concurrent_vector</a>< T, A > &b)</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="a00325.html">scalable_allocator</a>< T > &, const <a class="el" href="a00325.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="a00325.html">scalable_allocator</a>< T > &, const <a class="el" href="a00325.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="a00343.html">tbb_allocator</a>< T > &, const <a class="el" href="a00343.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="a00343.html">tbb_allocator</a>< T > &, const <a class="el" href="a00343.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="a00353.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00353.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="a00353.html">zero_allocator</a>< T1, B1 > &a, const <a class="el" href="a00353.html">zero_allocator</a>< T2, B2 > &b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="250275615f10d5b5de6ad466ae2f54de"></a><!-- doxytag: member="tbb::atomic_fence" ref="250275615f10d5b5de6ad466ae2f54de" args="()" -->
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00414.html#250275615f10d5b5de6ad466ae2f54de">atomic_fence</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Sequentially consistent full memory fence. <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="a00414.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="a00350.html">tick_count::interval_t</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00349.html">tick_count</a> &t1, const <a class="el" href="a00349.html">tick_count</a> &t0)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The namespace tbb contains all components of the library. 
+<p>
+This header provides basic platform abstraction layer by hooking up appropriate architecture/OS/compiler specific headers from the /include/tbb/machine directory. If a plug-in header does not implement all the required APIs, it must specify the missing ones by setting one or more of the following macros:<p>
+__TBB_USE_GENERIC_PART_WORD_CAS __TBB_USE_GENERIC_PART_WORD_FETCH_ADD __TBB_USE_GENERIC_PART_WORD_FETCH_STORE __TBB_USE_GENERIC_FETCH_ADD __TBB_USE_GENERIC_FETCH_STORE __TBB_USE_GENERIC_DWORD_FETCH_ADD __TBB_USE_GENERIC_DWORD_FETCH_STORE __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE __TBB_USE_GENERIC_FULL_FENCED_LOAD_STORE __TBB_USE_GENERIC_RELAXED_LOAD_STORE __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE<p>
+In this case <a class="el" href="a00640.html">tbb_machine.h</a> will add missing functionality based on a minimal set of APIs that are required to be implemented by all plug-n headers as described further. Note that these generic implementations may be sub-optimal for a particular architecture, and thus should be relied upon only after careful evaluation or as the last resort.<p>
+Additionally __TBB_64BIT_ATOMICS can be set to 0 on a 32-bit architecture to indicate that the port is not going to support double word atomics. It may also be set to 1 explicitly, though normally this is not necessary as <a class="el" href="a00640.html">tbb_machine.h</a> will set it automatically.<p>
+__TBB_BIG_ENDIAN macro can be defined by the implementation as well. It is used only if the __TBB_USE_GENERIC_PART_WORD_CAS is set. Possible values are:<ul>
+<li>1 if the system is big endian,</li><li>0 if it is little endian,</li><li>or -1 to explicitly state that __TBB_USE_GENERIC_PART_WORD_CAS can not be used. -1 should be used when it is known in advance that endianness can change in run time or it is not simple big or little but something more complex. The system will try to detect it in run time if it is not set(in assumption that it is either a big or little one).</li></ul>
+<p>
+Prerequisites for each architecture port ---------------------------------------- The following functions and macros have no generic implementation. Therefore they must be implemented in each machine architecture specific header either as a conventional function or as a functional macro.<p>
+__TBB_WORDSIZE This is the size of machine word in bytes, i.e. for 32 bit systems it should be defined to 4.<p>
+__TBB_Yield() Signals OS that the current thread is willing to relinquish the remainder of its time quantum.<p>
+__TBB_full_memory_fence() Must prevent all memory operations from being reordered across it (both by hardware and compiler). All such fences must be totally ordered (or sequentially consistent).<p>
+__TBB_machine_cmpswp4( volatile void *ptr, int32_t value, int32_t comparand ) Must be provided if __TBB_USE_FENCED_ATOMICS is not set.<p>
+__TBB_machine_cmpswp8( volatile void *ptr, int32_t value, int64_t comparand ) Must be provided for 64-bit architectures if __TBB_USE_FENCED_ATOMICS is not set, and for 32-bit architectures if __TBB_64BIT_ATOMICS is set<p>
+__TBB_machine_<op><S><fence>(...), where <op> = {cmpswp, fetchadd, fetchstore} <S> = {1, 2, 4, 8} <fence> = {full_fence, acquire, release, relaxed} Must be provided if __TBB_USE_FENCED_ATOMICS is set.<p>
+__TBB_control_consistency_helper() Bridges the memory-semantics gap between architectures providing only implicit C++0x "consume" semantics (like Power Architecture) and those also implicitly obeying control dependencies (like IA-64). It must be used only in conditional code where the condition is itself data-dependent, and will then make subsequent code behave as if the original data dependency were acquired. It needs only a compiler fence where implied by the architecture either specif [...]
+__TBB_acquire_consistency_helper(), __TBB_release_consistency_helper() Must be provided if __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE is set. Enforce acquire and release semantics in generic implementations of fenced store and load operations. Depending on the particular architecture/compiler combination they may be a hardware fence, a compiler fence, both or nothing. 
+<p>
+<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="a00414.html#a8686246bb5d3664bd07563749970fef">tbb::memory_semantics</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Specifies memory semantics. 
+<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="a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff"></a><!-- doxytag: member="full_fence" ref="a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff" args="" -->full_fence</em> </td><td>
+Sequential consistency. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7"></a><!-- doxytag: member="acquire" ref="a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7" args="" -->acquire</em> </td><td>
+Acquire. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70"></a><!-- doxytag: member="release" ref="a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70" args="" -->release</em> </td><td>
+Release. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900"></a><!-- doxytag: member="relaxed" ref="a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900" args="" -->relaxed</em> </td><td>
+No ordering. </td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00415.html b/doc/html/a00415.html
deleted file mode 100644
index ddaf487..0000000
--- a/doc/html/a00415.html
+++ /dev/null
@@ -1,140 +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>cache_aligned_allocator.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>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-2011 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_cache_aligned_allocator_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_cache_aligned_allocator_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include <new></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="keyword">namespace </span>tbb {
-<a name="l00028"></a>00028 
-<a name="l00030"></a>00030 <span class="keyword">namespace </span>internal {
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033     size_t __TBB_EXPORTED_FUNC NFS_GetLineSize();
-<a name="l00034"></a>00034 
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC NFS_Allocate( size_t n_element, size_t element_size, <span class="keywordtype">void</span>* hint );
-<a name="l00038"></a>00038 
-<a name="l00040"></a>00040 
-<a name="l00042"></a>00042     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC NFS_Free( <span class="keywordtype">void</span>* );
-<a name="l00043"></a>00043 }
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
-<a name="l00048"></a>00048 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<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="a00238.html">00057</a> <span class="keyword">class </span><a class="code" href="a00238.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;
-<a name="l00061"></a>00061     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
-<a name="l00062"></a>00062     <span class="keyword">typedef</span> value_type& reference;
-<a name="l00063"></a>00063     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference;
-<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="a00238.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="a00238.html">cache_aligned_allocator</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00071"></a>00071     <a class="code" href="a00238.html">cache_aligned_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00238.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="a00238.html">cache_aligned_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00238.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="a00238.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">00078</a>     pointer <a class="code" href="a00238.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="a00238.html#3d4eadf188f7d85d3805ae534e0b8e1c">00084</a>     <span class="keywordtype">void</span> <a class="code" href="a00238.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="a00238.html#fb23b687b4c0429dab4c7f8017266cf0">00089</a>     size_type <a class="code" href="a00238.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="a00238.html#958ee8745c86c275bfc9533af565e017">00094</a>     <span class="keywordtype">void</span> <a class="code" href="a00238.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="a00238.html#cd298895a4f1654b5149ec84b591ecb5">00097</a>     <span class="keywordtype">void</span> <a class="code" href="a00238.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>
-<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
-<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="a00239.html">00107</a> <span class="keyword">class </span><a class="code" href="a00238.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="a00238.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="a00238.html">cache_aligned_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00238.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>;}
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 } <span class="comment">// namespace tbb</span>
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_cache_aligned_allocator_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00417.html b/doc/html/a00417.html
deleted file mode 100644
index f2e13e5..0000000
--- a/doc/html/a00417.html
+++ /dev/null
@@ -1,98 +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>combinable.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>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-2011 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_combinable_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_combinable_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "enumerable_thread_specific.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
-<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="a00241.html">00034</a>         <span class="keyword">class </span><a class="code" href="a00241.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="a00238.html">tbb::cache_aligned_allocator<T></a> <a class="code" href="a00238.html">my_alloc</a>;
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038         <span class="keyword">typedef</span> <span class="keyword">typename</span> tbb::enumerable_thread_specific<T, my_alloc, ets_no_key> my_ets_type;
-<a name="l00039"></a>00039         my_ets_type 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="a00241.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="a00241.html">combinable</a>( finit _finit) : my_ets(_finit) { }
-<a name="l00047"></a>00047 
-<a name="l00049"></a><a class="code" href="a00241.html#2c87e79ae98588a5780f708773388843">00049</a>         <a class="code" href="a00241.html#2c87e79ae98588a5780f708773388843">~combinable</a>() { 
-<a name="l00050"></a>00050         }
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052         <a class="code" href="a00241.html">combinable</a>(<span class="keyword">const</span> <a class="code" href="a00241.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.clear(); }
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058         T& local() { <span class="keywordflow">return</span> my_ets.local(); }
-<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.local(exists); }
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&, const T&)</span>
-<a name="l00063"></a>00063         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
-<a name="l00064"></a>00064         T combine(combine_func_t f_combine) { <span class="keywordflow">return</span> my_ets.combine(f_combine); }
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066         <span class="comment">// combine_func_t has signature void(T) or void(const T&)</span>
-<a name="l00067"></a>00067         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
-<a name="l00068"></a>00068         <span class="keywordtype">void</span> combine_each(combine_func_t f_combine) { my_ets.combine_each(f_combine); }
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070     };
-<a name="l00071"></a>00071 } <span class="comment">// namespace tbb</span>
-<a name="l00072"></a>00072 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_combinable_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00418.html b/doc/html/a00418.html
deleted file mode 100644
index 9e50f24..0000000
--- a/doc/html/a00418.html
+++ /dev/null
@@ -1,1219 +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-2011 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 "tbb_stddef.h"</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
-<a name="l00028"></a>00028 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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">#include <iterator></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <utility></span>      <span class="comment">// Need std::pair</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <cstring></span>      <span class="comment">// Need std::memset</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "tbb_allocator.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "tbb_exception.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "internal/_concurrent_unordered_impl.h"</span> <span class="comment">// Need tbb_hasher</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#include <typeinfo></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_STATISTICS</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#include <stdio.h></span>
-<a name="l00053"></a>00053 <span class="preprocessor">#endif</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span>
-<a name="l00055"></a>00055 <span class="keyword">namespace </span>tbb {
-<a name="l00056"></a>00056 
-<a name="l00058"></a>00058 <span class="keyword">template</span><<span class="keyword">typename</span> Key>
-<a name="l00059"></a><a class="code" href="a00321.html">00059</a> <span class="keyword">struct </span><a class="code" href="a00321.html">tbb_hash_compare</a> {
-<a name="l00060"></a>00060     <span class="keyword">static</span> size_t hash( <span class="keyword">const</span> Key& a ) { <span class="keywordflow">return</span> tbb_hasher(a); }
-<a name="l00061"></a>00061     <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="l00062"></a>00062 };
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keyword">namespace </span>interface5 {
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066     <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="l00067"></a>00067     <span class="keyword">class </span><a class="code" href="a00243.html">concurrent_hash_map</a>;
-<a name="l00068"></a>00068 
-<a name="l00070"></a>00070     <span class="keyword">namespace </span>internal {
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 
-<a name="l00074"></a>00074     <span class="keyword">typedef</span> size_t hashcode_t;
-<a name="l00076"></a>00076     <span class="keyword">struct </span>hash_map_node_base : tbb::internal::no_copy {
-<a name="l00078"></a>00078         <span class="keyword">typedef</span> <a class="code" href="a00307.html">spin_rw_mutex</a> mutex_t;
-<a name="l00080"></a>00080         <span class="keyword">typedef</span> mutex_t::scoped_lock scoped_t;
-<a name="l00082"></a>00082         hash_map_node_base *next;
-<a name="l00083"></a>00083         mutex_t <a class="code" href="a00275.html">mutex</a>;
-<a name="l00084"></a>00084     };
-<a name="l00086"></a>00086     <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="l00088"></a>00088     <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="l00090"></a>00090     <span class="keyword">class </span>hash_map_base {
-<a name="l00091"></a>00091     <span class="keyword">public</span>:
-<a name="l00093"></a>00093         <span class="keyword">typedef</span> size_t size_type;
-<a name="l00095"></a>00095         <span class="keyword">typedef</span> size_t hashcode_t;
-<a name="l00097"></a>00097         <span class="keyword">typedef</span> size_t segment_index_t;
-<a name="l00099"></a>00099         <span class="keyword">typedef</span> hash_map_node_base node_base;
-<a name="l00101"></a>00101         <span class="keyword">struct </span>bucket : tbb::internal::no_copy {
-<a name="l00103"></a>00103             <span class="keyword">typedef</span> spin_rw_mutex mutex_t;
-<a name="l00105"></a>00105             <span class="keyword">typedef</span> mutex_t::scoped_lock scoped_t;
-<a name="l00106"></a>00106             mutex_t mutex;
-<a name="l00107"></a>00107             node_base *node_list;
-<a name="l00108"></a>00108         };
-<a name="l00110"></a>00110         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_block = 1;
-<a name="l00112"></a>00112         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_buckets = 1<<embedded_block;
-<a name="l00114"></a>00114         <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="l00116"></a>00116 <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="l00118"></a>00118 <span class="comment"></span>        <span class="keyword">typedef</span> bucket *segment_ptr_t;
-<a name="l00120"></a>00120         <span class="keyword">typedef</span> segment_ptr_t segments_table_t[pointers_per_table];
-<a name="l00122"></a>00122         atomic<hashcode_t> my_mask;
-<a name="l00124"></a>00124         segments_table_t my_table;
-<a name="l00126"></a>00126         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="l00128"></a>00128 <span class="comment"></span>        bucket my_embedded_segment[embedded_buckets];
-<a name="l00129"></a>00129 <span class="preprocessor">#if __TBB_STATISTICS</span>
-<a name="l00130"></a>00130 <span class="preprocessor"></span>        atomic<unsigned> my_info_resizes; <span class="comment">// concurrent ones</span>
-<a name="l00131"></a>00131         <span class="keyword">mutable</span> atomic<unsigned> my_info_restarts; <span class="comment">// race collisions</span>
-<a name="l00132"></a>00132         atomic<unsigned> my_info_rehashes;  <span class="comment">// invocations of rehash_bucket</span>
-<a name="l00133"></a>00133 <span class="preprocessor">#endif</span>
-<a name="l00135"></a>00135 <span class="preprocessor">        hash_map_base() {</span>
-<a name="l00136"></a>00136 <span class="preprocessor"></span>            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="l00137"></a>00137                 + <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="l00138"></a>00138                 + embedded_buckets*<span class="keyword">sizeof</span>(bucket) ); <span class="comment">// n*8 or n*16</span>
-<a name="l00139"></a>00139             <span class="keywordflow">for</span>( size_type i = 0; i < embedded_block; i++ ) <span class="comment">// fill the table</span>
-<a name="l00140"></a>00140                 my_table[i] = my_embedded_segment + segment_base(i);
-<a name="l00141"></a>00141             my_mask = embedded_buckets - 1;
-<a name="l00142"></a>00142             __TBB_ASSERT( embedded_block <= first_block, <span class="stringliteral">"The first block number must include embedded blocks"</span>);
-<a name="l00143"></a>00143 <span class="preprocessor">#if __TBB_STATISTICS</span>
-<a name="l00144"></a>00144 <span class="preprocessor"></span>            my_info_resizes = 0; <span class="comment">// concurrent ones</span>
-<a name="l00145"></a>00145             my_info_restarts = 0; <span class="comment">// race collisions</span>
-<a name="l00146"></a>00146             my_info_rehashes = 0;  <span class="comment">// invocations of rehash_bucket</span>
-<a name="l00147"></a>00147 <span class="preprocessor">#endif</span>
-<a name="l00148"></a>00148 <span class="preprocessor"></span>        }
-<a name="l00149"></a>00149 
-<a name="l00151"></a>00151         <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
-<a name="l00152"></a>00152             <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
-<a name="l00153"></a>00153         }
-<a name="l00154"></a>00154 
-<a name="l00156"></a>00156         <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
-<a name="l00157"></a>00157             <span class="keywordflow">return</span> (segment_index_t(1)<<k & ~segment_index_t(1));
-<a name="l00158"></a>00158         }
-<a name="l00159"></a>00159 
-<a name="l00161"></a>00161         <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
-<a name="l00162"></a>00162             <span class="keywordflow">return</span> size_type(1)<<k; <span class="comment">// fake value for k==0</span>
-<a name="l00163"></a>00163         }
-<a name="l00164"></a>00164         
-<a name="l00166"></a>00166         <span class="keyword">static</span> <span class="keywordtype">bool</span> is_valid( <span class="keywordtype">void</span> *ptr ) {
-<a name="l00167"></a>00167             <span class="keywordflow">return</span> reinterpret_cast<size_t>(ptr) > size_t(63);
-<a name="l00168"></a>00168         }
-<a name="l00169"></a>00169 
-<a name="l00171"></a>00171         <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="l00172"></a>00172             <span class="keywordflow">if</span>( is_initial ) std::memset(ptr, 0, sz*<span class="keyword">sizeof</span>(bucket) );
-<a name="l00173"></a>00173             <span class="keywordflow">else</span> <span class="keywordflow">for</span>(size_type i = 0; i < sz; i++, ptr++) {
-<a name="l00174"></a>00174                     *reinterpret_cast<intptr_t*>(&ptr->mutex) = 0;
-<a name="l00175"></a>00175                     ptr->node_list = rehash_req;
-<a name="l00176"></a>00176                 }
-<a name="l00177"></a>00177         }
-<a name="l00178"></a>00178         
-<a name="l00180"></a>00180         <span class="keyword">static</span> <span class="keywordtype">void</span> add_to_bucket( bucket *b, node_base *n ) {
-<a name="l00181"></a>00181             __TBB_ASSERT(b->node_list != rehash_req, NULL);
-<a name="l00182"></a>00182             n->next = b->node_list;
-<a name="l00183"></a>00183             b->node_list = n; <span class="comment">// its under lock and flag is set</span>
-<a name="l00184"></a>00184         }
-<a name="l00185"></a>00185 
-<a name="l00187"></a>00187         <span class="keyword">struct </span>enable_segment_failsafe {
-<a name="l00188"></a>00188             segment_ptr_t *my_segment_ptr;
-<a name="l00189"></a>00189             enable_segment_failsafe(segments_table_t &table, segment_index_t k) : my_segment_ptr(&table[k]) {}
-<a name="l00190"></a>00190             ~enable_segment_failsafe() {
-<a name="l00191"></a>00191                 <span class="keywordflow">if</span>( my_segment_ptr ) *my_segment_ptr = 0; <span class="comment">// indicate no allocation in progress</span>
-<a name="l00192"></a>00192             }
-<a name="l00193"></a>00193         };
-<a name="l00194"></a>00194 
-<a name="l00196"></a>00196         <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="l00197"></a>00197             __TBB_ASSERT( k, <span class="stringliteral">"Zero segment must be embedded"</span> );
-<a name="l00198"></a>00198             enable_segment_failsafe watchdog( my_table, k );
-<a name="l00199"></a>00199             cache_aligned_allocator<bucket> alloc;
-<a name="l00200"></a>00200             size_type sz;
-<a name="l00201"></a>00201             __TBB_ASSERT( !is_valid(my_table[k]), <span class="stringliteral">"Wrong concurrent assignment"</span>);
-<a name="l00202"></a>00202             <span class="keywordflow">if</span>( k >= first_block ) {
-<a name="l00203"></a>00203                 sz = segment_size( k );
-<a name="l00204"></a>00204                 segment_ptr_t ptr = alloc.allocate( sz );
-<a name="l00205"></a>00205                 init_buckets( ptr, sz, is_initial );
-<a name="l00206"></a>00206                 itt_hide_store_word( my_table[k], ptr );
-<a name="l00207"></a>00207                 sz <<= 1;<span class="comment">// double it to get entire capacity of the container</span>
-<a name="l00208"></a>00208             } <span class="keywordflow">else</span> { <span class="comment">// the first block</span>
-<a name="l00209"></a>00209                 __TBB_ASSERT( k == embedded_block, <span class="stringliteral">"Wrong segment index"</span> );
-<a name="l00210"></a>00210                 sz = segment_size( first_block );
-<a name="l00211"></a>00211                 segment_ptr_t ptr = alloc.allocate( sz - embedded_buckets );
-<a name="l00212"></a>00212                 init_buckets( ptr, sz - embedded_buckets, is_initial );
-<a name="l00213"></a>00213                 ptr -= segment_base(embedded_block);
-<a name="l00214"></a>00214                 <span class="keywordflow">for</span>(segment_index_t i = embedded_block; i < first_block; i++) <span class="comment">// calc the offsets</span>
-<a name="l00215"></a>00215                     itt_hide_store_word( my_table[i], ptr + segment_base(i) );
-<a name="l00216"></a>00216             }
-<a name="l00217"></a>00217             itt_store_word_with_release( my_mask, sz-1 );
-<a name="l00218"></a>00218             watchdog.my_segment_ptr = 0;
-<a name="l00219"></a>00219         }
-<a name="l00220"></a>00220 
-<a name="l00222"></a>00222         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="l00223"></a>00223             segment_index_t s = segment_index_of( h );
-<a name="l00224"></a>00224             h -= segment_base(s);
-<a name="l00225"></a>00225             segment_ptr_t seg = my_table[s];
-<a name="l00226"></a>00226             __TBB_ASSERT( is_valid(seg), <span class="stringliteral">"hashcode must be cut by valid mask for allocated segments"</span> );
-<a name="l00227"></a>00227             <span class="keywordflow">return</span> &seg[h];
-<a name="l00228"></a>00228         }
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230         <span class="comment">// internal serial rehashing helper</span>
-<a name="l00231"></a>00231         <span class="keywordtype">void</span> mark_rehashed_levels( hashcode_t h ) <span class="keywordflow">throw</span> () {
-<a name="l00232"></a>00232             segment_index_t s = segment_index_of( h );
-<a name="l00233"></a>00233             <span class="keywordflow">while</span>( segment_ptr_t seg = my_table[++s] )
-<a name="l00234"></a>00234                 <span class="keywordflow">if</span>( seg[h].node_list == rehash_req ) {
-<a name="l00235"></a>00235                     seg[h].node_list = empty_rehashed;
-<a name="l00236"></a>00236                     mark_rehashed_levels( h + ((hashcode_t)1<<s) ); <span class="comment">// optimized segment_base(s)</span>
-<a name="l00237"></a>00237                 }
-<a name="l00238"></a>00238         }
-<a name="l00239"></a>00239 
-<a name="l00241"></a>00241         <span class="comment">// Splitting into two functions should help inlining</span>
-<a name="l00242"></a>00242         <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="l00243"></a>00243             hashcode_t m_now, m_old = m;
-<a name="l00244"></a>00244             m_now = (hashcode_t) itt_load_word_with_acquire( my_mask );
-<a name="l00245"></a>00245             <span class="keywordflow">if</span>( m_old != m_now )
-<a name="l00246"></a>00246                 <span class="keywordflow">return</span> check_rehashing_collision( h, m_old, m = m_now );
-<a name="l00247"></a>00247             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00248"></a>00248         }
-<a name="l00249"></a>00249 
-<a name="l00251"></a>00251         <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="l00252"></a>00252             __TBB_ASSERT(m_old != m, NULL); <span class="comment">// TODO?: m arg could be optimized out by passing h = h&m</span>
-<a name="l00253"></a>00253             <span class="keywordflow">if</span>( (h & m_old) != (h & m) ) { <span class="comment">// mask changed for this hashcode, rare event</span>
-<a name="l00254"></a>00254                 <span class="comment">// condition above proves that 'h' has some other bits set beside 'm_old'</span>
-<a name="l00255"></a>00255                 <span class="comment">// find next applicable mask after m_old    //TODO: look at bsl instruction</span>
-<a name="l00256"></a>00256                 <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="l00257"></a>00257                     ;
-<a name="l00258"></a>00258                 m_old = (m_old<<1) - 1; <span class="comment">// get full mask from a bit</span>
-<a name="l00259"></a>00259                 __TBB_ASSERT((m_old&(m_old+1))==0 && m_old <= m, NULL);
-<a name="l00260"></a>00260                 <span class="comment">// check whether it is rehashing/ed</span>
-<a name="l00261"></a>00261                 <span class="keywordflow">if</span>( itt_load_word_with_acquire(get_bucket(h & m_old)->node_list) != rehash_req )
-<a name="l00262"></a>00262                 {
-<a name="l00263"></a>00263 <span class="preprocessor">#if __TBB_STATISTICS</span>
-<a name="l00264"></a>00264 <span class="preprocessor"></span>                    my_info_restarts++; <span class="comment">// race collisions</span>
-<a name="l00265"></a>00265 <span class="preprocessor">#endif</span>
-<a name="l00266"></a>00266 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00267"></a>00267                 }
-<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 = __TBB_Log2( mask+1 ); <span class="comment">//optimized segment_index_of</span>
-<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="keywordflow">if</span>( !itt_hide_load_word(my_table[new_seg])
-<a name="l00281"></a>00281                   && __TBB_CompareAndSwapW(&my_table[new_seg], 2, 0) == 0 )
-<a name="l00282"></a>00282                     <span class="keywordflow">return</span> new_seg; <span class="comment">// The value must be processed</span>
-<a name="l00283"></a>00283             }
-<a name="l00284"></a>00284             <span class="keywordflow">return</span> 0;
-<a name="l00285"></a>00285         }
-<a name="l00286"></a>00286 
-<a name="l00288"></a>00288         <span class="keywordtype">void</span> reserve(size_type buckets) {
-<a name="l00289"></a>00289             <span class="keywordflow">if</span>( !buckets-- ) <span class="keywordflow">return</span>;
-<a name="l00290"></a>00290             <span class="keywordtype">bool</span> is_initial = !my_size;
-<a name="l00291"></a>00291             <span class="keywordflow">for</span>( size_type m = my_mask; buckets > m; m = my_mask )
-<a name="l00292"></a>00292                 enable_segment( segment_index_of( m+1 ), is_initial );
-<a name="l00293"></a>00293         }
-<a name="l00295"></a>00295         <span class="keywordtype">void</span> internal_swap(hash_map_base &table) {
-<a name="l00296"></a>00296             std::swap(this->my_mask, table.my_mask);
-<a name="l00297"></a>00297             std::swap(this->my_size, table.my_size);
-<a name="l00298"></a>00298             <span class="keywordflow">for</span>(size_type i = 0; i < embedded_buckets; i++)
-<a name="l00299"></a>00299                 std::swap(this->my_embedded_segment[i].node_list, table.my_embedded_segment[i].node_list);
-<a name="l00300"></a>00300             <span class="keywordflow">for</span>(size_type i = embedded_block; i < pointers_per_table; i++)
-<a name="l00301"></a>00301                 std::swap(this->my_table[i], table.my_table[i]);
-<a name="l00302"></a>00302         }
-<a name="l00303"></a>00303     };
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-<a name="l00306"></a>00306     <span class="keyword">class </span>hash_map_range;
-<a name="l00307"></a>00307 
-<a name="l00309"></a>00309 
-<a name="l00311"></a>00311     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00312"></a>00312     <span class="keyword">class </span>hash_map_iterator
-<a name="l00313"></a>00313         : <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value>
-<a name="l00314"></a>00314     {
-<a name="l00315"></a>00315         <span class="keyword">typedef</span> Container map_type;
-<a name="l00316"></a>00316         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::node node;
-<a name="l00317"></a>00317         <span class="keyword">typedef</span> hash_map_base::node_base node_base;
-<a name="l00318"></a>00318         <span class="keyword">typedef</span> hash_map_base::bucket bucket;
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320         <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="l00321"></a>00321         <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="l00322"></a>00322 
-<a name="l00323"></a>00323         <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="l00324"></a>00324         <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="l00325"></a>00325 
-<a name="l00326"></a>00326         <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="l00327"></a>00327         <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="l00328"></a>00328     
-<a name="l00329"></a>00329         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-<a name="l00330"></a>00330         <span class="keyword">friend</span> <span class="keyword">class </span>hash_map_iterator;
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332         <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00333"></a>00333         <span class="keyword">friend</span> <span class="keyword">class </span>hash_map_range;
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335         <span class="keywordtype">void</span> advance_to_next_bucket() { <span class="comment">// TODO?: refactor to iterator_base class</span>
-<a name="l00336"></a>00336             size_t k = my_index+1;
-<a name="l00337"></a>00337             <span class="keywordflow">while</span>( my_bucket && k <= my_map->my_mask ) {
-<a name="l00338"></a>00338                 <span class="comment">// Following test uses 2's-complement wizardry</span>
-<a name="l00339"></a>00339                 <span class="keywordflow">if</span>( k& (k-2) ) <span class="comment">// not the beginning of a segment</span>
-<a name="l00340"></a>00340                     ++my_bucket;
-<a name="l00341"></a>00341                 <span class="keywordflow">else</span> my_bucket = my_map->get_bucket( k );
-<a name="l00342"></a>00342                 my_node = static_cast<node*>( my_bucket->node_list );
-<a name="l00343"></a>00343                 <span class="keywordflow">if</span>( hash_map_base::is_valid(my_node) ) {
-<a name="l00344"></a>00344                     my_index = k; <span class="keywordflow">return</span>;
-<a name="l00345"></a>00345                 }
-<a name="l00346"></a>00346                 ++k;
-<a name="l00347"></a>00347             }
-<a name="l00348"></a>00348             my_bucket = 0; my_node = 0; my_index = k; <span class="comment">// the end</span>
-<a name="l00349"></a>00349         }
-<a name="l00350"></a>00350 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
-<a name="l00351"></a>00351 <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="l00352"></a>00352         <span class="keyword">friend</span> <span class="keyword">class </span>interface5::concurrent_hash_map;
-<a name="l00353"></a>00353 <span class="preprocessor">#else</span>
-<a name="l00354"></a>00354 <span class="preprocessor"></span>    <span class="keyword">public</span>: <span class="comment">// workaround</span>
-<a name="l00355"></a>00355 <span class="preprocessor">#endif</span>
-<a name="l00357"></a>00357 <span class="preprocessor">        const Container *my_map;</span>
-<a name="l00358"></a>00358 <span class="preprocessor"></span>
-<a name="l00360"></a>00360         size_t my_index;
-<a name="l00361"></a>00361 
-<a name="l00363"></a>00363         <span class="keyword">const</span> bucket *my_bucket;
-<a name="l00364"></a>00364 
-<a name="l00366"></a>00366         node *my_node;
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368         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="l00369"></a>00369 
-<a name="l00370"></a>00370     <span class="keyword">public</span>:
-<a name="l00372"></a>00372         hash_map_iterator() {}
-<a name="l00373"></a>00373         hash_map_iterator( <span class="keyword">const</span> hash_map_iterator<Container,typename Container::value_type> &other ) :
-<a name="l00374"></a>00374             my_map(other.my_map),
-<a name="l00375"></a>00375             my_index(other.my_index),
-<a name="l00376"></a>00376             my_bucket(other.my_bucket),
-<a name="l00377"></a>00377             my_node(other.my_node)
-<a name="l00378"></a>00378         {}
-<a name="l00379"></a>00379         Value& operator*()<span class="keyword"> const </span>{
-<a name="l00380"></a>00380             __TBB_ASSERT( hash_map_base::is_valid(my_node), <span class="stringliteral">"iterator uninitialized or at end of container?"</span> );
-<a name="l00381"></a>00381             <span class="keywordflow">return</span> my_node->item;
-<a name="l00382"></a>00382         }
-<a name="l00383"></a>00383         Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00384"></a>00384         hash_map_iterator& operator++();
-<a name="l00385"></a>00385         
-<a name="l00387"></a>00387         hash_map_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00388"></a>00388             hash_map_iterator old(*<span class="keyword">this</span>);
-<a name="l00389"></a>00389             operator++();
-<a name="l00390"></a>00390             <span class="keywordflow">return</span> old;
-<a name="l00391"></a>00391         }
-<a name="l00392"></a>00392     };
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00395"></a>00395     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="l00396"></a>00396         my_map(&map),
-<a name="l00397"></a>00397         my_index(index),
-<a name="l00398"></a>00398         my_bucket(b),
-<a name="l00399"></a>00399         my_node( static_cast<node*>(n) )
-<a name="l00400"></a>00400     {
-<a name="l00401"></a>00401         <span class="keywordflow">if</span>( b && !hash_map_base::is_valid(n) )
-<a name="l00402"></a>00402             advance_to_next_bucket();
-<a name="l00403"></a>00403     }
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00406"></a>00406     hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {
-<a name="l00407"></a>00407         my_node = static_cast<node*>( my_node->next );
-<a name="l00408"></a>00408         <span class="keywordflow">if</span>( !my_node ) advance_to_next_bucket();
-<a name="l00409"></a>00409         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00410"></a>00410     }
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412     <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="l00413"></a>00413     <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="l00414"></a>00414         <span class="keywordflow">return</span> i.my_node == j.my_node && i.my_map == j.my_map;
-<a name="l00415"></a>00415     }
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417     <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="l00418"></a>00418     <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="l00419"></a>00419         <span class="keywordflow">return</span> i.my_node != j.my_node || i.my_map != j.my_map;
-<a name="l00420"></a>00420     }
-<a name="l00421"></a>00421 
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-<a name="l00425"></a>00425     <span class="keyword">class </span>hash_map_range {
-<a name="l00426"></a>00426         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::map_type map_type;
-<a name="l00427"></a>00427         Iterator my_begin;
-<a name="l00428"></a>00428         Iterator my_end;
-<a name="l00429"></a>00429         <span class="keyword">mutable</span> Iterator my_midpoint;
-<a name="l00430"></a>00430         size_t my_grainsize;
-<a name="l00432"></a>00432         <span class="keywordtype">void</span> set_midpoint() <span class="keyword">const</span>;
-<a name="l00433"></a>00433         <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="l00434"></a>00434     <span class="keyword">public</span>:
-<a name="l00436"></a>00436         <span class="keyword">typedef</span> std::size_t size_type;
-<a name="l00437"></a>00437         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::value_type value_type;
-<a name="l00438"></a>00438         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::reference reference;
-<a name="l00439"></a>00439         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::difference_type difference_type;
-<a name="l00440"></a>00440         <span class="keyword">typedef</span> Iterator iterator;
-<a name="l00441"></a>00441 
-<a name="l00443"></a>00443         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin==my_end;}
-<a name="l00444"></a>00444 
-<a name="l00446"></a>00446         <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
-<a name="l00447"></a>00447             <span class="keywordflow">return</span> my_midpoint!=my_end;
-<a name="l00448"></a>00448         }
-<a name="l00450"></a>00450         hash_map_range( hash_map_range& r, split ) : 
-<a name="l00451"></a>00451             my_end(r.my_end),
-<a name="l00452"></a>00452             my_grainsize(r.my_grainsize)
-<a name="l00453"></a>00453         {
-<a name="l00454"></a>00454             r.my_end = my_begin = r.my_midpoint;
-<a name="l00455"></a>00455             __TBB_ASSERT( !empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
-<a name="l00456"></a>00456             __TBB_ASSERT( !r.empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
-<a name="l00457"></a>00457             set_midpoint();
-<a name="l00458"></a>00458             r.set_midpoint();
-<a name="l00459"></a>00459         }
-<a name="l00461"></a>00461         <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00462"></a>00462         hash_map_range( hash_map_range<U>& r) : 
-<a name="l00463"></a>00463             my_begin(r.my_begin),
-<a name="l00464"></a>00464             my_end(r.my_end),
-<a name="l00465"></a>00465             my_midpoint(r.my_midpoint),
-<a name="l00466"></a>00466             my_grainsize(r.my_grainsize)
-<a name="l00467"></a>00467         {}
-<a name="l00468"></a>00468 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00470"></a>00470 <span class="preprocessor">        hash_map_range( const Iterator& begin_, const Iterator& end_, size_type grainsize_ = 1 ) : </span>
-<a name="l00471"></a>00471 <span class="preprocessor"></span>            my_begin(begin_), 
-<a name="l00472"></a>00472             my_end(end_),
-<a name="l00473"></a>00473             my_grainsize(grainsize_)
-<a name="l00474"></a>00474         {
-<a name="l00475"></a>00475             <span class="keywordflow">if</span>(!my_end.my_index && !my_end.my_bucket) <span class="comment">// end</span>
-<a name="l00476"></a>00476                 my_end.my_index = my_end.my_map->my_mask + 1;
-<a name="l00477"></a>00477             set_midpoint();
-<a name="l00478"></a>00478             __TBB_ASSERT( grainsize_>0, <span class="stringliteral">"grainsize must be positive"</span> );
-<a name="l00479"></a>00479         }
-<a name="l00480"></a>00480 <span class="preprocessor">#endif</span>
-<a name="l00482"></a>00482 <span class="preprocessor">        hash_map_range( const map_type &map, size_type grainsize_ = 1 ) : </span>
-<a name="l00483"></a>00483 <span class="preprocessor"></span>            my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),
-<a name="l00484"></a>00484             my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
-<a name="l00485"></a>00485             my_grainsize( grainsize_ )
-<a name="l00486"></a>00486         {
-<a name="l00487"></a>00487             __TBB_ASSERT( grainsize_>0, <span class="stringliteral">"grainsize must be positive"</span> );
-<a name="l00488"></a>00488             set_midpoint();
-<a name="l00489"></a>00489         }
-<a name="l00490"></a>00490         <span class="keyword">const</span> Iterator& begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
-<a name="l00491"></a>00491         <span class="keyword">const</span> Iterator& end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
-<a name="l00493"></a>00493         size_type grainsize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
-<a name="l00494"></a>00494     };
-<a name="l00495"></a>00495 
-<a name="l00496"></a>00496     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-<a name="l00497"></a>00497     <span class="keywordtype">void</span> hash_map_range<Iterator>::set_midpoint()<span class="keyword"> const </span>{
-<a name="l00498"></a>00498         <span class="comment">// Split by groups of nodes</span>
-<a name="l00499"></a>00499         size_t m = my_end.my_index-my_begin.my_index;
-<a name="l00500"></a>00500         <span class="keywordflow">if</span>( m > my_grainsize ) {
-<a name="l00501"></a>00501             m = my_begin.my_index + m/2u;
-<a name="l00502"></a>00502             hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);
-<a name="l00503"></a>00503             my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);
-<a name="l00504"></a>00504         } <span class="keywordflow">else</span> {
-<a name="l00505"></a>00505             my_midpoint = my_end;
-<a name="l00506"></a>00506         }
-<a name="l00507"></a>00507         __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,
-<a name="l00508"></a>00508             <span class="stringliteral">"my_begin is after my_midpoint"</span> );
-<a name="l00509"></a>00509         __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,
-<a name="l00510"></a>00510             <span class="stringliteral">"my_midpoint is after my_end"</span> );
-<a name="l00511"></a>00511         __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,
-<a name="l00512"></a>00512             <span class="stringliteral">"[my_begin, my_midpoint) range should not be empty"</span> );
-<a name="l00513"></a>00513     }
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515     } <span class="comment">// internal</span>
-<a name="l00517"></a>00517 <span class="comment"></span>
-<a name="l00519"></a>00519 
-<a name="l00548"></a>00548 <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="l00549"></a><a class="code" href="a00243.html">00549</a> <span class="keyword">class </span><a class="code" href="a00243.html">concurrent_hash_map</a> : <span class="keyword">protected</span> internal::hash_map_base {
-<a name="l00550"></a>00550     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00551"></a>00551     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_iterator;
-<a name="l00552"></a>00552 
-<a name="l00553"></a>00553     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00554"></a>00554     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_range;
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556 <span class="keyword">public</span>:
-<a name="l00557"></a>00557     <span class="keyword">typedef</span> Key key_type;
-<a name="l00558"></a>00558     <span class="keyword">typedef</span> T mapped_type;
-<a name="l00559"></a>00559     <span class="keyword">typedef</span> std::pair<const Key,T> value_type;
-<a name="l00560"></a>00560     <span class="keyword">typedef</span> hash_map_base::size_type size_type;
-<a name="l00561"></a>00561     <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00562"></a>00562     <span class="keyword">typedef</span> value_type *pointer;
-<a name="l00563"></a>00563     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
-<a name="l00564"></a>00564     <span class="keyword">typedef</span> value_type &reference;
-<a name="l00565"></a>00565     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type &const_reference;
-<a name="l00566"></a>00566     <span class="keyword">typedef</span> internal::hash_map_iterator<concurrent_hash_map,value_type> iterator;
-<a name="l00567"></a>00567     <span class="keyword">typedef</span> internal::hash_map_iterator<concurrent_hash_map,const value_type> const_iterator;
-<a name="l00568"></a>00568     <span class="keyword">typedef</span> internal::hash_map_range<iterator> range_type;
-<a name="l00569"></a>00569     <span class="keyword">typedef</span> internal::hash_map_range<const_iterator> const_range_type;
-<a name="l00570"></a>00570     <span class="keyword">typedef</span> Allocator allocator_type;
-<a name="l00571"></a>00571 
-<a name="l00572"></a>00572 <span class="keyword">protected</span>:
-<a name="l00573"></a>00573     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00246.html">const_accessor</a>;
-<a name="l00574"></a>00574     <span class="keyword">struct </span>node;
-<a name="l00575"></a>00575     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<node>::other node_allocator_type;
-<a name="l00576"></a>00576     node_allocator_type my_allocator;
-<a name="l00577"></a>00577     HashCompare my_hash_compare;
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579     <span class="keyword">struct </span>node : <span class="keyword">public</span> node_base {
-<a name="l00580"></a>00580         value_type item;
-<a name="l00581"></a>00581         node( <span class="keyword">const</span> Key &key ) : item(key, T()) {}
-<a name="l00582"></a>00582         node( <span class="keyword">const</span> Key &key, <span class="keyword">const</span> T &t ) : item(key, t) {}
-<a name="l00583"></a>00583         <span class="comment">// exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17</span>
-<a name="l00584"></a>00584         <span class="keywordtype">void</span> *operator new( size_t <span class="comment">/*size*/</span>, node_allocator_type &a ) {
-<a name="l00585"></a>00585             <span class="keywordtype">void</span> *ptr = a.allocate(1);
-<a name="l00586"></a>00586             <span class="keywordflow">if</span>(!ptr) 
-<a name="l00587"></a>00587                 tbb::internal::throw_exception(tbb::internal::eid_bad_alloc);
-<a name="l00588"></a>00588             <span class="keywordflow">return</span> ptr;
-<a name="l00589"></a>00589         }
-<a name="l00590"></a>00590         <span class="comment">// match placement-new form above to be called if exception thrown in constructor</span>
-<a name="l00591"></a>00591         <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="l00592"></a>00592     };
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594     <span class="keywordtype">void</span> delete_node( node_base *n ) {
-<a name="l00595"></a>00595         my_allocator.destroy( static_cast<node*>(n) );
-<a name="l00596"></a>00596         my_allocator.deallocate( static_cast<node*>(n), 1);
-<a name="l00597"></a>00597     }
-<a name="l00598"></a>00598 
-<a name="l00599"></a>00599     node *search_bucket( <span class="keyword">const</span> key_type &key, bucket *b )<span class="keyword"> const </span>{
-<a name="l00600"></a>00600         node *n = static_cast<node*>( b->node_list );
-<a name="l00601"></a>00601         <span class="keywordflow">while</span>( is_valid(n) && !my_hash_compare.equal(key, n->item.first) )
-<a name="l00602"></a>00602             n = static_cast<node*>( n->next );
-<a name="l00603"></a>00603         __TBB_ASSERT(n != internal::rehash_req, <span class="stringliteral">"Search can be executed only for rehashed bucket"</span>);
-<a name="l00604"></a>00604         <span class="keywordflow">return</span> n;
-<a name="l00605"></a>00605     }
-<a name="l00606"></a>00606 
-<a name="l00608"></a><a class="code" href="a00245.html">00608</a>     <span class="keyword">class </span><a class="code" href="a00245.html">bucket_accessor</a> : <span class="keyword">public</span> bucket::scoped_t {
-<a name="l00609"></a>00609         bucket *my_b;
-<a name="l00610"></a>00610     <span class="keyword">public</span>:
-<a name="l00611"></a>00611         <a class="code" href="a00245.html">bucket_accessor</a>( <a class="code" href="a00243.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="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( base, h, writer ); }
-<a name="l00613"></a><a class="code" href="a00245.html#d11c77f4d70a94d4fb344492bbf18007">00613</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00243.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="l00614"></a>00614             my_b = base->get_bucket( h );
-<a name="l00615"></a>00615             <span class="comment">// TODO: actually, notification is unnecessary here, just hiding double-check</span>
-<a name="l00616"></a>00616             <span class="keywordflow">if</span>( itt_load_word_with_acquire(my_b->node_list) == internal::rehash_req
-<a name="l00617"></a>00617                 && try_acquire( my_b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) )
-<a name="l00618"></a>00618             {
-<a name="l00619"></a>00619                 <span class="keywordflow">if</span>( my_b->node_list == internal::rehash_req ) base-><a class="code" href="a00243.html#4962c7da24793ccc05524cc3bbcf1efa">rehash_bucket</a>( my_b, h ); <span class="comment">//recursive rehashing</span>
-<a name="l00620"></a>00620             }
-<a name="l00621"></a>00621             <span class="keywordflow">else</span> bucket::scoped_t::acquire( my_b->mutex, writer );
-<a name="l00622"></a>00622             __TBB_ASSERT( my_b->node_list != internal::rehash_req, NULL);
-<a name="l00623"></a>00623         }
-<a name="l00625"></a><a class="code" href="a00245.html#07d958f151a0eaa92f50fd56ad6440e2">00625</a>         <span class="keywordtype">bool</span> is_writer() { <span class="keywordflow">return</span> bucket::scoped_t::is_writer; }
-<a name="l00627"></a><a class="code" href="a00245.html#fa6314b861c574f86ed189b124cf5853">00627</a>         bucket *operator() () { <span class="keywordflow">return</span> my_b; }
-<a name="l00628"></a>00628     };
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630     <span class="comment">// TODO refactor to hash_base</span>
-<a name="l00631"></a>00631     <span class="keywordtype">void</span> rehash_bucket( bucket *b_new, <span class="keyword">const</span> hashcode_t h ) {
-<a name="l00632"></a>00632         __TBB_ASSERT( *(intptr_t*)(&b_new->mutex), <span class="stringliteral">"b_new must be locked (for write)"</span>);
-<a name="l00633"></a>00633         __TBB_ASSERT( h > 1, <span class="stringliteral">"The lowermost buckets can't be rehashed"</span> );
-<a name="l00634"></a>00634         __TBB_store_with_release(b_new->node_list, internal::empty_rehashed); <span class="comment">// mark rehashed</span>
-<a name="l00635"></a>00635         hashcode_t mask = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
-<a name="l00636"></a>00636 <span class="preprocessor">#if __TBB_STATISTICS</span>
-<a name="l00637"></a>00637 <span class="preprocessor"></span>        my_info_rehashes++; <span class="comment">// invocations of rehash_bucket</span>
-<a name="l00638"></a>00638 <span class="preprocessor">#endif</span>
-<a name="l00639"></a>00639 <span class="preprocessor"></span>
-<a name="l00640"></a>00640         bucket_accessor b_old( <span class="keyword">this</span>, h & mask );
-<a name="l00641"></a>00641 
-<a name="l00642"></a>00642         mask = (mask<<1) | 1; <span class="comment">// get full mask for new bucket</span>
-<a name="l00643"></a>00643         __TBB_ASSERT( (mask&(mask+1))==0 && (h & mask) == h, NULL );
-<a name="l00644"></a>00644     restart:
-<a name="l00645"></a>00645         <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="l00646"></a>00646             hashcode_t c = my_hash_compare.hash( static_cast<node*>(n)->item.first );
-<a name="l00647"></a>00647 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00648"></a>00648 <span class="preprocessor"></span>            hashcode_t bmask = h & (mask>>1);
-<a name="l00649"></a>00649             bmask = bmask==0? 1 : ( 1u<<(__TBB_Log2( bmask )+1 ) ) - 1; <span class="comment">// minimal mask of parent bucket</span>
-<a name="l00650"></a>00650             __TBB_ASSERT( (c & bmask) == (h & bmask), <span class="stringliteral">"hash() function changed for key in table"</span> );
-<a name="l00651"></a>00651 <span class="preprocessor">#endif</span>
-<a name="l00652"></a>00652 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( (c & mask) == h ) {
-<a name="l00653"></a>00653                 <span class="keywordflow">if</span>( !b_old.is_writer() )
-<a name="l00654"></a>00654                     <span class="keywordflow">if</span>( !b_old.upgrade_to_writer() ) {
-<a name="l00655"></a>00655                         <span class="keywordflow">goto</span> restart; <span class="comment">// node ptr can be invalid due to concurrent erase</span>
-<a name="l00656"></a>00656                     }
-<a name="l00657"></a>00657                 *p = n->next; <span class="comment">// exclude from b_old</span>
-<a name="l00658"></a>00658                 add_to_bucket( b_new, n );
-<a name="l00659"></a>00659             } <span class="keywordflow">else</span> p = &n->next; <span class="comment">// iterate to next item</span>
-<a name="l00660"></a>00660         }
-<a name="l00661"></a>00661     }
-<a name="l00662"></a>00662 
-<a name="l00663"></a>00663 <span class="keyword">public</span>:
-<a name="l00664"></a>00664     
-<a name="l00665"></a>00665     <span class="keyword">class </span>accessor;
-<a name="l00667"></a><a class="code" href="a00246.html">00667</a>     <span class="keyword">class </span><a class="code" href="a00246.html">const_accessor</a> : <span class="keyword">private</span> node::scoped_t <span class="comment">/*which derived from no_copy*/</span> {
-<a name="l00668"></a>00668         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00243.html">concurrent_hash_map</a><Key,T,HashCompare,Allocator>;
-<a name="l00669"></a>00669         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00244.html">accessor</a>;
-<a name="l00670"></a>00670     <span class="keyword">public</span>:
-<a name="l00672"></a><a class="code" href="a00246.html#a8e50238483ba451363dccebd981d346">00672</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="l00673"></a>00673 
-<a name="l00675"></a><a class="code" href="a00246.html#84c3080d0c6124d55c8bb4cf6055e65f">00675</a>         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_node;}
-<a name="l00676"></a>00676 
-<a name="l00678"></a><a class="code" href="a00246.html#7db006d41b49dc5f1716a913769d4698">00678</a>         <span class="keywordtype">void</span> <a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
-<a name="l00679"></a>00679             <span class="keywordflow">if</span>( my_node ) {
-<a name="l00680"></a>00680                 node::scoped_t::release();
-<a name="l00681"></a>00681                 my_node = 0;
-<a name="l00682"></a>00682             }
-<a name="l00683"></a>00683         }
-<a name="l00684"></a>00684 
-<a name="l00686"></a><a class="code" href="a00246.html#9411df8197ceb4881ec4c7368a0a7f88">00686</a>         const_reference operator*()<span class="keyword"> const </span>{
-<a name="l00687"></a>00687             __TBB_ASSERT( my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
-<a name="l00688"></a>00688             <span class="keywordflow">return</span> my_node->item;
-<a name="l00689"></a>00689         }
-<a name="l00690"></a>00690 
-<a name="l00692"></a><a class="code" href="a00246.html#3d03a48ecb8cd9549bd8be64b09c9b0d">00692</a>         const_pointer operator->()<span class="keyword"> const </span>{
-<a name="l00693"></a>00693             <span class="keywordflow">return</span> &operator*();
-<a name="l00694"></a>00694         }
-<a name="l00695"></a>00695 
-<a name="l00697"></a><a class="code" href="a00246.html#27399c613eb1aecd4660803955dda09d">00697</a>         <a class="code" href="a00246.html">const_accessor</a>() : my_node(NULL) {}
-<a name="l00698"></a>00698 
-<a name="l00700"></a><a class="code" href="a00246.html#928769b139d53427e7075c1f86148e4c">00700</a>         ~<a class="code" href="a00246.html">const_accessor</a>() {
-<a name="l00701"></a>00701             my_node = NULL; <span class="comment">// scoped lock's release() is called in its destructor</span>
-<a name="l00702"></a>00702         }
-<a name="l00703"></a>00703     <span class="keyword">protected</span>:
-<a name="l00704"></a>00704         <span class="keywordtype">bool</span> is_writer() { <span class="keywordflow">return</span> node::scoped_t::is_writer; }
-<a name="l00705"></a>00705         node *my_node;
-<a name="l00706"></a>00706         hashcode_t my_hash;
-<a name="l00707"></a>00707     };
-<a name="l00708"></a>00708 
-<a name="l00710"></a><a class="code" href="a00244.html">00710</a>     <span class="keyword">class </span><a class="code" href="a00244.html">accessor</a>: <span class="keyword">public</span> <a class="code" href="a00246.html">const_accessor</a> {
-<a name="l00711"></a>00711     <span class="keyword">public</span>:
-<a name="l00713"></a><a class="code" href="a00244.html#0b648be7a95a8fb2971042c15eb112c1">00713</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_hash_map::value_type value_type;
-<a name="l00714"></a>00714 
-<a name="l00716"></a><a class="code" href="a00244.html#170280ea807a22e742095de3e8c5ea38">00716</a>         reference operator*()<span class="keyword"> const </span>{
-<a name="l00717"></a>00717             __TBB_ASSERT( this->my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
-<a name="l00718"></a>00718             <span class="keywordflow">return</span> this->my_node->item;
-<a name="l00719"></a>00719         }
-<a name="l00720"></a>00720 
-<a name="l00722"></a><a class="code" href="a00244.html#a807920cdffe3ec5c5e282b4d1ff92a2">00722</a>         pointer operator->()<span class="keyword"> const </span>{
-<a name="l00723"></a>00723             <span class="keywordflow">return</span> &operator*();
-<a name="l00724"></a>00724         }
-<a name="l00725"></a>00725     };
-<a name="l00726"></a>00726 
-<a name="l00728"></a><a class="code" href="a00243.html#1ad413f5b666176e7669bf4c87d1ff3f">00728</a>     <a class="code" href="a00243.html">concurrent_hash_map</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00729"></a>00729         : internal::hash_map_base(), my_allocator(a)
-<a name="l00730"></a>00730     {}
-<a name="l00731"></a>00731 
-<a name="l00733"></a><a class="code" href="a00243.html#46b9896317662c3cfa3c876ad7592a7c">00733</a>     <a class="code" href="a00243.html">concurrent_hash_map</a>(size_type n, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00734"></a>00734         : my_allocator(a)
-<a name="l00735"></a>00735     {
-<a name="l00736"></a>00736         reserve( n );
-<a name="l00737"></a>00737     }
-<a name="l00738"></a>00738 
-<a name="l00740"></a><a class="code" href="a00243.html#6fb14710893308fb47aaeee55ee30dc3">00740</a>     <a class="code" href="a00243.html">concurrent_hash_map</a>( <span class="keyword">const</span> <a class="code" href="a00243.html">concurrent_hash_map</a>& table, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00741"></a>00741         : internal::hash_map_base(), my_allocator(a)
-<a name="l00742"></a>00742     {
-<a name="l00743"></a>00743         internal_copy(table);
-<a name="l00744"></a>00744     }
-<a name="l00745"></a>00745 
-<a name="l00747"></a>00747     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00748"></a><a class="code" href="a00243.html#83c40f2053f208861b90390e12a36436">00748</a>     <a class="code" href="a00243.html">concurrent_hash_map</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00749"></a>00749         : my_allocator(a)
-<a name="l00750"></a>00750     {
-<a name="l00751"></a>00751         reserve( std::distance(first, last) ); <span class="comment">// TODO: load_factor?</span>
-<a name="l00752"></a>00752         internal_copy(first, last);
-<a name="l00753"></a>00753     }
-<a name="l00754"></a>00754 
-<a name="l00756"></a><a class="code" href="a00243.html#088d1aaccc816884a49e38f7065622c8">00756</a>     <a class="code" href="a00243.html">concurrent_hash_map</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00243.html">concurrent_hash_map</a>& table ) {
-<a name="l00757"></a>00757         <span class="keywordflow">if</span>( <span class="keyword">this</span>!=&table ) {
-<a name="l00758"></a>00758             clear();
-<a name="l00759"></a>00759             internal_copy(table);
-<a name="l00760"></a>00760         } 
-<a name="l00761"></a>00761         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00762"></a>00762     }
-<a name="l00763"></a>00763 
-<a name="l00764"></a>00764 
-<a name="l00766"></a>00766 
-<a name="l00768"></a>00768     <span class="keywordtype">void</span> rehash(size_type n = 0);
-<a name="l00769"></a>00769     
-<a name="l00771"></a>00771     <span class="keywordtype">void</span> clear();
-<a name="l00772"></a>00772 
-<a name="l00774"></a><a class="code" href="a00243.html#2aa8e2d28d5af1284cf78d20a9c22731">00774</a>     ~<a class="code" href="a00243.html">concurrent_hash_map</a>() { clear(); }
-<a name="l00775"></a>00775 
-<a name="l00776"></a>00776     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00777"></a>00777     <span class="comment">// Parallel algorithm support</span>
-<a name="l00778"></a>00778     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00779"></a>00779     range_type range( size_type grainsize=1 ) {
-<a name="l00780"></a>00780         <span class="keywordflow">return</span> range_type( *<span class="keyword">this</span>, grainsize );
-<a name="l00781"></a>00781     }
-<a name="l00782"></a>00782     const_range_type range( size_type grainsize=1 )<span class="keyword"> const </span>{
-<a name="l00783"></a>00783         <span class="keywordflow">return</span> const_range_type( *<span class="keyword">this</span>, grainsize );
-<a name="l00784"></a>00784     }
-<a name="l00785"></a>00785 
-<a name="l00786"></a>00786     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00787"></a>00787     <span class="comment">// STL support - not thread-safe methods</span>
-<a name="l00788"></a>00788     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00789"></a>00789     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,my_embedded_segment,my_embedded_segment->node_list);}
-<a name="l00790"></a>00790     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,0,0);}
-<a name="l00791"></a>00791     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="l00792"></a>00792     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="l00793"></a>00793     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="l00794"></a>00794     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="l00795"></a>00795     
-<a name="l00797"></a><a class="code" href="a00243.html#6aa56a8b5a25e61a97fa0b54fe2b5659">00797</a>     size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size; }
-<a name="l00798"></a>00798 
-<a name="l00800"></a><a class="code" href="a00243.html#61ff2e5bb44e5469366fd5295e5d0ebe">00800</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size == 0; }
-<a name="l00801"></a>00801 
-<a name="l00803"></a><a class="code" href="a00243.html#2bce57fe9b594abe1e6d2568aea8b357">00803</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="l00804"></a>00804 
-<a name="l00806"></a><a class="code" href="a00243.html#af34cb91b1d0f36a885a1a3432dd9af1">00806</a>     size_type bucket_count()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_mask+1; }
-<a name="l00807"></a>00807 
-<a name="l00809"></a><a class="code" href="a00243.html#6cbcacb4a256a85bf89576c101373ca7">00809</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
-<a name="l00810"></a>00810 
-<a name="l00812"></a>00812     <span class="keywordtype">void</span> swap(<a class="code" href="a00243.html">concurrent_hash_map</a> &table);
-<a name="l00813"></a>00813 
-<a name="l00814"></a>00814     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00815"></a>00815     <span class="comment">// concurrent map operations</span>
-<a name="l00816"></a>00816     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00817"></a>00817 
-<a name="l00819"></a><a class="code" href="a00243.html#6968eb6feed2df36be421df0464297af">00819</a>     size_type count( <span class="keyword">const</span> Key &key )<span class="keyword"> const </span>{
-<a name="l00820"></a>00820         <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="l00821"></a>00821     }
-<a name="l00822"></a>00822 
-<a name="l00824"></a>00824 
-<a name="l00825"></a><a class="code" href="a00243.html#2afcc33dade7bb24e008d60c0df38230">00825</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00246.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key )<span class="keyword"> const </span>{
-<a name="l00826"></a>00826         result.<a class="code" href="a00246.html#7db006d41b49dc5f1716a913769d4698">release</a>();
-<a name="l00827"></a>00827         <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="l00828"></a>00828     }
-<a name="l00829"></a>00829 
-<a name="l00831"></a>00831 
-<a name="l00832"></a><a class="code" href="a00243.html#7bc475d1968f7f0af3d736d7e8a0d7df">00832</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00244.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00833"></a>00833         result.<a class="code" href="a00246.html#7db006d41b49dc5f1716a913769d4698">release</a>();
-<a name="l00834"></a>00834         <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="l00835"></a>00835     }
-<a name="l00836"></a>00836         
-<a name="l00838"></a>00838 
-<a name="l00839"></a><a class="code" href="a00243.html#47fe0e60151a9bd7a444db827772a4e6">00839</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00246.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00840"></a>00840         result.<a class="code" href="a00246.html#7db006d41b49dc5f1716a913769d4698">release</a>();
-<a name="l00841"></a>00841         <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="l00842"></a>00842     }
-<a name="l00843"></a>00843 
-<a name="l00845"></a>00845 
-<a name="l00846"></a><a class="code" href="a00243.html#54e0955ecd11575b4c07166838a72893">00846</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00244.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
-<a name="l00847"></a>00847         result.<a class="code" href="a00246.html#7db006d41b49dc5f1716a913769d4698">release</a>();
-<a name="l00848"></a>00848         <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="l00849"></a>00849     }
-<a name="l00850"></a>00850 
-<a name="l00852"></a>00852 
-<a name="l00853"></a><a class="code" href="a00243.html#091efd2d12fdad4fe9e54d9629a9dfc3">00853</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00246.html">const_accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
-<a name="l00854"></a>00854         result.<a class="code" href="a00246.html#7db006d41b49dc5f1716a913769d4698">release</a>();
-<a name="l00855"></a>00855         <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="l00856"></a>00856     }
-<a name="l00857"></a>00857 
-<a name="l00859"></a>00859 
-<a name="l00860"></a><a class="code" href="a00243.html#39183d78d6e8425917555ab542ab92de">00860</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00244.html">accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
-<a name="l00861"></a>00861         result.<a class="code" href="a00246.html#7db006d41b49dc5f1716a913769d4698">release</a>();
-<a name="l00862"></a>00862         <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="l00863"></a>00863     }
-<a name="l00864"></a>00864 
-<a name="l00866"></a>00866 
-<a name="l00867"></a><a class="code" href="a00243.html#3f121a316af8135de476a30fae6d7c07">00867</a>     <span class="keywordtype">bool</span> insert( <span class="keyword">const</span> value_type &value ) {
-<a name="l00868"></a>00868         <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="l00869"></a>00869     }
-<a name="l00870"></a>00870 
-<a name="l00872"></a>00872     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00873"></a><a class="code" href="a00243.html#1dd37fad87e561151ba1e242ca94bcc1">00873</a>     <span class="keywordtype">void</span> insert(I first, I last) {
-<a name="l00874"></a>00874         <span class="keywordflow">for</span>(; first != last; ++first)
-<a name="l00875"></a>00875             insert( *first );
-<a name="l00876"></a>00876     }
-<a name="l00877"></a>00877 
-<a name="l00879"></a>00879 
-<a name="l00880"></a>00880     <span class="keywordtype">bool</span> erase( <span class="keyword">const</span> Key& key );
-<a name="l00881"></a>00881 
-<a name="l00883"></a>00883 
-<a name="l00884"></a><a class="code" href="a00243.html#e698ef3d70b2d1a29a7a5551784d3653">00884</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00246.html">const_accessor</a>& item_accessor ) {
-<a name="l00885"></a>00885         <span class="keywordflow">return</span> exclude( item_accessor );
-<a name="l00886"></a>00886     }
-<a name="l00887"></a>00887 
-<a name="l00889"></a>00889 
-<a name="l00890"></a><a class="code" href="a00243.html#5f12d150d421420965db07368666a84f">00890</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00244.html">accessor</a>& item_accessor ) {
-<a name="l00891"></a>00891         <span class="keywordflow">return</span> exclude( item_accessor );
-<a name="l00892"></a>00892     }
-<a name="l00893"></a>00893 
-<a name="l00894"></a>00894 <span class="keyword">protected</span>:
-<a name="l00896"></a>00896     <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="l00897"></a>00897 
-<a name="l00899"></a>00899     <span class="keywordtype">bool</span> exclude( const_accessor &item_accessor );
-<a name="l00900"></a>00900 
-<a name="l00902"></a>00902     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00903"></a>00903     std::pair<I, I> internal_equal_range( <span class="keyword">const</span> Key& key, I end ) <span class="keyword">const</span>;
-<a name="l00904"></a>00904 
-<a name="l00906"></a>00906     <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> <a class="code" href="a00243.html">concurrent_hash_map</a>& source );
-<a name="l00907"></a>00907 
-<a name="l00908"></a>00908     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00909"></a>00909     <span class="keywordtype">void</span> internal_copy(I first, I last);
-<a name="l00910"></a>00910 
-<a name="l00912"></a>00912 
-<a name="l00914"></a><a class="code" href="a00243.html#2f76ed101a0ccc8875b846c2f747897e">00914</a>     const_pointer internal_fast_find( <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{
-<a name="l00915"></a>00915         hashcode_t h = my_hash_compare.hash( key );
-<a name="l00916"></a>00916         hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
-<a name="l00917"></a>00917         node *n;
-<a name="l00918"></a>00918     restart:
-<a name="l00919"></a>00919         __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l00920"></a>00920         bucket *b = get_bucket( h & m );
-<a name="l00921"></a>00921         <span class="comment">// TODO: actually, notification is unnecessary here, just hiding double-check</span>
-<a name="l00922"></a>00922         <span class="keywordflow">if</span>( itt_load_word_with_acquire(b->node_list) == internal::rehash_req )
-<a name="l00923"></a>00923         {
-<a name="l00924"></a>00924             bucket::scoped_t lock;
-<a name="l00925"></a>00925             <span class="keywordflow">if</span>( lock.try_acquire( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) ) {
-<a name="l00926"></a>00926                 <span class="keywordflow">if</span>( b->node_list == internal::rehash_req)
-<a name="l00927"></a>00927                     const_cast<concurrent_hash_map*>(<span class="keyword">this</span>)->rehash_bucket( b, h & m ); <span class="comment">//recursive rehashing</span>
-<a name="l00928"></a>00928             }
-<a name="l00929"></a>00929             <span class="keywordflow">else</span> lock.acquire( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-<a name="l00930"></a>00930             __TBB_ASSERT(b->node_list!=internal::rehash_req,NULL);
-<a name="l00931"></a>00931         }
-<a name="l00932"></a>00932         n = search_bucket( key, b );
-<a name="l00933"></a>00933         <span class="keywordflow">if</span>( n )
-<a name="l00934"></a>00934             <span class="keywordflow">return</span> &n->item;
-<a name="l00935"></a>00935         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l00936"></a>00936             <span class="keywordflow">goto</span> restart;
-<a name="l00937"></a>00937         <span class="keywordflow">return</span> 0;
-<a name="l00938"></a>00938     }
-<a name="l00939"></a>00939 };
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00942"></a>00942 <span class="preprocessor"></span>    <span class="comment">// Suppress "conditional expression is constant" warning.</span>
-<a name="l00943"></a>00943 <span class="preprocessor">    #pragma warning( push )</span>
-<a name="l00944"></a>00944 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( disable: 4127 )</span>
-<a name="l00945"></a>00945 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00946"></a>00946 <span class="preprocessor"></span>
-<a name="l00947"></a>00947 <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="l00948"></a><a class="code" href="a00243.html#3f3413264a99174a224ef96f6c4ea769">00948</a> <span class="keywordtype">bool</span> <a class="code" href="a00243.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="a00246.html">const_accessor</a> *result, <span class="keywordtype">bool</span> write ) {
-<a name="l00949"></a>00949     __TBB_ASSERT( !result || !result-><a class="code" href="a00246.html#21856da696b0765cc3db90663160d95e">my_node</a>, NULL );
-<a name="l00950"></a>00950     <span class="keywordtype">bool</span> return_value;
-<a name="l00951"></a>00951     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
-<a name="l00952"></a>00952     hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
-<a name="l00953"></a>00953     segment_index_t grow_segment = 0;
-<a name="l00954"></a>00954     node *n, *tmp_n = 0;
-<a name="l00955"></a>00955     restart:
-<a name="l00956"></a>00956     {<span class="comment">//lock scope</span>
-<a name="l00957"></a>00957         __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l00958"></a>00958         return_value = <span class="keyword">false</span>;
-<a name="l00959"></a>00959         <span class="comment">// get bucket</span>
-<a name="l00960"></a>00960         <a class="code" href="a00245.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
-<a name="l00961"></a>00961 
-<a name="l00962"></a>00962         <span class="comment">// find a node</span>
-<a name="l00963"></a>00963         n = search_bucket( key, b() );
-<a name="l00964"></a>00964         <span class="keywordflow">if</span>( op_insert ) {
-<a name="l00965"></a>00965             <span class="comment">// [opt] insert a key</span>
-<a name="l00966"></a>00966             <span class="keywordflow">if</span>( !n ) {
-<a name="l00967"></a>00967                 <span class="keywordflow">if</span>( !tmp_n ) {
-<a name="l00968"></a>00968                     <span class="keywordflow">if</span>(t) tmp_n = <span class="keyword">new</span>( my_allocator ) node(key, *t);
-<a name="l00969"></a>00969                     <span class="keywordflow">else</span>  tmp_n = <span class="keyword">new</span>( my_allocator ) node(key);
-<a name="l00970"></a>00970                 }
-<a name="l00971"></a>00971                 <span class="keywordflow">if</span>( !b.<a class="code" href="a00245.html#07d958f151a0eaa92f50fd56ad6440e2">is_writer</a>() && !b.upgrade_to_writer() ) { <span class="comment">// TODO: improved insertion</span>
-<a name="l00972"></a>00972                     <span class="comment">// Rerun search_list, in case another thread inserted the item during the upgrade.</span>
-<a name="l00973"></a>00973                     n = search_bucket( key, b() );
-<a name="l00974"></a>00974                     <span class="keywordflow">if</span>( is_valid(n) ) { <span class="comment">// unfortunately, it did</span>
-<a name="l00975"></a>00975                         b.downgrade_to_reader();
-<a name="l00976"></a>00976                         <span class="keywordflow">goto</span> exists;
-<a name="l00977"></a>00977                     }
-<a name="l00978"></a>00978                 }
-<a name="l00979"></a>00979                 <span class="keywordflow">if</span>( check_mask_race(h, m) )
-<a name="l00980"></a>00980                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b().</span>
-<a name="l00981"></a>00981                 <span class="comment">// insert and set flag to grow the container</span>
-<a name="l00982"></a>00982                 grow_segment = insert_new_node( b(), n = tmp_n, m );
-<a name="l00983"></a>00983                 tmp_n = 0;
-<a name="l00984"></a>00984                 return_value = <span class="keyword">true</span>;
-<a name="l00985"></a>00985             }
-<a name="l00986"></a>00986         } <span class="keywordflow">else</span> { <span class="comment">// find or count</span>
-<a name="l00987"></a>00987             <span class="keywordflow">if</span>( !n ) {
-<a name="l00988"></a>00988                 <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l00989"></a>00989                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b(). TODO: replace by continue</span>
-<a name="l00990"></a>00990                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00991"></a>00991             }
-<a name="l00992"></a>00992             return_value = <span class="keyword">true</span>;
-<a name="l00993"></a>00993         }
-<a name="l00994"></a>00994     exists:
-<a name="l00995"></a>00995         <span class="keywordflow">if</span>( !result ) <span class="keywordflow">goto</span> check_growth;
-<a name="l00996"></a>00996         <span class="comment">// TODO: the following seems as generic/regular operation</span>
-<a name="l00997"></a>00997         <span class="comment">// acquire the item</span>
-<a name="l00998"></a>00998         <span class="keywordflow">if</span>( !result->try_acquire( n->mutex, write ) ) {
-<a name="l00999"></a>00999             <span class="comment">// we are unlucky, prepare for longer wait</span>
-<a name="l01000"></a>01000             <a class="code" href="a00230.html">tbb::internal::atomic_backoff</a> trials;
-<a name="l01001"></a>01001             <span class="keywordflow">do</span> {
-<a name="l01002"></a>01002                 <span class="keywordflow">if</span>( !trials.bounded_pause() ) {
-<a name="l01003"></a>01003                     <span class="comment">// the wait takes really long, restart the operation</span>
-<a name="l01004"></a>01004                     b.release();
-<a name="l01005"></a>01005                     __TBB_ASSERT( !op_insert || !return_value, <span class="stringliteral">"Can't acquire new item in locked bucket?"</span> );
-<a name="l01006"></a>01006                     __TBB_Yield();
-<a name="l01007"></a>01007                     m = (hashcode_t) itt_load_word_with_acquire( my_mask );
-<a name="l01008"></a>01008                     <span class="keywordflow">goto</span> restart;
-<a name="l01009"></a>01009                 }
-<a name="l01010"></a>01010             } <span class="keywordflow">while</span>( !result->try_acquire( n->mutex, write ) );
-<a name="l01011"></a>01011         }
-<a name="l01012"></a>01012     }<span class="comment">//lock scope</span>
-<a name="l01013"></a>01013     result-><a class="code" href="a00246.html#21856da696b0765cc3db90663160d95e">my_node</a> = n;
-<a name="l01014"></a>01014     result-><a class="code" href="a00246.html#4936cc9432926ed38f0207828b388e24">my_hash</a> = h;
-<a name="l01015"></a>01015 check_growth:
-<a name="l01016"></a>01016     <span class="comment">// [opt] grow the container</span>
-<a name="l01017"></a>01017     <span class="keywordflow">if</span>( grow_segment ) {
-<a name="l01018"></a>01018 <span class="preprocessor">#if __TBB_STATISTICS</span>
-<a name="l01019"></a>01019 <span class="preprocessor"></span>        my_info_resizes++; <span class="comment">// concurrent ones</span>
-<a name="l01020"></a>01020 <span class="preprocessor">#endif</span>
-<a name="l01021"></a>01021 <span class="preprocessor"></span>        enable_segment( grow_segment );
-<a name="l01022"></a>01022     }
-<a name="l01023"></a>01023     <span class="keywordflow">if</span>( tmp_n ) <span class="comment">// if op_insert only</span>
-<a name="l01024"></a>01024         delete_node( tmp_n );
-<a name="l01025"></a>01025     <span class="keywordflow">return</span> return_value;
-<a name="l01026"></a>01026 }
-<a name="l01027"></a>01027 
-<a name="l01028"></a>01028 <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="l01029"></a>01029 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l01030"></a><a class="code" href="a00243.html#8f5373b8e1864619d1ffcf3bf3f1f13d">01030</a> std::pair<I, I> <a class="code" href="a00243.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="l01031"></a>01031     hashcode_t h = my_hash_compare.hash( key );
-<a name="l01032"></a>01032     hashcode_t m = my_mask;
-<a name="l01033"></a>01033     __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l01034"></a>01034     h &= m;
-<a name="l01035"></a>01035     bucket *b = get_bucket( h );
-<a name="l01036"></a>01036     <span class="keywordflow">while</span>( b->node_list == internal::rehash_req ) {
-<a name="l01037"></a>01037         m = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
-<a name="l01038"></a>01038         b = get_bucket( h &= m );
-<a name="l01039"></a>01039     }
-<a name="l01040"></a>01040     node *n = search_bucket( key, b );
-<a name="l01041"></a>01041     <span class="keywordflow">if</span>( !n )
-<a name="l01042"></a>01042         <span class="keywordflow">return</span> std::make_pair(end_, end_);
-<a name="l01043"></a>01043     iterator lower(*<span class="keyword">this</span>, h, b, n), upper(lower);
-<a name="l01044"></a>01044     <span class="keywordflow">return</span> std::make_pair(lower, ++upper);
-<a name="l01045"></a>01045 }
-<a name="l01046"></a>01046 
-<a name="l01047"></a>01047 <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="l01048"></a><a class="code" href="a00243.html#0c964214eb38f54603aa75fdff6d2709">01048</a> <span class="keywordtype">bool</span> <a class="code" href="a00243.html">concurrent_hash_map<Key,T,HashCompare,A>::exclude</a>( <a class="code" href="a00246.html">const_accessor</a> &item_accessor ) {
-<a name="l01049"></a>01049     __TBB_ASSERT( item_accessor.<a class="code" href="a00246.html#21856da696b0765cc3db90663160d95e">my_node</a>, NULL );
-<a name="l01050"></a>01050     node_base *<span class="keyword">const</span> n = item_accessor.<a class="code" href="a00246.html#21856da696b0765cc3db90663160d95e">my_node</a>;
-<a name="l01051"></a>01051     hashcode_t <span class="keyword">const</span> h = item_accessor.<a class="code" href="a00246.html#4936cc9432926ed38f0207828b388e24">my_hash</a>;
-<a name="l01052"></a>01052     hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
-<a name="l01053"></a>01053     <span class="keywordflow">do</span> {
-<a name="l01054"></a>01054         <span class="comment">// get bucket</span>
-<a name="l01055"></a>01055         <a class="code" href="a00245.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m, <span class="comment">/*writer=*/</span><span class="keyword">true</span> );
-<a name="l01056"></a>01056         node_base **p = &b()->node_list;
-<a name="l01057"></a>01057         <span class="keywordflow">while</span>( *p && *p != n )
-<a name="l01058"></a>01058             p = &(*p)->next;
-<a name="l01059"></a>01059         <span class="keywordflow">if</span>( !*p ) { <span class="comment">// someone else was the first</span>
-<a name="l01060"></a>01060             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l01061"></a>01061                 <span class="keywordflow">continue</span>;
-<a name="l01062"></a>01062             item_accessor.<a class="code" href="a00246.html#7db006d41b49dc5f1716a913769d4698">release</a>();
-<a name="l01063"></a>01063             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01064"></a>01064         }
-<a name="l01065"></a>01065         __TBB_ASSERT( *p == n, NULL );
-<a name="l01066"></a>01066         *p = n->next; <span class="comment">// remove from container</span>
-<a name="l01067"></a>01067         my_size--;
-<a name="l01068"></a>01068         <span class="keywordflow">break</span>;
-<a name="l01069"></a>01069     } <span class="keywordflow">while</span>(<span class="keyword">true</span>);
-<a name="l01070"></a>01070     <span class="keywordflow">if</span>( !item_accessor.<a class="code" href="a00246.html#45ab59454c6f11fe938bbcab637cdd73">is_writer</a>() ) <span class="comment">// need to get exclusive lock</span>
-<a name="l01071"></a>01071         item_accessor.upgrade_to_writer(); <span class="comment">// return value means nothing here</span>
-<a name="l01072"></a>01072     item_accessor.<a class="code" href="a00246.html#7db006d41b49dc5f1716a913769d4698">release</a>();
-<a name="l01073"></a>01073     delete_node( n ); <span class="comment">// Only one thread can delete it</span>
-<a name="l01074"></a>01074     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01075"></a>01075 }
-<a name="l01076"></a>01076 
-<a name="l01077"></a>01077 <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="l01078"></a><a class="code" href="a00243.html#f27802b3a8d1863c29e743e9c6b4e870">01078</a> <span class="keywordtype">bool</span> <a class="code" href="a00243.html">concurrent_hash_map<Key,T,HashCompare,A>::erase</a>( <span class="keyword">const</span> Key &key ) {
-<a name="l01079"></a>01079     node_base *n;
-<a name="l01080"></a>01080     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
-<a name="l01081"></a>01081     hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
-<a name="l01082"></a>01082 restart:
-<a name="l01083"></a>01083     {<span class="comment">//lock scope</span>
-<a name="l01084"></a>01084         <span class="comment">// get bucket</span>
-<a name="l01085"></a>01085         <a class="code" href="a00245.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
-<a name="l01086"></a>01086     search:
-<a name="l01087"></a>01087         node_base **p = &b()->node_list;
-<a name="l01088"></a>01088         n = *p;
-<a name="l01089"></a>01089         <span class="keywordflow">while</span>( is_valid(n) && !my_hash_compare.equal(key, static_cast<node*>(n)->item.first ) ) {
-<a name="l01090"></a>01090             p = &n->next;
-<a name="l01091"></a>01091             n = *p;
-<a name="l01092"></a>01092         }
-<a name="l01093"></a>01093         <span class="keywordflow">if</span>( !n ) { <span class="comment">// not found, but mask could be changed</span>
-<a name="l01094"></a>01094             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
-<a name="l01095"></a>01095                 <span class="keywordflow">goto</span> restart;
-<a name="l01096"></a>01096             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01097"></a>01097         }
-<a name="l01098"></a>01098         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( !b.<a class="code" href="a00245.html#07d958f151a0eaa92f50fd56ad6440e2">is_writer</a>() && !b.upgrade_to_writer() ) {
-<a name="l01099"></a>01099             <span class="keywordflow">if</span>( check_mask_race( h, m ) ) <span class="comment">// contended upgrade, check mask</span>
-<a name="l01100"></a>01100                 <span class="keywordflow">goto</span> restart;
-<a name="l01101"></a>01101             <span class="keywordflow">goto</span> search;
-<a name="l01102"></a>01102         }
-<a name="l01103"></a>01103         *p = n->next;
-<a name="l01104"></a>01104         my_size--;
-<a name="l01105"></a>01105     }
-<a name="l01106"></a>01106     {
-<a name="l01107"></a>01107         <span class="keyword">typename</span> node::scoped_t item_locker( n->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
-<a name="l01108"></a>01108     }
-<a name="l01109"></a>01109     <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="l01110"></a>01110     delete_node( n ); <span class="comment">// Only one thread can delete it due to write lock on the bucket</span>
-<a name="l01111"></a>01111     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01112"></a>01112 }
-<a name="l01113"></a>01113 
-<a name="l01114"></a>01114 <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="l01115"></a>01115 <span class="keywordtype">void</span> <a class="code" href="a00243.html">concurrent_hash_map<Key,T,HashCompare,A>::swap</a>(<a class="code" href="a00243.html">concurrent_hash_map<Key,T,HashCompare,A></a> &table) {
-<a name="l01116"></a>01116     std::swap(this->my_allocator, table.<a class="code" href="a00243.html#a72cb6e9873e5541295682179e5a7f74">my_allocator</a>);
-<a name="l01117"></a>01117     std::swap(this->my_hash_compare, table.<a class="code" href="a00243.html#53c747a3f2d2d2c85aec866e19c31c29">my_hash_compare</a>);
-<a name="l01118"></a>01118     internal_swap(table);
-<a name="l01119"></a>01119 }
-<a name="l01120"></a>01120 
-<a name="l01121"></a>01121 <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="l01122"></a><a class="code" href="a00243.html#94758113d8993cfe5afdf2d63a728869">01122</a> <span class="keywordtype">void</span> <a class="code" href="a00243.html">concurrent_hash_map<Key,T,HashCompare,A>::rehash</a>(size_type sz) {
-<a name="l01123"></a>01123     reserve( sz ); <span class="comment">// TODO: add reduction of number of buckets as well</span>
-<a name="l01124"></a>01124     hashcode_t mask = my_mask;
-<a name="l01125"></a>01125     hashcode_t b = (mask+1)>>1; <span class="comment">// size or first index of the last segment</span>
-<a name="l01126"></a>01126     __TBB_ASSERT((b&(b-1))==0, NULL);
-<a name="l01127"></a>01127     bucket *bp = get_bucket( b ); <span class="comment">// only the last segment should be scanned for rehashing</span>
-<a name="l01128"></a>01128     <span class="keywordflow">for</span>(; b <= mask; b++, bp++ ) {
-<a name="l01129"></a>01129         node_base *n = bp->node_list;
-<a name="l01130"></a>01130         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, <span class="stringliteral">"Broken internal structure"</span> );
-<a name="l01131"></a>01131         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during rehash() execution"</span> );
-<a name="l01132"></a>01132         <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="l01133"></a>01133             hashcode_t h = b; bucket *b_old = bp;
-<a name="l01134"></a>01134             <span class="keywordflow">do</span> {
-<a name="l01135"></a>01135                 __TBB_ASSERT( h > 1, <span class="stringliteral">"The lowermost buckets can't be rehashed"</span> );
-<a name="l01136"></a>01136                 hashcode_t m = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
-<a name="l01137"></a>01137                 b_old = get_bucket( h &= m );
-<a name="l01138"></a>01138             } <span class="keywordflow">while</span>( b_old->node_list == internal::rehash_req );
-<a name="l01139"></a>01139             <span class="comment">// now h - is index of the root rehashed bucket b_old</span>
-<a name="l01140"></a>01140             mark_rehashed_levels( h ); <span class="comment">// mark all non-rehashed children recursively across all segments</span>
-<a name="l01141"></a>01141             <span class="keywordflow">for</span>( node_base **p = &b_old->node_list, *q = *p; is_valid(q); q = *p ) {
-<a name="l01142"></a>01142                 hashcode_t c = my_hash_compare.hash( static_cast<node*>(q)->item.first );
-<a name="l01143"></a>01143                 <span class="keywordflow">if</span>( (c & mask) != h ) { <span class="comment">// should be rehashed</span>
-<a name="l01144"></a>01144                     *p = q->next; <span class="comment">// exclude from b_old</span>
-<a name="l01145"></a>01145                     bucket *b_new = get_bucket( c & mask );
-<a name="l01146"></a>01146                     __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="l01147"></a>01147                     add_to_bucket( b_new, q );
-<a name="l01148"></a>01148                 } <span class="keywordflow">else</span> p = &q->next; <span class="comment">// iterate to next item</span>
-<a name="l01149"></a>01149             }
-<a name="l01150"></a>01150         }
-<a name="l01151"></a>01151     }
-<a name="l01152"></a>01152 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01153"></a>01153 <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="l01154"></a>01154     <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
-<a name="l01155"></a>01155 <span class="preprocessor">#endif</span>
-<a name="l01156"></a>01156 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01157"></a>01157 <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="l01158"></a>01158         <span class="keywordflow">if</span>( b & (b-2) ) ++bp; <span class="comment">// not the beginning of a segment</span>
-<a name="l01159"></a>01159         <span class="keywordflow">else</span> bp = get_bucket( b );
-<a name="l01160"></a>01160         node_base *n = bp->node_list;
-<a name="l01161"></a>01161         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during rehash() execution"</span> );
-<a name="l01162"></a>01162         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed, <span class="stringliteral">"Broken internal structure"</span> );
-<a name="l01163"></a>01163 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01164"></a>01164 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( n == internal::empty_rehashed ) empty_buckets++;
-<a name="l01165"></a>01165         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n->next ) overpopulated_buckets++;
-<a name="l01166"></a>01166 <span class="preprocessor">#endif</span>
-<a name="l01167"></a>01167 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l01168"></a>01168 <span class="preprocessor"></span>        <span class="keywordflow">for</span>( ; is_valid(n); n = n->next ) {
-<a name="l01169"></a>01169             hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first ) & mask;
-<a name="l01170"></a>01170             __TBB_ASSERT( h == b, <span class="stringliteral">"hash() function changed for key in table or internal error"</span> );
-<a name="l01171"></a>01171         }
-<a name="l01172"></a>01172 <span class="preprocessor">#endif</span>
-<a name="l01173"></a>01173 <span class="preprocessor"></span>    }
-<a name="l01174"></a>01174 <span class="preprocessor">#endif // TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01175"></a>01175 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l01176"></a>01176 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( buckets > current_size) empty_buckets -= buckets - current_size;
-<a name="l01177"></a>01177     <span class="keywordflow">else</span> overpopulated_buckets -= current_size - buckets; <span class="comment">// TODO: load_factor?</span>
-<a name="l01178"></a>01178     <span class="keywordflow">if</span>( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
-<a name="l01179"></a>01179         tbb::internal::runtime_warning(
-<a name="l01180"></a>01180             <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="l01181"></a>01181             <span class="keyword">typeid</span>(*this).name(), current_size, empty_buckets, overpopulated_buckets );
-<a name="l01182"></a>01182         reported = <span class="keyword">true</span>;
-<a name="l01183"></a>01183     }
-<a name="l01184"></a>01184 <span class="preprocessor">#endif</span>
-<a name="l01185"></a>01185 <span class="preprocessor"></span>}
-<a name="l01186"></a>01186 
-<a name="l01187"></a>01187 <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="l01188"></a><a class="code" href="a00243.html#220686fe17b197eedf19dd856cd02e36">01188</a> <span class="keywordtype">void</span> <a class="code" href="a00243.html">concurrent_hash_map<Key,T,HashCompare,A>::clear</a>() {
-<a name="l01189"></a>01189     hashcode_t m = my_mask;
-<a name="l01190"></a>01190     __TBB_ASSERT((m&(m+1))==0, NULL);
-<a name="l01191"></a>01191 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
-<a name="l01192"></a>01192 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
-<a name="l01193"></a>01193 <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="l01194"></a>01194     <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
-<a name="l01195"></a>01195 <span class="preprocessor">#endif</span>
-<a name="l01196"></a>01196 <span class="preprocessor"></span>    bucket *bp = 0;
-<a name="l01197"></a>01197     <span class="comment">// check consistency</span>
-<a name="l01198"></a>01198     <span class="keywordflow">for</span>( segment_index_t b = 0; b <= m; b++ ) {
-<a name="l01199"></a>01199         <span class="keywordflow">if</span>( b & (b-2) ) ++bp; <span class="comment">// not the beginning of a segment</span>
-<a name="l01200"></a>01200         <span class="keywordflow">else</span> bp = get_bucket( b );
-<a name="l01201"></a>01201         node_base *n = bp->node_list;
-<a name="l01202"></a>01202         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, <span class="stringliteral">"Broken internal structure"</span> );
-<a name="l01203"></a>01203         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during clear() execution"</span> );
-<a name="l01204"></a>01204 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
-<a name="l01205"></a>01205 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( n == internal::empty_rehashed ) empty_buckets++;
-<a name="l01206"></a>01206         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n == internal::rehash_req ) buckets--;
-<a name="l01207"></a>01207         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n->next ) overpopulated_buckets++;
-<a name="l01208"></a>01208 <span class="preprocessor">#endif</span>
-<a name="l01209"></a>01209 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
-<a name="l01210"></a>01210 <span class="preprocessor"></span>        <span class="keywordflow">for</span>(; is_valid(n); n = n->next ) {
-<a name="l01211"></a>01211             hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first );
-<a name="l01212"></a>01212             h &= m;
-<a name="l01213"></a>01213             __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="l01214"></a>01214         }
-<a name="l01215"></a>01215 <span class="preprocessor">#endif</span>
-<a name="l01216"></a>01216 <span class="preprocessor"></span>    }
-<a name="l01217"></a>01217 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
-<a name="l01218"></a>01218 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_STATISTICS</span>
-<a name="l01219"></a>01219 <span class="preprocessor"></span>    printf( <span class="stringliteral">"items=%d buckets: capacity=%d rehashed=%d empty=%d overpopulated=%d"</span>
-<a name="l01220"></a>01220         <span class="stringliteral">" concurrent: resizes=%u rehashes=%u restarts=%u\n"</span>,
-<a name="l01221"></a>01221         current_size, <span class="keywordtype">int</span>(m+1), buckets, empty_buckets, overpopulated_buckets,
-<a name="l01222"></a>01222         <span class="keywordtype">unsigned</span>(my_info_resizes), <span class="keywordtype">unsigned</span>(my_info_rehashes), <span class="keywordtype">unsigned</span>(my_info_restarts) );
-<a name="l01223"></a>01223     my_info_resizes = 0; <span class="comment">// concurrent ones</span>
-<a name="l01224"></a>01224     my_info_restarts = 0; <span class="comment">// race collisions</span>
-<a name="l01225"></a>01225     my_info_rehashes = 0;  <span class="comment">// invocations of rehash_bucket</span>
-<a name="l01226"></a>01226 <span class="preprocessor">#endif</span>
-<a name="l01227"></a>01227 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( buckets > current_size) empty_buckets -= buckets - current_size;
-<a name="l01228"></a>01228     <span class="keywordflow">else</span> overpopulated_buckets -= current_size - buckets; <span class="comment">// TODO: load_factor?</span>
-<a name="l01229"></a>01229     <span class="keywordflow">if</span>( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
-<a name="l01230"></a>01230         tbb::internal::runtime_warning(
-<a name="l01231"></a>01231             <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="l01232"></a>01232             <span class="keyword">typeid</span>(*this).name(), current_size, empty_buckets, overpopulated_buckets );
-<a name="l01233"></a>01233         reported = <span class="keyword">true</span>;
-<a name="l01234"></a>01234     }
-<a name="l01235"></a>01235 <span class="preprocessor">#endif</span>
-<a name="l01236"></a>01236 <span class="preprocessor"></span><span class="preprocessor">#endif//TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
-<a name="l01237"></a>01237 <span class="preprocessor"></span>    my_size = 0;
-<a name="l01238"></a>01238     segment_index_t s = segment_index_of( m );
-<a name="l01239"></a>01239     __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], <span class="stringliteral">"wrong mask or concurrent grow"</span> );
-<a name="l01240"></a>01240     <a class="code" href="a00238.html">cache_aligned_allocator<bucket></a> alloc;
-<a name="l01241"></a>01241     <span class="keywordflow">do</span> {
-<a name="l01242"></a>01242         __TBB_ASSERT( is_valid( my_table[s] ), <span class="stringliteral">"wrong mask or concurrent grow"</span> );
-<a name="l01243"></a>01243         segment_ptr_t buckets_ptr = my_table[s];
-<a name="l01244"></a>01244         size_type sz = segment_size( s ? s : 1 );
-<a name="l01245"></a>01245         <span class="keywordflow">for</span>( segment_index_t i = 0; i < sz; i++ )
-<a name="l01246"></a>01246             <span class="keywordflow">for</span>( node_base *n = buckets_ptr[i].node_list; is_valid(n); n = buckets_ptr[i].node_list ) {
-<a name="l01247"></a>01247                 buckets_ptr[i].node_list = n->next;
-<a name="l01248"></a>01248                 delete_node( n );
-<a name="l01249"></a>01249             }
-<a name="l01250"></a>01250         <span class="keywordflow">if</span>( s >= first_block) <span class="comment">// the first segment or the next</span>
-<a name="l01251"></a>01251             alloc.<a class="code" href="a00238.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets_ptr, sz );
-<a name="l01252"></a>01252         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( s == embedded_block && embedded_block != first_block )
-<a name="l01253"></a>01253             alloc.<a class="code" href="a00238.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets_ptr, segment_size(first_block)-embedded_buckets );
-<a name="l01254"></a>01254         <span class="keywordflow">if</span>( s >= embedded_block ) my_table[s] = 0;
-<a name="l01255"></a>01255     } <span class="keywordflow">while</span>(s-- > 0);
-<a name="l01256"></a>01256     my_mask = embedded_buckets - 1;
-<a name="l01257"></a>01257 }
-<a name="l01258"></a>01258 
-<a name="l01259"></a>01259 <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="l01260"></a><a class="code" href="a00243.html#72c9c9e9655fcf096f5f0ed9c8ba6669">01260</a> <span class="keywordtype">void</span> <a class="code" href="a00243.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>( <span class="keyword">const</span> <a class="code" href="a00243.html">concurrent_hash_map</a>& source ) {
-<a name="l01261"></a>01261     reserve( source.my_size ); <span class="comment">// TODO: load_factor?</span>
-<a name="l01262"></a>01262     hashcode_t mask = source.my_mask;
-<a name="l01263"></a>01263     <span class="keywordflow">if</span>( my_mask == mask ) { <span class="comment">// optimized version</span>
-<a name="l01264"></a>01264         bucket *dst = 0, *src = 0;
-<a name="l01265"></a>01265         <span class="keywordtype">bool</span> rehash_required = <span class="keyword">false</span>;
-<a name="l01266"></a>01266         <span class="keywordflow">for</span>( hashcode_t k = 0; k <= mask; k++ ) {
-<a name="l01267"></a>01267             <span class="keywordflow">if</span>( k & (k-2) ) ++dst,src++; <span class="comment">// not the beginning of a segment</span>
-<a name="l01268"></a>01268             <span class="keywordflow">else</span> { dst = get_bucket( k ); src = source.get_bucket( k ); }
-<a name="l01269"></a>01269             __TBB_ASSERT( dst->node_list != internal::rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
-<a name="l01270"></a>01270             node *n = static_cast<node*>( src->node_list );
-<a name="l01271"></a>01271             <span class="keywordflow">if</span>( n == internal::rehash_req ) { <span class="comment">// source is not rehashed, items are in previous buckets</span>
-<a name="l01272"></a>01272                 rehash_required = <span class="keyword">true</span>;
-<a name="l01273"></a>01273                 dst->node_list = internal::rehash_req;
-<a name="l01274"></a>01274             } <span class="keywordflow">else</span> <span class="keywordflow">for</span>(; n; n = static_cast<node*>( n->next ) ) {
-<a name="l01275"></a>01275                 add_to_bucket( dst, <span class="keyword">new</span>( my_allocator ) node(n->item.first, n->item.second) );
-<a name="l01276"></a>01276                 ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
-<a name="l01277"></a>01277             }
-<a name="l01278"></a>01278         }
-<a name="l01279"></a>01279         <span class="keywordflow">if</span>( rehash_required ) <a class="code" href="a00243.html#94758113d8993cfe5afdf2d63a728869">rehash</a>();
-<a name="l01280"></a>01280     } <span class="keywordflow">else</span> <a class="code" href="a00243.html#72c9c9e9655fcf096f5f0ed9c8ba6669">internal_copy</a>( source.<a class="code" href="a00243.html#35a8c373fc3d52099ae18f0553162491">begin</a>(), source.<a class="code" href="a00243.html#67c50bddda53b9a10318f8981e4fc4fa">end</a>() );
-<a name="l01281"></a>01281 }
-<a name="l01282"></a>01282 
-<a name="l01283"></a>01283 <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="l01284"></a>01284 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l01285"></a>01285 <span class="keywordtype">void</span> <a class="code" href="a00243.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>(I first, I last) {
-<a name="l01286"></a>01286     hashcode_t m = my_mask;
-<a name="l01287"></a>01287     <span class="keywordflow">for</span>(; first != last; ++first) {
-<a name="l01288"></a>01288         hashcode_t h = my_hash_compare.hash( first->first );
-<a name="l01289"></a>01289         bucket *b = get_bucket( h & m );
-<a name="l01290"></a>01290         __TBB_ASSERT( b->node_list != internal::rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
-<a name="l01291"></a>01291         node *n = <span class="keyword">new</span>( my_allocator ) node(first->first, first->second);
-<a name="l01292"></a>01292         add_to_bucket( b, n );
-<a name="l01293"></a>01293         ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
-<a name="l01294"></a>01294     }
-<a name="l01295"></a>01295 }
-<a name="l01296"></a>01296 
-<a name="l01297"></a>01297 } <span class="comment">// namespace interface5</span>
-<a name="l01298"></a>01298 
-<a name="l01299"></a>01299 <span class="keyword">using</span> interface5::concurrent_hash_map;
-<a name="l01300"></a>01300 
-<a name="l01301"></a>01301 
-<a name="l01302"></a>01302 <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="l01303"></a>01303 <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="l01304"></a>01304     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01305"></a>01305     <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A1>::const_iterator i(a.begin()), i_end(a.end());
-<a name="l01306"></a>01306     <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A2>::const_iterator j, j_end(b.end());
-<a name="l01307"></a>01307     <span class="keywordflow">for</span>(; i != i_end; ++i) {
-<a name="l01308"></a>01308         j = b.equal_range(i->first).first;
-<a name="l01309"></a>01309         <span class="keywordflow">if</span>( j == j_end || !(i->second == j->second) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01310"></a>01310     }
-<a name="l01311"></a>01311     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01312"></a>01312 }
-<a name="l01313"></a>01313 
-<a name="l01314"></a>01314 <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="l01315"></a>01315 <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="l01316"></a>01316 {    <span class="keywordflow">return</span> !(a == b); }
-<a name="l01317"></a>01317 
-<a name="l01318"></a>01318 <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="l01319"></a>01319 <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="l01320"></a>01320 {    a.swap( b ); }
-<a name="l01321"></a>01321 
-<a name="l01322"></a>01322 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l01323"></a>01323 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( pop )</span>
-<a name="l01324"></a>01324 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4127 is back</span>
-<a name="l01325"></a>01325 <span class="preprocessor"></span>
-<a name="l01326"></a>01326 } <span class="comment">// namespace tbb</span>
-<a name="l01327"></a>01327 
-<a name="l01328"></a>01328 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_hash_map_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00426.html b/doc/html/a00426.html
new file mode 100644
index 0000000..cd9895b
--- /dev/null
+++ b/doc/html/a00426.html
@@ -0,0 +1,364 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Algorithms</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>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="a00259.html">tbb::blocked_range< Value ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate.  <a href="a00259.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html">tbb::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="a00260.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.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="a00261.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="a00311.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="a00311.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="a00284.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="a00284.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00308.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="a00308.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00329.html">tbb::simple_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner.  <a href="a00329.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html">tbb::auto_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner.  <a href="a00257.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00282.html">tbb::filter</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline.  <a href="a00282.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00348.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="a00348.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html">tbb::pipeline</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeline that applies filters to items.  <a href="a00310.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00335.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="a00335.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="a00426.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="a00426.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="a00426.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="a00426.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="a00426.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="a00257.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="a00426.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="a00249.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="a00426.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="a00426.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="a00257.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="a00426.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="a00249.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="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">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00426.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="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">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00426.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="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="a00426.html#gd3e2998f171494f94c2103f4eb924084">tbb::parallel_invoke</a> (const F0 &f0, const F1 &f1, <a class="el" href="a00339.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="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> (const F0 &f0, const F1 &f1, const F2 &f2, <a class="el" href="a00339.html">tbb::task_group_context</a> &context)</td></tr>
+
+<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> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, <a class="el" href="a00339.html">tbb::task_group_context</a> &context)</td></tr>
+
+<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> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, <a class="el" href="a00339.html">tbb::task_group_context</a> &context)</td></tr>
+
+<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> (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, <a class="el" href="a00339.html">tbb::task_group_context</a> &context)</td></tr>
+
+<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> (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="a00339.html">tbb::task_group_context</a> &context)</td></tr>
+
+<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> (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="a00339.html">tbb::task_group_context</a> &context)</td></tr>
+
+<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> (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="a00339.html">tbb::task_group_context</a> &context)</td></tr>
+
+<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> (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="a00339.html">tbb::task_group_context</a> &context)</td></tr>
+
+<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> (const F0 &f0, const F1 &f1)</td></tr>
+
+<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> (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="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> (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="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> (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="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> (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="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> (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="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> (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="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> (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="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> (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="a00426.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="a00426.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="a00329.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="a00426.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="a00257.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="a00426.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="a00249.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="a00426.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="a00426.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="a00257.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="a00426.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="a00249.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="a00426.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="a00426.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="a00329.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="a00426.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="a00257.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="a00426.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="a00249.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="a00426.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="a00426.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="a00257.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="a00426.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="a00249.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g873006cc80868b5b4604822bf100ddeb"></a><!-- doxytag: member="algorithms::parallel_deterministic_reduce" ref="g873006cc80868b5b4604822bf100ddeb" 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="a00426.html#g873006cc80868b5b4604822bf100ddeb">tbb::parallel_deterministic_reduce</a> (const Range &range, Body &body)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction and default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gfd08c56b3a98d4437dadc5365326928a"></a><!-- doxytag: member="algorithms::parallel_deterministic_reduce" ref="gfd08c56b3a98d4437dadc5365326928a" args="(const Range &range, Body &body, 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="a00426.html#gfd08c56b3a98d4437dadc5365326928a">tbb::parallel_deterministic_reduce</a> (const Range &range, Body &body, task_group_context &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g3edb17bb1967c291d227556e0e47e507"></a><!-- doxytag: member="algorithms::parallel_deterministic_reduce" ref="g3edb17bb1967c291d227556e0e47e507" 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="a00426.html#g3edb17bb1967c291d227556e0e47e507">tbb::parallel_deterministic_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 deterministic reduction and default partitioner. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g0a66bc67567b2d01d709b59b9bddf84a"></a><!-- doxytag: member="algorithms::parallel_deterministic_reduce" ref="g0a66bc67567b2d01d709b59b9bddf84a" args="(const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, 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="a00426.html#g0a66bc67567b2d01d709b59b9bddf84a">tbb::parallel_deterministic_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, task_group_context &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with deterministic reduction, simple partitioner 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="a00426.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="a00426.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="a00329.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="a00426.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="a00257.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="a00426.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="a00426.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="a00426.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>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g49edcf9447cd91a9527a3f8e8512b7aa"></a><!-- doxytag: member="tbb::parallel_sort" ref="g49edcf9447cd91a9527a3f8e8512b7aa" args="(RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template<typename RandomAccessIterator, typename Compare> </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">void tbb::parallel_sort           </td>
+          <td>(</td>
+          <td class="paramtype">RandomAccessIterator </td>
+          <td class="paramname"> <em>begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">RandomAccessIterator </td>
+          <td class="paramname"> <em>end</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const Compare & </td>
+          <td class="paramname"> <em>comp</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>
+Sorts the data in [begin,end) using the given comparator. 
+<p>
+The compare function object is used for all comparisons between elements during sorting. The compare object must define a bool operator() function. 
+</div>
+</div><p>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00427.html b/doc/html/a00427.html
new file mode 100644
index 0000000..3e458d9
--- /dev/null
+++ b/doc/html/a00427.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Containers</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>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="a00267.html">tbb::combinable< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Thread-local storage with optional reduction.  <a href="a00267.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html">tbb::interface5::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="a00269.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.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="a00274.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html">tbb::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="a00268.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00275.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="a00275.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container.  <a href="a00276.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="a00281.html">enumerable_thread_specific</a> container.  <a href="a00281.html#_details">More...</a><br></td></tr>
+</table>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00428.html b/doc/html/a00428.html
new file mode 100644
index 0000000..1910530
--- /dev/null
+++ b/doc/html/a00428.html
@@ -0,0 +1,319 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Memory Allocation</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>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="a00253.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="a00253.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.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="a00264.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html">tbb::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="a00265.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.  <a href="a00296.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></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="a00297.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00325.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="a00325.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00326.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="a00326.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00343.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="a00343.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00344.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="a00344.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00353.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="a00353.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00354.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="a00354.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="a00428.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="a00428.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="a00428.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="a00428.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="a00428.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="a00428.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="a00428.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="a00428.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="a00428.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (void *ptr)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g65a20e812012f15ec7442d5b45d0cba5"></a><!-- doxytag: member="scalable_allocator.h::scalable_aligned_free" ref="g65a20e812012f15ec7442d5b45d0cba5" args="(void *ptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_FUNC scalable_aligned_free           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>ptr</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The "_aligned_free" analogue. 
+</div>
+</div><p>
+<a class="anchor" name="gc1c7aaa1fe85c17ba5a3a96f7e8d89e7"></a><!-- doxytag: member="scalable_allocator.h::scalable_aligned_malloc" ref="gc1c7aaa1fe85c17ba5a3a96f7e8d89e7" args="(size_t size, size_t alignment)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_aligned_malloc           </td>
+          <td>(</td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>alignment</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 "_aligned_malloc" analogue. 
+</div>
+</div><p>
+<a class="anchor" name="gbaea91376be80dfabd7c93eaffd9abaa"></a><!-- doxytag: member="scalable_allocator.h::scalable_aligned_realloc" ref="gbaea91376be80dfabd7c93eaffd9abaa" args="(void *ptr, size_t size, size_t alignment)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_aligned_realloc           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>ptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>alignment</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 "_aligned_realloc" analogue. 
+</div>
+</div><p>
+<a class="anchor" name="g3f5a2fde0bcaa3eda35be32c8658f444"></a><!-- doxytag: member="scalable_allocator.h::scalable_calloc" ref="g3f5a2fde0bcaa3eda35be32c8658f444" args="(size_t nobj, size_t size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_calloc           </td>
+          <td>(</td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>nobj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>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 "calloc" analogue complementing scalable_malloc. 
+</div>
+</div><p>
+<a class="anchor" name="gca3579c21244dba9f0c351e5984d4565"></a><!-- doxytag: member="scalable_allocator.h::scalable_free" ref="gca3579c21244dba9f0c351e5984d4565" args="(void *ptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __TBB_EXPORTED_FUNC scalable_free           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>ptr</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The "free" analogue to discard a previously allocated piece of memory. 
+</div>
+</div><p>
+<a class="anchor" name="gc25b8e6c76db0b346a8249796a7a2475"></a><!-- doxytag: member="scalable_allocator.h::scalable_malloc" ref="gc25b8e6c76db0b346a8249796a7a2475" args="(size_t size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_malloc           </td>
+          <td>(</td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>size</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The "malloc" analogue to allocate block of memory of size bytes. 
+</div>
+</div><p>
+<a class="anchor" name="g0965ce1b4b7835f92869c7fd867265f7"></a><!-- doxytag: member="scalable_allocator.h::scalable_msize" ref="g0965ce1b4b7835f92869c7fd867265f7" args="(void *ptr)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t __TBB_EXPORTED_FUNC scalable_msize           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>ptr</em>          </td>
+          <td> ) </td>
+          <td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The analogue of _msize/malloc_size/malloc_usable_size. Returns the usable size of a memory block previously allocated by scalable_*, or 0 (zero) if ptr does not point to such a block. 
+</div>
+</div><p>
+<a class="anchor" name="g05dcec987480bb2c82ecdead6a085899"></a><!-- doxytag: member="scalable_allocator.h::scalable_posix_memalign" ref="g05dcec987480bb2c82ecdead6a085899" args="(void **memptr, size_t alignment, size_t size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int __TBB_EXPORTED_FUNC scalable_posix_memalign           </td>
+          <td>(</td>
+          <td class="paramtype">void ** </td>
+          <td class="paramname"> <em>memptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>alignment</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>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 "posix_memalign" analogue. 
+</div>
+</div><p>
+<a class="anchor" name="g951bbbbd2d041acb59ba5fa910b52543"></a><!-- doxytag: member="scalable_allocator.h::scalable_realloc" ref="g951bbbbd2d041acb59ba5fa910b52543" args="(void *ptr, size_t size)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* __TBB_EXPORTED_FUNC scalable_realloc           </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"> <em>ptr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"> <em>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 "realloc" analogue complementing scalable_malloc. 
+</div>
+</div><p>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00429.html b/doc/html/a00429.html
index 916715f..18ce518 100644
--- a/doc/html/a00429.html
+++ b/doc/html/a00429.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>concurrent_priority_queue.h Source File</title>
+<title>Synchronization</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 <link href="tabs.css" rel="stylesheet" type="text/css">
 </head><body>
@@ -11,315 +11,46 @@
     <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="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_priority_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-2011 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_priority_queue_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_priority_queue_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 "cache_aligned_allocator.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "tbb_exception.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include "internal/_aggregator_impl.h"</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <vector></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <iterator></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <functional></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="keyword">namespace </span>tbb {
-<a name="l00035"></a>00035 <span class="keyword">namespace </span>interface5 {
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="keyword">using namespace </span>tbb::internal;
-<a name="l00038"></a>00038 
-<a name="l00040"></a>00040 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Compare=std::less<T>, <span class="keyword">typename</span> A=cache_aligned_allocator<T> >
-<a name="l00041"></a><a class="code" href="a00247.html">00041</a> <span class="keyword">class </span><a class="code" href="a00247.html">concurrent_priority_queue</a> {
-<a name="l00042"></a>00042  <span class="keyword">public</span>:
-<a name="l00044"></a><a class="code" href="a00247.html#7c611a6b5b8f94b0e7f2afc97e31efb1">00044</a>     <span class="keyword">typedef</span> T <a class="code" href="a00247.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a>;
-<a name="l00045"></a>00045 
-<a name="l00047"></a><a class="code" href="a00247.html#5804b3c708ef4e50d603f918ef2b9e58">00047</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00247.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a>;
-<a name="l00048"></a>00048 
-<a name="l00050"></a><a class="code" href="a00247.html#a4ded8601a434098605be0dcc4febc60">00050</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00247.html#a4ded8601a434098605be0dcc4febc60">const_reference</a>;
-<a name="l00051"></a>00051 
-<a name="l00053"></a><a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">00053</a>     <span class="keyword">typedef</span> size_t <a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a>;
-<a name="l00054"></a>00054 
-<a name="l00056"></a><a class="code" href="a00247.html#77399bc76b3ecd60e33f7e35a5becd87">00056</a>     <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="a00247.html#77399bc76b3ecd60e33f7e35a5becd87">difference_type</a>;
-<a name="l00057"></a>00057 
-<a name="l00059"></a><a class="code" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">00059</a>     <span class="keyword">typedef</span> A <a class="code" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>;
-<a name="l00060"></a>00060 
-<a name="l00062"></a><a class="code" href="a00247.html#eefa40599afe00ea393897d8f5662e65">00062</a>     <span class="keyword">explicit</span> <a class="code" href="a00247.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<span class="keyword">const</span> <a class="code" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a = <a class="code" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>()) : mark(0), my_size(0), data(a)
-<a name="l00063"></a>00063     {
-<a name="l00064"></a>00064         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
-<a name="l00065"></a>00065     }
-<a name="l00066"></a>00066 
-<a name="l00068"></a><a class="code" href="a00247.html#4555b4a55415a70024c4004b51e9f385">00068</a>     <span class="keyword">explicit</span> <a class="code" href="a00247.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> init_capacity, <span class="keyword">const</span> <a class="code" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a = <a class="code" href="a00 [...]
-<a name="l00069"></a>00069         mark(0), my_size(0), data(a)
-<a name="l00070"></a>00070     {
-<a name="l00071"></a>00071         data.reserve(init_capacity);
-<a name="l00072"></a>00072         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
-<a name="l00073"></a>00073     }
-<a name="l00074"></a>00074 
-<a name="l00076"></a>00076     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
-<a name="l00077"></a><a class="code" href="a00247.html#9147cb4207017c260a0c3929c12cd40f">00077</a>     <a class="code" href="a00247.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a = <a class="code" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>()) :
-<a name="l00078"></a>00078         data(begin, end, a)
-<a name="l00079"></a>00079     {
-<a name="l00080"></a>00080         mark = 0;
-<a name="l00081"></a>00081         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
-<a name="l00082"></a>00082         heapify();
-<a name="l00083"></a>00083         my_size = data.size();
-<a name="l00084"></a>00084     }
-<a name="l00085"></a>00085 
-<a name="l00087"></a>00087 
-<a name="l00088"></a><a class="code" href="a00247.html#509419e320f200456d89dc54a65140b3">00088</a>     <span class="keyword">explicit</span> <a class="code" href="a00247.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<span class="keyword">const</span> <a class="code" href="a00247.html">concurrent_priority_queue</a>& src) : mark(src.mark),
-<a name="l00089"></a>00089         my_size(src.my_size), data(src.data.begin(), src.data.end(), src.data.<a class="code" href="a00247.html#d545d444fb0d16148f9b61fd89f9a337">get_allocator</a>())
-<a name="l00090"></a>00090     {
-<a name="l00091"></a>00091         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
-<a name="l00092"></a>00092         heapify();
-<a name="l00093"></a>00093     }
-<a name="l00094"></a>00094 
-<a name="l00096"></a>00096 
-<a name="l00097"></a><a class="code" href="a00247.html#c8b20e7430c5302936030bef59a562be">00097</a>     <a class="code" href="a00247.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<span class="keyword">const</span> <a class="code" href="a00247.html">concurrent_priority_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a) : mark(src.mark),
-<a name="l00098"></a>00098         my_size(src.my_size), data(src.data.begin(), src.data.end(), a)
-<a name="l00099"></a>00099     {
-<a name="l00100"></a>00100         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
-<a name="l00101"></a>00101         heapify();
-<a name="l00102"></a>00102     }
-<a name="l00103"></a>00103 
-<a name="l00105"></a>00105 
-<a name="l00106"></a><a class="code" href="a00247.html#2ab7f7808891027ac0f0f5b3a4be51e9">00106</a>     <a class="code" href="a00247.html">concurrent_priority_queue</a>& <a class="code" href="a00247.html#2ab7f7808891027ac0f0f5b3a4be51e9">operator=</a>(<span class="keyword">const</span> <a class="code" href="a00247.html">concurrent_priority_queue</a>& src) {
-<a name="l00107"></a>00107         <span class="keywordflow">if</span> (<span class="keyword">this</span> != &src) {
-<a name="l00108"></a>00108             std::vector<value_type, allocator_type>(src.<a class="code" href="a00247.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>.begin(), src.<a class="code" href="a00247.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>.end(), src.<a class="code" href="a00247.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>.get_allocator()).<a class="code" href="a00247.html#0ecdc6a04aa259374425d424ca2a6082">swap</a>(data);
-<a name="l00109"></a>00109             mark = src.<a class="code" href="a00247.html#7fcd8d21ea4228b6079a2f2723550af0">mark</a>;
-<a name="l00110"></a>00110             my_size = src.<a class="code" href="a00247.html#9e480a4ce8950a0729a642cdac2bec41">my_size</a>;
-<a name="l00111"></a>00111         }
-<a name="l00112"></a>00112         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00113"></a>00113     }
-<a name="l00114"></a>00114 
-<a name="l00116"></a>00116 
-<a name="l00118"></a><a class="code" href="a00247.html#317c508fa92df218be5d014c26c09bb7">00118</a>     <span class="keywordtype">bool</span> <a class="code" href="a00247.html#317c508fa92df218be5d014c26c09bb7">empty</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00247.html#8b2ae25c61338c6fd59e94fe09822ba5">size</a>()==0; }
-<a name="l00119"></a>00119 
-<a name="l00121"></a>00121 
-<a name="l00123"></a><a class="code" href="a00247.html#8b2ae25c61338c6fd59e94fe09822ba5">00123</a>     <a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> <a class="code" href="a00247.html#8b2ae25c61338c6fd59e94fe09822ba5">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> __TBB_load_with_acquire(my_size); }
-<a name="l00124"></a>00124 
-<a name="l00126"></a>00126 
-<a name="l00127"></a><a class="code" href="a00247.html#d905af7b8f6defff562f5ae9c3275763">00127</a>     <span class="keywordtype">void</span> <a class="code" href="a00247.html#d905af7b8f6defff562f5ae9c3275763">push</a>(<a class="code" href="a00247.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> elem) {
-<a name="l00128"></a>00128         cpq_operation op_data(elem, PUSH_OP);
-<a name="l00129"></a>00129         my_aggregator.execute(&op_data);
-<a name="l00130"></a>00130         <span class="keywordflow">if</span> (op_data.status == FAILED) <span class="comment">// exception thrown</span>
-<a name="l00131"></a>00131             throw_exception(eid_bad_alloc);
-<a name="l00132"></a>00132     }
-<a name="l00133"></a>00133 
-<a name="l00135"></a>00135 
-<a name="l00138"></a><a class="code" href="a00247.html#e036461a29cc40902a2bb79abf9f5146">00138</a>     <span class="keywordtype">bool</span> <a class="code" href="a00247.html#e036461a29cc40902a2bb79abf9f5146">try_pop</a>(<a class="code" href="a00247.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a> elem) {
-<a name="l00139"></a>00139         cpq_operation op_data(POP_OP);
-<a name="l00140"></a>00140         op_data.elem = &elem;
-<a name="l00141"></a>00141         my_aggregator.execute(&op_data);
-<a name="l00142"></a>00142         <span class="keywordflow">return</span> op_data.status==SUCCEEDED;
-<a name="l00143"></a>00143     }
-<a name="l00144"></a>00144 
-<a name="l00146"></a>00146 
-<a name="l00149"></a><a class="code" href="a00247.html#0bdcdf7cde9fd369edca845bec34ca94">00149</a>     <span class="keywordtype">void</span> <a class="code" href="a00247.html#0bdcdf7cde9fd369edca845bec34ca94">clear</a>() {
-<a name="l00150"></a>00150         data.clear();
-<a name="l00151"></a>00151         mark = 0;
-<a name="l00152"></a>00152         my_size = 0;
-<a name="l00153"></a>00153     }
-<a name="l00154"></a>00154 
-<a name="l00156"></a>00156 
-<a name="l00157"></a><a class="code" href="a00247.html#0ecdc6a04aa259374425d424ca2a6082">00157</a>     <span class="keywordtype">void</span> <a class="code" href="a00247.html#0ecdc6a04aa259374425d424ca2a6082">swap</a>(<a class="code" href="a00247.html">concurrent_priority_queue</a>& q) {
-<a name="l00158"></a>00158         data.swap(q.<a class="code" href="a00247.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>);
-<a name="l00159"></a>00159         std::swap(mark, q.<a class="code" href="a00247.html#7fcd8d21ea4228b6079a2f2723550af0">mark</a>);
-<a name="l00160"></a>00160         std::swap(my_size, q.<a class="code" href="a00247.html#9e480a4ce8950a0729a642cdac2bec41">my_size</a>);
-<a name="l00161"></a>00161     }
-<a name="l00162"></a>00162 
-<a name="l00164"></a><a class="code" href="a00247.html#d545d444fb0d16148f9b61fd89f9a337">00164</a>     <a class="code" href="a00247.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> <a class="code" href="a00247.html#d545d444fb0d16148f9b61fd89f9a337">get_allocator</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data.get_allocator(); }
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166  <span class="keyword">private</span>:
-<a name="l00167"></a>00167     <span class="keyword">enum</span> operation_type {INVALID_OP, PUSH_OP, POP_OP};
-<a name="l00168"></a>00168     <span class="keyword">enum</span> operation_status { WAIT=0, SUCCEEDED, FAILED };
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170     <span class="keyword">class </span>cpq_operation : <span class="keyword">public</span> aggregated_operation<cpq_operation> {
-<a name="l00171"></a>00171      <span class="keyword">public</span>:
-<a name="l00172"></a>00172         operation_type type;
-<a name="l00173"></a>00173         <span class="keyword">union </span>{
-<a name="l00174"></a>00174             <a class="code" href="a00247.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a> *elem;
-<a name="l00175"></a>00175             <a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> sz;
-<a name="l00176"></a>00176         };
-<a name="l00177"></a>00177         cpq_operation(<a class="code" href="a00247.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> e, operation_type t) :
-<a name="l00178"></a>00178             type(t), elem(const_cast<<a class="code" href="a00247.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a>*>(&e)) {}
-<a name="l00179"></a>00179         cpq_operation(operation_type t) : type(t) {}
-<a name="l00180"></a>00180     };
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182     <span class="keyword">class </span>my_functor_t {
-<a name="l00183"></a>00183         concurrent_priority_queue<T, Compare, A> *cpq;
-<a name="l00184"></a>00184      <span class="keyword">public</span>:
-<a name="l00185"></a>00185         my_functor_t() {}
-<a name="l00186"></a>00186         my_functor_t(concurrent_priority_queue<T, Compare, A> *cpq_) : cpq(cpq_) {}
-<a name="l00187"></a>00187         <span class="keywordtype">void</span> operator()(cpq_operation* op_list) {
-<a name="l00188"></a>00188             cpq->handle_operations(op_list);
-<a name="l00189"></a>00189         }
-<a name="l00190"></a>00190     };
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192     aggregator< my_functor_t, cpq_operation> my_aggregator;
-<a name="l00194"></a>00194     <span class="keywordtype">char</span> padding1[NFS_MaxLineSize - <span class="keyword">sizeof</span>(aggregator< my_functor_t, cpq_operation >)];
-<a name="l00196"></a>00196     <a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> mark;
-<a name="l00197"></a>00197     __TBB_atomic <a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> my_size;
-<a name="l00198"></a>00198     Compare compare;
-<a name="l00200"></a>00200     <span class="keywordtype">char</span> padding2[NFS_MaxLineSize - (2*<span class="keyword">sizeof</span>(<a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a>)) - <span class="keyword">sizeof</span>(Compare)];
-<a name="l00202"></a>00202 
-<a name="l00219"></a>00219     std::vector<value_type, allocator_type> data;
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221     <span class="keywordtype">void</span> handle_operations(cpq_operation *op_list) {
-<a name="l00222"></a>00222         cpq_operation *tmp, *pop_list=NULL;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224         __TBB_ASSERT(mark == data.size(), NULL);
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226         <span class="comment">// first pass processes all constant time operations: pushes,</span>
-<a name="l00227"></a>00227         <span class="comment">// tops, some pops. Also reserve.</span>
-<a name="l00228"></a>00228         <span class="keywordflow">while</span> (op_list) {
-<a name="l00229"></a>00229             <span class="comment">// ITT note: &(op_list->status) tag is used to cover accesses to op_list</span>
-<a name="l00230"></a>00230             <span class="comment">// node. This thread is going to handle the operation, and so will acquire it</span>
-<a name="l00231"></a>00231             <span class="comment">// and perform the associated operation w/o triggering a race condition; the</span>
-<a name="l00232"></a>00232             <span class="comment">// thread that created the operation is waiting on the status field, so when</span>
-<a name="l00233"></a>00233             <span class="comment">// this thread is done with the operation, it will perform a</span>
-<a name="l00234"></a>00234             <span class="comment">// store_with_release to give control back to the waiting thread in</span>
-<a name="l00235"></a>00235             <span class="comment">// aggregator::insert_operation.</span>
-<a name="l00236"></a>00236             call_itt_notify(acquired, &(op_list->status));
-<a name="l00237"></a>00237             __TBB_ASSERT(op_list->type != INVALID_OP, NULL);
-<a name="l00238"></a>00238             tmp = op_list;
-<a name="l00239"></a>00239             op_list = itt_hide_load_word(op_list->next);
-<a name="l00240"></a>00240             <span class="keywordflow">if</span> (tmp->type == PUSH_OP) {
-<a name="l00241"></a>00241                 __TBB_TRY {
-<a name="l00242"></a>00242                     data.push_back(*(tmp->elem));
-<a name="l00243"></a>00243                     __TBB_store_with_release(my_size, my_size+1);
-<a name="l00244"></a>00244                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
-<a name="l00245"></a>00245                 } __TBB_CATCH(...) {
-<a name="l00246"></a>00246                     itt_store_word_with_release(tmp->status, uintptr_t(FAILED));
-<a name="l00247"></a>00247                 }
-<a name="l00248"></a>00248             }
-<a name="l00249"></a>00249             <span class="keywordflow">else</span> { <span class="comment">// tmp->type == POP_OP</span>
-<a name="l00250"></a>00250                 __TBB_ASSERT(tmp->type == POP_OP, NULL);
-<a name="l00251"></a>00251                 <span class="keywordflow">if</span> (mark < data.size() &&
-<a name="l00252"></a>00252                     compare(data[0], data[data.size()-1])) {
-<a name="l00253"></a>00253                     <span class="comment">// there are newly pushed elems and the last one</span>
-<a name="l00254"></a>00254                     <span class="comment">// is higher than top</span>
-<a name="l00255"></a>00255                     *(tmp->elem) = data[data.size()-1]; <span class="comment">// copy the data</span>
-<a name="l00256"></a>00256                     __TBB_store_with_release(my_size, my_size-1);
-<a name="l00257"></a>00257                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
-<a name="l00258"></a>00258                     data.pop_back();
-<a name="l00259"></a>00259                     __TBB_ASSERT(mark<=data.size(), NULL);
-<a name="l00260"></a>00260                 }
-<a name="l00261"></a>00261                 <span class="keywordflow">else</span> { <span class="comment">// no convenient item to pop; postpone</span>
-<a name="l00262"></a>00262                     itt_hide_store_word(tmp->next, pop_list);
-<a name="l00263"></a>00263                     pop_list = tmp;
-<a name="l00264"></a>00264                 }
-<a name="l00265"></a>00265             }
-<a name="l00266"></a>00266         }
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268         <span class="comment">// second pass processes pop operations</span>
-<a name="l00269"></a>00269         <span class="keywordflow">while</span> (pop_list) {
-<a name="l00270"></a>00270             tmp = pop_list;
-<a name="l00271"></a>00271             pop_list = itt_hide_load_word(pop_list->next);
-<a name="l00272"></a>00272             __TBB_ASSERT(tmp->type == POP_OP, NULL);
-<a name="l00273"></a>00273             <span class="keywordflow">if</span> (data.empty()) {
-<a name="l00274"></a>00274                 itt_store_word_with_release(tmp->status, uintptr_t(FAILED));
-<a name="l00275"></a>00275             }
-<a name="l00276"></a>00276             <span class="keywordflow">else</span> {
-<a name="l00277"></a>00277                 __TBB_ASSERT(mark<=data.size(), NULL);
-<a name="l00278"></a>00278                 <span class="keywordflow">if</span> (mark < data.size() &&
-<a name="l00279"></a>00279                     compare(data[0], data[data.size()-1])) {
-<a name="l00280"></a>00280                     <span class="comment">// there are newly pushed elems and the last one is</span>
-<a name="l00281"></a>00281                     <span class="comment">// higher than top</span>
-<a name="l00282"></a>00282                     *(tmp->elem) = data[data.size()-1]; <span class="comment">// copy the data</span>
-<a name="l00283"></a>00283                     __TBB_store_with_release(my_size, my_size-1);
-<a name="l00284"></a>00284                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
-<a name="l00285"></a>00285                     data.pop_back();
-<a name="l00286"></a>00286                 }
-<a name="l00287"></a>00287                 <span class="keywordflow">else</span> { <span class="comment">// extract top and push last element down heap</span>
-<a name="l00288"></a>00288                     *(tmp->elem) = data[0]; <span class="comment">// copy the data</span>
-<a name="l00289"></a>00289                     __TBB_store_with_release(my_size, my_size-1);
-<a name="l00290"></a>00290                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
-<a name="l00291"></a>00291                     reheap();
-<a name="l00292"></a>00292                 }
-<a name="l00293"></a>00293             }
-<a name="l00294"></a>00294         }
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296         <span class="comment">// heapify any leftover pushed elements before doing the next</span>
-<a name="l00297"></a>00297         <span class="comment">// batch of operations</span>
-<a name="l00298"></a>00298         <span class="keywordflow">if</span> (mark<data.size()) heapify();
-<a name="l00299"></a>00299         __TBB_ASSERT(mark == data.size(), NULL);
-<a name="l00300"></a>00300     }
-<a name="l00301"></a>00301 
-<a name="l00303"></a>00303     <span class="keywordtype">void</span> heapify() {
-<a name="l00304"></a>00304         <span class="keywordflow">if</span> (!mark && data.size()>0) mark = 1;
-<a name="l00305"></a>00305         <span class="keywordflow">for</span> (; mark<data.size(); ++mark) {
-<a name="l00306"></a>00306             <span class="comment">// for each unheapified element under size</span>
-<a name="l00307"></a>00307             <a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> cur_pos = mark;
-<a name="l00308"></a>00308             <a class="code" href="a00247.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a> to_place = data[mark];
-<a name="l00309"></a>00309             <span class="keywordflow">do</span> { <span class="comment">// push to_place up the heap</span>
-<a name="l00310"></a>00310                 <a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> parent = (cur_pos-1)>>1;
-<a name="l00311"></a>00311                 <span class="keywordflow">if</span> (!compare(data[parent], to_place)) <span class="keywordflow">break</span>;
-<a name="l00312"></a>00312                 data[cur_pos] = data[parent];
-<a name="l00313"></a>00313                 cur_pos = parent;
-<a name="l00314"></a>00314             } <span class="keywordflow">while</span>( cur_pos );
-<a name="l00315"></a>00315             data[cur_pos] = to_place;
-<a name="l00316"></a>00316         }
-<a name="l00317"></a>00317     }
-<a name="l00318"></a>00318 
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321     <span class="keywordtype">void</span> reheap() {
-<a name="l00322"></a>00322         <a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> cur_pos=0, child=1;
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324         <span class="keywordflow">while</span> (child < mark) {
-<a name="l00325"></a>00325             <a class="code" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> target = child;
-<a name="l00326"></a>00326             <span class="keywordflow">if</span> (child+1 < mark && compare(data[child], data[child+1]))
-<a name="l00327"></a>00327                 ++target;
-<a name="l00328"></a>00328             <span class="comment">// target now has the higher priority child</span>
-<a name="l00329"></a>00329             <span class="keywordflow">if</span> (compare(data[target], data[data.size()-1])) <span class="keywordflow">break</span>;
-<a name="l00330"></a>00330             data[cur_pos] = data[target];
-<a name="l00331"></a>00331             cur_pos = target;
-<a name="l00332"></a>00332             child = (cur_pos<<1)+1;
-<a name="l00333"></a>00333         }
-<a name="l00334"></a>00334         data[cur_pos] = data[data.size()-1];
-<a name="l00335"></a>00335         data.pop_back();
-<a name="l00336"></a>00336         <span class="keywordflow">if</span> (mark > data.size()) mark = data.size();
-<a name="l00337"></a>00337     }
-<a name="l00338"></a>00338 };
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 } <span class="comment">// namespace interface5</span>
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342 <span class="keyword">using</span> interface5::concurrent_priority_queue;
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344 } <span class="comment">// namespace tbb</span>
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_priority_queue_H */</span>
-</pre></div><hr>
+<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="a00254.html">tbb::atomic< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic.  <a href="a00254.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.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="a00301.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00303.html">tbb::null_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A mutex which does nothing.  <a href="a00303.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00305.html">tbb::null_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A rw mutex which does nothing.  <a href="a00305.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00314.html">tbb::queuing_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing mutex with local-only spinning.  <a href="a00314.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00316.html">tbb::queuing_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing reader-writer mutex with local-only spinning.  <a href="a00316.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Writer-preference reader-writer lock with local-only spinning on readers.  <a href="a00318.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00322.html">tbb::recursive_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition.  <a href="a00322.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00331.html">tbb::spin_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte.  <a href="a00331.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00333.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="a00333.html#_details">More...</a><br></td></tr>
+</table>
+<hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00430.html b/doc/html/a00430.html
new file mode 100644
index 0000000..ec37257
--- /dev/null
+++ b/doc/html/a00430.html
@@ -0,0 +1,32 @@
+<!DOCTYPE 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>
+<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>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="a00349.html">tbb::tick_count</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp.  <a href="a00349.html#_details">More...</a><br></td></tr>
+</table>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00431.html b/doc/html/a00431.html
new file mode 100644
index 0000000..2b72f6d
--- /dev/null
+++ b/doc/html/a00431.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Task Scheduling</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>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="a00340.html">tbb::task_group_context</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to form groups of tasks.  <a href="a00340.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html">tbb::task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks.  <a href="a00337.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00280.html">tbb::empty_task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization.  <a href="a00280.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00341.html">tbb::task_list</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children.  <a href="a00341.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00342.html">tbb::task_scheduler_init</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class delimiting the scope of task scheduler activity.  <a href="a00342.html#_details">More...</a><br></td></tr>
+</table>
+<hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00432.html b/doc/html/a00432.html
index 63aa4a7..1eb992a 100644
--- a/doc/html/a00432.html
+++ b/doc/html/a00432.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>concurrent_queue.h Source File</title>
+<title>aggregator.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>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-2011 Intel Corporation.  All Rights Reserved.</span>
+<h1>aggregator.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-2012 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,324 +39,178 @@
 <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="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB__aggregator_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB__aggregator_H</span>
 <a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "internal/_concurrent_queue_impl.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="a00248.html">00035</a> <span class="keyword">class </span><a class="code" href="a00248.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">/*override*/</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="a00248.html#682c3978d5cb0620000994f11c44a476">00057</a>     <span class="keyword">typedef</span> T <a class="code" href="a00248.html#682c3978d5cb0620000994f11c44a476">value_type</a>;
-<a name="l00058"></a>00058 
-<a name="l00060"></a><a class="code" href="a00248.html#a8d725c50a9834bb7af5b67c0aff92b8">00060</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00248.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a>;
+<a name="l00024"></a>00024 <span class="preprocessor">#if !TBB_PREVIEW_AGGREGATOR</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#error Set TBB_PREVIEW_AGGREGATOR before including aggregator.h</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="l00028"></a>00028 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00030"></a>00030 
+<a name="l00031"></a><a class="code" href="a00414.html">00031</a> <span class="keyword">namespace </span>tbb {
+<a name="l00032"></a>00032 <span class="keyword">namespace </span>interface6 {
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034 <span class="keyword">using namespace </span>tbb::internal;
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036 <span class="keyword">class </span>aggregator_operation {
+<a name="l00037"></a>00037     <span class="keyword">template</span><<span class="keyword">typename</span> handler_type> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00252.html">aggregator_ext</a>;
+<a name="l00038"></a>00038     uintptr_t status;
+<a name="l00039"></a>00039     aggregator_operation* my_next;
+<a name="l00040"></a>00040 <span class="keyword">public</span>:
+<a name="l00041"></a>00041     <span class="keyword">enum</span> aggregator_operation_status { agg_waiting=0, agg_finished };
+<a name="l00042"></a>00042     aggregator_operation() : status(agg_waiting), my_next(NULL) {}
+<a name="l00044"></a>00044     <span class="keywordtype">void</span> start() { call_itt_notify(acquired, &status); }
+<a name="l00046"></a>00046 
+<a name="l00047"></a>00047     <span class="keywordtype">void</span> finish() { itt_store_word_with_release(status, uintptr_t(agg_finished)); }
+<a name="l00048"></a>00048     aggregator_operation* next() { <span class="keywordflow">return</span> itt_hide_load_word(my_next);}
+<a name="l00049"></a>00049     <span class="keywordtype">void</span> set_next(aggregator_operation* n) { itt_hide_store_word(my_next, n); }
+<a name="l00050"></a>00050 };
+<a name="l00051"></a>00051 
+<a name="l00052"></a>00052 <span class="keyword">namespace </span>internal {
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054 <span class="keyword">class </span>basic_operation_base : <span class="keyword">public</span> aggregator_operation {
+<a name="l00055"></a>00055     <span class="keyword">friend</span> <span class="keyword">class </span>basic_handler;
+<a name="l00056"></a>00056     <span class="keyword">virtual</span> <span class="keywordtype">void</span> apply_body() = 0;
+<a name="l00057"></a>00057 <span class="keyword">public</span>:
+<a name="l00058"></a>00058     basic_operation_base() : aggregator_operation() {}
+<a name="l00059"></a>00059     <span class="keyword">virtual</span> ~basic_operation_base() {}
+<a name="l00060"></a>00060 };
 <a name="l00061"></a>00061 
-<a name="l00063"></a><a class="code" href="a00248.html#4d48e7ff93f81636bca2c74f7da34750">00063</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00248.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a>;
-<a name="l00064"></a>00064 
-<a name="l00066"></a><a class="code" href="a00248.html#8fc30e93f8342a1960357f71e4fe8a2b">00066</a>     <span class="keyword">typedef</span> size_t <a class="code" href="a00248.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a>;
-<a name="l00067"></a>00067 
-<a name="l00069"></a><a class="code" href="a00248.html#068576d16c7e4e05d52f9db7a45b5b65">00069</a>     <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="a00248.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a>;
-<a name="l00070"></a>00070 
-<a name="l00072"></a><a class="code" href="a00248.html#5a3956341728eaa558d8827063718cac">00072</a>     <span class="keyword">typedef</span> A <a class="code" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a>;
-<a name="l00073"></a>00073 
-<a name="l00075"></a><a class="code" href="a00248.html#7c48a05a94a1f4f98fdfadfbef98ecf6">00075</a>     <span class="keyword">explicit</span> <a class="code" href="a00248.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(<span class="keyword">const</span> <a class="code" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a>()) : 
-<a name="l00076"></a>00076         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="a00248.html#25209656c84f2f9b030e2f9162713341">00082</a>     <a class="code" href="a00248.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a>()) :
-<a name="l00083"></a>00083         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             this->internal_push(&*begin);
-<a name="l00087"></a>00087     }
-<a name="l00088"></a>00088     
-<a name="l00090"></a><a class="code" href="a00248.html#8a6b98ea11a867db8ac868f0113ca429">00090</a>     <a class="code" href="a00248.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00248.html">concurrent_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00248.html#5a3956341728eaa558d8827063718cac" [...]
-<a name="l00091"></a>00091         internal::concurrent_queue_base_v3<T>(), my_allocator( a )
-<a name="l00092"></a>00092     {
-<a name="l00093"></a>00093         this->assign( src );
-<a name="l00094"></a>00094     }
-<a name="l00095"></a>00095     
-<a name="l00097"></a>00097     <a class="code" href="a00248.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>();
-<a name="l00098"></a>00098 
-<a name="l00100"></a><a class="code" href="a00248.html#73c47563ffcc4c2f6452f25a04ebe2e2">00100</a>     <span class="keywordtype">void</span> <a class="code" href="a00248.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>( <span class="keyword">const</span> T& source ) {
-<a name="l00101"></a>00101         this->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="a00248.html#ae31ca0db34ef96ef1e74aa0d28c95f8">00107</a>     <span class="keywordtype">bool</span> <a class="code" href="a00248.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>( T& result ) {
-<a name="l00108"></a>00108         <span class="keywordflow">return</span> this->internal_try_pop( &result );
-<a name="l00109"></a>00109     }
+<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>basic_operation : <span class="keyword">public</span> basic_operation_base, no_assign {
+<a name="l00064"></a>00064     <span class="keyword">const</span> Body& my_body;
+<a name="l00065"></a>00065     <span class="comment">/*override*/</span> <span class="keywordtype">void</span> apply_body() { my_body(); }
+<a name="l00066"></a>00066 <span class="keyword">public</span>:
+<a name="l00067"></a>00067     basic_operation(<span class="keyword">const</span> Body& b) : basic_operation_base(), my_body(b) {}
+<a name="l00068"></a>00068 };
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070 <span class="keyword">class </span>basic_handler {
+<a name="l00071"></a>00071 <span class="keyword">public</span>:
+<a name="l00072"></a>00072     basic_handler() {}
+<a name="l00073"></a>00073     <span class="keywordtype">void</span> operator()(aggregator_operation* op_list)<span class="keyword"> const </span>{ 
+<a name="l00074"></a>00074         <span class="keywordflow">while</span> (op_list) {
+<a name="l00075"></a>00075             <span class="comment">// ITT note: &(op_list->status) tag is used to cover accesses to the operation data.</span>
+<a name="l00076"></a>00076             <span class="comment">// The executing thread "acquires" the tag (see start()) and then performs</span>
+<a name="l00077"></a>00077             <span class="comment">// the associated operation w/o triggering a race condition diagnostics.</span>
+<a name="l00078"></a>00078             <span class="comment">// A thread that created the operation is waiting for its status (see execute_impl()),</span>
+<a name="l00079"></a>00079             <span class="comment">// so when this thread is done with the operation, it will "release" the tag </span>
+<a name="l00080"></a>00080             <span class="comment">// and update the status (see finish()) to give control back to the waiting thread.</span>
+<a name="l00081"></a>00081             basic_operation_base& request = static_cast<basic_operation_base&>(*op_list);
+<a name="l00082"></a>00082             <span class="comment">// IMPORTANT: need to advance op_list to op_list->next() before calling request.finish()</span>
+<a name="l00083"></a>00083             op_list = op_list->next();
+<a name="l00084"></a>00084             request.start();
+<a name="l00085"></a>00085             request.apply_body();
+<a name="l00086"></a>00086             request.finish();
+<a name="l00087"></a>00087         }
+<a name="l00088"></a>00088     }
+<a name="l00089"></a>00089 };
+<a name="l00090"></a>00090 
+<a name="l00091"></a>00091 } <span class="comment">// namespace internal</span>
+<a name="l00092"></a>00092 
+<a name="l00094"></a>00094 
+<a name="l00096"></a>00096 <span class="keyword">template</span> <<span class="keyword">typename</span> handler_type>
+<a name="l00097"></a><a class="code" href="a00252.html">00097</a> <span class="keyword">class </span><a class="code" href="a00252.html">aggregator_ext</a> : tbb::internal::no_copy {
+<a name="l00098"></a>00098 <span class="keyword">public</span>:
+<a name="l00099"></a>00099     <a class="code" href="a00252.html">aggregator_ext</a>(<span class="keyword">const</span> handler_type& h) : handler_busy(0), handle_operations(h) { mailbox = NULL; }
+<a name="l00100"></a>00100 
+<a name="l00102"></a>00102 
+<a name="l00103"></a><a class="code" href="a00252.html#ccd88bf4333dc100ba97da8e2170277d">00103</a>     <span class="keywordtype">void</span> <a class="code" href="a00252.html#ccd88bf4333dc100ba97da8e2170277d">process</a>(aggregator_operation *op) { <a class="code" href="a00252.html#fdd0a9ce522246b9e14ae5e44bc72d31">execute_impl</a>(*op); }
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105  <span class="keyword">protected</span>:
+<a name="l00108"></a><a class="code" href="a00252.html#fdd0a9ce522246b9e14ae5e44bc72d31">00108</a>     <span class="keywordtype">void</span> <a class="code" href="a00252.html#fdd0a9ce522246b9e14ae5e44bc72d31">execute_impl</a>(aggregator_operation& op) {
+<a name="l00109"></a>00109         aggregator_operation* res;
 <a name="l00110"></a>00110 
-<a name="l00112"></a><a class="code" href="a00248.html#eaa35a5274606779802e9a669a706260">00112</a>     <a class="code" href="a00248.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> <a class="code" href="a00248.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="a00248.html#f3f6fce0cfa2d581d6f3b47e0613ad64">00115</a>     <span class="keywordtype">bool</span> <a class="code" href="a00248.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="a00248.html#c32e8e84c0524155133b4aae32d2a827">clear</a>() ;
-<a name="l00119"></a>00119 
-<a name="l00121"></a><a class="code" href="a00248.html#f034f70caef445fe8abc9113ec926a8d">00121</a>     <a class="code" href="a00248.html#5a3956341728eaa558d8827063718cac">allocator_type</a> <a class="code" href="a00248.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="a00248.html#830b33753d6b149c366344e29b2edd8c">00136</a> <a class="code" href="a00248.html">concurrent_queue<T,A>::~concurrent_queue</a>() {
-<a name="l00137"></a>00137     <a class="code" href="a00248.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="a00248.html#c32e8e84c0524155133b4aae32d2a827">00142</a> <span class="keywordtype">void</span> <a class="code" href="a00248.html">concurrent_queue<T,A>::clear</a>() {
-<a name="l00143"></a>00143     <span class="keywordflow">while</span>( !<a class="code" href="a00248.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() ) {
-<a name="l00144"></a>00144         T value;
-<a name="l00145"></a>00145         this->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="a00242.html">00158</a> <span class="keyword">class </span><a class="code" href="a00242.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="l00111"></a>00111         <span class="comment">// ITT note: &(op.status) tag is used to cover accesses to this operation. This</span>
+<a name="l00112"></a>00112         <span class="comment">// thread has created the operation, and now releases it so that the handler</span>
+<a name="l00113"></a>00113         <span class="comment">// thread may handle the associated operation w/o triggering a race condition;</span>
+<a name="l00114"></a>00114         <span class="comment">// thus this tag will be acquired just before the operation is handled in the</span>
+<a name="l00115"></a>00115         <span class="comment">// handle_operations functor.</span>
+<a name="l00116"></a>00116         call_itt_notify(releasing, &(op.status));
+<a name="l00117"></a>00117         <span class="comment">// insert the operation in the queue</span>
+<a name="l00118"></a>00118         <span class="keywordflow">do</span> {
+<a name="l00119"></a>00119             <span class="comment">// ITT may flag the following line as a race; it is a false positive:</span>
+<a name="l00120"></a>00120             <span class="comment">// This is an atomic read; we don't provide itt_hide_load_word for atomics</span>
+<a name="l00121"></a>00121             op.my_next = res = mailbox; <span class="comment">// NOT A RACE </span>
+<a name="l00122"></a>00122         } <span class="keywordflow">while</span> (mailbox.compare_and_swap(&op, res) != res);
+<a name="l00123"></a>00123         <span class="keywordflow">if</span> (!res) { <span class="comment">// first in the list; handle the operations</span>
+<a name="l00124"></a>00124             <span class="comment">// ITT note: &mailbox tag covers access to the handler_busy flag, which this</span>
+<a name="l00125"></a>00125             <span class="comment">// waiting handler thread will try to set before entering handle_operations.</span>
+<a name="l00126"></a>00126             call_itt_notify(acquired, &mailbox);
+<a name="l00127"></a>00127             start_handle_operations();
+<a name="l00128"></a>00128             __TBB_ASSERT(op.status, NULL);
+<a name="l00129"></a>00129         }
+<a name="l00130"></a>00130         <span class="keywordflow">else</span> { <span class="comment">// not first; wait for op to be ready</span>
+<a name="l00131"></a>00131             call_itt_notify(prepare, &(op.status));
+<a name="l00132"></a>00132             spin_wait_while_eq(op.status, uintptr_t(aggregator_operation::agg_waiting));
+<a name="l00133"></a>00133             itt_load_word_with_acquire(op.status);
+<a name="l00134"></a>00134         }
+<a name="l00135"></a>00135     }
+<a name="l00136"></a>00136 
+<a name="l00137"></a>00137 
+<a name="l00138"></a>00138  <span class="keyword">private</span>:
+<a name="l00140"></a>00140     <a class="code" href="a00254.html">atomic<aggregator_operation *></a> mailbox;
+<a name="l00141"></a>00141 
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144     uintptr_t handler_busy;
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146     handler_type handle_operations;
+<a name="l00147"></a>00147 
+<a name="l00149"></a>00149     <span class="keywordtype">void</span> start_handle_operations() {
+<a name="l00150"></a>00150         aggregator_operation *pending_operations;
+<a name="l00151"></a>00151 
+<a name="l00152"></a>00152         <span class="comment">// ITT note: &handler_busy tag covers access to mailbox as it is passed</span>
+<a name="l00153"></a>00153         <span class="comment">// between active and waiting handlers.  Below, the waiting handler waits until</span>
+<a name="l00154"></a>00154         <span class="comment">// the active handler releases, and the waiting handler acquires &handler_busy as</span>
+<a name="l00155"></a>00155         <span class="comment">// it becomes the active_handler. The release point is at the end of this</span>
+<a name="l00156"></a>00156         <span class="comment">// function, when all operations in mailbox have been handled by the</span>
+<a name="l00157"></a>00157         <span class="comment">// owner of this aggregator.</span>
+<a name="l00158"></a>00158         call_itt_notify(prepare, &handler_busy);
+<a name="l00159"></a>00159         <span class="comment">// get handler_busy: only one thread can possibly spin here at a time</span>
+<a name="l00160"></a>00160         spin_wait_until_eq(handler_busy, uintptr_t(0));
+<a name="l00161"></a>00161         call_itt_notify(acquired, &handler_busy);
+<a name="l00162"></a>00162         <span class="comment">// acquire fence not necessary here due to causality rule and surrounding atomics</span>
+<a name="l00163"></a>00163         __TBB_store_with_release(handler_busy, uintptr_t(1));
 <a name="l00164"></a>00164 
-<a name="l00165"></a>00165     <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_queue_base_v3::padded_page<T> padded_page;
-<a name="l00166"></a>00166  
-<a name="l00168"></a>00168     <span class="keyword">class </span>destroyer: internal::no_copy {
-<a name="l00169"></a>00169         T& my_value;
-<a name="l00170"></a>00170     <span class="keyword">public</span>:
-<a name="l00171"></a>00171         destroyer( T& value ) : my_value(value) {}
-<a name="l00172"></a>00172         ~destroyer() {my_value.~T();}          
-<a name="l00173"></a>00173     };
+<a name="l00165"></a>00165         <span class="comment">// ITT note: &mailbox tag covers access to the handler_busy flag itself. </span>
+<a name="l00166"></a>00166         <span class="comment">// Capturing the state of the mailbox signifies that handler_busy has been </span>
+<a name="l00167"></a>00167         <span class="comment">// set and a new active handler will now process that list's operations.</span>
+<a name="l00168"></a>00168         call_itt_notify(releasing, &mailbox);
+<a name="l00169"></a>00169         <span class="comment">// grab pending_operations</span>
+<a name="l00170"></a>00170         pending_operations = mailbox.fetch_and_store(NULL);
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172         <span class="comment">// handle all the operations</span>
+<a name="l00173"></a>00173         handle_operations(pending_operations);
 <a name="l00174"></a>00174 
-<a name="l00175"></a>00175     T& get_ref( page& p, size_t index ) {
-<a name="l00176"></a>00176         __TBB_ASSERT( index<items_per_page, NULL );
-<a name="l00177"></a>00177         <span class="keywordflow">return</span> (&static_cast<padded_page*>(static_cast<void*>(&p))->last)[index];
-<a name="l00178"></a>00178     }
+<a name="l00175"></a>00175         <span class="comment">// release the handler</span>
+<a name="l00176"></a>00176         itt_store_word_with_release(handler_busy, uintptr_t(0));
+<a name="l00177"></a>00177     }
+<a name="l00178"></a>00178 };
 <a name="l00179"></a>00179 
-<a name="l00180"></a>00180     <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="l00181"></a>00181         <span class="keyword">new</span>( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
-<a name="l00182"></a>00182     }
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     <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="l00185"></a>00185         <span class="keyword">new</span>( &get_ref(dst,dindex) ) T( get_ref( const_cast<page&>(src), sindex ) );
-<a name="l00186"></a>00186     }
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188     <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="l00189"></a>00189         T& from = get_ref(src,index);
-<a name="l00190"></a>00190         destroyer d(from);
-<a name="l00191"></a>00191         *static_cast<T*>(dst) = from;
-<a name="l00192"></a>00192     }
+<a name="l00181"></a><a class="code" href="a00251.html">00181</a> <span class="keyword">class </span><a class="code" href="a00251.html">aggregator</a> : <span class="keyword">private</span> <a class="code" href="a00252.html">aggregator_ext</a><internal::basic_handler> {
+<a name="l00182"></a>00182 <span class="keyword">public</span>:
+<a name="l00183"></a>00183     <a class="code" href="a00251.html">aggregator</a>() : <a class="code" href="a00252.html">aggregator_ext<internal::basic_handler></a>(internal::basic_handler()) {}
+<a name="l00185"></a>00185 
+<a name="l00187"></a>00187     template<typename Body>
+<a name="l00188"></a><a class="code" href="a00251.html#641c8dc43652589d12eefaef130c094d">00188</a>     <span class="keywordtype">void</span> <a class="code" href="a00251.html#641c8dc43652589d12eefaef130c094d">execute</a>(<span class="keyword">const</span> Body& b) {
+<a name="l00189"></a>00189         internal::basic_operation<Body> op(b);
+<a name="l00190"></a>00190         this-><a class="code" href="a00252.html#fdd0a9ce522246b9e14ae5e44bc72d31">execute_impl</a>(op);
+<a name="l00191"></a>00191     }
+<a name="l00192"></a>00192 };
 <a name="l00193"></a>00193 
-<a name="l00194"></a>00194     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> page *allocate_page() {
-<a name="l00195"></a>00195         size_t n = <span class="keyword">sizeof</span>(padded_page) + (items_per_page-1)*<span class="keyword">sizeof</span>(T);
-<a name="l00196"></a>00196         page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));
-<a name="l00197"></a>00197         <span class="keywordflow">if</span>( !p )
-<a name="l00198"></a>00198             internal::throw_exception(internal::eid_bad_alloc); 
-<a name="l00199"></a>00199         <span class="keywordflow">return</span> p;
-<a name="l00200"></a>00200     }
+<a name="l00194"></a>00194 } <span class="comment">// namespace interface6</span>
+<a name="l00195"></a>00195 
+<a name="l00196"></a>00196 <span class="keyword">using</span> interface6::aggregator;
+<a name="l00197"></a>00197 <span class="keyword">using</span> interface6::aggregator_ext;
+<a name="l00198"></a>00198 <span class="keyword">using</span> interface6::aggregator_operation;
+<a name="l00199"></a>00199 
+<a name="l00200"></a>00200 } <span class="comment">// namespace tbb</span>
 <a name="l00201"></a>00201 
-<a name="l00202"></a>00202     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) {
-<a name="l00203"></a>00203         size_t n = <span class="keyword">sizeof</span>(padded_page) + (items_per_page-1)*<span class="keyword">sizeof</span>(T);
-<a name="l00204"></a>00204         my_allocator.deallocate( reinterpret_cast<char*>(p), n );
-<a name="l00205"></a>00205     }
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207 <span class="keyword">public</span>:
-<a name="l00209"></a><a class="code" href="a00242.html#98245517a931e5893f6601e66c51fc75">00209</a>     <span class="keyword">typedef</span> T <a class="code" href="a00242.html#98245517a931e5893f6601e66c51fc75">value_type</a>;
-<a name="l00210"></a>00210 
-<a name="l00212"></a><a class="code" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">00212</a>     <span class="keyword">typedef</span> A <a class="code" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>;
-<a name="l00213"></a>00213 
-<a name="l00215"></a><a class="code" href="a00242.html#dcd44ca6a88c0dc7a847a47a10811f0c">00215</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00242.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a>;
-<a name="l00216"></a>00216 
-<a name="l00218"></a><a class="code" href="a00242.html#796713d0b9ba93a4721cbe13e4474068">00218</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00242.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a>;
-<a name="l00219"></a>00219 
-<a name="l00221"></a>00221 
-<a name="l00223"></a><a class="code" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">00223</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>;
-<a name="l00224"></a>00224 
-<a name="l00226"></a><a class="code" href="a00242.html#4b45c91297e69515d83d5eef85ae1f49">00226</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00242.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a>;
-<a name="l00227"></a>00227 
-<a name="l00229"></a><a class="code" href="a00242.html#e3525226732963ff0f13e89d8e6dab5b">00229</a>     <span class="keyword">explicit</span> <a class="code" href="a00242.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(<span class="keyword">const</span> <a class="code" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>()) : 
-<a name="l00230"></a>00230         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
-<a name="l00231"></a>00231     {
-<a name="l00232"></a>00232     }
-<a name="l00233"></a>00233 
-<a name="l00235"></a><a class="code" href="a00242.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">00235</a>     <a class="code" href="a00242.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( <span class="keyword">const</span> <a class="code" href="a00242.html">concurrent_bounded_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00242.html#2e2726fccf6d975dc [...]
-<a name="l00236"></a>00236         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
-<a name="l00237"></a>00237     {
-<a name="l00238"></a>00238         assign( src );
-<a name="l00239"></a>00239     }
-<a name="l00240"></a>00240 
-<a name="l00242"></a>00242     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
-<a name="l00243"></a><a class="code" href="a00242.html#a5e04dcd7db9fd9b583b4e7df832246a">00243</a>     <a class="code" href="a00242.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>()) :
-<a name="l00244"></a>00244         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
-<a name="l00245"></a>00245     {
-<a name="l00246"></a>00246         <span class="keywordflow">for</span>( ; begin != end; ++begin )
-<a name="l00247"></a>00247             internal_push_if_not_full(&*begin);
-<a name="l00248"></a>00248     }
-<a name="l00249"></a>00249 
-<a name="l00251"></a>00251     <a class="code" href="a00242.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>();
-<a name="l00252"></a>00252 
-<a name="l00254"></a><a class="code" href="a00242.html#ceb08c743b11ba88c878e73fff8af20b">00254</a>     <span class="keywordtype">void</span> <a class="code" href="a00242.html#ceb08c743b11ba88c878e73fff8af20b">push</a>( <span class="keyword">const</span> T& source ) {
-<a name="l00255"></a>00255         internal_push( &source );
-<a name="l00256"></a>00256     }
-<a name="l00257"></a>00257 
-<a name="l00259"></a>00259 
-<a name="l00260"></a><a class="code" href="a00242.html#41f4c6bd7a82ab070e840bbf81b0b123">00260</a>     <span class="keywordtype">void</span> <a class="code" href="a00242.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>( T& destination ) {
-<a name="l00261"></a>00261         internal_pop( &destination );
-<a name="l00262"></a>00262     }
-<a name="l00263"></a>00263 
-<a name="l00265"></a>00265 
-<a name="l00267"></a><a class="code" href="a00242.html#2bd6232531279fb3ccbd296bea23066b">00267</a>     <span class="keywordtype">bool</span> <a class="code" href="a00242.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>( <span class="keyword">const</span> T& source ) {
-<a name="l00268"></a>00268         <span class="keywordflow">return</span> internal_push_if_not_full( &source );
-<a name="l00269"></a>00269     }
-<a name="l00270"></a>00270 
-<a name="l00272"></a>00272 
-<a name="l00274"></a><a class="code" href="a00242.html#0ca487019bbb00a196442aff78a1e4f7">00274</a>     <span class="keywordtype">bool</span> <a class="code" href="a00242.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>( T& destination ) {
-<a name="l00275"></a>00275         <span class="keywordflow">return</span> internal_pop_if_present( &destination );
-<a name="l00276"></a>00276     }
-<a name="l00277"></a>00277 
-<a name="l00279"></a>00279 
-<a name="l00282"></a><a class="code" href="a00242.html#7dc14d1a579a4cccda9f857585e1768d">00282</a>     <a class="code" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00242.html#7dc14d1a579a4cccda9f857585e1768d">size</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_size();}
-<a name="l00283"></a>00283 
-<a name="l00285"></a><a class="code" href="a00242.html#f64924f2ee9225c368a270fc3c394db9">00285</a>     <span class="keywordtype">bool</span> <a class="code" href="a00242.html#f64924f2ee9225c368a270fc3c394db9">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_empty();}
-<a name="l00286"></a>00286 
-<a name="l00288"></a><a class="code" href="a00242.html#b2888b3e4e837d7e03f2c731963a402b">00288</a>     <a class="code" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> <a class="code" href="a00242.html#b2888b3e4e837d7e03f2c731963a402b">capacity</a>()<span class="keyword"> const </span>{
-<a name="l00289"></a>00289         <span class="keywordflow">return</span> my_capacity;
-<a name="l00290"></a>00290     }
-<a name="l00291"></a>00291 
-<a name="l00293"></a>00293 
-<a name="l00295"></a><a class="code" href="a00242.html#f3c6c934f85fd02aedbc83a16943193b">00295</a>     <span class="keywordtype">void</span> <a class="code" href="a00242.html#f3c6c934f85fd02aedbc83a16943193b">set_capacity</a>( <a class="code" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a> new_capacity ) {
-<a name="l00296"></a>00296         internal_set_capacity( new_capacity, <span class="keyword">sizeof</span>(T) );
-<a name="l00297"></a>00297     }
-<a name="l00298"></a>00298 
-<a name="l00300"></a><a class="code" href="a00242.html#415eb87e53b1c6a266de06ecbc490d16">00300</a>     <a class="code" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a> <a class="code" href="a00242.html#415eb87e53b1c6a266de06ecbc490d16">get_allocator</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
-<a name="l00301"></a>00301 
-<a name="l00303"></a>00303     <span class="keywordtype">void</span> <a class="code" href="a00242.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>() ;
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_bounded_queue,T> iterator;
-<a name="l00306"></a>00306     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_bounded_queue,const T> const_iterator;
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00309"></a>00309     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
-<a name="l00310"></a>00310     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00311"></a>00311     iterator unsafe_begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>);}
-<a name="l00312"></a>00312     iterator unsafe_end() {<span class="keywordflow">return</span> iterator();}
-<a name="l00313"></a>00313     const_iterator unsafe_begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>);}
-<a name="l00314"></a>00314     const_iterator unsafe_end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator();}
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316 }; 
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00319"></a><a class="code" href="a00242.html#acaf5b510dc0dfc7780b8c956cf773cf">00319</a> <a class="code" href="a00242.html">concurrent_bounded_queue<T,A>::~concurrent_bounded_queue</a>() {
-<a name="l00320"></a>00320     <a class="code" href="a00242.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>();
-<a name="l00321"></a>00321     internal_finish_clear();
-<a name="l00322"></a>00322 }
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00325"></a><a class="code" href="a00242.html#90b31e2954c6e4596c7900435a5f4bc1">00325</a> <span class="keywordtype">void</span> <a class="code" href="a00242.html">concurrent_bounded_queue<T,A>::clear</a>() {
-<a name="l00326"></a>00326     <span class="keywordflow">while</span>( !<a class="code" href="a00242.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() ) {
-<a name="l00327"></a>00327         T value;
-<a name="l00328"></a>00328         internal_pop_if_present(&value);
-<a name="l00329"></a>00329     }
-<a name="l00330"></a>00330 }
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332 <span class="keyword">namespace </span>deprecated {
-<a name="l00333"></a>00333 
-<a name="l00335"></a>00335 
-<a name="l00340"></a>00340 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> > 
-<a name="l00341"></a><a class="code" href="a00249.html">00341</a> <span class="keyword">class </span><a class="code" href="a00249.html">concurrent_queue</a>: <span class="keyword">public</span> <a class="code" href="a00242.html">concurrent_bounded_queue</a><T,A> {
-<a name="l00342"></a>00342 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
-<a name="l00343"></a>00343 <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="l00344"></a>00344 <span class="preprocessor">#endif </span>
-<a name="l00345"></a>00345 <span class="preprocessor"></span>
-<a name="l00346"></a>00346 <span class="keyword">public</span>:
-<a name="l00348"></a><a class="code" href="a00249.html#aaf19bd7337b72f3131ece60f7315ef7">00348</a>     <span class="keyword">explicit</span> <a class="code" href="a00249.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(<span class="keyword">const</span> A& a = A()) : 
-<a name="l00349"></a>00349         <a class="code" href="a00242.html">concurrent_bounded_queue</a><T,A>( a )
-<a name="l00350"></a>00350     {
-<a name="l00351"></a>00351     }
-<a name="l00352"></a>00352 
-<a name="l00354"></a><a class="code" href="a00249.html#fc092b9082f233482f3513fc3bb670f7">00354</a>     <a class="code" href="a00249.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00249.html">concurrent_queue</a>& src, <span class="keyword">const</span> A& a = A()) : 
-<a name="l00355"></a>00355         <a class="code" href="a00242.html">concurrent_bounded_queue</a><T,A>( src, a )
-<a name="l00356"></a>00356     {
-<a name="l00357"></a>00357     }
-<a name="l00358"></a>00358 
-<a name="l00360"></a>00360     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
-<a name="l00361"></a><a class="code" href="a00249.html#9102b897776bd2d9e908e6604ff16b5f">00361</a>     <a class="code" href="a00249.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( InputIterator b <span class="comment">/*begin*/</span>, InputIterator e <span class="comment">/*end*/</span>, <span class="keyword">const</span> A& a = A()) :
-<a name="l00362"></a>00362         <a class="code" href="a00242.html">concurrent_bounded_queue</a><T,A>( b, e, a )
-<a name="l00363"></a>00363     {
-<a name="l00364"></a>00364     }
-<a name="l00365"></a>00365 
-<a name="l00367"></a>00367 
-<a name="l00369"></a><a class="code" href="a00249.html#7c45561bafe71107d09b2bc1b8f4e681">00369</a>     <span class="keywordtype">bool</span> <a class="code" href="a00249.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>( <span class="keyword">const</span> T& source ) {
-<a name="l00370"></a>00370         <span class="keywordflow">return</span> this-><a class="code" href="a00242.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>( source );
-<a name="l00371"></a>00371     }
-<a name="l00372"></a>00372 
-<a name="l00374"></a>00374 
-<a name="l00378"></a><a class="code" href="a00249.html#48da3536245318af6cb5fd58bac78039">00378</a>     <span class="keywordtype">bool</span> <a class="code" href="a00249.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>( T& destination ) {
-<a name="l00379"></a>00379         <span class="keywordflow">return</span> this-><a class="code" href="a00242.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>( destination );
-<a name="l00380"></a>00380     }
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00242.html">concurrent_bounded_queue<T,A>::iterator</a> iterator;
-<a name="l00383"></a>00383     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00242.html">concurrent_bounded_queue<T,A>::const_iterator</a> const_iterator;
-<a name="l00384"></a>00384     <span class="comment">//</span>
-<a name="l00385"></a>00385     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00386"></a>00386     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
-<a name="l00387"></a>00387     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00388"></a>00388     iterator begin() {<span class="keywordflow">return</span> this->unsafe_begin();}
-<a name="l00389"></a>00389     iterator end() {<span class="keywordflow">return</span> this->unsafe_end();}
-<a name="l00390"></a>00390     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->unsafe_begin();}
-<a name="l00391"></a>00391     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->unsafe_end();}
-<a name="l00392"></a>00392 }; 
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394 }
-<a name="l00395"></a>00395     
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00398"></a>00398 <span class="preprocessor"></span><span class="keyword">using</span> deprecated::concurrent_queue;
-<a name="l00399"></a>00399 <span class="preprocessor">#else</span>
-<a name="l00400"></a>00400 <span class="preprocessor"></span><span class="keyword">using</span> strict_ppl::concurrent_queue;    
-<a name="l00401"></a>00401 <span class="preprocessor">#endif</span>
-<a name="l00402"></a>00402 <span class="preprocessor"></span>
-<a name="l00403"></a>00403 } <span class="comment">// namespace tbb</span>
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_queue_H */</span>
+<a name="l00202"></a>00202 <span class="preprocessor">#endif  // __TBB__aggregator_H</span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00436.html b/doc/html/a00436.html
deleted file mode 100644
index 27ab313..0000000
--- a/doc/html/a00436.html
+++ /dev/null
@@ -1,250 +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_unordered_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_unordered_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-2011 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="comment">/* Container implementations in this header are based on PPL implementations</span>
-<a name="l00022"></a>00022 <span class="comment">   provided by Microsoft. */</span>
-<a name="l00023"></a>00023 
-<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __TBB_concurrent_unordered_map_H</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_unordered_map_H</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "internal/_concurrent_unordered_impl.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="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="keyword">namespace </span>interface5 {
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="comment">// Template class for hash map traits</span>
-<a name="l00035"></a>00035 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> Hash_compare, <span class="keyword">typename</span> Allocator, <span class="keywordtype">bool</span> Allow_multimapping>
-<a name="l00036"></a>00036 <span class="keyword">class </span>concurrent_unordered_map_traits
-<a name="l00037"></a>00037 {
-<a name="l00038"></a>00038 <span class="keyword">protected</span>:
-<a name="l00039"></a>00039     <span class="keyword">typedef</span> std::pair<const Key, T> value_type;
-<a name="l00040"></a>00040     <span class="keyword">typedef</span> Key key_type;
-<a name="l00041"></a>00041     <span class="keyword">typedef</span> Hash_compare hash_compare;
-<a name="l00042"></a>00042     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<value_type>::other allocator_type;
-<a name="l00043"></a>00043     <span class="keyword">enum</span> { allow_multimapping = Allow_multimapping };
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045     concurrent_unordered_map_traits() : my_hash_compare() {}
-<a name="l00046"></a>00046     concurrent_unordered_map_traits(<span class="keyword">const</span> hash_compare& hc) : my_hash_compare(hc) {}
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048     <span class="keyword">class </span>value_compare : <span class="keyword">public</span> std::binary_function<value_type, value_type, bool>
-<a name="l00049"></a>00049     {
-<a name="l00050"></a>00050         <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_unordered_map_traits<Key, T, Hash_compare, Allocator, Allow_multimapping>;
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052     <span class="keyword">public</span>:
-<a name="l00053"></a>00053         <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> value_type& left, <span class="keyword">const</span> value_type& right)<span class="keyword"> const</span>
-<a name="l00054"></a>00054 <span class="keyword">        </span>{
-<a name="l00055"></a>00055             <span class="keywordflow">return</span> (my_hash_compare(left.first, right.first));
-<a name="l00056"></a>00056         }
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058         value_compare(<span class="keyword">const</span> hash_compare& comparator) : my_hash_compare(comparator) {}
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060     <span class="keyword">protected</span>:
-<a name="l00061"></a>00061         hash_compare my_hash_compare;    <span class="comment">// the comparator predicate for keys</span>
-<a name="l00062"></a>00062     };
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064     <span class="keyword">template</span><<span class="keyword">class</span> Type1, <span class="keyword">class</span> Type2>
-<a name="l00065"></a>00065     <span class="keyword">static</span> <span class="keyword">const</span> Key& get_key(<span class="keyword">const</span> std::pair<Type1, Type2>& value) {
-<a name="l00066"></a>00066         <span class="keywordflow">return</span> (value.first);
-<a name="l00067"></a>00067     }
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069     hash_compare my_hash_compare; <span class="comment">// the comparator predicate for keys</span>
-<a name="l00070"></a>00070 };
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> Hasher = tbb::tbb_hash<Key>, <span class="keyword">typename</span> Key_equality = std::equal_to<Key>, <span class="keyword">typename</span> Allocator = tbb::tbb_allocator<std::pair<const Key, T> > >
-<a name="l00073"></a>00073 <span class="keyword">class </span>concurrent_unordered_map : <span class="keyword">public</span> internal::concurrent_unordered_base< concurrent_unordered_map_traits<Key, T, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> >
-<a name="l00074"></a>00074 {
-<a name="l00075"></a>00075     <span class="comment">// Base type definitions</span>
-<a name="l00076"></a>00076     <span class="keyword">typedef</span> internal::hash_compare<Key, Hasher, Key_equality> hash_compare;
-<a name="l00077"></a>00077     <span class="keyword">typedef</span> internal::concurrent_unordered_base< concurrent_unordered_map_traits<Key, T, hash_compare, Allocator, false> > base_type;
-<a name="l00078"></a>00078     <span class="keyword">typedef</span> concurrent_unordered_map_traits<Key, T, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, <span class="keyword">false</span>> traits_type;
-<a name="l00079"></a>00079     <span class="keyword">using</span> traits_type::my_hash_compare;
-<a name="l00080"></a>00080 <span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="keyword">public</span>:
-<a name="l00082"></a>00082 <span class="preprocessor">#endif</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span>    <span class="keyword">using</span> traits_type::allow_multimapping;
-<a name="l00084"></a>00084 <span class="keyword">public</span>:
-<a name="l00085"></a>00085     <span class="keyword">using</span> base_type::end;
-<a name="l00086"></a>00086     <span class="keyword">using</span> base_type::find;
-<a name="l00087"></a>00087     <span class="keyword">using</span> base_type::insert;
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089     <span class="comment">// Type definitions</span>
-<a name="l00090"></a>00090     <span class="keyword">typedef</span> Key key_type;
-<a name="l00091"></a>00091     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::value_type value_type;
-<a name="l00092"></a>00092     <span class="keyword">typedef</span> T mapped_type;
-<a name="l00093"></a>00093     <span class="keyword">typedef</span> Hasher hasher;
-<a name="l00094"></a>00094     <span class="keyword">typedef</span> Key_equality key_equal;
-<a name="l00095"></a>00095     <span class="keyword">typedef</span> hash_compare key_compare;
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::allocator_type allocator_type;
-<a name="l00098"></a>00098     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::pointer pointer;
-<a name="l00099"></a>00099     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_pointer const_pointer;
-<a name="l00100"></a>00100     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::reference reference;
-<a name="l00101"></a>00101     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_reference const_reference;
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::size_type size_type;
-<a name="l00104"></a>00104     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::difference_type difference_type;
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator iterator;
-<a name="l00107"></a>00107     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_iterator;
-<a name="l00108"></a>00108     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator local_iterator;
-<a name="l00109"></a>00109     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_local_iterator;
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111     <span class="comment">// Construction/destruction/copying</span>
-<a name="l00112"></a>00112     <span class="keyword">explicit</span> concurrent_unordered_map(size_type n_of_buckets = 8, <span class="keyword">const</span> hasher& a_hasher = hasher(),
-<a name="l00113"></a>00113         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
-<a name="l00114"></a>00114         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
-<a name="l00115"></a>00115     {
-<a name="l00116"></a>00116     }
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118     concurrent_unordered_map(<span class="keyword">const</span> Allocator& a) : base_type(8, key_compare(), a)
-<a name="l00119"></a>00119     {
-<a name="l00120"></a>00120     }
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122     <span class="keyword">template</span> <<span class="keyword">typename</span> Iterator>
-<a name="l00123"></a>00123     concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets = 8, <span class="keyword">const</span> hasher& a_hasher = hasher(),
-<a name="l00124"></a>00124         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
-<a name="l00125"></a>00125         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
-<a name="l00126"></a>00126     {
-<a name="l00127"></a>00127         <span class="keywordflow">for</span> (; first != last; ++first)
-<a name="l00128"></a>00128             base_type::insert(*first);
-<a name="l00129"></a>00129     }
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131     concurrent_unordered_map(<span class="keyword">const</span> concurrent_unordered_map& table) : base_type(table)
-<a name="l00132"></a>00132     {
-<a name="l00133"></a>00133     }
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     concurrent_unordered_map(<span class="keyword">const</span> concurrent_unordered_map& table, <span class="keyword">const</span> Allocator& a)
-<a name="l00136"></a>00136         : base_type(table, a)
-<a name="l00137"></a>00137     {
-<a name="l00138"></a>00138     }
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140     concurrent_unordered_map& operator=(<span class="keyword">const</span> concurrent_unordered_map& table)
-<a name="l00141"></a>00141     {
-<a name="l00142"></a>00142         base_type::operator=(table);
-<a name="l00143"></a>00143         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
-<a name="l00144"></a>00144     }
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     iterator unsafe_erase(const_iterator where)
-<a name="l00147"></a>00147     {
-<a name="l00148"></a>00148         <span class="keywordflow">return</span> base_type::unsafe_erase(where);
-<a name="l00149"></a>00149     }
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     size_type unsafe_erase(<span class="keyword">const</span> key_type& key)
-<a name="l00152"></a>00152     {
-<a name="l00153"></a>00153         <span class="keywordflow">return</span> base_type::unsafe_erase(key);
-<a name="l00154"></a>00154     }
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156     iterator unsafe_erase(const_iterator first, const_iterator last)
-<a name="l00157"></a>00157     {
-<a name="l00158"></a>00158         <span class="keywordflow">return</span> base_type::unsafe_erase(first, last);
-<a name="l00159"></a>00159     }
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     <span class="keywordtype">void</span> swap(concurrent_unordered_map& table)
-<a name="l00162"></a>00162     {
-<a name="l00163"></a>00163         base_type::swap(table);
-<a name="l00164"></a>00164     }
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     <span class="comment">// Observers</span>
-<a name="l00167"></a>00167     hasher hash_function()<span class="keyword"> const</span>
-<a name="l00168"></a>00168 <span class="keyword">    </span>{
-<a name="l00169"></a>00169         <span class="keywordflow">return</span> my_hash_compare.my_hash_object;
-<a name="l00170"></a>00170     }
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     key_equal key_eq()<span class="keyword"> const</span>
-<a name="l00173"></a>00173 <span class="keyword">    </span>{
-<a name="l00174"></a>00174         <span class="keywordflow">return</span> my_hash_compare.my_key_compare_object;
-<a name="l00175"></a>00175     }
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177     mapped_type& operator[](<span class="keyword">const</span> key_type& key)
-<a name="l00178"></a>00178     {
-<a name="l00179"></a>00179         iterator where = find(key);
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181         <span class="keywordflow">if</span> (where == end())
-<a name="l00182"></a>00182         {
-<a name="l00183"></a>00183             where = insert(std::pair<key_type, mapped_type>(key, mapped_type())).first;
-<a name="l00184"></a>00184         }
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186         <span class="keywordflow">return</span> ((*where).second);
-<a name="l00187"></a>00187     }
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189     mapped_type& at(<span class="keyword">const</span> key_type& key)
-<a name="l00190"></a>00190     {
-<a name="l00191"></a>00191         iterator where = find(key);
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193         <span class="keywordflow">if</span> (where == end())
-<a name="l00194"></a>00194         {
-<a name="l00195"></a>00195             tbb::internal::throw_exception(tbb::internal::eid_invalid_key);
-<a name="l00196"></a>00196         }
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198         <span class="keywordflow">return</span> ((*where).second);
-<a name="l00199"></a>00199     }
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201     <span class="keyword">const</span> mapped_type& at(<span class="keyword">const</span> key_type& key)<span class="keyword"> const</span>
-<a name="l00202"></a>00202 <span class="keyword">    </span>{
-<a name="l00203"></a>00203         const_iterator where = find(key);
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205         <span class="keywordflow">if</span> (where == end())
-<a name="l00206"></a>00206         {
-<a name="l00207"></a>00207             tbb::internal::throw_exception(tbb::internal::eid_invalid_key);
-<a name="l00208"></a>00208         }
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210         <span class="keywordflow">return</span> ((*where).second);
-<a name="l00211"></a>00211     }
-<a name="l00212"></a>00212 };
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 } <span class="comment">// namespace interface5</span>
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 <span class="keyword">using</span> interface5::concurrent_unordered_map;
-<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// __TBB_concurrent_unordered_map_H</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00440.html b/doc/html/a00440.html
index d332046..e394dd2 100644
--- a/doc/html/a00440.html
+++ b/doc/html/a00440.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>concurrent_unordered_set.h Source File</title>
+<title>aligned_space.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>concurrent_unordered_set.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-2011 Intel Corporation.  All Rights Reserved.</span>
+<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-2012 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,158 +39,32 @@
 <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="comment">/* Container implementations in this header are based on PPL implementations</span>
-<a name="l00022"></a>00022 <span class="comment">   provided by Microsoft. */</span>
-<a name="l00023"></a>00023 
-<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __TBB_concurrent_unordered_set_H</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_unordered_set_H</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "internal/_concurrent_unordered_impl.h"</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_aligned_space_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_aligned_space_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">namespace </span>tbb
-<a name="l00030"></a>00030 {
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="keyword">namespace </span>interface5 {
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="comment">// Template class for hash set traits</span>
-<a name="l00035"></a>00035 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> Hash_compare, <span class="keyword">typename</span> Allocator, <span class="keywordtype">bool</span> Allow_multimapping>
-<a name="l00036"></a>00036 <span class="keyword">class </span>concurrent_unordered_set_traits
-<a name="l00037"></a>00037 {
-<a name="l00038"></a>00038 <span class="keyword">protected</span>:
-<a name="l00039"></a>00039     <span class="keyword">typedef</span> Key value_type;
-<a name="l00040"></a>00040     <span class="keyword">typedef</span> Key key_type;
-<a name="l00041"></a>00041     <span class="keyword">typedef</span> Hash_compare hash_compare;
-<a name="l00042"></a>00042     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<value_type>::other allocator_type;
-<a name="l00043"></a>00043     <span class="keyword">enum</span> { allow_multimapping = Allow_multimapping };
+<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="a00253.html">00033</a> <span class="keyword">class </span><a class="code" href="a00253.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="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">00039</a>     T* <a class="code" href="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>() {<span class="keywordflow">return</span> internal::punned_cast<T*>(<span class="keyword">this</span>);}
+<a name="l00040"></a>00040 
+<a name="l00042"></a><a class="code" href="a00253.html#024be075c23c0394c9a2518d993bcd9e">00042</a>     T* <a class="code" href="a00253.html#024be075c23c0394c9a2518d993bcd9e">end</a>() {<span class="keywordflow">return</span> <a class="code" href="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()+N;}
+<a name="l00043"></a>00043 };
 <a name="l00044"></a>00044 
-<a name="l00045"></a>00045     concurrent_unordered_set_traits() : my_hash_compare() {}
-<a name="l00046"></a>00046     concurrent_unordered_set_traits(<span class="keyword">const</span> hash_compare& hc) : my_hash_compare(hc) {}
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048     <span class="keyword">typedef</span> hash_compare value_compare;
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050     <span class="keyword">static</span> <span class="keyword">const</span> Key& get_key(<span class="keyword">const</span> value_type& value) {
-<a name="l00051"></a>00051         <span class="keywordflow">return</span> value;
-<a name="l00052"></a>00052     }
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054     hash_compare my_hash_compare; <span class="comment">// the comparator predicate for keys</span>
-<a name="l00055"></a>00055 };
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> Hasher = tbb::tbb_hash<Key>, <span class="keyword">typename</span> Key_equality = std::equal_to<Key>, <span class="keyword">typename</span> Allocator = tbb::tbb_allocator<Key> >
-<a name="l00058"></a>00058 <span class="keyword">class </span>concurrent_unordered_set : <span class="keyword">public</span> internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> >
-<a name="l00059"></a>00059 {
-<a name="l00060"></a>00060     <span class="comment">// Base type definitions</span>
-<a name="l00061"></a>00061     <span class="keyword">typedef</span> internal::hash_compare<Key, Hasher, Key_equality> hash_compare;
-<a name="l00062"></a>00062     <span class="keyword">typedef</span> internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key, hash_compare, Allocator, false> > base_type;
-<a name="l00063"></a>00063     <span class="keyword">typedef</span> concurrent_unordered_set_traits<Key, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, <span class="keyword">false</span>> traits_type;
-<a name="l00064"></a>00064     <span class="keyword">using</span> traits_type::my_hash_compare;
-<a name="l00065"></a>00065 <span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="keyword">public</span>:
-<a name="l00067"></a>00067 <span class="preprocessor">#endif</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span>    <span class="keyword">using</span> traits_type::allow_multimapping;
-<a name="l00069"></a>00069 <span class="keyword">public</span>:
-<a name="l00070"></a>00070     <span class="keyword">using</span> base_type::end;
-<a name="l00071"></a>00071     <span class="keyword">using</span> base_type::find;
-<a name="l00072"></a>00072     <span class="keyword">using</span> base_type::insert;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074     <span class="comment">// Type definitions</span>
-<a name="l00075"></a>00075     <span class="keyword">typedef</span> Key key_type;
-<a name="l00076"></a>00076     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::value_type value_type;
-<a name="l00077"></a>00077     <span class="keyword">typedef</span> Key mapped_type;
-<a name="l00078"></a>00078     <span class="keyword">typedef</span> Hasher hasher;
-<a name="l00079"></a>00079     <span class="keyword">typedef</span> Key_equality key_equal;
-<a name="l00080"></a>00080     <span class="keyword">typedef</span> hash_compare key_compare;
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::allocator_type allocator_type;
-<a name="l00083"></a>00083     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::pointer pointer;
-<a name="l00084"></a>00084     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_pointer const_pointer;
-<a name="l00085"></a>00085     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::reference reference;
-<a name="l00086"></a>00086     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_reference const_reference;
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::size_type size_type;
-<a name="l00089"></a>00089     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::difference_type difference_type;
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator iterator;
-<a name="l00092"></a>00092     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_iterator;
-<a name="l00093"></a>00093     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator local_iterator;
-<a name="l00094"></a>00094     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_local_iterator;
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096     <span class="comment">// Construction/destruction/copying</span>
-<a name="l00097"></a>00097     <span class="keyword">explicit</span> concurrent_unordered_set(size_type n_of_buckets = 8, <span class="keyword">const</span> hasher& a_hasher = hasher(),
-<a name="l00098"></a>00098         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
-<a name="l00099"></a>00099         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
-<a name="l00100"></a>00100     {
-<a name="l00101"></a>00101     }
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103     concurrent_unordered_set(<span class="keyword">const</span> Allocator& a) : base_type(8, key_compare(), a)
-<a name="l00104"></a>00104     {
-<a name="l00105"></a>00105     }
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107     <span class="keyword">template</span> <<span class="keyword">typename</span> Iterator>
-<a name="l00108"></a>00108     concurrent_unordered_set(Iterator first, Iterator last, size_type n_of_buckets = 8, <span class="keyword">const</span> hasher& a_hasher = hasher(),
-<a name="l00109"></a>00109         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
-<a name="l00110"></a>00110         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
-<a name="l00111"></a>00111     {
-<a name="l00112"></a>00112         <span class="keywordflow">for</span> (; first != last; ++first)
-<a name="l00113"></a>00113             base_type::insert(*first);
-<a name="l00114"></a>00114     }
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116     concurrent_unordered_set(<span class="keyword">const</span> concurrent_unordered_set& table) : base_type(table)
-<a name="l00117"></a>00117     {
-<a name="l00118"></a>00118     }
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120     concurrent_unordered_set(<span class="keyword">const</span> concurrent_unordered_set& table, <span class="keyword">const</span> Allocator& a)
-<a name="l00121"></a>00121         : base_type(table, a)
-<a name="l00122"></a>00122     {
-<a name="l00123"></a>00123     }
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125     concurrent_unordered_set& operator=(<span class="keyword">const</span> concurrent_unordered_set& table)
-<a name="l00126"></a>00126     {
-<a name="l00127"></a>00127         base_type::operator=(table);
-<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     iterator unsafe_erase(const_iterator where)
-<a name="l00132"></a>00132     {
-<a name="l00133"></a>00133         <span class="keywordflow">return</span> base_type::unsafe_erase(where);
-<a name="l00134"></a>00134     }
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     size_type unsafe_erase(<span class="keyword">const</span> key_type& key)
-<a name="l00137"></a>00137     {
-<a name="l00138"></a>00138         <span class="keywordflow">return</span> base_type::unsafe_erase(key);
-<a name="l00139"></a>00139     }
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     iterator unsafe_erase(const_iterator first, const_iterator last)
-<a name="l00142"></a>00142     {
-<a name="l00143"></a>00143         <span class="keywordflow">return</span> base_type::unsafe_erase(first, last);
-<a name="l00144"></a>00144     }
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="keywordtype">void</span> swap(concurrent_unordered_set& table)
-<a name="l00147"></a>00147     {
-<a name="l00148"></a>00148         base_type::swap(table);
-<a name="l00149"></a>00149     }
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     <span class="comment">// Observers</span>
-<a name="l00152"></a>00152     hasher hash_function()<span class="keyword"> const</span>
-<a name="l00153"></a>00153 <span class="keyword">    </span>{
-<a name="l00154"></a>00154         <span class="keywordflow">return</span> my_hash_compare.my_hash_object;
-<a name="l00155"></a>00155     }
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     key_equal key_eq()<span class="keyword"> const</span>
-<a name="l00158"></a>00158 <span class="keyword">    </span>{
-<a name="l00159"></a>00159         <span class="keywordflow">return</span> my_hash_compare.my_key_compare_object;
-<a name="l00160"></a>00160     }
-<a name="l00161"></a>00161 };
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163 } <span class="comment">// namespace interface5</span>
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 <span class="keyword">using</span> interface5::concurrent_unordered_set;
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167 } <span class="comment">// namespace tbb</span>
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 <span class="preprocessor">#endif// __TBB_concurrent_unordered_set_H</span>
+<a name="l00045"></a>00045 } <span class="comment">// namespace tbb </span>
+<a name="l00046"></a>00046 
+<a name="l00047"></a>00047 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_aligned_space_H */</span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00441.html b/doc/html/a00441.html
new file mode 100644
index 0000000..0d06971
--- /dev/null
+++ b/doc/html/a00441.html
@@ -0,0 +1,452 @@
+<!DOCTYPE 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-2012 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="a00414.html#a8686246bb5d3664bd07563749970fef">00044</a> <span class="keyword">enum</span> <a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef">memory_semantics</a> {
+<a name="l00046"></a>00046     <a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>,
+<a name="l00048"></a>00048     <a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>,
+<a name="l00050"></a>00050     <a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>,
+<a name="l00052"></a>00052     <a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">relaxed</a>
+<a name="l00053"></a>00053 };
+<a name="l00054"></a>00054 
+<a name="l00056"></a>00056 <span class="keyword">namespace </span>internal {
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058 <span class="preprocessor">#if __TBB_ATTRIBUTE_ALIGNED_PRESENT</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#elif __TBB_DECLSPEC_ALIGN_PRESENT</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;</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">    #error Do not know syntax for forcing alignment.</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a>00066 <span class="keyword">template</span><size_t S>
+<a name="l00067"></a>00067 <span class="keyword">struct </span>atomic_rep;           <span class="comment">// Primary template declared, but never defined.</span>
+<a name="l00068"></a>00068 
+<a name="l00069"></a>00069 <span class="keyword">template</span><>
+<a name="l00070"></a>00070 <span class="keyword">struct </span>atomic_rep<1> {       <span class="comment">// Specialization</span>
+<a name="l00071"></a>00071     <span class="keyword">typedef</span> int8_t word;
+<a name="l00072"></a>00072     int8_t value;
+<a name="l00073"></a>00073 };
+<a name="l00074"></a>00074 <span class="keyword">template</span><>
+<a name="l00075"></a>00075 <span class="keyword">struct </span>atomic_rep<2> {       <span class="comment">// Specialization</span>
+<a name="l00076"></a>00076     <span class="keyword">typedef</span> int16_t word;
+<a name="l00077"></a>00077     __TBB_DECL_ATOMIC_FIELD(int16_t,value,2)
+<a name="l00078"></a>00078 };
+<a name="l00079"></a>00079 <span class="keyword">template</span><>
+<a name="l00080"></a>00080 <span class="keyword">struct </span>atomic_rep<4> {       <span class="comment">// Specialization</span>
+<a name="l00081"></a>00081 <span class="preprocessor">#if _MSC_VER && !_WIN64</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span>    <span class="comment">// Work-around that avoids spurious /Wp64 warnings</span>
+<a name="l00083"></a>00083     <span class="keyword">typedef</span> intptr_t word;
+<a name="l00084"></a>00084 <span class="preprocessor">#else</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>    <span class="keyword">typedef</span> int32_t word;
+<a name="l00086"></a>00086 <span class="preprocessor">#endif</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span>    __TBB_DECL_ATOMIC_FIELD(int32_t,value,4)
+<a name="l00088"></a>00088 };
+<a name="l00089"></a>00089 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="keyword">template</span><>
+<a name="l00091"></a>00091 <span class="keyword">struct </span>atomic_rep<8> {       <span class="comment">// Specialization</span>
+<a name="l00092"></a>00092     <span class="keyword">typedef</span> int64_t word;
+<a name="l00093"></a>00093     __TBB_DECL_ATOMIC_FIELD(int64_t,value,8)
+<a name="l00094"></a>00094 };
+<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span>
+<a name="l00097"></a>00097 <span class="keyword">template</span><size_t Size, memory_semantics M>
+<a name="l00098"></a>00098 <span class="keyword">struct </span>atomic_traits;        <span class="comment">// Primary template declared, but not defined.</span>
+<a name="l00099"></a>00099 
+<a name="l00100"></a>00100 <span class="preprocessor">#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M)                                                         \</span>
+<a name="l00101"></a>00101 <span class="preprocessor">    template<> struct atomic_traits<S,M> {                                                               \</span>
+<a name="l00102"></a>00102 <span class="preprocessor">        typedef atomic_rep<S>::word word;                                                                \</span>
+<a name="l00103"></a>00103 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) { \</span>
+<a name="l00104"></a>00104 <span class="preprocessor">            return __TBB_machine_cmpswp##S##M(location,new_value,comparand);                             \</span>
+<a name="l00105"></a>00105 <span class="preprocessor">        }                                                                                                \</span>
+<a name="l00106"></a>00106 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) {                       \</span>
+<a name="l00107"></a>00107 <span class="preprocessor">            return __TBB_machine_fetchadd##S##M(location,addend);                                        \</span>
+<a name="l00108"></a>00108 <span class="preprocessor">        }                                                                                                \</span>
+<a name="l00109"></a>00109 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {                      \</span>
+<a name="l00110"></a>00110 <span class="preprocessor">            return __TBB_machine_fetchstore##S##M(location,value);                                       \</span>
+<a name="l00111"></a>00111 <span class="preprocessor">        }                                                                                                \</span>
+<a name="l00112"></a>00112 <span class="preprocessor">    };</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span>
+<a name="l00114"></a>00114 <span class="preprocessor">#define __TBB_DECL_ATOMIC_PRIMITIVES(S)                                                                  \</span>
+<a name="l00115"></a>00115 <span class="preprocessor">    template<memory_semantics M>                                                                         \</span>
+<a name="l00116"></a>00116 <span class="preprocessor">    struct atomic_traits<S,M> {                                                                          \</span>
+<a name="l00117"></a>00117 <span class="preprocessor">        typedef atomic_rep<S>::word word;                                                                \</span>
+<a name="l00118"></a>00118 <span class="preprocessor">        inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) { \</span>
+<a name="l00119"></a>00119 <span class="preprocessor">            return __TBB_machine_cmpswp##S(location,new_value,comparand);                                \</span>
+<a name="l00120"></a>00120 <span class="preprocessor">        }                                                                                                \</span>
+<a name="l00121"></a>00121 <span class="preprocessor">        inline static word fetch_and_add( volatile void* location, word addend ) {                       \</span>
+<a name="l00122"></a>00122 <span class="preprocessor">            return __TBB_machine_fetchadd##S(location,addend);                                           \</span>
+<a name="l00123"></a>00123 <span class="preprocessor">        }                                                                                                \</span>
+<a name="l00124"></a>00124 <span class="preprocessor">        inline static word fetch_and_store( volatile void* location, word value ) {                      \</span>
+<a name="l00125"></a>00125 <span class="preprocessor">            return __TBB_machine_fetchstore##S(location,value);                                          \</span>
+<a name="l00126"></a>00126 <span class="preprocessor">        }                                                                                                \</span>
+<a name="l00127"></a>00127 <span class="preprocessor">    };</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>
+<a name="l00129"></a>00129 <span class="keyword">template</span><memory_semantics M>
+<a name="l00130"></a>00130 <span class="keyword">struct </span>atomic_load_store_traits;    <span class="comment">// Primary template declaration</span>
+<a name="l00131"></a>00131 
+<a name="l00132"></a>00132 <span class="preprocessor">#define __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(M)                      \</span>
+<a name="l00133"></a>00133 <span class="preprocessor">    template<> struct atomic_load_store_traits<M> {                     \</span>
+<a name="l00134"></a>00134 <span class="preprocessor">        template <typename T>                                           \</span>
+<a name="l00135"></a>00135 <span class="preprocessor">        inline static T load( const volatile T& location ) {            \</span>
+<a name="l00136"></a>00136 <span class="preprocessor">            return __TBB_load_##M( location );                          \</span>
+<a name="l00137"></a>00137 <span class="preprocessor">        }                                                               \</span>
+<a name="l00138"></a>00138 <span class="preprocessor">        template <typename T>                                           \</span>
+<a name="l00139"></a>00139 <span class="preprocessor">        inline static void store( volatile T& location, T value ) {     \</span>
+<a name="l00140"></a>00140 <span class="preprocessor">            __TBB_store_##M( location, value );                         \</span>
+<a name="l00141"></a>00141 <span class="preprocessor">        }                                                               \</span>
+<a name="l00142"></a>00142 <span class="preprocessor">    }</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span>
+<a name="l00144"></a>00144 <span class="preprocessor">#if __TBB_USE_FENCED_ATOMICS</span>
+<a name="l00145"></a>00145 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>)
+<a name="l00146"></a>00146 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>)
+<a name="l00147"></a>00147 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>)
+<a name="l00148"></a>00148 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00149"></a>00149 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00150"></a>00150 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00151"></a>00151 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00152"></a>00152 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00153"></a>00153 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00154"></a>00154 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">relaxed</a>)
+<a name="l00155"></a>00155 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">relaxed</a>)
+<a name="l00156"></a>00156 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">relaxed</a>)
+<a name="l00157"></a>00157 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
+<a name="l00158"></a>00158 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>)
+<a name="l00159"></a>00159 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>)
+<a name="l00160"></a>00160 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>)
+<a name="l00161"></a>00161 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,relaxed)
+<a name="l00162"></a>00162 <span class="preprocessor">#endif</span>
+<a name="l00163"></a>00163 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !__TBB_USE_FENCED_ATOMICS */</span>
+<a name="l00164"></a>00164 __TBB_DECL_ATOMIC_PRIMITIVES(1)
+<a name="l00165"></a>00165 __TBB_DECL_ATOMIC_PRIMITIVES(2)
+<a name="l00166"></a>00166 __TBB_DECL_ATOMIC_PRIMITIVES(4)
+<a name="l00167"></a>00167 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
+<a name="l00168"></a>00168 <span class="preprocessor"></span>__TBB_DECL_ATOMIC_PRIMITIVES(8)
+<a name="l00169"></a>00169 <span class="preprocessor">#endif</span>
+<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__TBB_USE_FENCED_ATOMICS */</span>
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172 __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">full_fence</a>);
+<a name="l00173"></a>00173 __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>);
+<a name="l00174"></a>00174 __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(<a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>);
+<a name="l00175"></a>00175 __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(relaxed);
+<a name="l00176"></a>00176 
+<a name="l00178"></a>00178 
+<a name="l00180"></a>00180 <span class="preprocessor">#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span>
+<a name="l00183"></a>00183 
+<a name="l00185"></a>00185 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00186"></a>00186 <span class="keyword">struct </span>atomic_impl {
+<a name="l00187"></a>00187 <span class="keyword">protected</span>:
+<a name="l00188"></a>00188     atomic_rep<sizeof(T)> rep;
+<a name="l00189"></a>00189 <span class="keyword">private</span>:
+<a name="l00191"></a>00191     <span class="keyword">union </span>converter {
+<a name="l00192"></a>00192         T value;
+<a name="l00193"></a>00193         <span class="keyword">typename</span> atomic_rep<sizeof(T)>::word bits;
+<a name="l00194"></a>00194     };
+<a name="l00195"></a>00195 <span class="keyword">public</span>:
+<a name="l00196"></a>00196     <span class="keyword">typedef</span> T value_type;
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198     <span class="keyword">template</span><memory_semantics M>
+<a name="l00199"></a>00199     value_type fetch_and_store( value_type value ) {
+<a name="l00200"></a>00200         converter u, w;
+<a name="l00201"></a>00201         u.value = value;
+<a name="l00202"></a>00202         w.bits = internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&rep.value,u.bits);
+<a name="l00203"></a>00203         <span class="keywordflow">return</span> w.value;
+<a name="l00204"></a>00204     }
+<a name="l00205"></a>00205 
+<a name="l00206"></a>00206     value_type fetch_and_store( value_type value ) {
+<a name="l00207"></a>00207         <span class="keywordflow">return</span> fetch_and_store<full_fence>(value);
+<a name="l00208"></a>00208     }
+<a name="l00209"></a>00209 
+<a name="l00210"></a>00210     <span class="keyword">template</span><memory_semantics M>
+<a name="l00211"></a>00211     value_type compare_and_swap( value_type value, value_type comparand ) {
+<a name="l00212"></a>00212         converter u, v, w;
+<a name="l00213"></a>00213         u.value = value;
+<a name="l00214"></a>00214         v.value = comparand;
+<a name="l00215"></a>00215         w.bits = internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&rep.value,u.bits,v.bits);
+<a name="l00216"></a>00216         <span class="keywordflow">return</span> w.value;
+<a name="l00217"></a>00217     }
+<a name="l00218"></a>00218 
+<a name="l00219"></a>00219     value_type compare_and_swap( value_type value, value_type comparand ) {
+<a name="l00220"></a>00220         <span class="keywordflow">return</span> compare_and_swap<full_fence>(value,comparand);
+<a name="l00221"></a>00221     }
+<a name="l00222"></a>00222 
+<a name="l00223"></a>00223     operator value_type()<span class="keyword"> const volatile </span>{                <span class="comment">// volatile qualifier here for backwards compatibility</span>
+<a name="l00224"></a>00224         converter w;
+<a name="l00225"></a>00225         w.bits = __TBB_load_with_acquire( rep.value );
+<a name="l00226"></a>00226         <span class="keywordflow">return</span> w.value;
+<a name="l00227"></a>00227     }
+<a name="l00228"></a>00228 
+<a name="l00229"></a>00229     <span class="keyword">template</span><memory_semantics M>
+<a name="l00230"></a>00230     value_type load ()<span class="keyword"> const </span>{
+<a name="l00231"></a>00231         converter u;
+<a name="l00232"></a>00232         u.bits = internal::atomic_load_store_traits<M>::load( rep.value );
+<a name="l00233"></a>00233         <span class="keywordflow">return</span> u.value;
+<a name="l00234"></a>00234     }
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236     value_type load ()<span class="keyword"> const </span>{
+<a name="l00237"></a>00237         <span class="keywordflow">return</span> load<acquire>();
+<a name="l00238"></a>00238     }
+<a name="l00239"></a>00239 
+<a name="l00240"></a>00240     <span class="keyword">template</span><memory_semantics M>
+<a name="l00241"></a>00241     <span class="keywordtype">void</span> store ( value_type value ) {
+<a name="l00242"></a>00242         converter u;
+<a name="l00243"></a>00243         u.value = value;
+<a name="l00244"></a>00244         internal::atomic_load_store_traits<M>::store( rep.value, u.bits );
+<a name="l00245"></a>00245     }
+<a name="l00246"></a>00246 
+<a name="l00247"></a>00247     <span class="keywordtype">void</span> store ( value_type value ) {
+<a name="l00248"></a>00248         store<release>( value );
+<a name="l00249"></a>00249     }
+<a name="l00250"></a>00250 
+<a name="l00251"></a>00251 <span class="keyword">protected</span>:
+<a name="l00252"></a>00252     value_type store_with_release( value_type rhs ) {
+<a name="l00253"></a>00253         converter u;
+<a name="l00254"></a>00254         u.value = rhs;
+<a name="l00255"></a>00255         __TBB_store_with_release(rep.value,u.bits);
+<a name="l00256"></a>00256         <span class="keywordflow">return</span> rhs;
+<a name="l00257"></a>00257     }
+<a name="l00258"></a>00258 };
+<a name="l00259"></a>00259 
+<a name="l00261"></a>00261 
+<a name="l00264"></a>00264 <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="l00265"></a>00265 <span class="keyword">struct </span>atomic_impl_with_arithmetic: atomic_impl<I> {
+<a name="l00266"></a>00266 <span class="keyword">public</span>:
+<a name="l00267"></a>00267     <span class="keyword">typedef</span> I value_type;
+<a name="l00268"></a>00268 
+<a name="l00269"></a>00269     <span class="keyword">template</span><memory_semantics M>
+<a name="l00270"></a>00270     value_type fetch_and_add( D addend ) {
+<a name="l00271"></a>00271         <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="l00272"></a>00272     }
+<a name="l00273"></a>00273 
+<a name="l00274"></a>00274     value_type fetch_and_add( D addend ) {
+<a name="l00275"></a>00275         <span class="keywordflow">return</span> fetch_and_add<full_fence>(addend);
+<a name="l00276"></a>00276     }
+<a name="l00277"></a>00277 
+<a name="l00278"></a>00278     <span class="keyword">template</span><memory_semantics M>
+<a name="l00279"></a>00279     value_type fetch_and_increment() {
+<a name="l00280"></a>00280         <span class="keywordflow">return</span> fetch_and_add<M>(1);
+<a name="l00281"></a>00281     }
+<a name="l00282"></a>00282 
+<a name="l00283"></a>00283     value_type fetch_and_increment() {
+<a name="l00284"></a>00284         <span class="keywordflow">return</span> fetch_and_add(1);
+<a name="l00285"></a>00285     }
+<a name="l00286"></a>00286 
+<a name="l00287"></a>00287     <span class="keyword">template</span><memory_semantics M>
+<a name="l00288"></a>00288     value_type fetch_and_decrement() {
+<a name="l00289"></a>00289         <span class="keywordflow">return</span> fetch_and_add<M>(__TBB_MINUS_ONE(D));
+<a name="l00290"></a>00290     }
+<a name="l00291"></a>00291 
+<a name="l00292"></a>00292     value_type fetch_and_decrement() {
+<a name="l00293"></a>00293         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
+<a name="l00294"></a>00294     }
+<a name="l00295"></a>00295 
+<a name="l00296"></a>00296 <span class="keyword">public</span>:
+<a name="l00297"></a>00297     value_type operator+=( D value ) {
+<a name="l00298"></a>00298         <span class="keywordflow">return</span> fetch_and_add(value)+value;
+<a name="l00299"></a>00299     }
+<a name="l00300"></a>00300 
+<a name="l00301"></a>00301     value_type operator-=( D value ) {
+<a name="l00302"></a>00302         <span class="comment">// Additive inverse of value computed using binary minus,</span>
+<a name="l00303"></a>00303         <span class="comment">// instead of unary minus, for sake of avoiding compiler warnings.</span>
+<a name="l00304"></a>00304         <span class="keywordflow">return</span> operator+=(D(0)-value);
+<a name="l00305"></a>00305     }
+<a name="l00306"></a>00306 
+<a name="l00307"></a>00307     value_type operator++() {
+<a name="l00308"></a>00308         <span class="keywordflow">return</span> fetch_and_add(1)+1;
+<a name="l00309"></a>00309     }
+<a name="l00310"></a>00310 
+<a name="l00311"></a>00311     value_type operator--() {
+<a name="l00312"></a>00312         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D))-1;
+<a name="l00313"></a>00313     }
+<a name="l00314"></a>00314 
+<a name="l00315"></a>00315     value_type operator++(<span class="keywordtype">int</span>) {
+<a name="l00316"></a>00316         <span class="keywordflow">return</span> fetch_and_add(1);
+<a name="l00317"></a>00317     }
+<a name="l00318"></a>00318 
+<a name="l00319"></a>00319     value_type operator--(<span class="keywordtype">int</span>) {
+<a name="l00320"></a>00320         <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
+<a name="l00321"></a>00321     }
+<a name="l00322"></a>00322 };
+<a name="l00323"></a>00323 
+<a name="l00324"></a>00324 } <span class="comment">/* Internal */</span>
+<a name="l00326"></a>00326 
+<a name="l00328"></a>00328 
+<a name="l00330"></a>00330 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00331"></a><a class="code" href="a00254.html">00331</a> <span class="keyword">struct </span><a class="code" href="a00254.html">atomic</a>: internal::atomic_impl<T> {
+<a name="l00332"></a>00332     T operator=( T rhs ) {
+<a name="l00333"></a>00333         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00334"></a>00334         <span class="keywordflow">return</span> this->store_with_release(rhs);
+<a name="l00335"></a>00335     }
+<a name="l00336"></a>00336     <a class="code" href="a00254.html">atomic<T></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00254.html">atomic<T></a>& rhs ) {this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
+<a name="l00337"></a>00337 };
+<a name="l00338"></a>00338 
+<a name="l00339"></a>00339 <span class="preprocessor">#define __TBB_DECL_ATOMIC(T) \</span>
+<a name="l00340"></a>00340 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
+<a name="l00341"></a>00341 <span class="preprocessor">        T operator=( T rhs ) {return store_with_release(rhs);}  \</span>
+<a name="l00342"></a>00342 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
+<a name="l00343"></a>00343 <span class="preprocessor">    };</span>
+<a name="l00344"></a>00344 <span class="preprocessor"></span>
+<a name="l00345"></a>00345 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
+<a name="l00346"></a>00346 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(__TBB_LONG_LONG)
+<a name="l00347"></a>00347 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> __TBB_LONG_LONG)
+<a name="l00348"></a>00348 <span class="preprocessor">#else</span>
+<a name="l00349"></a>00349 <span class="preprocessor"></span><span class="comment">// test_atomic will verify that sizeof(long long)==8</span>
+<a name="l00350"></a>00350 <span class="preprocessor">#endif</span>
+<a name="l00351"></a>00351 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">long</span>)
+<a name="l00352"></a>00352 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)
+<a name="l00353"></a>00353 
+<a name="l00354"></a>00354 <span class="preprocessor">#if _MSC_VER && !_WIN64</span>
+<a name="l00355"></a>00355 <span class="preprocessor"></span><span class="comment">/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option.</span>
+<a name="l00356"></a>00356 <span class="comment">   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T)</span>
+<a name="l00357"></a>00357 <span class="comment">   with an operator=(U) that explicitly converts the U to a T.  Types T and U should be</span>
+<a name="l00358"></a>00358 <span class="comment">   type synonyms on the platform.  Type U should be the wider variant of T from the</span>
+<a name="l00359"></a>00359 <span class="comment">   perspective of /Wp64. */</span>
+<a name="l00360"></a>00360 <span class="preprocessor">#define __TBB_DECL_ATOMIC_ALT(T,U) \</span>
+<a name="l00361"></a>00361 <span class="preprocessor">    template<> struct atomic<T>: internal::atomic_impl_with_arithmetic<T,T,char> {  \</span>
+<a name="l00362"></a>00362 <span class="preprocessor">        T operator=( U rhs ) {return store_with_release(T(rhs));}  \</span>
+<a name="l00363"></a>00363 <span class="preprocessor">        atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;}  \</span>
+<a name="l00364"></a>00364 <span class="preprocessor">    };</span>
+<a name="l00365"></a>00365 <span class="preprocessor"></span><a class="code" href="a00414.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a>(<span class="keywordtype">unsigned</span>,size_t)
+<a name="l00366"></a><a class="code" href="a00414.html#ad165cf61abbe349d413df2589679add">00366</a> <a class="code" href="a00414.html#ad165cf61abbe349d413df2589679add">__TBB_DECL_ATOMIC_ALT</a>(<span class="keywordtype">int</span>,ptrdiff_t)
+<a name="l00367"></a>00367 <span class="preprocessor">#else</span>
+<a name="l00368"></a>00368 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span>)
+<a name="l00369"></a>00369 __TBB_DECL_ATOMIC(<span class="keywordtype">int</span>)
+<a name="l00370"></a>00370 <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER && !_WIN64 */</span>
+<a name="l00371"></a>00371 
+<a name="l00372"></a>00372 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)
+<a name="l00373"></a>00373 __TBB_DECL_ATOMIC(<span class="keywordtype">short</span>)
+<a name="l00374"></a>00374 __TBB_DECL_ATOMIC(<span class="keywordtype">char</span>)
+<a name="l00375"></a>00375 __TBB_DECL_ATOMIC(<span class="keywordtype">signed</span> <span class="keywordtype">char</span>)
+<a name="l00376"></a>00376 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)
+<a name="l00377"></a>00377 
+<a name="l00378"></a>00378 <span class="preprocessor">#if !_MSC_VER || defined(_NATIVE_WCHAR_T_DEFINED)</span>
+<a name="l00379"></a>00379 <span class="preprocessor"></span>__TBB_DECL_ATOMIC(<span class="keywordtype">wchar_t</span>)
+<a name="l00380"></a>00380 <span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */</span>
+<a name="l00381"></a>00381 
+<a name="l00383"></a>00383 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="a00254.html">atomic</a><T*>: internal::atomic_impl_with_arithmetic<T*,ptrdiff_t,T> {
+<a name="l00384"></a>00384     T* operator=( T* rhs ) {
+<a name="l00385"></a>00385         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00386"></a>00386         <span class="keywordflow">return</span> this->store_with_release(rhs);
+<a name="l00387"></a>00387     }
+<a name="l00388"></a>00388     <a class="code" href="a00254.html">atomic<T*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00254.html">atomic<T*></a>& rhs ) {
+<a name="l00389"></a>00389         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00390"></a>00390     }
+<a name="l00391"></a>00391     T* operator->()<span class="keyword"> const </span>{
+<a name="l00392"></a>00392         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
+<a name="l00393"></a>00393     }
+<a name="l00394"></a>00394 };
+<a name="l00395"></a>00395 
+<a name="l00397"></a><a class="code" href="a00255.html">00397</a> <span class="keyword">template</span><> <span class="keyword">struct </span><a class="code" href="a00254.html">atomic</a><void*>: internal::atomic_impl<void*> {
+<a name="l00398"></a>00398     <span class="keywordtype">void</span>* operator=( <span class="keywordtype">void</span>* rhs ) {
+<a name="l00399"></a>00399         <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+<a name="l00400"></a>00400         <span class="keywordflow">return</span> this->store_with_release(rhs);
+<a name="l00401"></a>00401     }
+<a name="l00402"></a>00402     <a class="code" href="a00254.html">atomic<void*></a>& operator=( <span class="keyword">const</span> <a class="code" href="a00254.html">atomic<void*></a>& rhs ) {
+<a name="l00403"></a>00403         this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00404"></a>00404     }
+<a name="l00405"></a>00405 };
+<a name="l00406"></a>00406 
+<a name="l00407"></a>00407 <span class="comment">// Helpers to workaround ugly syntax of calling template member function of a</span>
+<a name="l00408"></a>00408 <span class="comment">// template class with template argument dependent on template parameters.</span>
+<a name="l00409"></a>00409 
+<a name="l00410"></a>00410 <span class="keyword">template</span> <memory_semantics M, <span class="keyword">typename</span> T>
+<a name="l00411"></a>00411 T load ( <span class="keyword">const</span> <a class="code" href="a00254.html">atomic<T></a>& a ) { <span class="keywordflow">return</span> a.template load<M>(); }
+<a name="l00412"></a>00412 
+<a name="l00413"></a>00413 <span class="keyword">template</span> <memory_semantics M, <span class="keyword">typename</span> T>
+<a name="l00414"></a>00414 <span class="keywordtype">void</span> store ( atomic<T>& a, T value ) { <span class="keywordflow">return</span> a.template store<M>(value); }
+<a name="l00415"></a>00415 
+<a name="l00416"></a>00416 <span class="keyword">namespace </span>interface6{
+<a name="l00418"></a>00418 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00419"></a>00419 atomic<T> make_atomic(T t) {
+<a name="l00420"></a>00420     atomic<T> a;
+<a name="l00421"></a>00421     store<relaxed>(a,t);
+<a name="l00422"></a>00422     <span class="keywordflow">return</span> a;
+<a name="l00423"></a>00423 }
+<a name="l00424"></a>00424 }
+<a name="l00425"></a>00425 <span class="keyword">using</span> interface6::make_atomic;
+<a name="l00426"></a>00426 
+<a name="l00427"></a>00427 <span class="keyword">namespace </span>internal {
+<a name="l00428"></a>00428 
+<a name="l00429"></a>00429 <span class="comment">// only to aid in the gradual conversion of ordinary variables to proper atomics</span>
+<a name="l00430"></a>00430 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00431"></a>00431 <span class="keyword">inline</span> atomic<T>& as_atomic( T& t ) {
+<a name="l00432"></a>00432     <span class="keywordflow">return</span> (atomic<T>&)t;
+<a name="l00433"></a>00433 }
+<a name="l00434"></a>00434 } <span class="comment">// namespace tbb::internal</span>
+<a name="l00435"></a>00435 
+<a name="l00436"></a>00436 } <span class="comment">// namespace tbb</span>
+<a name="l00437"></a>00437 
+<a name="l00438"></a>00438 <span class="preprocessor">#if _MSC_VER && !__INTEL_COMPILER</span>
+<a name="l00439"></a>00439 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00440"></a>00440 <span class="preprocessor"></span><span class="preprocessor">#endif // warnings 4244, 4267 are back</span>
+<a name="l00441"></a>00441 <span class="preprocessor"></span>
+<a name="l00442"></a>00442 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_atomic_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00443.html b/doc/html/a00443.html
deleted file mode 100644
index 491e645..0000000
--- a/doc/html/a00443.html
+++ /dev/null
@@ -1,927 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>concurrent_vector.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<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_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-2011 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_vector_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_vector_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_exception.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "blocked_range.h"</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_machine.h"</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <new></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cstring></span>   <span class="comment">// for memset()</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
-<a name="l00036"></a>00036 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <algorithm></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <iterator></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#if _MSC_VER==1500 && !__INTEL_COMPILER</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span>    <span class="comment">// VS2008/VC9 seems to have an issue; limits pull in math.h</span>
-<a name="l00049"></a>00049 <span class="preprocessor">    #pragma warning( push )</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( disable: 4985 )</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#include <limits></span> <span class="comment">/* std::numeric_limits */</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#if _MSC_VER==1500 && !__INTEL_COMPILER</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( pop )</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warnings in /Wp64 mode</span>
-<a name="l00059"></a>00059 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4267)</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span>
-<a name="l00063"></a>00063 <span class="keyword">namespace </span>tbb {
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> >
-<a name="l00066"></a>00066 <span class="keyword">class </span>concurrent_vector;
-<a name="l00067"></a>00067 
-<a name="l00069"></a>00069 <span class="keyword">namespace </span>internal {
-<a name="l00070"></a>00070 
-<a name="l00072"></a>00072     <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="l00073"></a>00073 
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076     <span class="keyword">class </span>concurrent_vector_base_v3 {
-<a name="l00077"></a>00077     <span class="keyword">protected</span>:
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079         <span class="comment">// Basic types declarations</span>
-<a name="l00080"></a>00080         <span class="keyword">typedef</span> size_t segment_index_t;
-<a name="l00081"></a>00081         <span class="keyword">typedef</span> size_t size_type;
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083         <span class="comment">// Using enumerations due to Mac linking problems of static const variables</span>
-<a name="l00084"></a>00084         <span class="keyword">enum</span> {
-<a name="l00085"></a>00085             <span class="comment">// Size constants</span>
-<a name="l00086"></a>00086             default_initial_segments = 1, <span class="comment">// 2 initial items</span>
-<a name="l00088"></a>00088 <span class="comment"></span>            pointers_per_short_table = 3, <span class="comment">// to fit into 8 words of entire structure</span>
-<a name="l00089"></a>00089             pointers_per_long_table = <span class="keyword">sizeof</span>(segment_index_t) * 8 <span class="comment">// one segment per bit</span>
-<a name="l00090"></a>00090         };
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092         <span class="comment">// Segment pointer. Can be zero-initialized</span>
-<a name="l00093"></a>00093         <span class="keyword">struct </span>segment_t {
-<a name="l00094"></a>00094             <span class="keywordtype">void</span>* array;
-<a name="l00095"></a>00095 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>            ~segment_t() {
-<a name="l00097"></a>00097                 __TBB_ASSERT( array <= internal::vector_allocation_error_flag, <span class="stringliteral">"should have been freed by clear"</span> );
-<a name="l00098"></a>00098             }
-<a name="l00099"></a>00099 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00100"></a>00100         };
-<a name="l00101"></a>00101  
-<a name="l00102"></a>00102         <span class="comment">// Data fields</span>
-<a name="l00103"></a>00103 
-<a name="l00105"></a>00105         <span class="keywordtype">void</span>* (*vector_allocator_ptr)(concurrent_vector_base_v3 &, size_t);
-<a name="l00106"></a>00106 
-<a name="l00108"></a>00108         atomic<size_type> my_first_block;
-<a name="l00109"></a>00109 
-<a name="l00111"></a>00111         atomic<size_type> my_early_size;
-<a name="l00112"></a>00112 
-<a name="l00114"></a>00114         atomic<segment_t*> my_segment;
-<a name="l00115"></a>00115 
-<a name="l00117"></a>00117         segment_t my_storage[pointers_per_short_table];
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119         <span class="comment">// Methods</span>
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121         concurrent_vector_base_v3() {
-<a name="l00122"></a>00122             my_early_size = 0;
-<a name="l00123"></a>00123             my_first_block = 0; <span class="comment">// here is not default_initial_segments</span>
-<a name="l00124"></a>00124             <span class="keywordflow">for</span>( segment_index_t i = 0; i < pointers_per_short_table; i++)
-<a name="l00125"></a>00125                 my_storage[i].array = NULL;
-<a name="l00126"></a>00126             my_segment = my_storage;
-<a name="l00127"></a>00127         }
-<a name="l00128"></a>00128         __TBB_EXPORTED_METHOD ~concurrent_vector_base_v3();
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130         <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
-<a name="l00131"></a>00131             <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
-<a name="l00132"></a>00132         }
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134         <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
-<a name="l00135"></a>00135             <span class="keywordflow">return</span> (segment_index_t(1)<<k & ~segment_index_t(1));
-<a name="l00136"></a>00136         }
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138         <span class="keyword">static</span> <span class="keyword">inline</span> segment_index_t segment_base_index_of( segment_index_t &index ) {
-<a name="l00139"></a>00139             segment_index_t k = segment_index_of( index );
-<a name="l00140"></a>00140             index -= segment_base(k);
-<a name="l00141"></a>00141             <span class="keywordflow">return</span> k;
-<a name="l00142"></a>00142         }
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144         <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
-<a name="l00145"></a>00145             <span class="keywordflow">return</span> segment_index_t(1)<<k; <span class="comment">// fake value for k==0</span>
-<a name="l00146"></a>00146         }
-<a name="l00147"></a>00147 
-<a name="l00149"></a>00149         <span class="keyword">typedef</span> void (__TBB_EXPORTED_FUNC *internal_array_op1)(<span class="keywordtype">void</span>* begin, size_type n );
-<a name="l00150"></a>00150 
-<a name="l00152"></a>00152         <span class="keyword">typedef</span> void (__TBB_EXPORTED_FUNC *internal_array_op2)(<span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
-<a name="l00153"></a>00153 
-<a name="l00155"></a>00155         <span class="keyword">struct </span>internal_segments_table {
-<a name="l00156"></a>00156             segment_index_t first_block;
-<a name="l00157"></a>00157             <span class="keywordtype">void</span>* table[pointers_per_long_table];
-<a name="l00158"></a>00158         };
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );
-<a name="l00161"></a>00161         size_type __TBB_EXPORTED_METHOD internal_capacity() <span class="keyword">const</span>;
-<a name="l00162"></a>00162         <span class="keywordtype">void</span> internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
-<a name="l00163"></a>00163         size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
-<a name="l00164"></a>00164         <span class="keywordtype">void</span>* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );
-<a name="l00165"></a>00165         segment_index_t __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy );
-<a name="l00166"></a>00166         <span class="keywordtype">void</span>* __TBB_EXPORTED_METHOD internal_compact( size_type element_size, <span class="keywordtype">void</span> *table, internal_array_op1 destroy, internal_array_op2 copy );
-<a name="l00167"></a>00167         <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="l00168"></a>00168         <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="l00169"></a>00169                               internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
-<a name="l00171"></a>00171         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception(size_type) <span class="keyword">const</span>;
-<a name="l00172"></a>00172         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174         <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="l00175"></a>00175                                                     internal_array_op1 destroy, internal_array_op2 init );
-<a name="l00176"></a>00176         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="l00177"></a>00177 
-<a name="l00179"></a>00179         <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="l00180"></a>00180 <span class="keyword">private</span>:
-<a name="l00182"></a>00182         <span class="keyword">class </span>helper;
-<a name="l00183"></a>00183         <span class="keyword">friend</span> <span class="keyword">class </span>helper;
-<a name="l00184"></a>00184     };
-<a name="l00185"></a>00185     
-<a name="l00186"></a>00186     <span class="keyword">typedef</span> concurrent_vector_base_v3 concurrent_vector_base;
-<a name="l00187"></a>00187 
-<a name="l00189"></a>00189 
-<a name="l00191"></a>00191     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00192"></a>00192     <span class="keyword">class </span>vector_iterator 
-<a name="l00193"></a>00193     {
-<a name="l00195"></a>00195         Container* my_vector;
-<a name="l00196"></a>00196 
-<a name="l00198"></a>00198         size_t my_index;
-<a name="l00199"></a>00199 
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202         <span class="keyword">mutable</span> Value* my_item;
-<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>
-<a name="l00205"></a>00205         <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="l00206"></a>00206 
-<a name="l00207"></a>00207         <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="l00208"></a>00208         <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="l00209"></a>00209 
-<a name="l00210"></a>00210         <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="l00211"></a>00211         <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="l00212"></a>00212 
-<a name="l00213"></a>00213         <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="l00214"></a>00214         <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="l00215"></a>00215     
-<a name="l00216"></a>00216         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-<a name="l00217"></a>00217         <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
-<a name="l00220"></a>00220 <span class="preprocessor"></span>        <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00221"></a>00221         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00250.html">tbb::concurrent_vector</a>;
-<a name="l00222"></a>00222 <span class="preprocessor">#else</span>
-<a name="l00223"></a>00223 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
-<a name="l00224"></a>00224 <span class="preprocessor">#endif </span>
-<a name="l00225"></a>00225 <span class="preprocessor"></span>
-<a name="l00226"></a>00226         vector_iterator( <span class="keyword">const</span> Container& vector, size_t index, <span class="keywordtype">void</span> *ptr = 0 ) : 
-<a name="l00227"></a>00227             my_vector(const_cast<Container*>(&vector)), 
-<a name="l00228"></a>00228             my_index(index), 
-<a name="l00229"></a>00229             my_item(static_cast<Value*>(ptr))
-<a name="l00230"></a>00230         {}
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232     <span class="keyword">public</span>:
-<a name="l00234"></a>00234         vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236         vector_iterator( <span class="keyword">const</span> vector_iterator<Container,typename Container::value_type>& other ) :
-<a name="l00237"></a>00237             my_vector(other.my_vector),
-<a name="l00238"></a>00238             my_index(other.my_index),
-<a name="l00239"></a>00239             my_item(other.my_item)
-<a name="l00240"></a>00240         {}
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242         vector_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00243"></a>00243             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index+offset );
-<a name="l00244"></a>00244         }
-<a name="l00245"></a>00245         vector_iterator &operator+=( ptrdiff_t offset ) {
-<a name="l00246"></a>00246             my_index+=offset;
-<a name="l00247"></a>00247             my_item = NULL;
-<a name="l00248"></a>00248             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00249"></a>00249         }
-<a name="l00250"></a>00250         vector_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00251"></a>00251             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index-offset );
-<a name="l00252"></a>00252         }
-<a name="l00253"></a>00253         vector_iterator &operator-=( ptrdiff_t offset ) {
-<a name="l00254"></a>00254             my_index-=offset;
-<a name="l00255"></a>00255             my_item = NULL;
-<a name="l00256"></a>00256             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00257"></a>00257         }
-<a name="l00258"></a>00258         Value& operator*()<span class="keyword"> const </span>{
-<a name="l00259"></a>00259             Value* item = my_item;
-<a name="l00260"></a>00260             <span class="keywordflow">if</span>( !item ) {
-<a name="l00261"></a>00261                 item = my_item = &my_vector->internal_subscript(my_index);
-<a name="l00262"></a>00262             }
-<a name="l00263"></a>00263             __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), <span class="stringliteral">"corrupt cache"</span> );
-<a name="l00264"></a>00264             <span class="keywordflow">return</span> *item;
-<a name="l00265"></a>00265         }
-<a name="l00266"></a>00266         Value& <a class="code" href="a00250.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>( ptrdiff_t k )<span class="keyword"> const </span>{
-<a name="l00267"></a>00267             <span class="keywordflow">return</span> my_vector->internal_subscript(my_index+k);
-<a name="l00268"></a>00268         }
-<a name="l00269"></a>00269         Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00270"></a>00270 
-<a name="l00272"></a>00272         vector_iterator& operator++() {
-<a name="l00273"></a>00273             size_t k = ++my_index;
-<a name="l00274"></a>00274             <span class="keywordflow">if</span>( my_item ) {
-<a name="l00275"></a>00275                 <span class="comment">// Following test uses 2's-complement wizardry</span>
-<a name="l00276"></a>00276                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
-<a name="l00277"></a>00277                     <span class="comment">// k is a power of two that is at least k-2</span>
-<a name="l00278"></a>00278                     my_item= NULL;
-<a name="l00279"></a>00279                 } <span class="keywordflow">else</span> {
-<a name="l00280"></a>00280                     ++my_item;
-<a name="l00281"></a>00281                 }
-<a name="l00282"></a>00282             }
-<a name="l00283"></a>00283             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00284"></a>00284         }
-<a name="l00285"></a>00285 
-<a name="l00287"></a>00287         vector_iterator& operator--() {
-<a name="l00288"></a>00288             __TBB_ASSERT( my_index>0, <span class="stringliteral">"operator--() applied to iterator already at beginning of concurrent_vector"</span> ); 
-<a name="l00289"></a>00289             size_t k = my_index--;
-<a name="l00290"></a>00290             <span class="keywordflow">if</span>( my_item ) {
-<a name="l00291"></a>00291                 <span class="comment">// Following test uses 2's-complement wizardry</span>
-<a name="l00292"></a>00292                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
-<a name="l00293"></a>00293                     <span class="comment">// k is a power of two that is at least k-2  </span>
-<a name="l00294"></a>00294                     my_item= NULL;
-<a name="l00295"></a>00295                 } <span class="keywordflow">else</span> {
-<a name="l00296"></a>00296                     --my_item;
-<a name="l00297"></a>00297                 }
-<a name="l00298"></a>00298             }
-<a name="l00299"></a>00299             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00300"></a>00300         }
-<a name="l00301"></a>00301 
-<a name="l00303"></a>00303         vector_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00304"></a>00304             vector_iterator result = *<span class="keyword">this</span>;
-<a name="l00305"></a>00305             operator++();
-<a name="l00306"></a>00306             <span class="keywordflow">return</span> result;
-<a name="l00307"></a>00307         }
-<a name="l00308"></a>00308 
-<a name="l00310"></a>00310         vector_iterator operator--(<span class="keywordtype">int</span>) {
-<a name="l00311"></a>00311             vector_iterator result = *<span class="keyword">this</span>;
-<a name="l00312"></a>00312             operator--();
-<a name="l00313"></a>00313             <span class="keywordflow">return</span> result;
-<a name="l00314"></a>00314         }
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316         <span class="comment">// STL support</span>
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318         <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00319"></a>00319         <span class="keyword">typedef</span> Value value_type;
-<a name="l00320"></a>00320         <span class="keyword">typedef</span> Value* pointer;
-<a name="l00321"></a>00321         <span class="keyword">typedef</span> Value& reference;
-<a name="l00322"></a>00322         <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
-<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>
-<a name="l00326"></a>00326     vector_iterator<Container,T> operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator<Container,T>& v ) {
-<a name="l00327"></a>00327         <span class="keywordflow">return</span> vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );
-<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==( <span class="keyword">const</span> 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 && i.my_vector == j.my_vector;
-<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> !(i==j);
-<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<( const 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.my_index<j.my_index;
-<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>( <span class="keyword">const</span> 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     <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="l00352"></a>00352         <span class="keywordflow">return</span> !(i<j);
-<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> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00356"></a>00356     <span class="keywordtype">bool</span> operator<=( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-<a name="l00357"></a>00357         <span class="keywordflow">return</span> !(j<i);
-<a name="l00358"></a>00358     }
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360     <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="l00361"></a>00361     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="l00362"></a>00362         <span class="keywordflow">return</span> ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
-<a name="l00363"></a>00363     }
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00366"></a>00366     <span class="keyword">class </span>allocator_base {
-<a name="l00367"></a>00367     <span class="keyword">public</span>:
-<a name="l00368"></a>00368         <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template
-<a name="l00369"></a>00369             rebind<T>::other allocator_type;
-<a name="l00370"></a>00370         allocator_type my_allocator;
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372         allocator_base(<span class="keyword">const</span> allocator_type &a = allocator_type() ) : my_allocator(a) {}
-<a name="l00373"></a>00373     };
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375 } <span class="comment">// namespace internal</span>
-<a name="l00377"></a>00377 <span class="comment"></span>
-<a name="l00379"></a>00379 
-<a name="l00440"></a>00440 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00441"></a><a class="code" href="a00250.html">00441</a> <span class="keyword">class </span><a class="code" href="a00250.html">concurrent_vector</a>: <span class="keyword">protected</span> internal::allocator_base<T, A>,
-<a name="l00442"></a>00442                          <span class="keyword">private</span> internal::concurrent_vector_base {
-<a name="l00443"></a>00443 <span class="keyword">private</span>:
-<a name="l00444"></a>00444     <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00445"></a>00445     <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00233.html">blocked_range</a><I> {
-<a name="l00446"></a>00446     <span class="keyword">public</span>:
-<a name="l00447"></a>00447         <span class="keyword">typedef</span> T value_type;
-<a name="l00448"></a>00448         <span class="keyword">typedef</span> T& reference;
-<a name="l00449"></a>00449         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00450"></a>00450         <span class="keyword">typedef</span> I iterator;
-<a name="l00451"></a>00451         <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00452"></a>00452         generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : <a class="code" href="a00233.html">blocked_range<I></a>(begin_,end_,grainsize_) {} 
-<a name="l00453"></a>00453         template<typename U>
-<a name="l00454"></a>00454         generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00233.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
-<a name="l00455"></a>00455         generic_range_type( generic_range_type& r, <a class="code" href="a00309.html">split</a> ) : <a class="code" href="a00233.html">blocked_range<I></a>(r,<a class="code" href="a00309.html">split</a>()) {}
-<a name="l00456"></a>00456     };
-<a name="l00457"></a>00457 
-<a name="l00458"></a>00458     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-<a name="l00459"></a>00459     <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
-<a name="l00460"></a>00460 <span class="keyword">public</span>:
-<a name="l00461"></a>00461     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00462"></a>00462     <span class="comment">// STL compatible types</span>
-<a name="l00463"></a>00463     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00464"></a>00464     <span class="keyword">typedef</span> internal::concurrent_vector_base_v3::size_type size_type;
-<a name="l00465"></a>00465     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_base<T, A>::allocator_type allocator_type;
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467     <span class="keyword">typedef</span> T value_type;
-<a name="l00468"></a>00468     <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00469"></a>00469     <span class="keyword">typedef</span> T& reference;
-<a name="l00470"></a>00470     <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00471"></a>00471     <span class="keyword">typedef</span> T *pointer;
-<a name="l00472"></a>00472     <span class="keyword">typedef</span> <span class="keyword">const</span> T *const_pointer;
-<a name="l00473"></a>00473 
-<a name="l00474"></a>00474     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,T> iterator;
-<a name="l00475"></a>00475     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,const T> const_iterator;
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477 <span class="preprocessor">#if !defined(_MSC_VER) || _CPPLIB_VER>=300 </span>
-<a name="l00478"></a>00478 <span class="preprocessor"></span>    <span class="comment">// Assume ISO standard definition of std::reverse_iterator</span>
-<a name="l00479"></a>00479     <span class="keyword">typedef</span> std::reverse_iterator<iterator> reverse_iterator;
-<a name="l00480"></a>00480     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator> const_reverse_iterator;
-<a name="l00481"></a>00481 <span class="preprocessor">#else</span>
-<a name="l00482"></a>00482 <span class="preprocessor"></span>    <span class="comment">// Use non-standard std::reverse_iterator</span>
-<a name="l00483"></a>00483     <span class="keyword">typedef</span> std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;
-<a name="l00484"></a>00484     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
-<a name="l00485"></a>00485 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && (_MSC_VER<1300) */</span>
-<a name="l00486"></a>00486 
-<a name="l00487"></a>00487     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00488"></a>00488     <span class="comment">// Parallel algorithm support</span>
-<a name="l00489"></a>00489     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00490"></a>00490     <span class="keyword">typedef</span> generic_range_type<iterator> range_type;
-<a name="l00491"></a>00491     <span class="keyword">typedef</span> generic_range_type<const_iterator> const_range_type;
-<a name="l00492"></a>00492 
-<a name="l00493"></a>00493     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00494"></a>00494     <span class="comment">// STL compatible constructors & destructors</span>
-<a name="l00495"></a>00495     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00496"></a>00496 
-<a name="l00498"></a><a class="code" href="a00250.html#2c8ca9cabfcd30ad5943324c853664b5">00498</a>     <span class="keyword">explicit</span> <a class="code" href="a00250.html">concurrent_vector</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00499"></a>00499         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
-<a name="l00500"></a>00500     {
-<a name="l00501"></a>00501         vector_allocator_ptr = &internal_allocator;
-<a name="l00502"></a>00502     }
-<a name="l00503"></a>00503 
-<a name="l00505"></a><a class="code" href="a00250.html#dd8a200b99a8088435a37934b58fe335">00505</a>     <a class="code" href="a00250.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00250.html">concurrent_vector</a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
-<a name="l00506"></a>00506         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
-<a name="l00507"></a>00507     {
-<a name="l00508"></a>00508         vector_allocator_ptr = &internal_allocator;
-<a name="l00509"></a>00509         __TBB_TRY {
-<a name="l00510"></a>00510             internal_copy(vector, <span class="keyword">sizeof</span>(T), &copy_array);
-<a name="l00511"></a>00511         } __TBB_CATCH(...) {
-<a name="l00512"></a>00512             segment_t *table = my_segment;
-<a name="l00513"></a>00513             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00514"></a>00514             __TBB_RETHROW();
-<a name="l00515"></a>00515         }
-<a name="l00516"></a>00516     }
-<a name="l00517"></a>00517 
-<a name="l00519"></a>00519     <span class="keyword">template</span><<span class="keyword">class</span> M>
-<a name="l00520"></a><a class="code" href="a00250.html#64432f13f7b29bfe4acfb5568f34f3a8">00520</a>     <a class="code" href="a00250.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00250.html">concurrent_vector<T, M></a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
-<a name="l00521"></a>00521         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
-<a name="l00522"></a>00522     {
-<a name="l00523"></a>00523         vector_allocator_ptr = &internal_allocator;
-<a name="l00524"></a>00524         __TBB_TRY {
-<a name="l00525"></a>00525             internal_copy(vector.<a class="code" href="a00250.html#bb5ae659871478f1f5c68039e1273e12">internal_vector_base</a>(), <span class="keyword">sizeof</span>(T), &copy_array);
-<a name="l00526"></a>00526         } __TBB_CATCH(...) {
-<a name="l00527"></a>00527             segment_t *table = my_segment;
-<a name="l00528"></a>00528             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00529"></a>00529             __TBB_RETHROW();
-<a name="l00530"></a>00530         }
-<a name="l00531"></a>00531     }
-<a name="l00532"></a>00532 
-<a name="l00534"></a><a class="code" href="a00250.html#2a2e261dfe1cab3f73f7b1a94137cfca">00534</a>     <span class="keyword">explicit</span> <a class="code" href="a00250.html">concurrent_vector</a>(size_type n)
-<a name="l00535"></a>00535     {
-<a name="l00536"></a>00536         vector_allocator_ptr = &internal_allocator;
-<a name="l00537"></a>00537         __TBB_TRY {
-<a name="l00538"></a>00538             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &destroy_array, &initialize_array );
-<a name="l00539"></a>00539         } __TBB_CATCH(...) {
-<a name="l00540"></a>00540             segment_t *table = my_segment;
-<a name="l00541"></a>00541             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00542"></a>00542             __TBB_RETHROW();
-<a name="l00543"></a>00543         }
-<a name="l00544"></a>00544     }
-<a name="l00545"></a>00545 
-<a name="l00547"></a><a class="code" href="a00250.html#3883a8a908b44e249a57f454de3f55d8">00547</a>     <a class="code" href="a00250.html">concurrent_vector</a>(size_type n, const_reference t, <span class="keyword">const</span> allocator_type& a = allocator_type())
-<a name="l00548"></a>00548         : internal::allocator_base<T, A>(a)
-<a name="l00549"></a>00549     {
-<a name="l00550"></a>00550         vector_allocator_ptr = &internal_allocator;
-<a name="l00551"></a>00551         __TBB_TRY {
-<a name="l00552"></a>00552             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
-<a name="l00553"></a>00553         } __TBB_CATCH(...) {
-<a name="l00554"></a>00554             segment_t *table = my_segment;
-<a name="l00555"></a>00555             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00556"></a>00556             __TBB_RETHROW();
-<a name="l00557"></a>00557         }
-<a name="l00558"></a>00558     }
-<a name="l00559"></a>00559 
-<a name="l00561"></a>00561     <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00562"></a><a class="code" href="a00250.html#4450de83c5862ea4bcd9443fd7e67419">00562</a>     <a class="code" href="a00250.html">concurrent_vector</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
-<a name="l00563"></a>00563         : internal::allocator_base<T, A>(a)
-<a name="l00564"></a>00564     {
-<a name="l00565"></a>00565         vector_allocator_ptr = &internal_allocator;
-<a name="l00566"></a>00566         __TBB_TRY {
-<a name="l00567"></a>00567             internal_assign_range(first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
-<a name="l00568"></a>00568         } __TBB_CATCH(...) {
-<a name="l00569"></a>00569             segment_t *table = my_segment;
-<a name="l00570"></a>00570             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00571"></a>00571             __TBB_RETHROW();
-<a name="l00572"></a>00572         }
-<a name="l00573"></a>00573     }
-<a name="l00574"></a>00574 
-<a name="l00576"></a><a class="code" href="a00250.html#691f0f3cda3e489c37a657016e375eaf">00576</a>     <a class="code" href="a00250.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00250.html">concurrent_vector</a>& vector ) {
-<a name="l00577"></a>00577         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector )
-<a name="l00578"></a>00578             internal_assign(vector, <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="l00583"></a>00583     <span class="keyword">template</span><<span class="keyword">class</span> M>
-<a name="l00584"></a><a class="code" href="a00250.html#19f4ab88a01b0fd056af3bba463e7bd6">00584</a>     <a class="code" href="a00250.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00250.html">concurrent_vector<T, M></a>& vector ) {
-<a name="l00585"></a>00585         <span class="keywordflow">if</span>( static_cast<void*>( <span class="keyword">this</span> ) != static_cast<const void*>( &vector ) )
-<a name="l00586"></a>00586             internal_assign(vector.internal_vector_base(),
-<a name="l00587"></a>00587                 <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, &copy_array);
-<a name="l00588"></a>00588         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00589"></a>00589     }
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00592"></a>00592     <span class="comment">// Concurrent operations</span>
-<a name="l00593"></a>00593     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00595"></a>00595 <span class="comment"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00596"></a>00596 <span class="preprocessor"></span>
-<a name="l00597"></a><a class="code" href="a00250.html#30484e3959892fd5392fa93c873c31f0">00597</a>     size_type grow_by( size_type delta ) {
-<a name="l00598"></a>00598         <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array, NULL ) : my_early_size;
-<a name="l00599"></a>00599     }
-<a name="l00600"></a>00600 <span class="preprocessor">#else</span>
-<a name="l00601"></a>00601 <span class="preprocessor"></span>
-<a name="l00602"></a><a class="code" href="a00250.html#c8177b1865270ea68aa1ab9148e5e35e">00602</a>     iterator grow_by( size_type delta ) {
-<a name="l00603"></a>00603         <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="l00604"></a>00604     }
-<a name="l00605"></a>00605 <span class="preprocessor">#endif</span>
-<a name="l00606"></a>00606 <span class="preprocessor"></span>
-<a name="l00608"></a>00608 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00609"></a>00609 <span class="preprocessor"></span>
-<a name="l00610"></a><a class="code" href="a00250.html#38274ab3f772ecba600c7daca7690102">00610</a>     size_type grow_by( size_type delta, const_reference t ) {
-<a name="l00611"></a>00611         <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="l00612"></a>00612     }
-<a name="l00613"></a>00613 <span class="preprocessor">#else</span>
-<a name="l00614"></a>00614 <span class="preprocessor"></span>
-<a name="l00615"></a><a class="code" href="a00250.html#473a59a4c9308b93411b898b3110d26c">00615</a>     iterator grow_by( size_type delta, const_reference t ) {
-<a name="l00616"></a>00616         <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="l00617"></a>00617     }
-<a name="l00618"></a>00618 <span class="preprocessor">#endif</span>
-<a name="l00619"></a>00619 <span class="preprocessor"></span>
-<a name="l00621"></a>00621 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00622"></a>00622 <span class="preprocessor"></span>
-<a name="l00624"></a><a class="code" href="a00250.html#47fe588214dd5fa06ab6e8ab78d83874">00624</a>     <span class="keywordtype">void</span> grow_to_at_least( size_type n ) {
-<a name="l00625"></a>00625         <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="l00626"></a>00626     };
-<a name="l00627"></a>00627 <span class="preprocessor">#else</span>
-<a name="l00628"></a>00628 <span class="preprocessor"></span>
-<a name="l00632"></a><a class="code" href="a00250.html#a7e3b67c8ccab16d0aecc80899ae799d">00632</a>     iterator grow_to_at_least( size_type n ) {
-<a name="l00633"></a>00633         size_type m=0;
-<a name="l00634"></a>00634         <span class="keywordflow">if</span>( n ) {
-<a name="l00635"></a>00635             m = internal_grow_to_at_least_with_result( n, <span class="keyword">sizeof</span>(T), &initialize_array, NULL );
-<a name="l00636"></a>00636             <span class="keywordflow">if</span>( m>n ) m=n;
-<a name="l00637"></a>00637         }
-<a name="l00638"></a>00638         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, m);
-<a name="l00639"></a>00639     };
-<a name="l00640"></a>00640 <span class="preprocessor">#endif</span>
-<a name="l00641"></a>00641 <span class="preprocessor"></span>
-<a name="l00643"></a>00643 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00644"></a><a class="code" href="a00250.html#e94e038f915c0268fdf2d3d7f87d81b8">00644</a> <span class="preprocessor"></span>    size_type push_back( const_reference item )
-<a name="l00645"></a>00645 <span class="preprocessor">#else</span>
-<a name="l00646"></a>00646 <span class="preprocessor"></span>
-<a name="l00647"></a>00647     iterator push_back( const_reference item )
-<a name="l00648"></a>00648 <span class="preprocessor">#endif</span>
-<a name="l00649"></a>00649 <span class="preprocessor"></span>    {
-<a name="l00650"></a>00650         size_type k;
-<a name="l00651"></a>00651         <span class="keywordtype">void</span> *ptr = internal_push_back(<span class="keyword">sizeof</span>(T),k);
-<a name="l00652"></a>00652         internal_loop_guide loop(1, ptr);
-<a name="l00653"></a>00653         loop.init(&item);
-<a name="l00654"></a>00654 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00655"></a>00655 <span class="preprocessor"></span>        <span class="keywordflow">return</span> k;
-<a name="l00656"></a>00656 <span class="preprocessor">#else</span>
-<a name="l00657"></a>00657 <span class="preprocessor"></span>        <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, k, ptr);
-<a name="l00658"></a>00658 <span class="preprocessor">#endif</span>
-<a name="l00659"></a>00659 <span class="preprocessor"></span>    }
-<a name="l00660"></a>00660 
-<a name="l00662"></a>00662 
-<a name="l00664"></a><a class="code" href="a00250.html#4c52f2950bb1832886bd4458eb09d7eb">00664</a>     reference operator[]( size_type index ) {
-<a name="l00665"></a>00665         <span class="keywordflow">return</span> internal_subscript(index);
-<a name="l00666"></a>00666     }
-<a name="l00667"></a>00667 
-<a name="l00669"></a><a class="code" href="a00250.html#c6fade5c732cc95274d1d8277ea619d1">00669</a>     const_reference operator[]( size_type index )<span class="keyword"> const </span>{
-<a name="l00670"></a>00670         <span class="keywordflow">return</span> internal_subscript(index);
-<a name="l00671"></a>00671     }
-<a name="l00672"></a>00672 
-<a name="l00674"></a><a class="code" href="a00250.html#0c073ca43e787c7cbf7b0e26d2221748">00674</a>     reference at( size_type index ) {
-<a name="l00675"></a>00675         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
-<a name="l00676"></a>00676     }
-<a name="l00677"></a>00677 
-<a name="l00679"></a><a class="code" href="a00250.html#23e14a38af748edff96a7adc3a0f1c58">00679</a>     const_reference at( size_type index )<span class="keyword"> const </span>{
-<a name="l00680"></a>00680         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
-<a name="l00681"></a>00681     }
-<a name="l00682"></a>00682 
-<a name="l00684"></a><a class="code" href="a00250.html#a4c6ffff3bf08b92939aa2fc516edfba">00684</a>     range_type range( size_t grainsize = 1) {
-<a name="l00685"></a>00685         <span class="keywordflow">return</span> range_type( begin(), end(), grainsize );
-<a name="l00686"></a>00686     }
-<a name="l00687"></a>00687 
-<a name="l00689"></a><a class="code" href="a00250.html#3d09ccfb581b879ae64203741035e193">00689</a>     const_range_type range( size_t grainsize = 1 )<span class="keyword"> const </span>{
-<a name="l00690"></a>00690         <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize );
-<a name="l00691"></a>00691     }
-<a name="l00692"></a>00692     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00693"></a>00693     <span class="comment">// Capacity</span>
-<a name="l00694"></a>00694     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00696"></a><a class="code" href="a00250.html#715fe313c4a9c22731cc404dd80c9ec9">00696</a> <span class="comment"></span>    size_type size()<span class="keyword"> const </span>{
-<a name="l00697"></a>00697         size_type sz = my_early_size, cp = internal_capacity();
-<a name="l00698"></a>00698         <span class="keywordflow">return</span> cp < sz ? cp : sz;
-<a name="l00699"></a>00699     }
-<a name="l00700"></a>00700 
-<a name="l00702"></a><a class="code" href="a00250.html#c6426cb93cf20d3af40f3c90f1f0481a">00702</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_early_size;}
-<a name="l00703"></a>00703 
-<a name="l00705"></a><a class="code" href="a00250.html#3ed6b9ae7217af5103d974045b6f5cd5">00705</a>     size_type capacity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_capacity();}
-<a name="l00706"></a>00706 
-<a name="l00708"></a>00708 
-<a name="l00710"></a><a class="code" href="a00250.html#5a0ce05026994b010018f72cfdeb72c1">00710</a>     <span class="keywordtype">void</span> reserve( size_type n ) {
-<a name="l00711"></a>00711         <span class="keywordflow">if</span>( n )
-<a name="l00712"></a>00712             internal_reserve(n, <span class="keyword">sizeof</span>(T), max_size());
-<a name="l00713"></a>00713     }
-<a name="l00714"></a>00714 
-<a name="l00716"></a><a class="code" href="a00250.html#8dfb0cb0eef96d440b4dcf801807a718">00716</a>     <span class="keywordtype">void</span> resize( size_type n ) {
-<a name="l00717"></a>00717         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &destroy_array, &initialize_array );
-<a name="l00718"></a>00718     }
-<a name="l00719"></a>00719     
-<a name="l00721"></a><a class="code" href="a00250.html#98ce6b2c6d2622f0c030b46dfac3880c">00721</a>     <span class="keywordtype">void</span> resize( size_type n, const_reference t ) {
-<a name="l00722"></a>00722         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
-<a name="l00723"></a>00723     }
-<a name="l00724"></a>00724    
-<a name="l00725"></a>00725 <span class="preprocessor">#if TBB_DEPRECATED </span>
-<a name="l00727"></a><a class="code" href="a00250.html#1693d1da41b1a8235871be9c6633be35">00727</a> <span class="preprocessor">    void compact() {shrink_to_fit();}</span>
-<a name="l00728"></a>00728 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEPRECATED */</span>
-<a name="l00729"></a>00729 
-<a name="l00731"></a>00731     <span class="keywordtype">void</span> shrink_to_fit();
-<a name="l00732"></a>00732 
-<a name="l00734"></a><a class="code" href="a00250.html#2c248a017f0576df3e7cd99627836fd6">00734</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="l00735"></a>00735 
-<a name="l00736"></a>00736     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00737"></a>00737     <span class="comment">// STL support</span>
-<a name="l00738"></a>00738     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00739"></a>00739 
-<a name="l00741"></a><a class="code" href="a00250.html#730b23a251ecb6d37f692fb22f38e029">00741</a>     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0);}
-<a name="l00743"></a><a class="code" href="a00250.html#c0b51160e5a764982ec97a455f94f2c6">00743</a>     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,size());}
-<a name="l00745"></a><a class="code" href="a00250.html#78a06182276ff758788d4c0623ae0d71">00745</a>     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
-<a name="l00747"></a><a class="code" href="a00250.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">00747</a>     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
-<a name="l00749"></a><a class="code" href="a00250.html#f88fcf1c920693c39bd9709db33c199f">00749</a>     const_iterator cbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
-<a name="l00751"></a><a class="code" href="a00250.html#0c15a5d0f1cf75d687dabba07da1d46b">00751</a>     const_iterator cend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
-<a name="l00753"></a><a class="code" href="a00250.html#5e220926d09236d98f04fe0721e5f9a1">00753</a>     reverse_iterator rbegin() {<span class="keywordflow">return</span> reverse_iterator(end());}
-<a name="l00755"></a><a class="code" href="a00250.html#290119a4eb43cd6a9e98fa17016ba3c2">00755</a>     reverse_iterator rend() {<span class="keywordflow">return</span> reverse_iterator(begin());}
-<a name="l00757"></a><a class="code" href="a00250.html#9f9c103e18d5f212703805354074ad44">00757</a>     const_reverse_iterator rbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
-<a name="l00759"></a><a class="code" href="a00250.html#d438b9b32ea3a8ffb703015b6dce055b">00759</a>     const_reverse_iterator rend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
-<a name="l00761"></a><a class="code" href="a00250.html#db78a1d28c9c966050e8a2926d834a33">00761</a>     const_reverse_iterator crbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
-<a name="l00763"></a><a class="code" href="a00250.html#fff9cece89438587997ebedf93c5e962">00763</a>     const_reverse_iterator crend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
-<a name="l00765"></a><a class="code" href="a00250.html#15181759c0bfa2ddce5d10c7550e0002">00765</a>     reference front() {
-<a name="l00766"></a>00766         __TBB_ASSERT( size()>0, NULL);
-<a name="l00767"></a>00767         <span class="keywordflow">return</span> static_cast<T*>(my_segment[0].array)[0];
-<a name="l00768"></a>00768     }
-<a name="l00770"></a><a class="code" href="a00250.html#502615a858eb9fa0390ee59169065e90">00770</a>     const_reference front()<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> static_cast<const T*>(my_segment[0].array)[0];
-<a name="l00773"></a>00773     }
-<a name="l00775"></a><a class="code" href="a00250.html#41ce48d6015a1a2812d41cf620ec3476">00775</a>     reference back() {
-<a name="l00776"></a>00776         __TBB_ASSERT( size()>0, NULL);
-<a name="l00777"></a>00777         <span class="keywordflow">return</span> internal_subscript( size()-1 );
-<a name="l00778"></a>00778     }
-<a name="l00780"></a><a class="code" href="a00250.html#bd518e204107d07fd08d0ec5bdfd383d">00780</a>     const_reference back()<span class="keyword"> const </span>{
-<a name="l00781"></a>00781         __TBB_ASSERT( size()>0, NULL);
-<a name="l00782"></a>00782         <span class="keywordflow">return</span> internal_subscript( size()-1 );
-<a name="l00783"></a>00783     }
-<a name="l00785"></a><a class="code" href="a00250.html#2fdba8e90de6a4d2300222236d46758e">00785</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
-<a name="l00786"></a>00786 
-<a name="l00788"></a><a class="code" href="a00250.html#423e5aa15e0e3309ad86d026fd85f6f6">00788</a>     <span class="keywordtype">void</span> assign(size_type n, const_reference t) {
-<a name="l00789"></a>00789         clear();
-<a name="l00790"></a>00790         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
-<a name="l00791"></a>00791     }
-<a name="l00792"></a>00792 
-<a name="l00794"></a>00794     <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00795"></a><a class="code" href="a00250.html#93a06b3112cb804f42f40efb5e7387b4">00795</a>     <span class="keywordtype">void</span> assign(I first, I last) {
-<a name="l00796"></a>00796         clear(); internal_assign_range( first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
-<a name="l00797"></a>00797     }
-<a name="l00798"></a>00798 
-<a name="l00800"></a><a class="code" href="a00250.html#96c9c4bd968ed3edb8dd276854d2dae0">00800</a>     <span class="keywordtype">void</span> swap(<a class="code" href="a00250.html">concurrent_vector</a> &vector) {
-<a name="l00801"></a>00801         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector ) {
-<a name="l00802"></a>00802             concurrent_vector_base_v3::internal_swap(static_cast<concurrent_vector_base_v3&>(vector));
-<a name="l00803"></a>00803             std::swap(this->my_allocator, vector.my_allocator);
-<a name="l00804"></a>00804         }
-<a name="l00805"></a>00805     }
-<a name="l00806"></a>00806 
-<a name="l00808"></a>00808 
-<a name="l00809"></a><a class="code" href="a00250.html#26f937a359a66b6aae904c3cd9a3c444">00809</a>     <span class="keywordtype">void</span> clear() {
-<a name="l00810"></a>00810         internal_clear(&destroy_array);
-<a name="l00811"></a>00811     }
-<a name="l00812"></a>00812 
-<a name="l00814"></a><a class="code" href="a00250.html#da2444b28bb840d38f60d0030333a5fc">00814</a>     ~<a class="code" href="a00250.html">concurrent_vector</a>() {
-<a name="l00815"></a>00815         segment_t *table = my_segment;
-<a name="l00816"></a>00816         internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-<a name="l00817"></a>00817         <span class="comment">// base class destructor call should be then</span>
-<a name="l00818"></a>00818     }
-<a name="l00819"></a>00819 
-<a name="l00820"></a>00820     <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="l00821"></a>00821 <span class="keyword">private</span>:
-<a name="l00823"></a>00823     <span class="keyword">static</span> <span class="keywordtype">void</span> *internal_allocator(internal::concurrent_vector_base_v3 &vb, size_t k) {
-<a name="l00824"></a>00824         <span class="keywordflow">return</span> static_cast<concurrent_vector<T, A>&>(vb).my_allocator.allocate(k);
-<a name="l00825"></a>00825     }
-<a name="l00827"></a>00827     <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="l00828"></a>00828 
-<a name="l00830"></a>00830     T& internal_subscript( size_type index ) <span class="keyword">const</span>;
-<a name="l00831"></a>00831 
-<a name="l00833"></a>00833     T& internal_subscript_with_exceptions( size_type index ) <span class="keyword">const</span>;
-<a name="l00834"></a>00834 
-<a name="l00836"></a>00836     <span class="keywordtype">void</span> internal_assign_n(size_type n, const_pointer p) {
-<a name="l00837"></a>00837         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="l00838"></a>00838     }
-<a name="l00839"></a>00839 
-<a name="l00841"></a>00841     <span class="keyword">template</span><<span class="keywordtype">bool</span> B> <span class="keyword">class </span>is_integer_tag;
-<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_range(I first, I last, is_integer_tag<true> *) {
-<a name="l00846"></a>00846         internal_assign_n(static_cast<size_type>(first), &static_cast<T&>(last));
-<a name="l00847"></a>00847     }
-<a name="l00849"></a>00849     <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00850"></a>00850     <span class="keywordtype">void</span> internal_assign_range(I first, I last, is_integer_tag<false> *) {
-<a name="l00851"></a>00851         internal_assign_iterators(first, last);
-<a name="l00852"></a>00852     }
-<a name="l00854"></a>00854     <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00855"></a>00855     <span class="keywordtype">void</span> internal_assign_iterators(I first, I last);
-<a name="l00856"></a>00856 
-<a name="l00858"></a>00858     <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="l00859"></a>00859 
-<a name="l00861"></a>00861     <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="l00862"></a>00862 
-<a name="l00864"></a>00864     <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="l00865"></a>00865 
-<a name="l00867"></a>00867     <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="l00868"></a>00868 
-<a name="l00870"></a>00870     <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="l00871"></a>00871 
-<a name="l00873"></a>00873     <span class="keyword">class </span>internal_loop_guide : internal::no_copy {
-<a name="l00874"></a>00874     <span class="keyword">public</span>:
-<a name="l00875"></a>00875         <span class="keyword">const</span> pointer array;
-<a name="l00876"></a>00876         <span class="keyword">const</span> size_type n;
-<a name="l00877"></a>00877         size_type i;
-<a name="l00878"></a>00878         internal_loop_guide(size_type ntrials, <span class="keywordtype">void</span> *ptr)
-<a name="l00879"></a>00879             : array(static_cast<pointer>(ptr)), n(ntrials), i(0) {}
-<a name="l00880"></a>00880         <span class="keywordtype">void</span> init() {   <span class="keywordflow">for</span>(; i < n; ++i) <span class="keyword">new</span>( &array[i] ) T(); }
-<a name="l00881"></a>00881         <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="l00882"></a>00882         <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="l00883"></a>00883         <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="l00884"></a>00884         <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="l00885"></a>00885         ~internal_loop_guide() {
-<a name="l00886"></a>00886             <span class="keywordflow">if</span>(i < n) <span class="comment">// if exception raised, do zerroing on the rest of items</span>
-<a name="l00887"></a>00887                 std::memset(array+i, 0, (n-i)*<span class="keyword">sizeof</span>(value_type));
-<a name="l00888"></a>00888         }
-<a name="l00889"></a>00889     };
-<a name="l00890"></a>00890 };
-<a name="l00891"></a>00891 
-<a name="l00892"></a>00892 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
-<a name="l00893"></a>00893 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (push)</span>
-<a name="l00894"></a>00894 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (disable: 4701) // potentially uninitialized local variable "old"</span>
-<a name="l00895"></a>00895 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00896"></a>00896 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00897"></a><a class="code" href="a00250.html#03c6f4cf66532bf4cc907ee738a9a186">00897</a> <span class="keywordtype">void</span> <a class="code" href="a00250.html">concurrent_vector<T, A>::shrink_to_fit</a>() {
-<a name="l00898"></a>00898     internal_segments_table old;
-<a name="l00899"></a>00899     __TBB_TRY {
-<a name="l00900"></a>00900         <span class="keywordflow">if</span>( internal_compact( <span class="keyword">sizeof</span>(T), &old, &destroy_array, &copy_array ) )
-<a name="l00901"></a>00901             internal_free_segments( old.table, pointers_per_long_table, old.first_block ); <span class="comment">// free joined and unnecessary segments</span>
-<a name="l00902"></a>00902     } __TBB_CATCH(...) {
-<a name="l00903"></a>00903         <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="l00904"></a>00904             internal_free_segments( old.table, 1, old.first_block );
-<a name="l00905"></a>00905         __TBB_RETHROW();
-<a name="l00906"></a>00906     }
-<a name="l00907"></a>00907 }
-<a name="l00908"></a>00908 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
-<a name="l00909"></a>00909 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (pop)</span>
-<a name="l00910"></a>00910 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4701 is back </span>
-<a name="l00911"></a>00911 <span class="preprocessor"></span>
-<a name="l00912"></a>00912 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00913"></a>00913 <span class="keywordtype">void</span> <a class="code" href="a00250.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="l00914"></a>00914     <span class="comment">// Free the arrays</span>
-<a name="l00915"></a>00915     <span class="keywordflow">while</span>( k > first_block ) {
-<a name="l00916"></a>00916         --k;
-<a name="l00917"></a>00917         T* array = static_cast<T*>(table[k]);
-<a name="l00918"></a>00918         table[k] = NULL;
-<a name="l00919"></a>00919         <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
-<a name="l00920"></a>00920             this->my_allocator.deallocate( array, segment_size(k) );
-<a name="l00921"></a>00921     }
-<a name="l00922"></a>00922     T* array = static_cast<T*>(table[0]);
-<a name="l00923"></a>00923     <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) {
-<a name="l00924"></a>00924         __TBB_ASSERT( first_block > 0, NULL );
-<a name="l00925"></a>00925         <span class="keywordflow">while</span>(k > 0) table[--k] = NULL;
-<a name="l00926"></a>00926         this->my_allocator.deallocate( array, segment_size(first_block) );
-<a name="l00927"></a>00927     }
-<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( size_type index )<span class="keyword"> const </span>{
-<a name="l00932"></a>00932     __TBB_ASSERT( index < my_early_size, <span class="stringliteral">"index out of bounds"</span> );
-<a name="l00933"></a>00933     size_type j = index;
-<a name="l00934"></a>00934     segment_index_t k = segment_base_index_of( j );
-<a name="l00935"></a>00935     __TBB_ASSERT( (segment_t*)my_segment != my_storage || k < pointers_per_short_table, <span class="stringliteral">"index is being allocated"</span> );
-<a name="l00936"></a>00936     <span class="comment">// no need in __TBB_load_with_acquire since thread works in own space or gets </span>
-<a name="l00937"></a>00937     T* array = static_cast<T*>( tbb::internal::itt_hide_load_word(my_segment[k].array));
-<a name="l00938"></a>00938     __TBB_ASSERT( array != internal::vector_allocation_error_flag, <span class="stringliteral">"the instance is broken by bad allocation. Use at() instead"</span> );
-<a name="l00939"></a>00939     __TBB_ASSERT( array, <span class="stringliteral">"index is being allocated"</span> );
-<a name="l00940"></a>00940     <span class="keywordflow">return</span> array[j];
-<a name="l00941"></a>00941 }
-<a name="l00942"></a>00942 
-<a name="l00943"></a>00943 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00944"></a>00944 T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index )<span class="keyword"> const </span>{
-<a name="l00945"></a>00945     <span class="keywordflow">if</span>( index >= my_early_size )
-<a name="l00946"></a>00946         internal::throw_exception(internal::eid_out_of_range); <span class="comment">// throw std::out_of_range</span>
-<a name="l00947"></a>00947     size_type j = index;
-<a name="l00948"></a>00948     segment_index_t k = segment_base_index_of( j );
-<a name="l00949"></a>00949     <span class="keywordflow">if</span>( (segment_t*)my_segment == my_storage && k >= pointers_per_short_table )
-<a name="l00950"></a>00950         internal::throw_exception(internal::eid_segment_range_error); <span class="comment">// throw std::range_error</span>
-<a name="l00951"></a>00951     <span class="keywordtype">void</span> *array = my_segment[k].array; <span class="comment">// no need in __TBB_load_with_acquire</span>
-<a name="l00952"></a>00952     <span class="keywordflow">if</span>( array <= internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
-<a name="l00953"></a>00953         internal::throw_exception(internal::eid_index_range_error); <span class="comment">// throw std::range_error</span>
-<a name="l00954"></a>00954     <span class="keywordflow">return</span> static_cast<T*>(array)[j];
-<a name="l00955"></a>00955 }
-<a name="l00956"></a>00956 
-<a name="l00957"></a>00957 <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="l00958"></a>00958 <span class="keywordtype">void</span> concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {
-<a name="l00959"></a>00959     __TBB_ASSERT(my_early_size == 0, NULL);
-<a name="l00960"></a>00960     size_type n = std::distance(first, last);
-<a name="l00961"></a>00961     <span class="keywordflow">if</span>( !n ) <span class="keywordflow">return</span>;
-<a name="l00962"></a>00962     internal_reserve(n, <span class="keyword">sizeof</span>(T), <a class="code" href="a00250.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>());
-<a name="l00963"></a>00963     my_early_size = n;
-<a name="l00964"></a>00964     segment_index_t k = 0;
-<a name="l00965"></a>00965     size_type sz = segment_size( my_first_block );
-<a name="l00966"></a>00966     <span class="keywordflow">while</span>( sz < n ) {
-<a name="l00967"></a>00967         internal_loop_guide loop(sz, my_segment[k].array);
-<a name="l00968"></a>00968         loop.iterate(first);
-<a name="l00969"></a>00969         n -= sz;
-<a name="l00970"></a>00970         <span class="keywordflow">if</span>( !k ) k = my_first_block;
-<a name="l00971"></a>00971         <span class="keywordflow">else</span> { ++k; sz <<= 1; }
-<a name="l00972"></a>00972     }
-<a name="l00973"></a>00973     internal_loop_guide loop(n, my_segment[k].array);
-<a name="l00974"></a>00974     loop.iterate(first);
-<a name="l00975"></a>00975 }
-<a name="l00976"></a>00976 
-<a name="l00977"></a>00977 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00978"></a>00978 <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="l00979"></a>00979     internal_loop_guide loop(n, begin); loop.init();
-<a name="l00980"></a>00980 }
-<a name="l00981"></a>00981 
-<a name="l00982"></a>00982 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00983"></a>00983 <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="l00984"></a>00984     internal_loop_guide loop(n, begin); loop.init(src);
-<a name="l00985"></a>00985 }
-<a name="l00986"></a>00986 
-<a name="l00987"></a>00987 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00988"></a>00988 <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="l00989"></a>00989     internal_loop_guide loop(n, dst); loop.copy(src);
-<a name="l00990"></a>00990 }
-<a name="l00991"></a>00991 
-<a name="l00992"></a>00992 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00993"></a>00993 <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="l00994"></a>00994     internal_loop_guide loop(n, dst); loop.assign(src);
-<a name="l00995"></a>00995 }
-<a name="l00996"></a>00996 
-<a name="l00997"></a>00997 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
-<a name="l00998"></a>00998 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warning</span>
-<a name="l00999"></a>00999 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l01000"></a>01000 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4189)</span>
-<a name="l01001"></a>01001 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l01002"></a>01002 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l01003"></a>01003 <span class="keywordtype">void</span> concurrent_vector<T, A>::destroy_array( <span class="keywordtype">void</span>* begin, size_type n ) {
-<a name="l01004"></a>01004     T* array = static_cast<T*>(begin);
-<a name="l01005"></a>01005     <span class="keywordflow">for</span>( size_type j=n; j>0; --j )
-<a name="l01006"></a>01006         array[j-1].~T(); <span class="comment">// destructors are supposed to not throw any exceptions</span>
-<a name="l01007"></a>01007 }
-<a name="l01008"></a>01008 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
-<a name="l01009"></a>01009 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l01010"></a>01010 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4189 is back </span>
-<a name="l01011"></a>01011 <span class="preprocessor"></span>
-<a name="l01012"></a>01012 <span class="comment">// concurrent_vector's template functions</span>
-<a name="l01013"></a>01013 <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="l01014"></a>01014 <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="l01015"></a>01015     <span class="comment">// Simply:    return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());</span>
-<a name="l01016"></a>01016     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01017"></a>01017     <span class="keyword">typename</span> concurrent_vector<T, A1>::const_iterator i(a.begin());
-<a name="l01018"></a>01018     <span class="keyword">typename</span> concurrent_vector<T, A2>::const_iterator j(b.begin());
-<a name="l01019"></a>01019     <span class="keywordflow">for</span>(; i != a.end(); ++i, ++j)
-<a name="l01020"></a>01020         <span class="keywordflow">if</span>( !(*i == *j) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01021"></a>01021     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01022"></a>01022 }
-<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!=(<span class="keyword">const</span> 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> !(a == b); }
-<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<(const 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> (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }
-<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> A1, <span class="keyword">class</span> A2>
-<a name="l01033"></a>01033 <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="l01034"></a>01034 {    <span class="keywordflow">return</span> b < a; }
-<a name="l01035"></a>01035 
-<a name="l01036"></a>01036 <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="l01037"></a>01037 <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="l01038"></a>01038 {    <span class="keywordflow">return</span> !(b < a); }
-<a name="l01039"></a>01039 
-<a name="l01040"></a>01040 <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="l01041"></a>01041 <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="l01042"></a>01042 {    <span class="keywordflow">return</span> !(a < b); }
-<a name="l01043"></a>01043 
-<a name="l01044"></a>01044 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l01045"></a>01045 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)
-<a name="l01046"></a>01046 {    a.swap( b ); }
-<a name="l01047"></a>01047 
-<a name="l01048"></a>01048 } <span class="comment">// namespace tbb</span>
-<a name="l01049"></a>01049 
-<a name="l01050"></a>01050 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
-<a name="l01051"></a>01051 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l01052"></a>01052 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4267 is back</span>
-<a name="l01053"></a>01053 <span class="preprocessor"></span>
-<a name="l01054"></a>01054 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_vector_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00449.html b/doc/html/a00449.html
new file mode 100644
index 0000000..a59568e
--- /dev/null
+++ b/doc/html/a00449.html
@@ -0,0 +1,127 @@
+<!DOCTYPE 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>
+<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>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-2012 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_blocked_range_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_blocked_range_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="a00259.html">00040</a> <span class="keyword">class </span><a class="code" href="a00259.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="a00259.html#1a8d05842c2b3dfc177bc4d347e4cef7">00045</a>     <span class="keyword">typedef</span> Value <a class="code" href="a00259.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a>;
+<a name="l00046"></a>00046 
+<a name="l00048"></a><a class="code" href="a00259.html#f5707bffea38eee5c9680f37358afb8e">00048</a>     <span class="keyword">typedef</span> std::size_t <a class="code" href="a00259.html#f5707bffea38eee5c9680f37358afb8e">size_type</a>;
+<a name="l00049"></a>00049 
+<a name="l00051"></a>00051 
+<a name="l00052"></a><a class="code" href="a00259.html#94607755c5110d199202234d58d022ac">00052</a>     <a class="code" href="a00259.html#94607755c5110d199202234d58d022ac">blocked_range</a>() : my_end(), my_begin() {}
+<a name="l00053"></a>00053 
+<a name="l00055"></a><a class="code" href="a00259.html#14795a36ead1414b4371dbe1a4656359">00055</a>     <a class="code" href="a00259.html#94607755c5110d199202234d58d022ac">blocked_range</a>( Value begin_, Value end_, <a class="code" href="a00259.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="a00259.html#18d2258400756ac1446dac7676b18df3">00062</a>     <a class="code" href="a00259.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00259.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="a00259.html#8b929d93ddc13f148b11bceef3a3bdf8">00065</a>     <a class="code" href="a00259.html#1a8d05842c2b3dfc177bc4d347e4cef7">const_iterator</a> <a class="code" href="a00259.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="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">00069</a>     <a class="code" href="a00259.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()<span class="keyword"> const </span>{
+<a name="l00070"></a>00070         __TBB_ASSERT( !(<a class="code" href="a00259.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>()<<a class="code" href="a00259.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="a00259.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="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">00075</a>     <a class="code" href="a00259.html#f5707bffea38eee5c9680f37358afb8e">size_type</a> <a class="code" href="a00259.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="a00259.html#8f4f02f530eb3f2e7ea26e06f76aef9d">00082</a>     <span class="keywordtype">bool</span> <a class="code" href="a00259.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="a00259.html#41a58b703d574b6e1ca155df3576f578">00086</a>     <span class="keywordtype">bool</span> <a class="code" href="a00259.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize<<a class="code" href="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>();}
+<a name="l00087"></a>00087 
+<a name="l00089"></a>00089 
+<a name="l00091"></a><a class="code" href="a00259.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">00091</a>     <a class="code" href="a00259.html#94607755c5110d199202234d58d022ac">blocked_range</a>( <a class="code" href="a00259.html">blocked_range</a>& r, <a class="code" href="a00335.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="a00259.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="a00259.html">blocked_range</a>& r ) {
+<a name="l00106"></a>00106         __TBB_ASSERT( r.<a class="code" href="a00259.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="a00259.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> + (r.<a class="code" href="a00259.html#1ec95c8988b50064dd603998b16f3930">my_end</a>-r.<a class="code" href="a00259.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a>)/2u;
+<a name="l00108"></a>00108         r.<a class="code" href="a00259.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>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00450.html b/doc/html/a00450.html
new file mode 100644
index 0000000..fe4847d
--- /dev/null
+++ b/doc/html/a00450.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>blocked_range2d.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>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-2012 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_blocked_range2d_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_blocked_range2d_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 "blocked_range.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="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="a00260.html">00032</a> <span class="keyword">class </span><a class="code" href="a00260.html">blocked_range2d</a> {
+<a name="l00033"></a>00033 <span class="keyword">public</span>:
+<a name="l00035"></a><a class="code" href="a00260.html#a807a22fe658ec38b8edfd69521d0383">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00259.html">blocked_range<RowValue></a> <a class="code" href="a00259.html">row_range_type</a>;
+<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00259.html">blocked_range<ColValue></a> <a class="code" href="a00259.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="a00259.html">row_range_type</a> my_rows;
+<a name="l00040"></a>00040     <a class="code" href="a00259.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="a00260.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end, <span class="keyword">typename</span> <a class="code" href="a00259.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="a00259.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="a00260.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="a00260.html#d144cb2d88cef553420311aca8667a44">00059</a>     <span class="keywordtype">bool</span> <a class="code" href="a00260.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="a00259.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00259.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
+<a name="l00062"></a>00062     }
+<a name="l00063"></a>00063 
+<a name="l00065"></a><a class="code" href="a00260.html#ad36a9b38e4fef26d376f99552ce2d92">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00260.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="a00259.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00259.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
+<a name="l00067"></a>00067     }
+<a name="l00068"></a>00068 
+<a name="l00069"></a>00069     <a class="code" href="a00260.html">blocked_range2d</a>( <a class="code" href="a00260.html">blocked_range2d</a>& r, <a class="code" href="a00335.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="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00074"></a>00074             my_cols.<a class="code" href="a00259.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00260.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="a00259.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00260.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="a00260.html#f496e7348a82652fba581203477cc07c">00081</a>     <span class="keyword">const</span> <a class="code" href="a00259.html">row_range_type</a>& <a class="code" href="a00260.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="a00260.html#392a46759af2c884957115771affa7f4">00084</a>     <span class="keyword">const</span> <a class="code" href="a00259.html">col_range_type</a>& <a class="code" href="a00260.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>
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_blocked_range2d_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00451.html b/doc/html/a00451.html
new file mode 100644
index 0000000..3f8bee2
--- /dev/null
+++ b/doc/html/a00451.html
@@ -0,0 +1,131 @@
+<!DOCTYPE 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_range3d.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>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-2012 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_blocked_range3d_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_blocked_range3d_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 "blocked_range.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="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="a00261.html">00032</a> <span class="keyword">class </span><a class="code" href="a00261.html">blocked_range3d</a> {
+<a name="l00033"></a>00033 <span class="keyword">public</span>:
+<a name="l00035"></a><a class="code" href="a00261.html#b8ebf17a552ba47825e9b3887855b719">00035</a>     <span class="keyword">typedef</span> <a class="code" href="a00259.html">blocked_range<PageValue></a> <a class="code" href="a00259.html">page_range_type</a>;
+<a name="l00036"></a>00036     <span class="keyword">typedef</span> <a class="code" href="a00259.html">blocked_range<RowValue></a>  <a class="code" href="a00259.html">row_range_type</a>;
+<a name="l00037"></a>00037     <span class="keyword">typedef</span> <a class="code" href="a00259.html">blocked_range<ColValue></a>  <a class="code" href="a00259.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="a00259.html">page_range_type</a> my_pages;
+<a name="l00041"></a>00041     <a class="code" href="a00259.html">row_range_type</a>  my_rows;
+<a name="l00042"></a>00042     <a class="code" href="a00259.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="a00261.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),
+<a name="l00050"></a>00050         my_rows(row_begin,row_end),
+<a name="l00051"></a>00051         my_cols(col_begin,col_end)
+<a name="l00052"></a>00052     {
+<a name="l00053"></a>00053     }
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055     <a class="code" href="a00261.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end, <span class="keyword">typename</span> <a class="code" href="a00259.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="a00259.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="a00259.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="a00261.html#356860e1c977d91711e8216bd55c0b25">00065</a>     <span class="keywordtype">bool</span> <a class="code" href="a00261.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="a00259.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_rows.<a class="code" href="a00259.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>() || my_cols.<a class="code" href="a00259.html#8f4f02f530eb3f2e7ea26e06f76aef9d">empty</a>();
+<a name="l00068"></a>00068     }
+<a name="l00069"></a>00069 
+<a name="l00071"></a><a class="code" href="a00261.html#39d69191721c488e737ae5d9c5336b9c">00071</a>     <span class="keywordtype">bool</span> <a class="code" href="a00261.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="a00259.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_rows.<a class="code" href="a00259.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>() || my_cols.<a class="code" href="a00259.html#41a58b703d574b6e1ca155df3576f578">is_divisible</a>();
+<a name="l00073"></a>00073     }
+<a name="l00074"></a>00074 
+<a name="l00075"></a>00075     <a class="code" href="a00261.html">blocked_range3d</a>( <a class="code" href="a00261.html">blocked_range3d</a>& r, <a class="code" href="a00335.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="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_rows.<a class="code" href="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00081"></a>00081             <span class="keywordflow">if</span> ( my_rows.<a class="code" href="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_rows.<a class="code" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00082"></a>00082                 my_cols.<a class="code" href="a00259.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00261.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="a00259.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00261.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="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_cols.<a class="code" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) < my_cols.<a class="code" href="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>()*double(my_pages.<a class="code" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">grainsize</a>()) ) {
+<a name="l00088"></a>00088                 my_cols.<a class="code" href="a00259.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00261.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="a00259.html#e02559f817d8352c7bdf41dfddc53958">my_begin</a> = page_range_type::do_split(r.<a class="code" href="a00261.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="a00261.html#cf971430aa12361d3ed245344b7c6764">00096</a>     <span class="keyword">const</span> <a class="code" href="a00259.html">page_range_type</a>& <a class="code" href="a00261.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="a00261.html#1584623e59ff32a8aa82006827508be4">00099</a>     <span class="keyword">const</span> <a class="code" href="a00259.html">row_range_type</a>& <a class="code" href="a00261.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="a00261.html#3336ba9480fd6c43e158f9beb024c050">00102</a>     <span class="keyword">const</span> <a class="code" href="a00259.html">col_range_type</a>& <a class="code" href="a00261.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 
+<a name="l00106"></a>00106 } <span class="comment">// namespace tbb </span>
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_blocked_range3d_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00452.html b/doc/html/a00452.html
index 722c4e6..f2a69b1 100644
--- a/doc/html/a00452.html
+++ b/doc/html/a00452.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>critical_section.h Source File</title>
+<title>cache_aligned_allocator.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>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-2011 Intel Corporation.  All Rights Reserved.</span>
+<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-2012 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,122 +39,112 @@
 <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_CRITICAL_SECTION_H_</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define _TBB_CRITICAL_SECTION_H_</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_cache_aligned_allocator_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_cache_aligned_allocator_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 "machine/windows_api.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="l00024"></a>00024 <span class="preprocessor">#include <new></span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#if __TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_CPP11_STD_FORWARD_BROKEN</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor"> #include <utility></span> <span class="comment">// std::forward</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<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="l00035"></a>00035 
+<a name="l00036"></a>00036     size_t __TBB_EXPORTED_FUNC NFS_GetLineSize();
+<a name="l00037"></a>00037 
+<a name="l00039"></a>00039 
+<a name="l00040"></a>00040     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC NFS_Allocate( size_t n_element, size_t element_size, <span class="keywordtype">void</span>* hint );
+<a name="l00041"></a>00041 
+<a name="l00043"></a>00043 
+<a name="l00045"></a>00045     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC NFS_Free( <span class="keywordtype">void</span>* );
+<a name="l00046"></a>00046 }
 <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="l00049"></a>00049 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
+<a name="l00051"></a>00051 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00056"></a>00056 
+<a name="l00059"></a>00059 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00060"></a><a class="code" href="a00264.html">00060</a> <span class="keyword">class </span><a class="code" href="a00264.html">cache_aligned_allocator</a> {
+<a name="l00061"></a>00061 <span class="keyword">public</span>:
+<a name="l00062"></a>00062     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type<T>::value_type value_type;
+<a name="l00063"></a>00063     <span class="keyword">typedef</span> value_type* pointer;
+<a name="l00064"></a>00064     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
+<a name="l00065"></a>00065     <span class="keyword">typedef</span> value_type& reference;
+<a name="l00066"></a>00066     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference;
+<a name="l00067"></a>00067     <span class="keyword">typedef</span> size_t size_type;
+<a name="l00068"></a>00068     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00069"></a>00069     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
+<a name="l00070"></a>00070         <span class="keyword">typedef</span> <a class="code" href="a00264.html">cache_aligned_allocator<U></a> other;
+<a name="l00071"></a>00071     };
+<a name="l00072"></a>00072 
+<a name="l00073"></a>00073     <a class="code" href="a00264.html">cache_aligned_allocator</a>() <span class="keywordflow">throw</span>() {}
+<a name="l00074"></a>00074     <a class="code" href="a00264.html">cache_aligned_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00264.html">cache_aligned_allocator</a>& ) <span class="keywordflow">throw</span>() {}
+<a name="l00075"></a>00075     <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00264.html">cache_aligned_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00264.html">cache_aligned_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
 <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="l00077"></a>00077     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+<a name="l00078"></a>00078     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+<a name="l00079"></a>00079     
+<a name="l00081"></a><a class="code" href="a00264.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">00081</a>     pointer <a class="code" href="a00264.html#4cdeea67af6c1fcd8f1d5e9c4cab61e8">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* hint=0 ) {
+<a name="l00082"></a>00082         <span class="comment">// The "hint" argument is always ignored in NFS_Allocate thus const_cast shouldn't hurt</span>
+<a name="l00083"></a>00083         <span class="keywordflow">return</span> pointer(internal::NFS_Allocate( n, <span class="keyword">sizeof</span>(value_type), const_cast<void*>(hint) ));
+<a name="l00084"></a>00084     }
+<a name="l00085"></a>00085 
+<a name="l00087"></a><a class="code" href="a00264.html#3d4eadf188f7d85d3805ae534e0b8e1c">00087</a>     <span class="keywordtype">void</span> <a class="code" href="a00264.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( pointer p, size_type ) {
+<a name="l00088"></a>00088         internal::NFS_Free(p);
+<a name="l00089"></a>00089     }
+<a name="l00090"></a>00090 
+<a name="l00092"></a><a class="code" href="a00264.html#fb23b687b4c0429dab4c7f8017266cf0">00092</a>     size_type <a class="code" href="a00264.html#fb23b687b4c0429dab4c7f8017266cf0">max_size</a>() const throw() {
+<a name="l00093"></a>00093         <span class="keywordflow">return</span> (~size_t(0)-internal::NFS_MaxLineSize)/<span class="keyword">sizeof</span>(value_type);
+<a name="l00094"></a>00094     }
+<a name="l00095"></a>00095 
+<a name="l00097"></a>00097 <span class="preprocessor">#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span>... Args>
+<a name="l00099"></a><a class="code" href="a00264.html#48a7e49dfb0578edc84a90a5ac30793d">00099</a>     <span class="keywordtype">void</span> <a class="code" href="a00264.html#48a7e49dfb0578edc84a90a5ac30793d">construct</a>(pointer p, Args&&... args)
+<a name="l00100"></a>00100  <span class="preprocessor">#if __TBB_CPP11_STD_FORWARD_BROKEN</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span>        { ::new((<span class="keywordtype">void</span> *)p) T((args)...); }
+<a name="l00102"></a>00102 <span class="preprocessor"> #else</span>
+<a name="l00103"></a>00103 <span class="preprocessor"></span>        { ::new((<span class="keywordtype">void</span> *)p) T(std::forward<Args>(args)...); }
+<a name="l00104"></a>00104  <span class="preprocessor">#endif</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#else // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00106"></a>00106 <span class="preprocessor"></span>    <span class="keywordtype">void</span> <a class="code" href="a00264.html#48a7e49dfb0578edc84a90a5ac30793d">construct</a>( pointer p, <span class="keyword">const</span> value_type& value ) {::new((<span class="keywordtype">void</span>*)(p)) value_type(value);}
+<a name="l00107"></a>00107 <span class="preprocessor">#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span>
+<a name="l00110"></a>00110     <span class="keywordtype">void</span> destroy( pointer p ) {p->~value_type();}
+<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>
+<a name="l00113"></a>00113 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
+<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="a00265.html">00120</a> <span class="keyword">class </span><a class="code" href="a00264.html">cache_aligned_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="a00264.html">cache_aligned_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="a00264.html">cache_aligned_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00264.html">cache_aligned_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> cache_aligned_allocator<T>&, <span class="keyword">const</span> cache_aligned_allocator<U>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136 } <span class="comment">// namespace tbb</span>
+<a name="l00137"></a>00137 
+<a name="l00138"></a>00138 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_cache_aligned_allocator_H */</span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00454.html b/doc/html/a00454.html
new file mode 100644
index 0000000..315bfc1
--- /dev/null
+++ b/doc/html/a00454.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>combinable.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>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-2012 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_combinable_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_combinable_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "enumerable_thread_specific.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 <span class="keyword">namespace </span>tbb {
+<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="a00267.html">00034</a>         <span class="keyword">class </span><a class="code" href="a00267.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="a00264.html">tbb::cache_aligned_allocator<T></a> <a class="code" href="a00264.html">my_alloc</a>;
+<a name="l00037"></a>00037 
+<a name="l00038"></a>00038         <span class="keyword">typedef</span> <span class="keyword">typename</span> tbb::enumerable_thread_specific<T, my_alloc, ets_no_key> my_ets_type;
+<a name="l00039"></a>00039         my_ets_type 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="a00267.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="a00267.html">combinable</a>( finit _finit) : my_ets(_finit) { }
+<a name="l00047"></a>00047 
+<a name="l00049"></a><a class="code" href="a00267.html#2c87e79ae98588a5780f708773388843">00049</a>         <a class="code" href="a00267.html#2c87e79ae98588a5780f708773388843">~combinable</a>() { 
+<a name="l00050"></a>00050         }
+<a name="l00051"></a>00051 
+<a name="l00052"></a>00052         <a class="code" href="a00267.html">combinable</a>(<span class="keyword">const</span> <a class="code" href="a00267.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.clear(); }
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058         T& local() { <span class="keywordflow">return</span> my_ets.local(); }
+<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.local(exists); }
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&, const T&)</span>
+<a name="l00063"></a>00063         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
+<a name="l00064"></a>00064         T combine(combine_func_t f_combine) { <span class="keywordflow">return</span> my_ets.combine(f_combine); }
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066         <span class="comment">// combine_func_t has signature void(T) or void(const T&)</span>
+<a name="l00067"></a>00067         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
+<a name="l00068"></a>00068         <span class="keywordtype">void</span> combine_each(combine_func_t f_combine) { my_ets.combine_each(f_combine); }
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070     };
+<a name="l00071"></a>00071 } <span class="comment">// namespace tbb</span>
+<a name="l00072"></a>00072 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_combinable_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00455.html b/doc/html/a00455.html
index c82dc24..8c7af05 100644
--- a/doc/html/a00455.html
+++ b/doc/html/a00455.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_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>
@@ -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-2011 Intel Corporation.  All Rights Reserved.</span>
+<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-2012 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,927 +39,1178 @@
 <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_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 "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 "tbb_allocator.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include <string.h></span>  <span class="comment">// for memcpy</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_api.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#else</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#endif</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span>
-<a name="l00037"></a>00037 <span class="keyword">namespace </span>tbb {
-<a name="l00038"></a>00038 
-<a name="l00040"></a><a class="code" href="a00383.html#a8622ae61b7e7737dac26542e181178e">00040</a> <span class="keyword">enum</span> <a class="code" href="a00383.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { ets_key_per_instance, ets_no_key };
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="keyword">namespace </span>interface6 {
-<a name="l00043"></a>00043  
-<a name="l00045"></a>00045     <span class="keyword">namespace </span>internal { 
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
-<a name="l00048"></a>00048         <span class="keyword">class </span>ets_base: tbb::internal::no_copy {
-<a name="l00049"></a>00049         <span class="keyword">protected</span>:
-<a name="l00050"></a>00050 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD key_type;
-<a name="l00052"></a>00052 <span class="preprocessor">#else</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_t key_type;
-<a name="l00054"></a>00054 <span class="preprocessor">#endif</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_GCC_3_3_PROTECTED_BROKEN</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span>        <span class="keyword">public</span>:
-<a name="l00057"></a>00057 <span class="preprocessor">#endif</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span>            <span class="keyword">struct </span>slot;
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060             <span class="keyword">struct </span>array {
-<a name="l00061"></a>00061                 array* next;
-<a name="l00062"></a>00062                 size_t lg_size;
-<a name="l00063"></a>00063                 slot& at( size_t k ) {
-<a name="l00064"></a>00064                     <span class="keywordflow">return</span> ((slot*)(<span class="keywordtype">void</span>*)(<span class="keyword">this</span>+1))[k];
-<a name="l00065"></a>00065                 }
-<a name="l00066"></a>00066                 size_t size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (size_t)1<<lg_size;}
-<a name="l00067"></a>00067                 size_t mask()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size()-1;}
-<a name="l00068"></a>00068                 size_t start( size_t h )<span class="keyword"> const </span>{
-<a name="l00069"></a>00069                     <span class="keywordflow">return</span> h>>(8*<span class="keyword">sizeof</span>(size_t)-lg_size);
-<a name="l00070"></a>00070                 }
-<a name="l00071"></a>00071             };
-<a name="l00072"></a>00072             <span class="keyword">struct </span>slot {
-<a name="l00073"></a>00073                 key_type key;
-<a name="l00074"></a>00074                 <span class="keywordtype">void</span>* ptr;
-<a name="l00075"></a>00075                 <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !key;}
-<a name="l00076"></a>00076                 <span class="keywordtype">bool</span> match( key_type k )<span class="keyword"> const </span>{<span class="keywordflow">return</span> key==k;}
-<a name="l00077"></a>00077                 <span class="keywordtype">bool</span> claim( key_type k ) {
-<a name="l00078"></a>00078                     __TBB_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00228.html">tbb::atomic<key_type></a>)==<span class="keyword">sizeof</span>(key_type), NULL);
-<a name="l00079"></a>00079                     <span class="keywordflow">return</span> tbb::internal::punned_cast<tbb::atomic<key_type>*>(&key)->compare_and_swap(k,0)==0;
-<a name="l00080"></a>00080                 }
-<a name="l00081"></a>00081             };
-<a name="l00082"></a>00082 <span class="preprocessor">#if __TBB_GCC_3_3_PROTECTED_BROKEN</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span>        <span class="keyword">protected</span>:
-<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="keyword">static</span> key_type key_of_current_thread() {
-<a name="l00087"></a>00087                tbb::tbb_thread::id <span class="keywordtype">id</span> = tbb::this_tbb_thread::get_id();
-<a name="l00088"></a>00088                key_type k;
-<a name="l00089"></a>00089                memcpy( &k, &<span class="keywordtype">id</span>, <span class="keyword">sizeof</span>(k) );
-<a name="l00090"></a>00090                <span class="keywordflow">return</span> k;
-<a name="l00091"></a>00091             }
-<a name="l00092"></a>00092 
-<a name="l00094"></a>00094 
-<a name="l00096"></a>00096             atomic<array*> my_root;
-<a name="l00097"></a>00097             atomic<size_t> my_count;
-<a name="l00098"></a>00098             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_local() = 0;
-<a name="l00099"></a>00099             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_array(size_t _size) = 0;  <span class="comment">// _size in bytes</span>
-<a name="l00100"></a>00100             <span class="keyword">virtual</span> <span class="keywordtype">void</span> free_array(<span class="keywordtype">void</span>* ptr, size_t _size) = 0; <span class="comment">// _size in bytes</span>
-<a name="l00101"></a>00101             array* allocate( size_t lg_size ) {
-<a name="l00102"></a>00102                 size_t n = 1<<lg_size;  
-<a name="l00103"></a>00103                 array* a = static_cast<array*>(create_array( <span class="keyword">sizeof</span>(array)+n*<span class="keyword">sizeof</span>(slot) ));
-<a name="l00104"></a>00104                 a->lg_size = lg_size;
-<a name="l00105"></a>00105                 std::memset( a+1, 0, n*<span class="keyword">sizeof</span>(slot) );
-<a name="l00106"></a>00106                 <span class="keywordflow">return</span> a;
-<a name="l00107"></a>00107             }
-<a name="l00108"></a>00108             <span class="keywordtype">void</span> free(array* a) {
-<a name="l00109"></a>00109                 size_t n = 1<<(a->lg_size);  
-<a name="l00110"></a>00110                 free_array( (<span class="keywordtype">void</span> *)a, size_t(<span class="keyword">sizeof</span>(array)+n*<span class="keyword">sizeof</span>(slot)) );
-<a name="l00111"></a>00111             }
-<a name="l00112"></a>00112             <span class="keyword">static</span> size_t hash( key_type k ) {
-<a name="l00113"></a>00113                 <span class="comment">// Multiplicative hashing.  Client should use *upper* bits.</span>
-<a name="l00114"></a>00114                 <span class="comment">// casts required for Mac gcc4.* compiler</span>
-<a name="l00115"></a>00115 <span class="preprocessor">#if __TBB_WORDSIZE == 4</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span>                <span class="keywordflow">return</span> uintptr_t(k)*0x9E3779B9;
-<a name="l00117"></a>00117 <span class="preprocessor">#else</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span>                <span class="keywordflow">return</span> uintptr_t(k)*0x9E3779B97F4A7C15;
-<a name="l00119"></a>00119 <span class="preprocessor">#endif </span>
-<a name="l00120"></a>00120 <span class="preprocessor"></span>            } 
-<a name="l00121"></a>00121         
-<a name="l00122"></a>00122             ets_base() {my_root=NULL; my_count=0;}
-<a name="l00123"></a>00123             <span class="keyword">virtual</span> ~ets_base();  <span class="comment">// g++ complains if this is not virtual...</span>
-<a name="l00124"></a>00124             <span class="keywordtype">void</span>* table_lookup( <span class="keywordtype">bool</span>& exists );
-<a name="l00125"></a>00125             <span class="keywordtype">void</span> table_clear();
-<a name="l00126"></a>00126             slot& table_find( key_type k ) {
-<a name="l00127"></a>00127                 size_t h = hash(k);
-<a name="l00128"></a>00128                 array* r = my_root;
-<a name="l00129"></a>00129                 size_t mask = r->mask();
-<a name="l00130"></a>00130                 <span class="keywordflow">for</span>(size_t i = r->start(h);;i=(i+1)&mask) {
-<a name="l00131"></a>00131                     slot& s = r->at(i);
-<a name="l00132"></a>00132                     <span class="keywordflow">if</span>( s.empty() || s.match(k) )
-<a name="l00133"></a>00133                         <span class="keywordflow">return</span> s;
-<a name="l00134"></a>00134                 }
-<a name="l00135"></a>00135             }
-<a name="l00136"></a>00136             <span class="keywordtype">void</span> table_reserve_for_copy( <span class="keyword">const</span> ets_base& other ) {
-<a name="l00137"></a>00137                 __TBB_ASSERT(!my_root,NULL);
-<a name="l00138"></a>00138                 __TBB_ASSERT(!my_count,NULL);
-<a name="l00139"></a>00139                 <span class="keywordflow">if</span>( other.my_root ) {
-<a name="l00140"></a>00140                     array* a = allocate(other.my_root->lg_size);
-<a name="l00141"></a>00141                     a->next = NULL;
-<a name="l00142"></a>00142                     my_root = a;
-<a name="l00143"></a>00143                     my_count = other.my_count;
-<a name="l00144"></a>00144                 }
-<a name="l00145"></a>00145             }
-<a name="l00146"></a>00146         };
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
-<a name="l00149"></a>00149         ets_base<ETS_key_type>::~ets_base() {
-<a name="l00150"></a>00150             __TBB_ASSERT(!my_root, NULL);
-<a name="l00151"></a>00151         }
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
-<a name="l00154"></a>00154         <span class="keywordtype">void</span> ets_base<ETS_key_type>::table_clear() {
-<a name="l00155"></a>00155             <span class="keywordflow">while</span>( array* r = my_root ) {
-<a name="l00156"></a>00156                 my_root = r->next;
-<a name="l00157"></a>00157                 free(r);
-<a name="l00158"></a>00158             }
-<a name="l00159"></a>00159             my_count = 0;
-<a name="l00160"></a>00160         }
-<a name="l00161"></a>00161                 
-<a name="l00162"></a>00162         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
-<a name="l00163"></a>00163         <span class="keywordtype">void</span>* ets_base<ETS_key_type>::table_lookup( <span class="keywordtype">bool</span>& exists ) {
-<a name="l00164"></a>00164             <span class="keyword">const</span> key_type k = key_of_current_thread(); 
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166             __TBB_ASSERT(k!=0,NULL);
-<a name="l00167"></a>00167             <span class="keywordtype">void</span>* found;
-<a name="l00168"></a>00168             size_t h = hash(k);
-<a name="l00169"></a>00169             <span class="keywordflow">for</span>( array* r=my_root; r; r=r->next ) {
-<a name="l00170"></a>00170                 size_t mask=r->mask();
-<a name="l00171"></a>00171                 <span class="keywordflow">for</span>(size_t i = r->start(h); ;i=(i+1)&mask) {
-<a name="l00172"></a>00172                     slot& s = r->at(i);
-<a name="l00173"></a>00173                     <span class="keywordflow">if</span>( s.empty() ) <span class="keywordflow">break</span>;
-<a name="l00174"></a>00174                     <span class="keywordflow">if</span>( s.match(k) ) {
-<a name="l00175"></a>00175                         <span class="keywordflow">if</span>( r==my_root ) {
-<a name="l00176"></a>00176                             <span class="comment">// Success at top level</span>
-<a name="l00177"></a>00177                             exists = <span class="keyword">true</span>;
-<a name="l00178"></a>00178                             <span class="keywordflow">return</span> s.ptr;
-<a name="l00179"></a>00179                         } <span class="keywordflow">else</span> {
-<a name="l00180"></a>00180                             <span class="comment">// Success at some other level.  Need to insert at top level.</span>
-<a name="l00181"></a>00181                             exists = <span class="keyword">true</span>;
-<a name="l00182"></a>00182                             found = s.ptr;
-<a name="l00183"></a>00183                             <span class="keywordflow">goto</span> insert;
-<a name="l00184"></a>00184                         }
-<a name="l00185"></a>00185                     }
-<a name="l00186"></a>00186                 }
-<a name="l00187"></a>00187             }
-<a name="l00188"></a>00188             <span class="comment">// Key does not yet exist</span>
-<a name="l00189"></a>00189             exists = <span class="keyword">false</span>;
-<a name="l00190"></a>00190             found = create_local();
-<a name="l00191"></a>00191             {
-<a name="l00192"></a>00192                 size_t c = ++my_count;
-<a name="l00193"></a>00193                 array* r = my_root;
-<a name="l00194"></a>00194                 <span class="keywordflow">if</span>( !r || c>r->size()/2 ) {
-<a name="l00195"></a>00195                     size_t s = r ? r->lg_size : 2;
-<a name="l00196"></a>00196                     <span class="keywordflow">while</span>( c>size_t(1)<<(s-1) ) ++s;
-<a name="l00197"></a>00197                     array* a = allocate(s);
-<a name="l00198"></a>00198                     <span class="keywordflow">for</span>(;;) {
-<a name="l00199"></a>00199                         a->next = my_root;
-<a name="l00200"></a>00200                         array* new_r = my_root.compare_and_swap(a,r);
-<a name="l00201"></a>00201                         <span class="keywordflow">if</span>( new_r==r ) <span class="keywordflow">break</span>;
-<a name="l00202"></a>00202                         <span class="keywordflow">if</span>( new_r->lg_size>=s ) {
-<a name="l00203"></a>00203                             <span class="comment">// Another thread inserted an equal or  bigger array, so our array is superfluous.</span>
-<a name="l00204"></a>00204                             free(a);
-<a name="l00205"></a>00205                             <span class="keywordflow">break</span>;
-<a name="l00206"></a>00206                         }
-<a name="l00207"></a>00207                         r = new_r;
-<a name="l00208"></a>00208                     }
-<a name="l00209"></a>00209                 }
-<a name="l00210"></a>00210             }
-<a name="l00211"></a>00211         insert:
-<a name="l00212"></a>00212             <span class="comment">// Guaranteed to be room for it, and it is not present, so search for empty slot and grab it.</span>
-<a name="l00213"></a>00213             array* ir = my_root;
-<a name="l00214"></a>00214             size_t mask = ir->mask();
-<a name="l00215"></a>00215             <span class="keywordflow">for</span>(size_t i = ir->start(h);;i=(i+1)&mask) {
-<a name="l00216"></a>00216                 slot& s = ir->at(i);
-<a name="l00217"></a>00217                 <span class="keywordflow">if</span>( s.empty() ) {
-<a name="l00218"></a>00218                     <span class="keywordflow">if</span>( s.claim(k) ) {
-<a name="l00219"></a>00219                         s.ptr = found;
-<a name="l00220"></a>00220                         <span class="keywordflow">return</span> found;
-<a name="l00221"></a>00221                     }
-<a name="l00222"></a>00222                 }
-<a name="l00223"></a>00223             }
-<a name="l00224"></a>00224         }
-<a name="l00225"></a>00225 
-<a name="l00227"></a>00227         <span class="keyword">template</span> <>
-<a name="l00228"></a>00228         <span class="keyword">class </span>ets_base<ets_key_per_instance>: <span class="keyword">protected</span> ets_base<ets_no_key> {
-<a name="l00229"></a>00229             <span class="keyword">typedef</span> ets_base<ets_no_key> super;
-<a name="l00230"></a>00230 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00231"></a>00231 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD tls_key_t;
-<a name="l00232"></a>00232             <span class="keywordtype">void</span> create_key() { my_key = TlsAlloc(); }
-<a name="l00233"></a>00233             <span class="keywordtype">void</span> destroy_key() { TlsFree(my_key); }
-<a name="l00234"></a>00234             <span class="keywordtype">void</span> set_tls(<span class="keywordtype">void</span> * value) { TlsSetValue(my_key, (LPVOID)value); }
-<a name="l00235"></a>00235             <span class="keywordtype">void</span>* get_tls() { <span class="keywordflow">return</span> (<span class="keywordtype">void</span> *)TlsGetValue(my_key); }
-<a name="l00236"></a>00236 <span class="preprocessor">#else</span>
-<a name="l00237"></a>00237 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_key_t tls_key_t;
-<a name="l00238"></a>00238             <span class="keywordtype">void</span> create_key() { pthread_key_create(&my_key, NULL); }
-<a name="l00239"></a>00239             <span class="keywordtype">void</span> destroy_key() { pthread_key_delete(my_key); }
-<a name="l00240"></a>00240             <span class="keywordtype">void</span> set_tls( <span class="keywordtype">void</span> * value )<span class="keyword"> const </span>{ pthread_setspecific(my_key, value); }
-<a name="l00241"></a>00241             <span class="keywordtype">void</span>* get_tls()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> pthread_getspecific(my_key); }
-<a name="l00242"></a>00242 <span class="preprocessor">#endif</span>
-<a name="l00243"></a>00243 <span class="preprocessor"></span>            tls_key_t my_key;
-<a name="l00244"></a>00244             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_local() = 0;
-<a name="l00245"></a>00245             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_array(size_t _size) = 0;  <span class="comment">// _size in bytes</span>
-<a name="l00246"></a>00246             <span class="keyword">virtual</span> <span class="keywordtype">void</span> free_array(<span class="keywordtype">void</span>* ptr, size_t _size) = 0; <span class="comment">// size in bytes</span>
-<a name="l00247"></a>00247         <span class="keyword">public</span>:
-<a name="l00248"></a>00248             ets_base() {create_key();}
-<a name="l00249"></a>00249             ~ets_base() {destroy_key();}
-<a name="l00250"></a>00250             <span class="keywordtype">void</span>* table_lookup( <span class="keywordtype">bool</span>& exists ) {
-<a name="l00251"></a>00251                 <span class="keywordtype">void</span>* found = get_tls();
-<a name="l00252"></a>00252                 <span class="keywordflow">if</span>( found ) {
-<a name="l00253"></a>00253                     exists=<span class="keyword">true</span>;
-<a name="l00254"></a>00254                 } <span class="keywordflow">else</span> {
-<a name="l00255"></a>00255                     found = super::table_lookup(exists);
-<a name="l00256"></a>00256                     set_tls(found);
-<a name="l00257"></a>00257                 }
-<a name="l00258"></a>00258                 <span class="keywordflow">return</span> found; 
-<a name="l00259"></a>00259             }
-<a name="l00260"></a>00260             <span class="keywordtype">void</span> table_clear() {
-<a name="l00261"></a>00261                 destroy_key();
-<a name="l00262"></a>00262                 create_key(); 
-<a name="l00263"></a>00263                 super::table_clear();
-<a name="l00264"></a>00264             }
-<a name="l00265"></a>00265         };
-<a name="l00266"></a>00266 
-<a name="l00268"></a>00268         <span class="keyword">template</span>< <span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value >
-<a name="l00269"></a>00269         <span class="keyword">class </span>enumerable_thread_specific_iterator 
-<a name="l00270"></a>00270 #if defined(_WIN64) && defined(_MSC_VER) 
-<a name="l00271"></a>00271             <span class="comment">// Ensure that Microsoft's internal template function _Val_type works correctly.</span>
-<a name="l00272"></a>00272             : public std::iterator<std::random_access_iterator_tag,Value>
-<a name="l00273"></a>00273 #endif <span class="comment">/* defined(_WIN64) && defined(_MSC_VER) */</span>
-<a name="l00274"></a>00274         {
-<a name="l00276"></a>00276         
-<a name="l00277"></a>00277             Container *my_container;
-<a name="l00278"></a>00278             <span class="keyword">typename</span> Container::size_type my_index;
-<a name="l00279"></a>00279             <span class="keyword">mutable</span> Value *my_value;
-<a name="l00280"></a>00280         
-<a name="l00281"></a>00281             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T>
-<a name="l00282"></a>00282             <span class="keyword">friend</span> enumerable_thread_specific_iterator<C,T> operator+( ptrdiff_t offset, 
-<a name="l00283"></a>00283                                                                        <span class="keyword">const</span> enumerable_thread_specific_iterator<C,T>& v );
-<a name="l00284"></a>00284         
-<a name="l00285"></a>00285             <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="l00286"></a>00286             <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="l00287"></a>00287                                     <span class="keyword">const</span> enumerable_thread_specific_iterator<C,U>& j );
-<a name="l00288"></a>00288         
-<a name="l00289"></a>00289             <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="l00290"></a>00290             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<C,T>& i, 
-<a name="l00291"></a>00291                                    <span class="keyword">const</span> enumerable_thread_specific_iterator<C,U>& j );
-<a name="l00292"></a>00292         
-<a name="l00293"></a>00293             <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="l00294"></a>00294             <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="l00295"></a>00295             
-<a name="l00296"></a>00296             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
-<a name="l00297"></a>00297             <span class="keyword">friend</span> <span class="keyword">class </span>enumerable_thread_specific_iterator;
-<a name="l00298"></a>00298         
-<a name="l00299"></a>00299             <span class="keyword">public</span>:
-<a name="l00300"></a>00300         
-<a name="l00301"></a>00301             enumerable_thread_specific_iterator( <span class="keyword">const</span> Container &container, <span class="keyword">typename</span> Container::size_type index ) : 
-<a name="l00302"></a>00302                 my_container(&const_cast<Container &>(container)), my_index(index), my_value(NULL) {}
-<a name="l00303"></a>00303         
-<a name="l00305"></a>00305             enumerable_thread_specific_iterator() : my_container(NULL), my_index(0), my_value(NULL) {}
-<a name="l00306"></a>00306         
-<a name="l00307"></a>00307             <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00308"></a>00308             enumerable_thread_specific_iterator( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container, U>& other ) :
-<a name="l00309"></a>00309                     my_container( other.my_container ), my_index( other.my_index), my_value( const_cast<Value *>(other.my_value) ) {}
-<a name="l00310"></a>00310         
-<a name="l00311"></a>00311             enumerable_thread_specific_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00312"></a>00312                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator(*my_container, my_index + offset);
-<a name="l00313"></a>00313             }
-<a name="l00314"></a>00314         
-<a name="l00315"></a>00315             enumerable_thread_specific_iterator &operator+=( ptrdiff_t offset ) {
-<a name="l00316"></a>00316                 my_index += offset;
-<a name="l00317"></a>00317                 my_value = NULL;
-<a name="l00318"></a>00318                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00319"></a>00319             }
-<a name="l00320"></a>00320         
-<a name="l00321"></a>00321             enumerable_thread_specific_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
-<a name="l00322"></a>00322                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator( *my_container, my_index-offset );
-<a name="l00323"></a>00323             }
-<a name="l00324"></a>00324         
-<a name="l00325"></a>00325             enumerable_thread_specific_iterator &operator-=( ptrdiff_t offset ) {
-<a name="l00326"></a>00326                 my_index -= offset;
-<a name="l00327"></a>00327                 my_value = NULL;
-<a name="l00328"></a>00328                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00329"></a>00329             }
-<a name="l00330"></a>00330         
-<a name="l00331"></a>00331             Value& operator*()<span class="keyword"> const </span>{
-<a name="l00332"></a>00332                 Value* value = my_value;
-<a name="l00333"></a>00333                 <span class="keywordflow">if</span>( !value ) {
-<a name="l00334"></a>00334                     value = my_value = reinterpret_cast<Value *>(&(*my_container)[my_index].value);
-<a name="l00335"></a>00335                 }
-<a name="l00336"></a>00336                 __TBB_ASSERT( value==reinterpret_cast<Value *>(&(*my_container)[my_index].value), <span class="stringliteral">"corrupt cache"</span> );
-<a name="l00337"></a>00337                 <span class="keywordflow">return</span> *value;
-<a name="l00338"></a>00338             }
-<a name="l00339"></a>00339         
-<a name="l00340"></a>00340             Value& operator[]( ptrdiff_t k )<span class="keyword"> const </span>{
-<a name="l00341"></a>00341                <span class="keywordflow">return</span> (*my_container)[my_index + k].value;
-<a name="l00342"></a>00342             }
-<a name="l00343"></a>00343         
-<a name="l00344"></a>00344             Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-<a name="l00345"></a>00345         
-<a name="l00346"></a>00346             enumerable_thread_specific_iterator& operator++() {
-<a name="l00347"></a>00347                 ++my_index;
-<a name="l00348"></a>00348                 my_value = NULL;
-<a name="l00349"></a>00349                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00350"></a>00350             }
-<a name="l00351"></a>00351         
-<a name="l00352"></a>00352             enumerable_thread_specific_iterator& operator--() {
-<a name="l00353"></a>00353                 --my_index;
-<a name="l00354"></a>00354                 my_value = NULL;
-<a name="l00355"></a>00355                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00356"></a>00356             }
-<a name="l00357"></a>00357         
-<a name="l00359"></a>00359             enumerable_thread_specific_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00360"></a>00360                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
-<a name="l00361"></a>00361                 ++my_index;
-<a name="l00362"></a>00362                 my_value = NULL;
-<a name="l00363"></a>00363                 <span class="keywordflow">return</span> result;
-<a name="l00364"></a>00364             }
-<a name="l00365"></a>00365         
-<a name="l00367"></a>00367             enumerable_thread_specific_iterator operator--(<span class="keywordtype">int</span>) {
-<a name="l00368"></a>00368                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
-<a name="l00369"></a>00369                 --my_index;
-<a name="l00370"></a>00370                 my_value = NULL;
-<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             <span class="comment">// STL support</span>
-<a name="l00375"></a>00375             <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00376"></a>00376             <span class="keyword">typedef</span> Value value_type;
-<a name="l00377"></a>00377             <span class="keyword">typedef</span> Value* pointer;
-<a name="l00378"></a>00378             <span class="keyword">typedef</span> Value& reference;
-<a name="l00379"></a>00379             <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
-<a name="l00380"></a>00380         };
-<a name="l00381"></a>00381         
-<a name="l00382"></a>00382         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T>
-<a name="l00383"></a>00383         enumerable_thread_specific_iterator<Container,T> operator+( ptrdiff_t offset, 
-<a name="l00384"></a>00384                                                                     <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& v ) {
-<a name="l00385"></a>00385             <span class="keywordflow">return</span> enumerable_thread_specific_iterator<Container,T>( v.my_container, v.my_index + offset );
-<a name="l00386"></a>00386         }
-<a name="l00387"></a>00387         
-<a name="l00388"></a>00388         <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="l00389"></a>00389         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00390"></a>00390                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00391"></a>00391             <span class="keywordflow">return</span> i.my_index==j.my_index && i.my_container == j.my_container;
-<a name="l00392"></a>00392         }
-<a name="l00393"></a>00393         
-<a name="l00394"></a>00394         <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="l00395"></a>00395         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00396"></a>00396                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00397"></a>00397             <span class="keywordflow">return</span> !(i==j);
-<a name="l00398"></a>00398         }
-<a name="l00399"></a>00399         
-<a name="l00400"></a>00400         <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="l00401"></a>00401         <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00402"></a>00402                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00403"></a>00403             <span class="keywordflow">return</span> i.my_index<j.my_index;
-<a name="l00404"></a>00404         }
-<a name="l00405"></a>00405         
-<a name="l00406"></a>00406         <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="l00407"></a>00407         <span class="keywordtype">bool</span> operator>( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00408"></a>00408                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00409"></a>00409             <span class="keywordflow">return</span> j<i;
-<a name="l00410"></a>00410         }
-<a name="l00411"></a>00411         
-<a name="l00412"></a>00412         <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="l00413"></a>00413         <span class="keywordtype">bool</span> operator>=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00414"></a>00414                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00415"></a>00415             <span class="keywordflow">return</span> !(i<j);
-<a name="l00416"></a>00416         }
-<a name="l00417"></a>00417         
-<a name="l00418"></a>00418         <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="l00419"></a>00419         <span class="keywordtype">bool</span> operator<=( const enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00420"></a>00420                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00421"></a>00421             <span class="keywordflow">return</span> !(j<i);
-<a name="l00422"></a>00422         }
-<a name="l00423"></a>00423         
-<a name="l00424"></a>00424         <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="l00425"></a>00425         ptrdiff_t operator-( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
-<a name="l00426"></a>00426                              <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
-<a name="l00427"></a>00427             <span class="keywordflow">return</span> i.my_index-j.my_index;
-<a name="l00428"></a>00428         }
-<a name="l00429"></a>00429 
-<a name="l00430"></a>00430     <span class="keyword">template</span><<span class="keyword">typename</span> SegmentedContainer, <span class="keyword">typename</span> Value >
-<a name="l00431"></a>00431         <span class="keyword">class </span>segmented_iterator
-<a name="l00432"></a>00432 #if defined(_WIN64) && defined(_MSC_VER)
-<a name="l00433"></a>00433         : public std::iterator<std::input_iterator_tag, Value>
-<a name="l00434"></a>00434 #endif
-<a name="l00435"></a>00435         {
-<a name="l00436"></a>00436             <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="l00437"></a>00437             <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="l00438"></a>00438 
-<a name="l00439"></a>00439             <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="l00440"></a>00440             <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="l00441"></a>00441             
-<a name="l00442"></a>00442             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
-<a name="l00443"></a>00443             <span class="keyword">friend</span> <span class="keyword">class </span>segmented_iterator;
+<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_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
+<a name="l00028"></a>00028 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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">#include <iterator></span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include <utility></span>      <span class="comment">// Need std::pair</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include <cstring></span>      <span class="comment">// Need std::memset</span>
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include "tbb_allocator.h"</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
+<a name="l00043"></a>00043 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00044"></a>00044 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00047"></a>00047 <span class="preprocessor">#include "internal/_concurrent_unordered_impl.h"</span> <span class="comment">// Need tbb_hasher</span>
+<a name="l00048"></a>00048 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#include <typeinfo></span>
+<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_STATISTICS</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#include <stdio.h></span>
+<a name="l00053"></a>00053 <span class="preprocessor">#endif</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00055"></a>00055 <span class="keyword">namespace </span>tbb {
+<a name="l00056"></a>00056 
+<a name="l00058"></a>00058 <span class="keyword">template</span><<span class="keyword">typename</span> Key>
+<a name="l00059"></a><a class="code" href="a00347.html">00059</a> <span class="keyword">struct </span><a class="code" href="a00347.html">tbb_hash_compare</a> {
+<a name="l00060"></a>00060     <span class="keyword">static</span> size_t hash( <span class="keyword">const</span> Key& a ) { <span class="keywordflow">return</span> tbb_hasher(a); }
+<a name="l00061"></a>00061     <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="l00062"></a>00062 };
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="keyword">namespace </span>interface5 {
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066     <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="l00067"></a>00067     <span class="keyword">class </span><a class="code" href="a00269.html">concurrent_hash_map</a>;
+<a name="l00068"></a>00068 
+<a name="l00070"></a>00070     <span class="keyword">namespace </span>internal {
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072 
+<a name="l00074"></a>00074     <span class="keyword">typedef</span> size_t hashcode_t;
+<a name="l00076"></a>00076     <span class="keyword">struct </span>hash_map_node_base : tbb::internal::no_copy {
+<a name="l00078"></a>00078         <span class="keyword">typedef</span> <a class="code" href="a00333.html">spin_rw_mutex</a> mutex_t;
+<a name="l00080"></a>00080         <span class="keyword">typedef</span> mutex_t::scoped_lock scoped_t;
+<a name="l00082"></a>00082         hash_map_node_base *next;
+<a name="l00083"></a>00083         mutex_t <a class="code" href="a00301.html">mutex</a>;
+<a name="l00084"></a>00084     };
+<a name="l00086"></a>00086     <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="l00088"></a>00088     <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="l00090"></a>00090     <span class="keyword">class </span>hash_map_base {
+<a name="l00091"></a>00091     <span class="keyword">public</span>:
+<a name="l00093"></a>00093         <span class="keyword">typedef</span> size_t size_type;
+<a name="l00095"></a>00095         <span class="keyword">typedef</span> size_t hashcode_t;
+<a name="l00097"></a>00097         <span class="keyword">typedef</span> size_t segment_index_t;
+<a name="l00099"></a>00099         <span class="keyword">typedef</span> hash_map_node_base node_base;
+<a name="l00101"></a>00101         <span class="keyword">struct </span>bucket : tbb::internal::no_copy {
+<a name="l00103"></a>00103             <span class="keyword">typedef</span> spin_rw_mutex mutex_t;
+<a name="l00105"></a>00105             <span class="keyword">typedef</span> mutex_t::scoped_lock scoped_t;
+<a name="l00106"></a>00106             mutex_t mutex;
+<a name="l00107"></a>00107             node_base *node_list;
+<a name="l00108"></a>00108         };
+<a name="l00110"></a>00110         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_block = 1;
+<a name="l00112"></a>00112         <span class="keyword">static</span> size_type <span class="keyword">const</span> embedded_buckets = 1<<embedded_block;
+<a name="l00114"></a>00114         <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="l00116"></a>00116 <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="l00118"></a>00118 <span class="comment"></span>        <span class="keyword">typedef</span> bucket *segment_ptr_t;
+<a name="l00120"></a>00120         <span class="keyword">typedef</span> segment_ptr_t segments_table_t[pointers_per_table];
+<a name="l00122"></a>00122         atomic<hashcode_t> my_mask;
+<a name="l00124"></a>00124         segments_table_t my_table;
+<a name="l00126"></a>00126         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="l00128"></a>00128 <span class="comment"></span>        bucket my_embedded_segment[embedded_buckets];
+<a name="l00129"></a>00129 <span class="preprocessor">#if __TBB_STATISTICS</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span>        atomic<unsigned> my_info_resizes; <span class="comment">// concurrent ones</span>
+<a name="l00131"></a>00131         <span class="keyword">mutable</span> atomic<unsigned> my_info_restarts; <span class="comment">// race collisions</span>
+<a name="l00132"></a>00132         atomic<unsigned> my_info_rehashes;  <span class="comment">// invocations of rehash_bucket</span>
+<a name="l00133"></a>00133 <span class="preprocessor">#endif</span>
+<a name="l00135"></a>00135 <span class="preprocessor">        hash_map_base() {</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span>            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="l00137"></a>00137                 + <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="l00138"></a>00138                 + embedded_buckets*<span class="keyword">sizeof</span>(bucket) ); <span class="comment">// n*8 or n*16</span>
+<a name="l00139"></a>00139             <span class="keywordflow">for</span>( size_type i = 0; i < embedded_block; i++ ) <span class="comment">// fill the table</span>
+<a name="l00140"></a>00140                 my_table[i] = my_embedded_segment + segment_base(i);
+<a name="l00141"></a>00141             my_mask = embedded_buckets - 1;
+<a name="l00142"></a>00142             __TBB_ASSERT( embedded_block <= first_block, <span class="stringliteral">"The first block number must include embedded blocks"</span>);
+<a name="l00143"></a>00143 <span class="preprocessor">#if __TBB_STATISTICS</span>
+<a name="l00144"></a>00144 <span class="preprocessor"></span>            my_info_resizes = 0; <span class="comment">// concurrent ones</span>
+<a name="l00145"></a>00145             my_info_restarts = 0; <span class="comment">// race collisions</span>
+<a name="l00146"></a>00146             my_info_rehashes = 0;  <span class="comment">// invocations of rehash_bucket</span>
+<a name="l00147"></a>00147 <span class="preprocessor">#endif</span>
+<a name="l00148"></a>00148 <span class="preprocessor"></span>        }
+<a name="l00149"></a>00149 
+<a name="l00151"></a>00151         <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
+<a name="l00152"></a>00152             <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
+<a name="l00153"></a>00153         }
+<a name="l00154"></a>00154 
+<a name="l00156"></a>00156         <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
+<a name="l00157"></a>00157             <span class="keywordflow">return</span> (segment_index_t(1)<<k & ~segment_index_t(1));
+<a name="l00158"></a>00158         }
+<a name="l00159"></a>00159 
+<a name="l00161"></a>00161         <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
+<a name="l00162"></a>00162             <span class="keywordflow">return</span> size_type(1)<<k; <span class="comment">// fake value for k==0</span>
+<a name="l00163"></a>00163         }
+<a name="l00164"></a>00164 
+<a name="l00166"></a>00166         <span class="keyword">static</span> <span class="keywordtype">bool</span> is_valid( <span class="keywordtype">void</span> *ptr ) {
+<a name="l00167"></a>00167             <span class="keywordflow">return</span> reinterpret_cast<uintptr_t>(ptr) > uintptr_t(63);
+<a name="l00168"></a>00168         }
+<a name="l00169"></a>00169 
+<a name="l00171"></a>00171         <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="l00172"></a>00172             <span class="keywordflow">if</span>( is_initial ) std::memset(ptr, 0, sz*<span class="keyword">sizeof</span>(bucket) );
+<a name="l00173"></a>00173             <span class="keywordflow">else</span> <span class="keywordflow">for</span>(size_type i = 0; i < sz; i++, ptr++) {
+<a name="l00174"></a>00174                 *reinterpret_cast<intptr_t*>(&ptr->mutex) = 0;
+<a name="l00175"></a>00175                 ptr->node_list = rehash_req;
+<a name="l00176"></a>00176             }
+<a name="l00177"></a>00177         }
+<a name="l00178"></a>00178 
+<a name="l00180"></a>00180         <span class="keyword">static</span> <span class="keywordtype">void</span> add_to_bucket( bucket *b, node_base *n ) {
+<a name="l00181"></a>00181             __TBB_ASSERT(b->node_list != rehash_req, NULL);
+<a name="l00182"></a>00182             n->next = b->node_list;
+<a name="l00183"></a>00183             b->node_list = n; <span class="comment">// its under lock and flag is set</span>
+<a name="l00184"></a>00184         }
+<a name="l00185"></a>00185 
+<a name="l00187"></a>00187         <span class="keyword">struct </span>enable_segment_failsafe : tbb::internal::no_copy {
+<a name="l00188"></a>00188             segment_ptr_t *my_segment_ptr;
+<a name="l00189"></a>00189             enable_segment_failsafe(segments_table_t &table, segment_index_t k) : my_segment_ptr(&table[k]) {}
+<a name="l00190"></a>00190             ~enable_segment_failsafe() {
+<a name="l00191"></a>00191                 <span class="keywordflow">if</span>( my_segment_ptr ) *my_segment_ptr = 0; <span class="comment">// indicate no allocation in progress</span>
+<a name="l00192"></a>00192             }
+<a name="l00193"></a>00193         };
+<a name="l00194"></a>00194 
+<a name="l00196"></a>00196         <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="l00197"></a>00197             __TBB_ASSERT( k, <span class="stringliteral">"Zero segment must be embedded"</span> );
+<a name="l00198"></a>00198             enable_segment_failsafe watchdog( my_table, k );
+<a name="l00199"></a>00199             cache_aligned_allocator<bucket> alloc;
+<a name="l00200"></a>00200             size_type sz;
+<a name="l00201"></a>00201             __TBB_ASSERT( !is_valid(my_table[k]), <span class="stringliteral">"Wrong concurrent assignment"</span>);
+<a name="l00202"></a>00202             <span class="keywordflow">if</span>( k >= first_block ) {
+<a name="l00203"></a>00203                 sz = segment_size( k );
+<a name="l00204"></a>00204                 segment_ptr_t ptr = alloc.allocate( sz );
+<a name="l00205"></a>00205                 init_buckets( ptr, sz, is_initial );
+<a name="l00206"></a>00206                 itt_hide_store_word( my_table[k], ptr );
+<a name="l00207"></a>00207                 sz <<= 1;<span class="comment">// double it to get entire capacity of the container</span>
+<a name="l00208"></a>00208             } <span class="keywordflow">else</span> { <span class="comment">// the first block</span>
+<a name="l00209"></a>00209                 __TBB_ASSERT( k == embedded_block, <span class="stringliteral">"Wrong segment index"</span> );
+<a name="l00210"></a>00210                 sz = segment_size( first_block );
+<a name="l00211"></a>00211                 segment_ptr_t ptr = alloc.allocate( sz - embedded_buckets );
+<a name="l00212"></a>00212                 init_buckets( ptr, sz - embedded_buckets, is_initial );
+<a name="l00213"></a>00213                 ptr -= segment_base(embedded_block);
+<a name="l00214"></a>00214                 <span class="keywordflow">for</span>(segment_index_t i = embedded_block; i < first_block; i++) <span class="comment">// calc the offsets</span>
+<a name="l00215"></a>00215                     itt_hide_store_word( my_table[i], ptr + segment_base(i) );
+<a name="l00216"></a>00216             }
+<a name="l00217"></a>00217             itt_store_word_with_release( my_mask, sz-1 );
+<a name="l00218"></a>00218             watchdog.my_segment_ptr = 0;
+<a name="l00219"></a>00219         }
+<a name="l00220"></a>00220 
+<a name="l00222"></a>00222         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="l00223"></a>00223             segment_index_t s = segment_index_of( h );
+<a name="l00224"></a>00224             h -= segment_base(s);
+<a name="l00225"></a>00225             segment_ptr_t seg = my_table[s];
+<a name="l00226"></a>00226             __TBB_ASSERT( is_valid(seg), <span class="stringliteral">"hashcode must be cut by valid mask for allocated segments"</span> );
+<a name="l00227"></a>00227             <span class="keywordflow">return</span> &seg[h];
+<a name="l00228"></a>00228         }
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230         <span class="comment">// internal serial rehashing helper</span>
+<a name="l00231"></a>00231         <span class="keywordtype">void</span> mark_rehashed_levels( hashcode_t h ) <span class="keywordflow">throw</span> () {
+<a name="l00232"></a>00232             segment_index_t s = segment_index_of( h );
+<a name="l00233"></a>00233             <span class="keywordflow">while</span>( segment_ptr_t seg = my_table[++s] )
+<a name="l00234"></a>00234                 <span class="keywordflow">if</span>( seg[h].node_list == rehash_req ) {
+<a name="l00235"></a>00235                     seg[h].node_list = empty_rehashed;
+<a name="l00236"></a>00236                     mark_rehashed_levels( h + ((hashcode_t)1<<s) ); <span class="comment">// optimized segment_base(s)</span>
+<a name="l00237"></a>00237                 }
+<a name="l00238"></a>00238         }
+<a name="l00239"></a>00239 
+<a name="l00241"></a>00241         <span class="comment">// Splitting into two functions should help inlining</span>
+<a name="l00242"></a>00242         <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="l00243"></a>00243             hashcode_t m_now, m_old = m;
+<a name="l00244"></a>00244             m_now = (hashcode_t) itt_load_word_with_acquire( my_mask );
+<a name="l00245"></a>00245             <span class="keywordflow">if</span>( m_old != m_now )
+<a name="l00246"></a>00246                 <span class="keywordflow">return</span> check_rehashing_collision( h, m_old, m = m_now );
+<a name="l00247"></a>00247             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00248"></a>00248         }
+<a name="l00249"></a>00249 
+<a name="l00251"></a>00251         <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="l00252"></a>00252             __TBB_ASSERT(m_old != m, NULL); <span class="comment">// TODO?: m arg could be optimized out by passing h = h&m</span>
+<a name="l00253"></a>00253             <span class="keywordflow">if</span>( (h & m_old) != (h & m) ) { <span class="comment">// mask changed for this hashcode, rare event</span>
+<a name="l00254"></a>00254                 <span class="comment">// condition above proves that 'h' has some other bits set beside 'm_old'</span>
+<a name="l00255"></a>00255                 <span class="comment">// find next applicable mask after m_old    //TODO: look at bsl instruction</span>
+<a name="l00256"></a>00256                 <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="l00257"></a>00257                     ;
+<a name="l00258"></a>00258                 m_old = (m_old<<1) - 1; <span class="comment">// get full mask from a bit</span>
+<a name="l00259"></a>00259                 __TBB_ASSERT((m_old&(m_old+1))==0 && m_old <= m, NULL);
+<a name="l00260"></a>00260                 <span class="comment">// check whether it is rehashing/ed</span>
+<a name="l00261"></a>00261                 <span class="keywordflow">if</span>( itt_load_word_with_acquire(get_bucket(h & m_old)->node_list) != rehash_req )
+<a name="l00262"></a>00262                 {
+<a name="l00263"></a>00263 <span class="preprocessor">#if __TBB_STATISTICS</span>
+<a name="l00264"></a>00264 <span class="preprocessor"></span>                    my_info_restarts++; <span class="comment">// race collisions</span>
+<a name="l00265"></a>00265 <span class="preprocessor">#endif</span>
+<a name="l00266"></a>00266 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00267"></a>00267                 }
+<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 = __TBB_Log2( mask+1 ); <span class="comment">//optimized segment_index_of</span>
+<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="keywordflow">if</span>( !itt_hide_load_word(my_table[new_seg])
+<a name="l00281"></a>00281                   && __TBB_CompareAndSwapW(&my_table[new_seg], 2, 0) == 0 )
+<a name="l00282"></a>00282                     <span class="keywordflow">return</span> new_seg; <span class="comment">// The value must be processed</span>
+<a name="l00283"></a>00283             }
+<a name="l00284"></a>00284             <span class="keywordflow">return</span> 0;
+<a name="l00285"></a>00285         }
+<a name="l00286"></a>00286 
+<a name="l00288"></a>00288         <span class="keywordtype">void</span> reserve(size_type buckets) {
+<a name="l00289"></a>00289             <span class="keywordflow">if</span>( !buckets-- ) <span class="keywordflow">return</span>;
+<a name="l00290"></a>00290             <span class="keywordtype">bool</span> is_initial = !my_size;
+<a name="l00291"></a>00291             <span class="keywordflow">for</span>( size_type m = my_mask; buckets > m; m = my_mask )
+<a name="l00292"></a>00292                 enable_segment( segment_index_of( m+1 ), is_initial );
+<a name="l00293"></a>00293         }
+<a name="l00295"></a>00295         <span class="keywordtype">void</span> internal_swap(hash_map_base &table) {
+<a name="l00296"></a>00296             std::swap(this->my_mask, table.my_mask);
+<a name="l00297"></a>00297             std::swap(this->my_size, table.my_size);
+<a name="l00298"></a>00298             <span class="keywordflow">for</span>(size_type i = 0; i < embedded_buckets; i++)
+<a name="l00299"></a>00299                 std::swap(this->my_embedded_segment[i].node_list, table.my_embedded_segment[i].node_list);
+<a name="l00300"></a>00300             <span class="keywordflow">for</span>(size_type i = embedded_block; i < pointers_per_table; i++)
+<a name="l00301"></a>00301                 std::swap(this->my_table[i], table.my_table[i]);
+<a name="l00302"></a>00302         }
+<a name="l00303"></a>00303     };
+<a name="l00304"></a>00304 
+<a name="l00305"></a>00305     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
+<a name="l00306"></a>00306     <span class="keyword">class </span>hash_map_range;
+<a name="l00307"></a>00307 
+<a name="l00309"></a>00309 
+<a name="l00311"></a>00311     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00312"></a>00312     <span class="keyword">class </span>hash_map_iterator
+<a name="l00313"></a>00313         : <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value>
+<a name="l00314"></a>00314     {
+<a name="l00315"></a>00315         <span class="keyword">typedef</span> Container map_type;
+<a name="l00316"></a>00316         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::node node;
+<a name="l00317"></a>00317         <span class="keyword">typedef</span> hash_map_base::node_base node_base;
+<a name="l00318"></a>00318         <span class="keyword">typedef</span> hash_map_base::bucket bucket;
+<a name="l00319"></a>00319 
+<a name="l00320"></a>00320         <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="l00321"></a>00321         <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="l00322"></a>00322 
+<a name="l00323"></a>00323         <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="l00324"></a>00324         <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="l00325"></a>00325 
+<a name="l00326"></a>00326         <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="l00327"></a>00327         <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="l00328"></a>00328 
+<a name="l00329"></a>00329         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
+<a name="l00330"></a>00330         <span class="keyword">friend</span> <span class="keyword">class </span>hash_map_iterator;
+<a name="l00331"></a>00331 
+<a name="l00332"></a>00332         <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00333"></a>00333         <span class="keyword">friend</span> <span class="keyword">class </span>hash_map_range;
+<a name="l00334"></a>00334 
+<a name="l00335"></a>00335         <span class="keywordtype">void</span> advance_to_next_bucket() { <span class="comment">// TODO?: refactor to iterator_base class</span>
+<a name="l00336"></a>00336             size_t k = my_index+1;
+<a name="l00337"></a>00337             <span class="keywordflow">while</span>( my_bucket && k <= my_map->my_mask ) {
+<a name="l00338"></a>00338                 <span class="comment">// Following test uses 2's-complement wizardry</span>
+<a name="l00339"></a>00339                 <span class="keywordflow">if</span>( k& (k-2) ) <span class="comment">// not the beginning of a segment</span>
+<a name="l00340"></a>00340                     ++my_bucket;
+<a name="l00341"></a>00341                 <span class="keywordflow">else</span> my_bucket = my_map->get_bucket( k );
+<a name="l00342"></a>00342                 my_node = static_cast<node*>( my_bucket->node_list );
+<a name="l00343"></a>00343                 <span class="keywordflow">if</span>( hash_map_base::is_valid(my_node) ) {
+<a name="l00344"></a>00344                     my_index = k; <span class="keywordflow">return</span>;
+<a name="l00345"></a>00345                 }
+<a name="l00346"></a>00346                 ++k;
+<a name="l00347"></a>00347             }
+<a name="l00348"></a>00348             my_bucket = 0; my_node = 0; my_index = k; <span class="comment">// the end</span>
+<a name="l00349"></a>00349         }
+<a name="l00350"></a>00350 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+<a name="l00351"></a>00351 <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="l00352"></a>00352         <span class="keyword">friend</span> <span class="keyword">class </span>interface5::concurrent_hash_map;
+<a name="l00353"></a>00353 <span class="preprocessor">#else</span>
+<a name="l00354"></a>00354 <span class="preprocessor"></span>    <span class="keyword">public</span>: <span class="comment">// workaround</span>
+<a name="l00355"></a>00355 <span class="preprocessor">#endif</span>
+<a name="l00357"></a>00357 <span class="preprocessor">        const Container *my_map;</span>
+<a name="l00358"></a>00358 <span class="preprocessor"></span>
+<a name="l00360"></a>00360         size_t my_index;
+<a name="l00361"></a>00361 
+<a name="l00363"></a>00363         <span class="keyword">const</span> bucket *my_bucket;
+<a name="l00364"></a>00364 
+<a name="l00366"></a>00366         node *my_node;
+<a name="l00367"></a>00367 
+<a name="l00368"></a>00368         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="l00369"></a>00369 
+<a name="l00370"></a>00370     <span class="keyword">public</span>:
+<a name="l00372"></a>00372         hash_map_iterator() {}
+<a name="l00373"></a>00373         hash_map_iterator( <span class="keyword">const</span> hash_map_iterator<Container,typename Container::value_type> &other ) :
+<a name="l00374"></a>00374             my_map(other.my_map),
+<a name="l00375"></a>00375             my_index(other.my_index),
+<a name="l00376"></a>00376             my_bucket(other.my_bucket),
+<a name="l00377"></a>00377             my_node(other.my_node)
+<a name="l00378"></a>00378         {}
+<a name="l00379"></a>00379         Value& operator*()<span class="keyword"> const </span>{
+<a name="l00380"></a>00380             __TBB_ASSERT( hash_map_base::is_valid(my_node), <span class="stringliteral">"iterator uninitialized or at end of container?"</span> );
+<a name="l00381"></a>00381             <span class="keywordflow">return</span> my_node->item;
+<a name="l00382"></a>00382         }
+<a name="l00383"></a>00383         Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+<a name="l00384"></a>00384         hash_map_iterator& operator++();
+<a name="l00385"></a>00385 
+<a name="l00387"></a>00387         hash_map_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00388"></a>00388             hash_map_iterator old(*<span class="keyword">this</span>);
+<a name="l00389"></a>00389             operator++();
+<a name="l00390"></a>00390             <span class="keywordflow">return</span> old;
+<a name="l00391"></a>00391         }
+<a name="l00392"></a>00392     };
+<a name="l00393"></a>00393 
+<a name="l00394"></a>00394     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00395"></a>00395     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="l00396"></a>00396         my_map(&map),
+<a name="l00397"></a>00397         my_index(index),
+<a name="l00398"></a>00398         my_bucket(b),
+<a name="l00399"></a>00399         my_node( static_cast<node*>(n) )
+<a name="l00400"></a>00400     {
+<a name="l00401"></a>00401         <span class="keywordflow">if</span>( b && !hash_map_base::is_valid(n) )
+<a name="l00402"></a>00402             advance_to_next_bucket();
+<a name="l00403"></a>00403     }
+<a name="l00404"></a>00404 
+<a name="l00405"></a>00405     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00406"></a>00406     hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {
+<a name="l00407"></a>00407         my_node = static_cast<node*>( my_node->next );
+<a name="l00408"></a>00408         <span class="keywordflow">if</span>( !my_node ) advance_to_next_bucket();
+<a name="l00409"></a>00409         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00410"></a>00410     }
+<a name="l00411"></a>00411 
+<a name="l00412"></a>00412     <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="l00413"></a>00413     <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="l00414"></a>00414         <span class="keywordflow">return</span> i.my_node == j.my_node && i.my_map == j.my_map;
+<a name="l00415"></a>00415     }
+<a name="l00416"></a>00416 
+<a name="l00417"></a>00417     <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="l00418"></a>00418     <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="l00419"></a>00419         <span class="keywordflow">return</span> i.my_node != j.my_node || i.my_map != j.my_map;
+<a name="l00420"></a>00420     }
+<a name="l00421"></a>00421 
+<a name="l00423"></a>00423 
+<a name="l00424"></a>00424     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
+<a name="l00425"></a>00425     <span class="keyword">class </span>hash_map_range {
+<a name="l00426"></a>00426         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::map_type map_type;
+<a name="l00427"></a>00427         Iterator my_begin;
+<a name="l00428"></a>00428         Iterator my_end;
+<a name="l00429"></a>00429         <span class="keyword">mutable</span> Iterator my_midpoint;
+<a name="l00430"></a>00430         size_t my_grainsize;
+<a name="l00432"></a>00432         <span class="keywordtype">void</span> set_midpoint() <span class="keyword">const</span>;
+<a name="l00433"></a>00433         <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="l00434"></a>00434     <span class="keyword">public</span>:
+<a name="l00436"></a>00436         <span class="keyword">typedef</span> std::size_t size_type;
+<a name="l00437"></a>00437         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::value_type value_type;
+<a name="l00438"></a>00438         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::reference reference;
+<a name="l00439"></a>00439         <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::difference_type difference_type;
+<a name="l00440"></a>00440         <span class="keyword">typedef</span> Iterator iterator;
+<a name="l00441"></a>00441 
+<a name="l00443"></a>00443         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin==my_end;}
 <a name="l00444"></a>00444 
-<a name="l00445"></a>00445             <span class="keyword">public</span>:
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447                 segmented_iterator() {my_segcont = NULL;}
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449                 segmented_iterator( <span class="keyword">const</span> SegmentedContainer& _segmented_container ) : 
-<a name="l00450"></a>00450                     my_segcont(const_cast<SegmentedContainer*>(&_segmented_container)),
-<a name="l00451"></a>00451                     outer_iter(my_segcont->end()) { }
-<a name="l00452"></a>00452 
-<a name="l00453"></a>00453                 ~segmented_iterator() {}
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::iterator outer_iterator;
-<a name="l00456"></a>00456                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::value_type InnerContainer;
-<a name="l00457"></a>00457                 <span class="keyword">typedef</span> <span class="keyword">typename</span> InnerContainer::iterator inner_iterator;
-<a name="l00458"></a>00458 
-<a name="l00459"></a>00459                 <span class="comment">// STL support</span>
-<a name="l00460"></a>00460                 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00461"></a>00461                 <span class="keyword">typedef</span> Value value_type;
-<a name="l00462"></a>00462                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::size_type size_type;
-<a name="l00463"></a>00463                 <span class="keyword">typedef</span> Value* pointer;
-<a name="l00464"></a>00464                 <span class="keyword">typedef</span> Value& reference;
-<a name="l00465"></a>00465                 <span class="keyword">typedef</span> std::input_iterator_tag iterator_category;
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467                 <span class="comment">// Copy Constructor</span>
-<a name="l00468"></a>00468                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00469"></a>00469                 segmented_iterator(<span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) :
-<a name="l00470"></a>00470                     my_segcont(other.my_segcont),
-<a name="l00471"></a>00471                     outer_iter(other.outer_iter),
-<a name="l00472"></a>00472                     <span class="comment">// can we assign a default-constructed iterator to inner if we're at the end?</span>
-<a name="l00473"></a>00473                     inner_iter(other.inner_iter)
-<a name="l00474"></a>00474                 {}
-<a name="l00475"></a>00475 
-<a name="l00476"></a>00476                 <span class="comment">// assignment</span>
-<a name="l00477"></a>00477                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00478"></a>00478                 segmented_iterator& operator=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) {
-<a name="l00479"></a>00479                     <span class="keywordflow">if</span>(<span class="keyword">this</span> != &other) {
-<a name="l00480"></a>00480                         my_segcont = other.my_segcont;
-<a name="l00481"></a>00481                         outer_iter = other.outer_iter;
-<a name="l00482"></a>00482                         <span class="keywordflow">if</span>(outer_iter != my_segcont->end()) inner_iter = other.inner_iter;
-<a name="l00483"></a>00483                     }
-<a name="l00484"></a>00484                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00485"></a>00485                 }
-<a name="l00486"></a>00486 
-<a name="l00487"></a>00487                 <span class="comment">// allow assignment of outer iterator to segmented iterator.  Once it is</span>
-<a name="l00488"></a>00488                 <span class="comment">// assigned, move forward until a non-empty inner container is found or</span>
-<a name="l00489"></a>00489                 <span class="comment">// the end of the outer container is reached.</span>
-<a name="l00490"></a>00490                 segmented_iterator& operator=(<span class="keyword">const</span> outer_iterator& new_outer_iter) {
-<a name="l00491"></a>00491                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00492"></a>00492                     <span class="comment">// check that this iterator points to something inside the segmented container</span>
-<a name="l00493"></a>00493                     <span class="keywordflow">for</span>(outer_iter = new_outer_iter ;outer_iter!=my_segcont->end(); ++outer_iter) {
-<a name="l00494"></a>00494                         <span class="keywordflow">if</span>( !outer_iter->empty() ) {
-<a name="l00495"></a>00495                             inner_iter = outer_iter->begin();
-<a name="l00496"></a>00496                             <span class="keywordflow">break</span>;
-<a name="l00497"></a>00497                         }
-<a name="l00498"></a>00498                     }
-<a name="l00499"></a>00499                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00500"></a>00500                 }
-<a name="l00501"></a>00501 
-<a name="l00502"></a>00502                 <span class="comment">// pre-increment</span>
-<a name="l00503"></a>00503                 segmented_iterator& operator++() {
-<a name="l00504"></a>00504                     advance_me();
-<a name="l00505"></a>00505                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00506"></a>00506                 }
-<a name="l00507"></a>00507 
-<a name="l00508"></a>00508                 <span class="comment">// post-increment</span>
-<a name="l00509"></a>00509                 segmented_iterator operator++(<span class="keywordtype">int</span>) {
-<a name="l00510"></a>00510                     segmented_iterator tmp = *<span class="keyword">this</span>;
-<a name="l00511"></a>00511                     operator++();
-<a name="l00512"></a>00512                     <span class="keywordflow">return</span> tmp;
-<a name="l00513"></a>00513                 }
+<a name="l00446"></a>00446         <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
+<a name="l00447"></a>00447             <span class="keywordflow">return</span> my_midpoint!=my_end;
+<a name="l00448"></a>00448         }
+<a name="l00450"></a>00450         hash_map_range( hash_map_range& r, split ) :
+<a name="l00451"></a>00451             my_end(r.my_end),
+<a name="l00452"></a>00452             my_grainsize(r.my_grainsize)
+<a name="l00453"></a>00453         {
+<a name="l00454"></a>00454             r.my_end = my_begin = r.my_midpoint;
+<a name="l00455"></a>00455             __TBB_ASSERT( !empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
+<a name="l00456"></a>00456             __TBB_ASSERT( !r.empty(), <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
+<a name="l00457"></a>00457             set_midpoint();
+<a name="l00458"></a>00458             r.set_midpoint();
+<a name="l00459"></a>00459         }
+<a name="l00461"></a>00461         <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00462"></a>00462         hash_map_range( hash_map_range<U>& r) :
+<a name="l00463"></a>00463             my_begin(r.my_begin),
+<a name="l00464"></a>00464             my_end(r.my_end),
+<a name="l00465"></a>00465             my_midpoint(r.my_midpoint),
+<a name="l00466"></a>00466             my_grainsize(r.my_grainsize)
+<a name="l00467"></a>00467         {}
+<a name="l00468"></a>00468 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00470"></a>00470 <span class="preprocessor">        hash_map_range( const Iterator& begin_, const Iterator& end_, size_type grainsize_ = 1 ) :</span>
+<a name="l00471"></a>00471 <span class="preprocessor"></span>            my_begin(begin_),
+<a name="l00472"></a>00472             my_end(end_),
+<a name="l00473"></a>00473             my_grainsize(grainsize_)
+<a name="l00474"></a>00474         {
+<a name="l00475"></a>00475             <span class="keywordflow">if</span>(!my_end.my_index && !my_end.my_bucket) <span class="comment">// end</span>
+<a name="l00476"></a>00476                 my_end.my_index = my_end.my_map->my_mask + 1;
+<a name="l00477"></a>00477             set_midpoint();
+<a name="l00478"></a>00478             __TBB_ASSERT( grainsize_>0, <span class="stringliteral">"grainsize must be positive"</span> );
+<a name="l00479"></a>00479         }
+<a name="l00480"></a>00480 <span class="preprocessor">#endif</span>
+<a name="l00482"></a>00482 <span class="preprocessor">        hash_map_range( const map_type &map, size_type grainsize_ = 1 ) :</span>
+<a name="l00483"></a>00483 <span class="preprocessor"></span>            my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),
+<a name="l00484"></a>00484             my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
+<a name="l00485"></a>00485             my_grainsize( grainsize_ )
+<a name="l00486"></a>00486         {
+<a name="l00487"></a>00487             __TBB_ASSERT( grainsize_>0, <span class="stringliteral">"grainsize must be positive"</span> );
+<a name="l00488"></a>00488             set_midpoint();
+<a name="l00489"></a>00489         }
+<a name="l00490"></a>00490         <span class="keyword">const</span> Iterator& begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
+<a name="l00491"></a>00491         <span class="keyword">const</span> Iterator& end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
+<a name="l00493"></a>00493         size_type grainsize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
+<a name="l00494"></a>00494     };
+<a name="l00495"></a>00495 
+<a name="l00496"></a>00496     <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
+<a name="l00497"></a>00497     <span class="keywordtype">void</span> hash_map_range<Iterator>::set_midpoint()<span class="keyword"> const </span>{
+<a name="l00498"></a>00498         <span class="comment">// Split by groups of nodes</span>
+<a name="l00499"></a>00499         size_t m = my_end.my_index-my_begin.my_index;
+<a name="l00500"></a>00500         <span class="keywordflow">if</span>( m > my_grainsize ) {
+<a name="l00501"></a>00501             m = my_begin.my_index + m/2u;
+<a name="l00502"></a>00502             hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);
+<a name="l00503"></a>00503             my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);
+<a name="l00504"></a>00504         } <span class="keywordflow">else</span> {
+<a name="l00505"></a>00505             my_midpoint = my_end;
+<a name="l00506"></a>00506         }
+<a name="l00507"></a>00507         __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,
+<a name="l00508"></a>00508             <span class="stringliteral">"my_begin is after my_midpoint"</span> );
+<a name="l00509"></a>00509         __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,
+<a name="l00510"></a>00510             <span class="stringliteral">"my_midpoint is after my_end"</span> );
+<a name="l00511"></a>00511         __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,
+<a name="l00512"></a>00512             <span class="stringliteral">"[my_begin, my_midpoint) range should not be empty"</span> );
+<a name="l00513"></a>00513     }
 <a name="l00514"></a>00514 
-<a name="l00515"></a>00515                 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
-<a name="l00516"></a>00516                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00517"></a>00517                     <span class="keywordflow">return</span> (outer_iter == other_outer &&
-<a name="l00518"></a>00518                             (outer_iter == my_segcont->end() || inner_iter == outer_iter->begin()));
-<a name="l00519"></a>00519                 }
-<a name="l00520"></a>00520 
-<a name="l00521"></a>00521                 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
-<a name="l00522"></a>00522                     <span class="keywordflow">return</span> !operator==(other_outer);
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524                 }
-<a name="l00525"></a>00525 
-<a name="l00526"></a>00526                 <span class="comment">// (i)* RHS</span>
-<a name="l00527"></a>00527                 reference operator*()<span class="keyword"> const </span>{
-<a name="l00528"></a>00528                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00529"></a>00529                     __TBB_ASSERT(outer_iter != my_segcont->end(), <span class="stringliteral">"Dereferencing a pointer at end of container"</span>);
-<a name="l00530"></a>00530                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// should never happen</span>
-<a name="l00531"></a>00531                     <span class="keywordflow">return</span> *inner_iter;
-<a name="l00532"></a>00532                 }
-<a name="l00533"></a>00533 
-<a name="l00534"></a>00534                 <span class="comment">// i-></span>
-<a name="l00535"></a>00535                 pointer operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &operator*();}
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537             <span class="keyword">private</span>:
-<a name="l00538"></a>00538                 SegmentedContainer*             my_segcont;
-<a name="l00539"></a>00539                 outer_iterator outer_iter;
-<a name="l00540"></a>00540                 inner_iterator inner_iter;
-<a name="l00541"></a>00541 
-<a name="l00542"></a>00542                 <span class="keywordtype">void</span> advance_me() {
-<a name="l00543"></a>00543                     __TBB_ASSERT(my_segcont != NULL, NULL);
-<a name="l00544"></a>00544                     __TBB_ASSERT(outer_iter != my_segcont->end(), NULL); <span class="comment">// not true if there are no inner containers</span>
-<a name="l00545"></a>00545                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// not true if the inner containers are all empty.</span>
-<a name="l00546"></a>00546                     ++inner_iter;
-<a name="l00547"></a>00547                     <span class="keywordflow">while</span>(inner_iter == outer_iter->end() && ++outer_iter != my_segcont->end()) {
-<a name="l00548"></a>00548                         inner_iter = outer_iter->begin();
-<a name="l00549"></a>00549                     }
-<a name="l00550"></a>00550                 }
-<a name="l00551"></a>00551         };    <span class="comment">// segmented_iterator</span>
+<a name="l00515"></a>00515     } <span class="comment">// internal</span>
+<a name="l00517"></a>00517 <span class="comment"></span>
+<a name="l00519"></a>00519 
+<a name="l00548"></a>00548 <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="l00549"></a><a class="code" href="a00269.html">00549</a> <span class="keyword">class </span><a class="code" href="a00269.html">concurrent_hash_map</a> : <span class="keyword">protected</span> internal::hash_map_base {
+<a name="l00550"></a>00550     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00551"></a>00551     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_iterator;
 <a name="l00552"></a>00552 
-<a name="l00553"></a>00553         <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="l00554"></a>00554         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
-<a name="l00555"></a>00555                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
-<a name="l00556"></a>00556             <span class="keywordflow">if</span>(i.my_segcont != j.my_segcont) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00557"></a>00557             <span class="keywordflow">if</span>(i.my_segcont == NULL) <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00558"></a>00558             <span class="keywordflow">if</span>(i.outer_iter != j.outer_iter) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00559"></a>00559             <span class="keywordflow">if</span>(i.outer_iter == i.my_segcont->end()) <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00560"></a>00560             <span class="keywordflow">return</span> i.inner_iter == j.inner_iter;
-<a name="l00561"></a>00561         }
-<a name="l00562"></a>00562 
-<a name="l00563"></a>00563         <span class="comment">// !=</span>
-<a name="l00564"></a>00564         <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="l00565"></a>00565         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
-<a name="l00566"></a>00566                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
-<a name="l00567"></a>00567             <span class="keywordflow">return</span> !(i==j);
-<a name="l00568"></a>00568         }
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570         <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00571"></a>00571         <span class="keyword">struct </span>destruct_only: tbb::internal::no_copy {
-<a name="l00572"></a>00572             <a class="code" href="a00227.html">tbb::aligned_space<T,1></a> value;
-<a name="l00573"></a>00573             ~destruct_only() {value.begin()[0].~T();}
-<a name="l00574"></a>00574         };
-<a name="l00575"></a>00575 
-<a name="l00576"></a>00576         <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00577"></a>00577         <span class="keyword">struct </span>construct_by_default: tbb::internal::no_assign {
-<a name="l00578"></a>00578             <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>*where) {<span class="keyword">new</span>(where) T();} <span class="comment">// C++ note: the () in T() ensure zero initialization.</span>
-<a name="l00579"></a>00579             construct_by_default( <span class="keywordtype">int</span> ) {}
-<a name="l00580"></a>00580         };
-<a name="l00581"></a>00581 
-<a name="l00582"></a>00582         <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00583"></a>00583         <span class="keyword">struct </span>construct_by_exemplar: tbb::internal::no_assign {
-<a name="l00584"></a>00584             <span class="keyword">const</span> T exemplar;
-<a name="l00585"></a>00585             <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>*where) {<span class="keyword">new</span>(where) T(exemplar);}
-<a name="l00586"></a>00586             construct_by_exemplar( <span class="keyword">const</span> T& t ) : exemplar(t) {}
-<a name="l00587"></a>00587         };
-<a name="l00588"></a>00588 
-<a name="l00589"></a>00589         <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Finit>
-<a name="l00590"></a>00590         <span class="keyword">struct </span>construct_by_finit: tbb::internal::no_assign {
-<a name="l00591"></a>00591             Finit f;
-<a name="l00592"></a>00592             <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) {<span class="keyword">new</span>(where) T(f());}
-<a name="l00593"></a>00593             construct_by_finit( <span class="keyword">const</span> Finit& f_ ) : f(f_) {}
-<a name="l00594"></a>00594         };
-<a name="l00595"></a>00595 
-<a name="l00596"></a>00596         <span class="comment">// storage for initialization function pointer</span>
-<a name="l00597"></a>00597         <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00598"></a>00598         <span class="keyword">class </span>callback_base {
-<a name="l00599"></a>00599         <span class="keyword">public</span>:
-<a name="l00600"></a>00600             <span class="comment">// Clone *this</span>
-<a name="l00601"></a>00601             <span class="keyword">virtual</span> callback_base* clone() = 0;
-<a name="l00602"></a>00602             <span class="comment">// Destruct and free *this</span>
-<a name="l00603"></a>00603             <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroy() = 0;
-<a name="l00604"></a>00604             <span class="comment">// Need virtual destructor to satisfy GCC compiler warning</span>
-<a name="l00605"></a>00605             <span class="keyword">virtual</span> ~callback_base() { }
-<a name="l00606"></a>00606             <span class="comment">// Construct T at where</span>
-<a name="l00607"></a>00607             <span class="keyword">virtual</span> <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) = 0;
-<a name="l00608"></a>00608         };
-<a name="l00609"></a>00609 
-<a name="l00610"></a>00610         <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Constructor>
-<a name="l00611"></a>00611         <span class="keyword">class </span>callback_leaf: <span class="keyword">public</span> callback_base<T>, Constructor {
-<a name="l00612"></a>00612             <span class="keyword">template</span><<span class="keyword">typename</span> X> callback_leaf( <span class="keyword">const</span> X& x ) : Constructor(x) {}
-<a name="l00613"></a>00613 
-<a name="l00614"></a>00614             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00317.html">tbb::tbb_allocator<callback_leaf></a> my_allocator_type;
-<a name="l00615"></a>00615 
-<a name="l00616"></a>00616             <span class="comment">/*override*/</span> callback_base<T>* clone() {
-<a name="l00617"></a>00617                 <span class="keywordtype">void</span>* where = my_allocator_type().allocate(1);
-<a name="l00618"></a>00618                 <span class="keywordflow">return</span> <span class="keyword">new</span>(where) callback_leaf(*<span class="keyword">this</span>);
-<a name="l00619"></a>00619             }
-<a name="l00620"></a>00620 
-<a name="l00621"></a>00621             <span class="comment">/*override*/</span> <span class="keywordtype">void</span> destroy() {
-<a name="l00622"></a>00622                 my_allocator_type().destroy(<span class="keyword">this</span>);
-<a name="l00623"></a>00623                 my_allocator_type().deallocate(<span class="keyword">this</span>,1);
-<a name="l00624"></a>00624             }
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626             <span class="comment">/*override*/</span> <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) {
-<a name="l00627"></a>00627                 Constructor::construct(where);
-<a name="l00628"></a>00628             }  
-<a name="l00629"></a>00629         <span class="keyword">public</span>:
-<a name="l00630"></a>00630             <span class="keyword">template</span><<span class="keyword">typename</span> X>
-<a name="l00631"></a>00631             <span class="keyword">static</span> callback_base<T>* make( <span class="keyword">const</span> X& x ) {
-<a name="l00632"></a>00632                 <span class="keywordtype">void</span>* where = my_allocator_type().allocate(1);
-<a name="l00633"></a>00633                 <span class="keywordflow">return</span> <span class="keyword">new</span>(where) callback_leaf(x);
-<a name="l00634"></a>00634             }
-<a name="l00635"></a>00635         };
-<a name="l00636"></a>00636 
-<a name="l00638"></a>00638 
-<a name="l00643"></a>00643         <span class="keyword">template</span><<span class="keyword">typename</span> U, size_t ModularSize>
-<a name="l00644"></a>00644         <span class="keyword">struct </span>ets_element {
-<a name="l00645"></a>00645             <span class="keywordtype">char</span> value[ModularSize==0 ? <span class="keyword">sizeof</span>(U) : <span class="keyword">sizeof</span>(U)+(tbb::internal::NFS_MaxLineSize-ModularSize)];
-<a name="l00646"></a>00646             <span class="keywordtype">void</span> unconstruct() {
-<a name="l00647"></a>00647                 tbb::internal::punned_cast<U*>(&value)->~U();
-<a name="l00648"></a>00648             }
-<a name="l00649"></a>00649         };
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651     } <span class="comment">// namespace internal</span>
-<a name="l00653"></a>00653 <span class="comment"></span>
-<a name="l00655"></a>00655 
-<a name="l00674"></a>00674     <span class="keyword">template</span> <<span class="keyword">typename</span> T, 
-<a name="l00675"></a>00675               <span class="keyword">typename</span> Allocator=cache_aligned_allocator<T>, 
-<a name="l00676"></a><a class="code" href="a00255.html">00676</a>               <a class="code" href="a00383.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> ETS_key_type=ets_no_key > 
-<a name="l00677"></a>00677     <span class="keyword">class </span><a class="code" href="a00255.html">enumerable_thread_specific</a>: internal::ets_base<ETS_key_type> { 
-<a name="l00678"></a>00678 
-<a name="l00679"></a>00679         <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="a00255.html">enumerable_thread_specific</a>;
-<a name="l00680"></a>00680     
-<a name="l00681"></a>00681         <span class="keyword">typedef</span> internal::ets_element<T,sizeof(T)%tbb::internal::NFS_MaxLineSize> padded_element;
-<a name="l00682"></a>00682 
-<a name="l00684"></a>00684         <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00685"></a>00685         <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00233.html">blocked_range</a><I> {
-<a name="l00686"></a>00686         <span class="keyword">public</span>:
-<a name="l00687"></a>00687             <span class="keyword">typedef</span> T value_type;
-<a name="l00688"></a>00688             <span class="keyword">typedef</span> T& reference;
-<a name="l00689"></a>00689             <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00690"></a>00690             <span class="keyword">typedef</span> I iterator;
-<a name="l00691"></a>00691             <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00692"></a>00692             generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : <a class="code" href="a00233.html">blocked_range<I></a>(begin_,end_,grainsize_) {} 
-<a name="l00693"></a>00693             template<typename U>
-<a name="l00694"></a>00694             generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00233.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
-<a name="l00695"></a>00695             generic_range_type( generic_range_type& r, <a class="code" href="a00309.html">split</a> ) : <a class="code" href="a00233.html">blocked_range<I></a>(r,<a class="code" href="a00309.html">split</a>()) {}
-<a name="l00696"></a>00696         };
-<a name="l00697"></a>00697     
-<a name="l00698"></a>00698         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< padded_element >::other padded_allocator_type;
-<a name="l00699"></a>00699         <span class="keyword">typedef</span> <a class="code" href="a00250.html">tbb::concurrent_vector< padded_element, padded_allocator_type ></a> <a class="code" href="a00250.html">internal_collection_type</a>;
-<a name="l00700"></a>00700         
-<a name="l00701"></a>00701         internal::callback_base<T> *my_construct_callback;
-<a name="l00702"></a>00702 
-<a name="l00703"></a>00703         internal_collection_type my_locals;
-<a name="l00704"></a>00704    
-<a name="l00705"></a>00705         <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* create_local() {
-<a name="l00706"></a>00706 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00707"></a>00707 <span class="preprocessor"></span>            <span class="keywordtype">void</span>* lref = &my_locals[my_locals.<a class="code" href="a00250.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element())];
-<a name="l00708"></a>00708 <span class="preprocessor">#else</span>
-<a name="l00709"></a>00709 <span class="preprocessor"></span>            <span class="keywordtype">void</span>* lref = &*my_locals.<a class="code" href="a00250.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element());
-<a name="l00710"></a>00710 <span class="preprocessor">#endif</span>
-<a name="l00711"></a>00711 <span class="preprocessor"></span>            my_construct_callback->construct(lref);
-<a name="l00712"></a>00712             <span class="keywordflow">return</span> lref;
-<a name="l00713"></a>00713         } 
+<a name="l00553"></a>00553     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00554"></a>00554     <span class="keyword">friend</span> <span class="keyword">class </span>internal::hash_map_range;
+<a name="l00555"></a>00555 
+<a name="l00556"></a>00556 <span class="keyword">public</span>:
+<a name="l00557"></a>00557     <span class="keyword">typedef</span> Key key_type;
+<a name="l00558"></a>00558     <span class="keyword">typedef</span> T mapped_type;
+<a name="l00559"></a>00559     <span class="keyword">typedef</span> std::pair<const Key,T> value_type;
+<a name="l00560"></a>00560     <span class="keyword">typedef</span> hash_map_base::size_type size_type;
+<a name="l00561"></a>00561     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00562"></a>00562     <span class="keyword">typedef</span> value_type *pointer;
+<a name="l00563"></a>00563     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
+<a name="l00564"></a>00564     <span class="keyword">typedef</span> value_type &reference;
+<a name="l00565"></a>00565     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type &const_reference;
+<a name="l00566"></a>00566     <span class="keyword">typedef</span> internal::hash_map_iterator<concurrent_hash_map,value_type> iterator;
+<a name="l00567"></a>00567     <span class="keyword">typedef</span> internal::hash_map_iterator<concurrent_hash_map,const value_type> const_iterator;
+<a name="l00568"></a>00568     <span class="keyword">typedef</span> internal::hash_map_range<iterator> range_type;
+<a name="l00569"></a>00569     <span class="keyword">typedef</span> internal::hash_map_range<const_iterator> const_range_type;
+<a name="l00570"></a>00570     <span class="keyword">typedef</span> Allocator allocator_type;
+<a name="l00571"></a>00571 
+<a name="l00572"></a>00572 <span class="keyword">protected</span>:
+<a name="l00573"></a>00573     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00272.html">const_accessor</a>;
+<a name="l00574"></a>00574     <span class="keyword">struct </span>node;
+<a name="l00575"></a>00575     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<node>::other node_allocator_type;
+<a name="l00576"></a>00576     node_allocator_type my_allocator;
+<a name="l00577"></a>00577     HashCompare my_hash_compare;
+<a name="l00578"></a>00578 
+<a name="l00579"></a>00579     <span class="keyword">struct </span>node : <span class="keyword">public</span> node_base {
+<a name="l00580"></a>00580         value_type item;
+<a name="l00581"></a>00581         node( <span class="keyword">const</span> Key &key ) : item(key, T()) {}
+<a name="l00582"></a>00582         node( <span class="keyword">const</span> Key &key, <span class="keyword">const</span> T &t ) : item(key, t) {}
+<a name="l00583"></a>00583         <span class="comment">// exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17</span>
+<a name="l00584"></a>00584         <span class="keywordtype">void</span> *operator new( size_t <span class="comment">/*size*/</span>, node_allocator_type &a ) {
+<a name="l00585"></a>00585             <span class="keywordtype">void</span> *ptr = a.allocate(1);
+<a name="l00586"></a>00586             <span class="keywordflow">if</span>(!ptr)
+<a name="l00587"></a>00587                 tbb::internal::throw_exception(tbb::internal::eid_bad_alloc);
+<a name="l00588"></a>00588             <span class="keywordflow">return</span> ptr;
+<a name="l00589"></a>00589         }
+<a name="l00590"></a>00590         <span class="comment">// match placement-new form above to be called if exception thrown in constructor</span>
+<a name="l00591"></a>00591         <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="l00592"></a>00592     };
+<a name="l00593"></a>00593 
+<a name="l00594"></a>00594     <span class="keywordtype">void</span> delete_node( node_base *n ) {
+<a name="l00595"></a>00595         my_allocator.destroy( static_cast<node*>(n) );
+<a name="l00596"></a>00596         my_allocator.deallocate( static_cast<node*>(n), 1);
+<a name="l00597"></a>00597     }
+<a name="l00598"></a>00598 
+<a name="l00599"></a>00599     node *search_bucket( <span class="keyword">const</span> key_type &key, bucket *b )<span class="keyword"> const </span>{
+<a name="l00600"></a>00600         node *n = static_cast<node*>( b->node_list );
+<a name="l00601"></a>00601         <span class="keywordflow">while</span>( is_valid(n) && !my_hash_compare.equal(key, n->item.first) )
+<a name="l00602"></a>00602             n = static_cast<node*>( n->next );
+<a name="l00603"></a>00603         __TBB_ASSERT(n != internal::rehash_req, <span class="stringliteral">"Search can be executed only for rehashed bucket"</span>);
+<a name="l00604"></a>00604         <span class="keywordflow">return</span> n;
+<a name="l00605"></a>00605     }
+<a name="l00606"></a>00606 
+<a name="l00608"></a><a class="code" href="a00271.html">00608</a>     <span class="keyword">class </span><a class="code" href="a00271.html">bucket_accessor</a> : <span class="keyword">public</span> bucket::scoped_t {
+<a name="l00609"></a>00609         bucket *my_b;
+<a name="l00610"></a>00610     <span class="keyword">public</span>:
+<a name="l00611"></a>00611         <a class="code" href="a00271.html">bucket_accessor</a>( <a class="code" href="a00269.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="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( base, h, writer ); }
+<a name="l00613"></a><a class="code" href="a00271.html#d11c77f4d70a94d4fb344492bbf18007">00613</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00269.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="l00614"></a>00614             my_b = base->get_bucket( h );
+<a name="l00615"></a>00615             <span class="comment">// TODO: actually, notification is unnecessary here, just hiding double-check</span>
+<a name="l00616"></a>00616             <span class="keywordflow">if</span>( itt_load_word_with_acquire(my_b->node_list) == internal::rehash_req
+<a name="l00617"></a>00617                 && try_acquire( my_b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) )
+<a name="l00618"></a>00618             {
+<a name="l00619"></a>00619                 <span class="keywordflow">if</span>( my_b->node_list == internal::rehash_req ) base-><a class="code" href="a00269.html#4962c7da24793ccc05524cc3bbcf1efa">rehash_bucket</a>( my_b, h ); <span class="comment">//recursive rehashing</span>
+<a name="l00620"></a>00620             }
+<a name="l00621"></a>00621             <span class="keywordflow">else</span> bucket::scoped_t::acquire( my_b->mutex, writer );
+<a name="l00622"></a>00622             __TBB_ASSERT( my_b->node_list != internal::rehash_req, NULL);
+<a name="l00623"></a>00623         }
+<a name="l00625"></a><a class="code" href="a00271.html#07d958f151a0eaa92f50fd56ad6440e2">00625</a>         <span class="keywordtype">bool</span> is_writer() { <span class="keywordflow">return</span> bucket::scoped_t::is_writer; }
+<a name="l00627"></a><a class="code" href="a00271.html#fa6314b861c574f86ed189b124cf5853">00627</a>         bucket *operator() () { <span class="keywordflow">return</span> my_b; }
+<a name="l00628"></a>00628     };
+<a name="l00629"></a>00629 
+<a name="l00630"></a>00630     <span class="comment">// TODO refactor to hash_base</span>
+<a name="l00631"></a>00631     <span class="keywordtype">void</span> rehash_bucket( bucket *b_new, <span class="keyword">const</span> hashcode_t h ) {
+<a name="l00632"></a>00632         __TBB_ASSERT( *(intptr_t*)(&b_new->mutex), <span class="stringliteral">"b_new must be locked (for write)"</span>);
+<a name="l00633"></a>00633         __TBB_ASSERT( h > 1, <span class="stringliteral">"The lowermost buckets can't be rehashed"</span> );
+<a name="l00634"></a>00634         __TBB_store_with_release(b_new->node_list, internal::empty_rehashed); <span class="comment">// mark rehashed</span>
+<a name="l00635"></a>00635         hashcode_t mask = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
+<a name="l00636"></a>00636 <span class="preprocessor">#if __TBB_STATISTICS</span>
+<a name="l00637"></a>00637 <span class="preprocessor"></span>        my_info_rehashes++; <span class="comment">// invocations of rehash_bucket</span>
+<a name="l00638"></a>00638 <span class="preprocessor">#endif</span>
+<a name="l00639"></a>00639 <span class="preprocessor"></span>
+<a name="l00640"></a>00640         bucket_accessor b_old( <span class="keyword">this</span>, h & mask );
+<a name="l00641"></a>00641 
+<a name="l00642"></a>00642         mask = (mask<<1) | 1; <span class="comment">// get full mask for new bucket</span>
+<a name="l00643"></a>00643         __TBB_ASSERT( (mask&(mask+1))==0 && (h & mask) == h, NULL );
+<a name="l00644"></a>00644     restart:
+<a name="l00645"></a>00645         <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="l00646"></a>00646             hashcode_t c = my_hash_compare.hash( static_cast<node*>(n)->item.first );
+<a name="l00647"></a>00647 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00648"></a>00648 <span class="preprocessor"></span>            hashcode_t bmask = h & (mask>>1);
+<a name="l00649"></a>00649             bmask = bmask==0? 1 : ( 1u<<(__TBB_Log2( bmask )+1 ) ) - 1; <span class="comment">// minimal mask of parent bucket</span>
+<a name="l00650"></a>00650             __TBB_ASSERT( (c & bmask) == (h & bmask), <span class="stringliteral">"hash() function changed for key in table"</span> );
+<a name="l00651"></a>00651 <span class="preprocessor">#endif</span>
+<a name="l00652"></a>00652 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( (c & mask) == h ) {
+<a name="l00653"></a>00653                 <span class="keywordflow">if</span>( !b_old.is_writer() )
+<a name="l00654"></a>00654                     <span class="keywordflow">if</span>( !b_old.upgrade_to_writer() ) {
+<a name="l00655"></a>00655                         <span class="keywordflow">goto</span> restart; <span class="comment">// node ptr can be invalid due to concurrent erase</span>
+<a name="l00656"></a>00656                     }
+<a name="l00657"></a>00657                 *p = n->next; <span class="comment">// exclude from b_old</span>
+<a name="l00658"></a>00658                 add_to_bucket( b_new, n );
+<a name="l00659"></a>00659             } <span class="keywordflow">else</span> p = &n->next; <span class="comment">// iterate to next item</span>
+<a name="l00660"></a>00660         }
+<a name="l00661"></a>00661     }
+<a name="l00662"></a>00662 
+<a name="l00663"></a>00663 <span class="keyword">public</span>:
+<a name="l00664"></a>00664 
+<a name="l00665"></a>00665     <span class="keyword">class </span>accessor;
+<a name="l00667"></a><a class="code" href="a00272.html">00667</a>     <span class="keyword">class </span><a class="code" href="a00272.html">const_accessor</a> : <span class="keyword">private</span> node::scoped_t <span class="comment">/*which derived from no_copy*/</span> {
+<a name="l00668"></a>00668         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00269.html">concurrent_hash_map</a><Key,T,HashCompare,Allocator>;
+<a name="l00669"></a>00669         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00270.html">accessor</a>;
+<a name="l00670"></a>00670     <span class="keyword">public</span>:
+<a name="l00672"></a><a class="code" href="a00272.html#a8e50238483ba451363dccebd981d346">00672</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="l00673"></a>00673 
+<a name="l00675"></a><a class="code" href="a00272.html#84c3080d0c6124d55c8bb4cf6055e65f">00675</a>         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_node;}
+<a name="l00676"></a>00676 
+<a name="l00678"></a><a class="code" href="a00272.html#7db006d41b49dc5f1716a913769d4698">00678</a>         <span class="keywordtype">void</span> <a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
+<a name="l00679"></a>00679             <span class="keywordflow">if</span>( my_node ) {
+<a name="l00680"></a>00680                 node::scoped_t::release();
+<a name="l00681"></a>00681                 my_node = 0;
+<a name="l00682"></a>00682             }
+<a name="l00683"></a>00683         }
+<a name="l00684"></a>00684 
+<a name="l00686"></a><a class="code" href="a00272.html#9411df8197ceb4881ec4c7368a0a7f88">00686</a>         const_reference operator*()<span class="keyword"> const </span>{
+<a name="l00687"></a>00687             __TBB_ASSERT( my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
+<a name="l00688"></a>00688             <span class="keywordflow">return</span> my_node->item;
+<a name="l00689"></a>00689         }
+<a name="l00690"></a>00690 
+<a name="l00692"></a><a class="code" href="a00272.html#3d03a48ecb8cd9549bd8be64b09c9b0d">00692</a>         const_pointer operator->()<span class="keyword"> const </span>{
+<a name="l00693"></a>00693             <span class="keywordflow">return</span> &operator*();
+<a name="l00694"></a>00694         }
+<a name="l00695"></a>00695 
+<a name="l00697"></a><a class="code" href="a00272.html#27399c613eb1aecd4660803955dda09d">00697</a>         <a class="code" href="a00272.html">const_accessor</a>() : my_node(NULL) {}
+<a name="l00698"></a>00698 
+<a name="l00700"></a><a class="code" href="a00272.html#928769b139d53427e7075c1f86148e4c">00700</a>         ~<a class="code" href="a00272.html">const_accessor</a>() {
+<a name="l00701"></a>00701             my_node = NULL; <span class="comment">// scoped lock's release() is called in its destructor</span>
+<a name="l00702"></a>00702         }
+<a name="l00703"></a>00703     <span class="keyword">protected</span>:
+<a name="l00704"></a>00704         <span class="keywordtype">bool</span> is_writer() { <span class="keywordflow">return</span> node::scoped_t::is_writer; }
+<a name="l00705"></a>00705         node *my_node;
+<a name="l00706"></a>00706         hashcode_t my_hash;
+<a name="l00707"></a>00707     };
+<a name="l00708"></a>00708 
+<a name="l00710"></a><a class="code" href="a00270.html">00710</a>     <span class="keyword">class </span><a class="code" href="a00270.html">accessor</a>: <span class="keyword">public</span> <a class="code" href="a00272.html">const_accessor</a> {
+<a name="l00711"></a>00711     <span class="keyword">public</span>:
+<a name="l00713"></a><a class="code" href="a00270.html#0b648be7a95a8fb2971042c15eb112c1">00713</a>         <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_hash_map::value_type value_type;
 <a name="l00714"></a>00714 
-<a name="l00715"></a>00715         <span class="keywordtype">void</span> unconstruct_locals() {
-<a name="l00716"></a>00716             <span class="keywordflow">for</span>(<span class="keyword">typename</span> internal_collection_type::iterator cvi = my_locals.<a class="code" href="a00250.html#730b23a251ecb6d37f692fb22f38e029">begin</a>(); cvi != my_locals.<a class="code" href="a00250.html#c0b51160e5a764982ec97a455f94f2c6">end</a>(); ++cvi) {
-<a name="l00717"></a>00717                 cvi->unconstruct();
-<a name="l00718"></a>00718             }
+<a name="l00716"></a><a class="code" href="a00270.html#170280ea807a22e742095de3e8c5ea38">00716</a>         reference operator*()<span class="keyword"> const </span>{
+<a name="l00717"></a>00717             __TBB_ASSERT( this->my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
+<a name="l00718"></a>00718             <span class="keywordflow">return</span> this->my_node->item;
 <a name="l00719"></a>00719         }
 <a name="l00720"></a>00720 
-<a name="l00721"></a>00721         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< uintptr_t >::other array_allocator_type;
-<a name="l00722"></a>00722 
-<a name="l00723"></a>00723         <span class="comment">// _size is in bytes</span>
-<a name="l00724"></a>00724         <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* create_array(size_t _size) {
-<a name="l00725"></a>00725             size_t nelements = (_size + <span class="keyword">sizeof</span>(uintptr_t) -1) / <span class="keyword">sizeof</span>(uintptr_t);
-<a name="l00726"></a>00726             <span class="keywordflow">return</span> array_allocator_type().allocate(nelements);
-<a name="l00727"></a>00727         }
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> free_array( <span class="keywordtype">void</span>* _ptr, size_t _size) {
-<a name="l00730"></a>00730             size_t nelements = (_size + <span class="keyword">sizeof</span>(uintptr_t) -1) / <span class="keyword">sizeof</span>(uintptr_t);
-<a name="l00731"></a>00731             array_allocator_type().deallocate( reinterpret_cast<uintptr_t *>(_ptr),nelements);
-<a name="l00732"></a>00732         }
-<a name="l00733"></a>00733    
-<a name="l00734"></a>00734     <span class="keyword">public</span>:
-<a name="l00735"></a>00735     
-<a name="l00737"></a>00737         <span class="keyword">typedef</span> Allocator allocator_type;
-<a name="l00738"></a>00738         <span class="keyword">typedef</span> T value_type;
-<a name="l00739"></a>00739         <span class="keyword">typedef</span> T& reference;
-<a name="l00740"></a>00740         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-<a name="l00741"></a>00741         <span class="keyword">typedef</span> T* pointer;
-<a name="l00742"></a>00742         <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
-<a name="l00743"></a>00743         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::size_type size_type;
-<a name="l00744"></a>00744         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::difference_type difference_type;
-<a name="l00745"></a>00745     
-<a name="l00746"></a>00746         <span class="comment">// Iterator types</span>
-<a name="l00747"></a>00747         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::enumerable_thread_specific_iterator< internal_collection_type, value_type > iterator;
-<a name="l00748"></a>00748         <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="l00749"></a>00749 
-<a name="l00750"></a>00750         <span class="comment">// Parallel range types</span>
-<a name="l00751"></a>00751         <span class="keyword">typedef</span> generic_range_type< iterator > range_type;
-<a name="l00752"></a>00752         <span class="keyword">typedef</span> generic_range_type< const_iterator > const_range_type;
-<a name="l00753"></a>00753     
-<a name="l00755"></a>00755         <a class="code" href="a00255.html">enumerable_thread_specific</a>() : 
-<a name="l00756"></a>00756             my_construct_callback( internal::callback_leaf<T,internal::construct_by_default<T> >::make(<span class="comment">/*dummy argument*/</span>0) ) 
-<a name="l00757"></a>00757         {}
-<a name="l00758"></a>00758 
-<a name="l00760"></a><a class="code" href="a00255.html#8d4b456ff9d7b289c73254eccc11db45">00760</a>         <span class="keyword">template</span> <<span class="keyword">typename</span> Finit>
-<a name="l00761"></a>00761         <a class="code" href="a00255.html">enumerable_thread_specific</a>( Finit finit ) : 
-<a name="l00762"></a>00762             my_construct_callback( internal::callback_leaf<T,internal::construct_by_finit<T,Finit> >::make( finit ) ) 
-<a name="l00763"></a>00763         {}
-<a name="l00764"></a>00764     
-<a name="l00766"></a>00766         <a class="code" href="a00255.html">enumerable_thread_specific</a>(<span class="keyword">const</span> T& exemplar) : 
-<a name="l00767"></a>00767             my_construct_callback( internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( exemplar ) )
-<a name="l00768"></a>00768         {}
-<a name="l00769"></a>00769     
-<a name="l00771"></a>00771         ~<a class="code" href="a00255.html">enumerable_thread_specific</a>() { 
-<a name="l00772"></a>00772             my_construct_callback->destroy();
-<a name="l00773"></a>00773             this->clear();  <span class="comment">// deallocation before the derived class is finished destructing</span>
-<a name="l00774"></a>00774             <span class="comment">// So free(array *) is still accessible</span>
-<a name="l00775"></a>00775         }
-<a name="l00776"></a>00776       
-<a name="l00778"></a>00778         reference local() {
-<a name="l00779"></a>00779             <span class="keywordtype">bool</span> exists;
-<a name="l00780"></a>00780             <span class="keywordflow">return</span> local(exists);
-<a name="l00781"></a>00781         }
-<a name="l00782"></a>00782 
-<a name="l00784"></a>00784         reference local(<span class="keywordtype">bool</span>& exists)  {
-<a name="l00785"></a>00785             <span class="keywordtype">void</span>* ptr = this->table_lookup(exists);
-<a name="l00786"></a>00786             <span class="keywordflow">return</span> *(T*)ptr;
-<a name="l00787"></a>00787         }
-<a name="l00788"></a>00788 
-<a name="l00790"></a>00790         size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00250.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>(); }
-<a name="l00791"></a>00791     
-<a name="l00793"></a>00793         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00250.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>(); }
-<a name="l00794"></a>00794     
-<a name="l00796"></a>00796         iterator begin() { <span class="keywordflow">return</span> iterator( my_locals, 0 ); }
-<a name="l00798"></a>00798         iterator end() { <span class="keywordflow">return</span> iterator(my_locals, my_locals.<a class="code" href="a00250.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() ); }
-<a name="l00799"></a>00799     
-<a name="l00801"></a>00801         const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, 0); }
-<a name="l00802"></a>00802     
-<a name="l00804"></a>00804         const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, my_locals.<a class="code" href="a00250.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()); }
-<a name="l00805"></a>00805 
-<a name="l00807"></a>00807         range_type range( size_t grainsize=1 ) { <span class="keywordflow">return</span> range_type( begin(), end(), grainsize ); } 
-<a name="l00808"></a>00808         
-<a name="l00810"></a>00810         const_range_type range( size_t grainsize=1 )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize ); }
-<a name="l00811"></a>00811 
-<a name="l00813"></a>00813         <span class="keywordtype">void</span> clear() {
-<a name="l00814"></a>00814             unconstruct_locals();
-<a name="l00815"></a>00815             my_locals.<a class="code" href="a00250.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>();
-<a name="l00816"></a>00816             this->table_clear();
-<a name="l00817"></a>00817             <span class="comment">// callback is not destroyed</span>
-<a name="l00818"></a>00818             <span class="comment">// exemplar is not destroyed</span>
-<a name="l00819"></a>00819         }
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821     <span class="keyword">private</span>:
+<a name="l00722"></a><a class="code" href="a00270.html#a807920cdffe3ec5c5e282b4d1ff92a2">00722</a>         pointer operator->()<span class="keyword"> const </span>{
+<a name="l00723"></a>00723             <span class="keywordflow">return</span> &operator*();
+<a name="l00724"></a>00724         }
+<a name="l00725"></a>00725     };
+<a name="l00726"></a>00726 
+<a name="l00728"></a><a class="code" href="a00269.html#1ad413f5b666176e7669bf4c87d1ff3f">00728</a>     <a class="code" href="a00269.html">concurrent_hash_map</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00729"></a>00729         : internal::hash_map_base(), my_allocator(a)
+<a name="l00730"></a>00730     {}
+<a name="l00731"></a>00731 
+<a name="l00733"></a><a class="code" href="a00269.html#46b9896317662c3cfa3c876ad7592a7c">00733</a>     <a class="code" href="a00269.html">concurrent_hash_map</a>(size_type n, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00734"></a>00734         : my_allocator(a)
+<a name="l00735"></a>00735     {
+<a name="l00736"></a>00736         reserve( n );
+<a name="l00737"></a>00737     }
+<a name="l00738"></a>00738 
+<a name="l00740"></a><a class="code" href="a00269.html#6fb14710893308fb47aaeee55ee30dc3">00740</a>     <a class="code" href="a00269.html">concurrent_hash_map</a>( <span class="keyword">const</span> <a class="code" href="a00269.html">concurrent_hash_map</a>& table, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00741"></a>00741         : internal::hash_map_base(), my_allocator(a)
+<a name="l00742"></a>00742     {
+<a name="l00743"></a>00743         internal_copy(table);
+<a name="l00744"></a>00744     }
+<a name="l00745"></a>00745 
+<a name="l00747"></a>00747     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00748"></a><a class="code" href="a00269.html#83c40f2053f208861b90390e12a36436">00748</a>     <a class="code" href="a00269.html">concurrent_hash_map</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00749"></a>00749         : my_allocator(a)
+<a name="l00750"></a>00750     {
+<a name="l00751"></a>00751         reserve( std::distance(first, last) ); <span class="comment">// TODO: load_factor?</span>
+<a name="l00752"></a>00752         internal_copy(first, last);
+<a name="l00753"></a>00753     }
+<a name="l00754"></a>00754 
+<a name="l00756"></a><a class="code" href="a00269.html#088d1aaccc816884a49e38f7065622c8">00756</a>     <a class="code" href="a00269.html">concurrent_hash_map</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00269.html">concurrent_hash_map</a>& table ) {
+<a name="l00757"></a>00757         <span class="keywordflow">if</span>( <span class="keyword">this</span>!=&table ) {
+<a name="l00758"></a>00758             clear();
+<a name="l00759"></a>00759             internal_copy(table);
+<a name="l00760"></a>00760         }
+<a name="l00761"></a>00761         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00762"></a>00762     }
+<a name="l00763"></a>00763 
+<a name="l00764"></a>00764 
+<a name="l00766"></a>00766 
+<a name="l00768"></a>00768     <span class="keywordtype">void</span> rehash(size_type n = 0);
+<a name="l00769"></a>00769 
+<a name="l00771"></a>00771     <span class="keywordtype">void</span> clear();
+<a name="l00772"></a>00772 
+<a name="l00774"></a><a class="code" href="a00269.html#2aa8e2d28d5af1284cf78d20a9c22731">00774</a>     ~<a class="code" href="a00269.html">concurrent_hash_map</a>() { clear(); }
+<a name="l00775"></a>00775 
+<a name="l00776"></a>00776     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00777"></a>00777     <span class="comment">// Parallel algorithm support</span>
+<a name="l00778"></a>00778     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00779"></a>00779     range_type range( size_type grainsize=1 ) {
+<a name="l00780"></a>00780         <span class="keywordflow">return</span> range_type( *<span class="keyword">this</span>, grainsize );
+<a name="l00781"></a>00781     }
+<a name="l00782"></a>00782     const_range_type range( size_type grainsize=1 )<span class="keyword"> const </span>{
+<a name="l00783"></a>00783         <span class="keywordflow">return</span> const_range_type( *<span class="keyword">this</span>, grainsize );
+<a name="l00784"></a>00784     }
+<a name="l00785"></a>00785 
+<a name="l00786"></a>00786     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00787"></a>00787     <span class="comment">// STL support - not thread-safe methods</span>
+<a name="l00788"></a>00788     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00789"></a>00789     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,my_embedded_segment,my_embedded_segment->node_list);}
+<a name="l00790"></a>00790     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0,0,0);}
+<a name="l00791"></a>00791     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="l00792"></a>00792     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="l00793"></a>00793     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="l00794"></a>00794     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="l00795"></a>00795 
+<a name="l00797"></a><a class="code" href="a00269.html#6aa56a8b5a25e61a97fa0b54fe2b5659">00797</a>     size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size; }
+<a name="l00798"></a>00798 
+<a name="l00800"></a><a class="code" href="a00269.html#61ff2e5bb44e5469366fd5295e5d0ebe">00800</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size == 0; }
+<a name="l00801"></a>00801 
+<a name="l00803"></a><a class="code" href="a00269.html#2bce57fe9b594abe1e6d2568aea8b357">00803</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="l00804"></a>00804 
+<a name="l00806"></a><a class="code" href="a00269.html#af34cb91b1d0f36a885a1a3432dd9af1">00806</a>     size_type bucket_count()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_mask+1; }
+<a name="l00807"></a>00807 
+<a name="l00809"></a><a class="code" href="a00269.html#6cbcacb4a256a85bf89576c101373ca7">00809</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+<a name="l00810"></a>00810 
+<a name="l00812"></a>00812     <span class="keywordtype">void</span> swap(<a class="code" href="a00269.html">concurrent_hash_map</a> &table);
+<a name="l00813"></a>00813 
+<a name="l00814"></a>00814     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00815"></a>00815     <span class="comment">// concurrent map operations</span>
+<a name="l00816"></a>00816     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00817"></a>00817 
+<a name="l00819"></a><a class="code" href="a00269.html#6968eb6feed2df36be421df0464297af">00819</a>     size_type count( <span class="keyword">const</span> Key &key )<span class="keyword"> const </span>{
+<a name="l00820"></a>00820         <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="l00821"></a>00821     }
 <a name="l00822"></a>00822 
-<a name="l00823"></a>00823         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00824"></a>00824         <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other);
-<a name="l00825"></a>00825 
-<a name="l00826"></a>00826     <span class="keyword">public</span>:
-<a name="l00827"></a>00827 
-<a name="l00828"></a>00828         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
-<a name="l00829"></a>00829         enumerable_thread_specific( <span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other ) : internal::ets_base<ETS_key_type> ()
-<a name="l00830"></a>00830         {
-<a name="l00831"></a>00831             internal_copy(other);
-<a name="l00832"></a>00832         }
-<a name="l00833"></a>00833 
-<a name="l00834"></a>00834         enumerable_thread_specific( <span class="keyword">const</span> enumerable_thread_specific& other ) : internal::ets_base<ETS_key_type> ()
-<a name="l00835"></a>00835         {
-<a name="l00836"></a>00836             internal_copy(other);
-<a name="l00837"></a>00837         }
+<a name="l00824"></a>00824 
+<a name="l00825"></a><a class="code" href="a00269.html#2afcc33dade7bb24e008d60c0df38230">00825</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00272.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key )<span class="keyword"> const </span>{
+<a name="l00826"></a>00826         result.<a class="code" href="a00272.html#7db006d41b49dc5f1716a913769d4698">release</a>();
+<a name="l00827"></a>00827         <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="l00828"></a>00828     }
+<a name="l00829"></a>00829 
+<a name="l00831"></a>00831 
+<a name="l00832"></a><a class="code" href="a00269.html#7bc475d1968f7f0af3d736d7e8a0d7df">00832</a>     <span class="keywordtype">bool</span> find( <a class="code" href="a00270.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
+<a name="l00833"></a>00833         result.<a class="code" href="a00272.html#7db006d41b49dc5f1716a913769d4698">release</a>();
+<a name="l00834"></a>00834         <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="l00835"></a>00835     }
+<a name="l00836"></a>00836 
 <a name="l00838"></a>00838 
-<a name="l00839"></a>00839     <span class="keyword">private</span>:
-<a name="l00840"></a>00840 
-<a name="l00841"></a>00841         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00842"></a>00842         enumerable_thread_specific &
-<a name="l00843"></a>00843         internal_assign(<span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other) {
-<a name="l00844"></a>00844             <span class="keywordflow">if</span>(static_cast<void *>( <span class="keyword">this</span> ) != static_cast<const void *>( &other )) {
-<a name="l00845"></a>00845                 this->clear(); 
-<a name="l00846"></a>00846                 my_construct_callback->destroy();
-<a name="l00847"></a>00847                 my_construct_callback = 0;
-<a name="l00848"></a>00848                 internal_copy( other );
-<a name="l00849"></a>00849             }
-<a name="l00850"></a>00850             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00851"></a>00851         }
+<a name="l00839"></a><a class="code" href="a00269.html#47fe0e60151a9bd7a444db827772a4e6">00839</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00272.html">const_accessor</a> &result, <span class="keyword">const</span> Key &key ) {
+<a name="l00840"></a>00840         result.<a class="code" href="a00272.html#7db006d41b49dc5f1716a913769d4698">release</a>();
+<a name="l00841"></a>00841         <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="l00842"></a>00842     }
+<a name="l00843"></a>00843 
+<a name="l00845"></a>00845 
+<a name="l00846"></a><a class="code" href="a00269.html#54e0955ecd11575b4c07166838a72893">00846</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00270.html">accessor</a> &result, <span class="keyword">const</span> Key &key ) {
+<a name="l00847"></a>00847         result.<a class="code" href="a00272.html#7db006d41b49dc5f1716a913769d4698">release</a>();
+<a name="l00848"></a>00848         <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="l00849"></a>00849     }
+<a name="l00850"></a>00850 
 <a name="l00852"></a>00852 
-<a name="l00853"></a>00853     <span class="keyword">public</span>:
-<a name="l00854"></a>00854 
-<a name="l00855"></a>00855         <span class="comment">// assignment</span>
-<a name="l00856"></a>00856         enumerable_thread_specific& operator=(<span class="keyword">const</span> enumerable_thread_specific& other) {
-<a name="l00857"></a>00857             <span class="keywordflow">return</span> internal_assign(other);
-<a name="l00858"></a>00858         }
+<a name="l00853"></a><a class="code" href="a00269.html#091efd2d12fdad4fe9e54d9629a9dfc3">00853</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00272.html">const_accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
+<a name="l00854"></a>00854         result.<a class="code" href="a00272.html#7db006d41b49dc5f1716a913769d4698">release</a>();
+<a name="l00855"></a>00855         <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="l00856"></a>00856     }
+<a name="l00857"></a>00857 
 <a name="l00859"></a>00859 
-<a name="l00860"></a>00860         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
-<a name="l00861"></a>00861         enumerable_thread_specific& operator=(<span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other)
-<a name="l00862"></a>00862         {
-<a name="l00863"></a>00863             <span class="keywordflow">return</span> internal_assign(other);
-<a name="l00864"></a>00864         }
-<a name="l00865"></a>00865 
-<a name="l00866"></a>00866         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&, const T&)</span>
-<a name="l00867"></a>00867         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
-<a name="l00868"></a>00868         T combine(combine_func_t f_combine) {
-<a name="l00869"></a>00869             <span class="keywordflow">if</span>(begin() == end()) {
-<a name="l00870"></a>00870                 internal::destruct_only<T> location;
-<a name="l00871"></a>00871                 my_construct_callback->construct(location.value.begin());
-<a name="l00872"></a>00872                 <span class="keywordflow">return</span> *location.value.begin();
-<a name="l00873"></a>00873             }
-<a name="l00874"></a>00874             const_iterator ci = begin();
-<a name="l00875"></a>00875             T my_result = *ci;
-<a name="l00876"></a>00876             <span class="keywordflow">while</span>(++ci != end()) 
-<a name="l00877"></a>00877                 my_result = f_combine( my_result, *ci );
-<a name="l00878"></a>00878             <span class="keywordflow">return</span> my_result;
-<a name="l00879"></a>00879         }
-<a name="l00880"></a>00880 
-<a name="l00881"></a>00881         <span class="comment">// combine_func_t has signature void(T) or void(const T&)</span>
-<a name="l00882"></a>00882         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
-<a name="l00883"></a>00883         <span class="keywordtype">void</span> combine_each(combine_func_t f_combine) {
-<a name="l00884"></a>00884             <span class="keywordflow">for</span>(const_iterator ci = begin(); ci != end(); ++ci) {
-<a name="l00885"></a>00885                 f_combine( *ci );
-<a name="l00886"></a>00886             }
-<a name="l00887"></a>00887         }
-<a name="l00888"></a>00888 
-<a name="l00889"></a>00889     }; <span class="comment">// enumerable_thread_specific</span>
-<a name="l00890"></a>00890 
-<a name="l00891"></a>00891     <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator, ets_key_usage_type ETS_key_type> 
-<a name="l00892"></a>00892     <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
-<a name="l00893"></a>00893     <span class="keywordtype">void</span> enumerable_thread_specific<T,Allocator,ETS_key_type>::internal_copy( <span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other) {
-<a name="l00894"></a>00894         <span class="comment">// Initialize my_construct_callback first, so that it is valid even if rest of this routine throws an exception.</span>
-<a name="l00895"></a>00895         my_construct_callback = other.my_construct_callback->clone();
-<a name="l00896"></a>00896 
-<a name="l00897"></a>00897         <span class="keyword">typedef</span> internal::ets_base<ets_no_key> base;
-<a name="l00898"></a>00898         __TBB_ASSERT(my_locals.<a class="code" href="a00250.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()==0,NULL);
-<a name="l00899"></a>00899         this->table_reserve_for_copy( other );
-<a name="l00900"></a>00900         <span class="keywordflow">for</span>( base::array* r=other.my_root; r; r=r->next ) {
-<a name="l00901"></a>00901             <span class="keywordflow">for</span>( size_t i=0; i<r-><a class="code" href="a00233.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>(); ++i ) {
-<a name="l00902"></a>00902                 base::slot& s1 = r->at(i);
-<a name="l00903"></a>00903                 <span class="keywordflow">if</span>( !s1.empty() ) {
-<a name="l00904"></a>00904                     base::slot& s2 = this->table_find(s1.key);
-<a name="l00905"></a>00905                     <span class="keywordflow">if</span>( s2.empty() ) { 
-<a name="l00906"></a>00906 #<span class="keywordflow">if</span> TBB_DEPRECATED
-<a name="l00907"></a>00907                         <span class="keywordtype">void</span>* lref = &my_locals[my_locals.<a class="code" href="a00250.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element())];
-<a name="l00908"></a>00908 <span class="preprocessor">#else</span>
-<a name="l00909"></a>00909 <span class="preprocessor"></span>                        <span class="keywordtype">void</span>* lref = &*my_locals.<a class="code" href="a00250.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element());
-<a name="l00910"></a>00910 <span class="preprocessor">#endif</span>
-<a name="l00911"></a>00911 <span class="preprocessor"></span>                        s2.ptr = <span class="keyword">new</span>(lref) T(*(U*)s1.ptr);
-<a name="l00912"></a>00912                         s2.key = s1.key;
-<a name="l00913"></a>00913                     } <span class="keywordflow">else</span> {
-<a name="l00914"></a>00914                         <span class="comment">// Skip the duplicate</span>
-<a name="l00915"></a>00915                     } 
-<a name="l00916"></a>00916                 }
-<a name="l00917"></a>00917             }
-<a name="l00918"></a>00918         }
-<a name="l00919"></a>00919     }
-<a name="l00920"></a>00920 
-<a name="l00921"></a>00921     <span class="keyword">template</span>< <span class="keyword">typename</span> Container >
-<a name="l00922"></a>00922     <span class="keyword">class </span>flattened2d {
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924         <span class="comment">// This intermediate typedef is to address issues with VC7.1 compilers</span>
-<a name="l00925"></a>00925         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::value_type conval_type;
-<a name="l00926"></a>00926 
-<a name="l00927"></a>00927     <span class="keyword">public</span>:
-<a name="l00928"></a>00928 
-<a name="l00930"></a>00930         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::size_type size_type;
-<a name="l00931"></a>00931         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::difference_type difference_type;
-<a name="l00932"></a>00932         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::allocator_type allocator_type;
-<a name="l00933"></a>00933         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::value_type value_type;
-<a name="l00934"></a>00934         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::reference reference;
-<a name="l00935"></a>00935         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_reference const_reference;
-<a name="l00936"></a>00936         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::pointer pointer;
-<a name="l00937"></a>00937         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_pointer const_pointer;
-<a name="l00938"></a>00938 
-<a name="l00939"></a>00939         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, value_type> iterator;
-<a name="l00940"></a>00940         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, const value_type> const_iterator;
-<a name="l00941"></a>00941 
-<a name="l00942"></a>00942         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="l00943"></a>00943             my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }
-<a name="l00944"></a>00944 
-<a name="l00945"></a>00945         flattened2d( <span class="keyword">const</span> Container &c ) : 
-<a name="l00946"></a>00946             my_container(const_cast<Container*>(&c)), my_begin(c.begin()), my_end(c.end()) { }
-<a name="l00947"></a>00947 
-<a name="l00948"></a>00948         iterator begin() { <span class="keywordflow">return</span> iterator(*my_container) = my_begin; }
-<a name="l00949"></a>00949         iterator end() { <span class="keywordflow">return</span> iterator(*my_container) = my_end; }
-<a name="l00950"></a>00950         const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_begin; }
-<a name="l00951"></a>00951         const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_end; }
-<a name="l00952"></a>00952 
-<a name="l00953"></a>00953         size_type size()<span class="keyword"> const </span>{
-<a name="l00954"></a>00954             size_type tot_size = 0;
-<a name="l00955"></a>00955             <span class="keywordflow">for</span>(<span class="keyword">typename</span> Container::const_iterator i = my_begin; i != my_end; ++i) {
-<a name="l00956"></a>00956                 tot_size += i->size();
-<a name="l00957"></a>00957             }
-<a name="l00958"></a>00958             <span class="keywordflow">return</span> tot_size;
-<a name="l00959"></a>00959         }
-<a name="l00960"></a>00960 
-<a name="l00961"></a>00961     <span class="keyword">private</span>:
-<a name="l00962"></a>00962 
-<a name="l00963"></a>00963         Container *my_container;
-<a name="l00964"></a>00964         <span class="keyword">typename</span> Container::const_iterator my_begin;
-<a name="l00965"></a>00965         <span class="keyword">typename</span> Container::const_iterator my_end;
-<a name="l00966"></a>00966 
-<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> Container>
-<a name="l00970"></a>00970     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="l00971"></a>00971         <span class="keywordflow">return</span> flattened2d<Container>(c, b, e);
-<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> Container>
-<a name="l00975"></a>00975     flattened2d<Container> flatten2d(<span class="keyword">const</span> Container &c) {
-<a name="l00976"></a>00976         <span class="keywordflow">return</span> flattened2d<Container>(c);
-<a name="l00977"></a>00977     }
-<a name="l00978"></a>00978 
-<a name="l00979"></a>00979 } <span class="comment">// interface6</span>
-<a name="l00980"></a>00980 
-<a name="l00981"></a>00981 <span class="keyword">namespace </span>internal {
-<a name="l00982"></a>00982 <span class="keyword">using</span> interface6::internal::segmented_iterator;
-<a name="l00983"></a>00983 }
-<a name="l00984"></a>00984 
-<a name="l00985"></a>00985 <span class="keyword">using</span> interface6::enumerable_thread_specific;
-<a name="l00986"></a>00986 <span class="keyword">using</span> interface6::flattened2d;
-<a name="l00987"></a>00987 <span class="keyword">using</span> interface6::flatten2d;
-<a name="l00988"></a>00988 
-<a name="l00989"></a>00989 } <span class="comment">// namespace tbb</span>
-<a name="l00990"></a>00990 
-<a name="l00991"></a>00991 <span class="preprocessor">#endif</span>
+<a name="l00860"></a><a class="code" href="a00269.html#39183d78d6e8425917555ab542ab92de">00860</a>     <span class="keywordtype">bool</span> insert( <a class="code" href="a00270.html">accessor</a> &result, <span class="keyword">const</span> value_type &value ) {
+<a name="l00861"></a>00861         result.<a class="code" href="a00272.html#7db006d41b49dc5f1716a913769d4698">release</a>();
+<a name="l00862"></a>00862         <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="l00863"></a>00863     }
+<a name="l00864"></a>00864 
+<a name="l00866"></a>00866 
+<a name="l00867"></a><a class="code" href="a00269.html#3f121a316af8135de476a30fae6d7c07">00867</a>     <span class="keywordtype">bool</span> insert( <span class="keyword">const</span> value_type &value ) {
+<a name="l00868"></a>00868         <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="l00869"></a>00869     }
+<a name="l00870"></a>00870 
+<a name="l00872"></a>00872     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00873"></a><a class="code" href="a00269.html#1dd37fad87e561151ba1e242ca94bcc1">00873</a>     <span class="keywordtype">void</span> insert(I first, I last) {
+<a name="l00874"></a>00874         <span class="keywordflow">for</span>(; first != last; ++first)
+<a name="l00875"></a>00875             insert( *first );
+<a name="l00876"></a>00876     }
+<a name="l00877"></a>00877 
+<a name="l00879"></a>00879 
+<a name="l00880"></a>00880     <span class="keywordtype">bool</span> erase( <span class="keyword">const</span> Key& key );
+<a name="l00881"></a>00881 
+<a name="l00883"></a>00883 
+<a name="l00884"></a><a class="code" href="a00269.html#e698ef3d70b2d1a29a7a5551784d3653">00884</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00272.html">const_accessor</a>& item_accessor ) {
+<a name="l00885"></a>00885         <span class="keywordflow">return</span> exclude( item_accessor );
+<a name="l00886"></a>00886     }
+<a name="l00887"></a>00887 
+<a name="l00889"></a>00889 
+<a name="l00890"></a><a class="code" href="a00269.html#5f12d150d421420965db07368666a84f">00890</a>     <span class="keywordtype">bool</span> erase( <a class="code" href="a00270.html">accessor</a>& item_accessor ) {
+<a name="l00891"></a>00891         <span class="keywordflow">return</span> exclude( item_accessor );
+<a name="l00892"></a>00892     }
+<a name="l00893"></a>00893 
+<a name="l00894"></a>00894 <span class="keyword">protected</span>:
+<a name="l00896"></a>00896     <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="l00897"></a>00897 
+<a name="l00899"></a>00899     <span class="keywordtype">bool</span> exclude( const_accessor &item_accessor );
+<a name="l00900"></a>00900 
+<a name="l00902"></a>00902     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00903"></a>00903     std::pair<I, I> internal_equal_range( <span class="keyword">const</span> Key& key, I end ) <span class="keyword">const</span>;
+<a name="l00904"></a>00904 
+<a name="l00906"></a>00906     <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> <a class="code" href="a00269.html">concurrent_hash_map</a>& source );
+<a name="l00907"></a>00907 
+<a name="l00908"></a>00908     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00909"></a>00909     <span class="keywordtype">void</span> internal_copy(I first, I last);
+<a name="l00910"></a>00910 
+<a name="l00912"></a>00912 
+<a name="l00914"></a><a class="code" href="a00269.html#2f76ed101a0ccc8875b846c2f747897e">00914</a>     const_pointer internal_fast_find( <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{
+<a name="l00915"></a>00915         hashcode_t h = my_hash_compare.hash( key );
+<a name="l00916"></a>00916         hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
+<a name="l00917"></a>00917         node *n;
+<a name="l00918"></a>00918     restart:
+<a name="l00919"></a>00919         __TBB_ASSERT((m&(m+1))==0, NULL);
+<a name="l00920"></a>00920         bucket *b = get_bucket( h & m );
+<a name="l00921"></a>00921         <span class="comment">// TODO: actually, notification is unnecessary here, just hiding double-check</span>
+<a name="l00922"></a>00922         <span class="keywordflow">if</span>( itt_load_word_with_acquire(b->node_list) == internal::rehash_req )
+<a name="l00923"></a>00923         {
+<a name="l00924"></a>00924             bucket::scoped_t lock;
+<a name="l00925"></a>00925             <span class="keywordflow">if</span>( lock.try_acquire( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> ) ) {
+<a name="l00926"></a>00926                 <span class="keywordflow">if</span>( b->node_list == internal::rehash_req)
+<a name="l00927"></a>00927                     const_cast<concurrent_hash_map*>(<span class="keyword">this</span>)->rehash_bucket( b, h & m ); <span class="comment">//recursive rehashing</span>
+<a name="l00928"></a>00928             }
+<a name="l00929"></a>00929             <span class="keywordflow">else</span> lock.acquire( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+<a name="l00930"></a>00930             __TBB_ASSERT(b->node_list!=internal::rehash_req,NULL);
+<a name="l00931"></a>00931         }
+<a name="l00932"></a>00932         n = search_bucket( key, b );
+<a name="l00933"></a>00933         <span class="keywordflow">if</span>( n )
+<a name="l00934"></a>00934             <span class="keywordflow">return</span> &n->item;
+<a name="l00935"></a>00935         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l00936"></a>00936             <span class="keywordflow">goto</span> restart;
+<a name="l00937"></a>00937         <span class="keywordflow">return</span> 0;
+<a name="l00938"></a>00938     }
+<a name="l00939"></a>00939 };
+<a name="l00940"></a>00940 
+<a name="l00941"></a>00941 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00942"></a>00942 <span class="preprocessor"></span>    <span class="comment">// Suppress "conditional expression is constant" warning.</span>
+<a name="l00943"></a>00943 <span class="preprocessor">    #pragma warning( push )</span>
+<a name="l00944"></a>00944 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( disable: 4127 )</span>
+<a name="l00945"></a>00945 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00946"></a>00946 <span class="preprocessor"></span>
+<a name="l00947"></a>00947 <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="l00948"></a><a class="code" href="a00269.html#3f3413264a99174a224ef96f6c4ea769">00948</a> <span class="keywordtype">bool</span> <a class="code" href="a00269.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="a00272.html">const_accessor</a> *result, <span class="keywordtype">bool</span> write ) {
+<a name="l00949"></a>00949     __TBB_ASSERT( !result || !result-><a class="code" href="a00272.html#21856da696b0765cc3db90663160d95e">my_node</a>, NULL );
+<a name="l00950"></a>00950     <span class="keywordtype">bool</span> return_value;
+<a name="l00951"></a>00951     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
+<a name="l00952"></a>00952     hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
+<a name="l00953"></a>00953     segment_index_t grow_segment = 0;
+<a name="l00954"></a>00954     node *n, *tmp_n = 0;
+<a name="l00955"></a>00955     restart:
+<a name="l00956"></a>00956     {<span class="comment">//lock scope</span>
+<a name="l00957"></a>00957         __TBB_ASSERT((m&(m+1))==0, NULL);
+<a name="l00958"></a>00958         return_value = <span class="keyword">false</span>;
+<a name="l00959"></a>00959         <span class="comment">// get bucket</span>
+<a name="l00960"></a>00960         <a class="code" href="a00271.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
+<a name="l00961"></a>00961 
+<a name="l00962"></a>00962         <span class="comment">// find a node</span>
+<a name="l00963"></a>00963         n = search_bucket( key, b() );
+<a name="l00964"></a>00964         <span class="keywordflow">if</span>( op_insert ) {
+<a name="l00965"></a>00965             <span class="comment">// [opt] insert a key</span>
+<a name="l00966"></a>00966             <span class="keywordflow">if</span>( !n ) {
+<a name="l00967"></a>00967                 <span class="keywordflow">if</span>( !tmp_n ) {
+<a name="l00968"></a>00968                     <span class="keywordflow">if</span>(t) tmp_n = <span class="keyword">new</span>( my_allocator ) node(key, *t);
+<a name="l00969"></a>00969                     <span class="keywordflow">else</span>  tmp_n = <span class="keyword">new</span>( my_allocator ) node(key);
+<a name="l00970"></a>00970                 }
+<a name="l00971"></a>00971                 <span class="keywordflow">if</span>( !b.<a class="code" href="a00271.html#07d958f151a0eaa92f50fd56ad6440e2">is_writer</a>() && !b.upgrade_to_writer() ) { <span class="comment">// TODO: improved insertion</span>
+<a name="l00972"></a>00972                     <span class="comment">// Rerun search_list, in case another thread inserted the item during the upgrade.</span>
+<a name="l00973"></a>00973                     n = search_bucket( key, b() );
+<a name="l00974"></a>00974                     <span class="keywordflow">if</span>( is_valid(n) ) { <span class="comment">// unfortunately, it did</span>
+<a name="l00975"></a>00975                         b.downgrade_to_reader();
+<a name="l00976"></a>00976                         <span class="keywordflow">goto</span> exists;
+<a name="l00977"></a>00977                     }
+<a name="l00978"></a>00978                 }
+<a name="l00979"></a>00979                 <span class="keywordflow">if</span>( check_mask_race(h, m) )
+<a name="l00980"></a>00980                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b().</span>
+<a name="l00981"></a>00981                 <span class="comment">// insert and set flag to grow the container</span>
+<a name="l00982"></a>00982                 grow_segment = insert_new_node( b(), n = tmp_n, m );
+<a name="l00983"></a>00983                 tmp_n = 0;
+<a name="l00984"></a>00984                 return_value = <span class="keyword">true</span>;
+<a name="l00985"></a>00985             }
+<a name="l00986"></a>00986         } <span class="keywordflow">else</span> { <span class="comment">// find or count</span>
+<a name="l00987"></a>00987             <span class="keywordflow">if</span>( !n ) {
+<a name="l00988"></a>00988                 <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l00989"></a>00989                     <span class="keywordflow">goto</span> restart; <span class="comment">// b.release() is done in ~b(). TODO: replace by continue</span>
+<a name="l00990"></a>00990                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00991"></a>00991             }
+<a name="l00992"></a>00992             return_value = <span class="keyword">true</span>;
+<a name="l00993"></a>00993         }
+<a name="l00994"></a>00994     exists:
+<a name="l00995"></a>00995         <span class="keywordflow">if</span>( !result ) <span class="keywordflow">goto</span> check_growth;
+<a name="l00996"></a>00996         <span class="comment">// TODO: the following seems as generic/regular operation</span>
+<a name="l00997"></a>00997         <span class="comment">// acquire the item</span>
+<a name="l00998"></a>00998         <span class="keywordflow">if</span>( !result->try_acquire( n->mutex, write ) ) {
+<a name="l00999"></a>00999             <span class="comment">// we are unlucky, prepare for longer wait</span>
+<a name="l01000"></a>01000             <a class="code" href="a00256.html">tbb::internal::atomic_backoff</a> trials;
+<a name="l01001"></a>01001             <span class="keywordflow">do</span> {
+<a name="l01002"></a>01002                 <span class="keywordflow">if</span>( !trials.bounded_pause() ) {
+<a name="l01003"></a>01003                     <span class="comment">// the wait takes really long, restart the operation</span>
+<a name="l01004"></a>01004                     b.release();
+<a name="l01005"></a>01005                     __TBB_ASSERT( !op_insert || !return_value, <span class="stringliteral">"Can't acquire new item in locked bucket?"</span> );
+<a name="l01006"></a>01006                     __TBB_Yield();
+<a name="l01007"></a>01007                     m = (hashcode_t) itt_load_word_with_acquire( my_mask );
+<a name="l01008"></a>01008                     <span class="keywordflow">goto</span> restart;
+<a name="l01009"></a>01009                 }
+<a name="l01010"></a>01010             } <span class="keywordflow">while</span>( !result->try_acquire( n->mutex, write ) );
+<a name="l01011"></a>01011         }
+<a name="l01012"></a>01012     }<span class="comment">//lock scope</span>
+<a name="l01013"></a>01013     result-><a class="code" href="a00272.html#21856da696b0765cc3db90663160d95e">my_node</a> = n;
+<a name="l01014"></a>01014     result-><a class="code" href="a00272.html#4936cc9432926ed38f0207828b388e24">my_hash</a> = h;
+<a name="l01015"></a>01015 check_growth:
+<a name="l01016"></a>01016     <span class="comment">// [opt] grow the container</span>
+<a name="l01017"></a>01017     <span class="keywordflow">if</span>( grow_segment ) {
+<a name="l01018"></a>01018 <span class="preprocessor">#if __TBB_STATISTICS</span>
+<a name="l01019"></a>01019 <span class="preprocessor"></span>        my_info_resizes++; <span class="comment">// concurrent ones</span>
+<a name="l01020"></a>01020 <span class="preprocessor">#endif</span>
+<a name="l01021"></a>01021 <span class="preprocessor"></span>        enable_segment( grow_segment );
+<a name="l01022"></a>01022     }
+<a name="l01023"></a>01023     <span class="keywordflow">if</span>( tmp_n ) <span class="comment">// if op_insert only</span>
+<a name="l01024"></a>01024         delete_node( tmp_n );
+<a name="l01025"></a>01025     <span class="keywordflow">return</span> return_value;
+<a name="l01026"></a>01026 }
+<a name="l01027"></a>01027 
+<a name="l01028"></a>01028 <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="l01029"></a>01029 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l01030"></a><a class="code" href="a00269.html#8f5373b8e1864619d1ffcf3bf3f1f13d">01030</a> std::pair<I, I> <a class="code" href="a00269.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="l01031"></a>01031     hashcode_t h = my_hash_compare.hash( key );
+<a name="l01032"></a>01032     hashcode_t m = my_mask;
+<a name="l01033"></a>01033     __TBB_ASSERT((m&(m+1))==0, NULL);
+<a name="l01034"></a>01034     h &= m;
+<a name="l01035"></a>01035     bucket *b = get_bucket( h );
+<a name="l01036"></a>01036     <span class="keywordflow">while</span>( b->node_list == internal::rehash_req ) {
+<a name="l01037"></a>01037         m = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
+<a name="l01038"></a>01038         b = get_bucket( h &= m );
+<a name="l01039"></a>01039     }
+<a name="l01040"></a>01040     node *n = search_bucket( key, b );
+<a name="l01041"></a>01041     <span class="keywordflow">if</span>( !n )
+<a name="l01042"></a>01042         <span class="keywordflow">return</span> std::make_pair(end_, end_);
+<a name="l01043"></a>01043     iterator lower(*<span class="keyword">this</span>, h, b, n), upper(lower);
+<a name="l01044"></a>01044     <span class="keywordflow">return</span> std::make_pair(lower, ++upper);
+<a name="l01045"></a>01045 }
+<a name="l01046"></a>01046 
+<a name="l01047"></a>01047 <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="l01048"></a><a class="code" href="a00269.html#0c964214eb38f54603aa75fdff6d2709">01048</a> <span class="keywordtype">bool</span> <a class="code" href="a00269.html">concurrent_hash_map<Key,T,HashCompare,A>::exclude</a>( <a class="code" href="a00272.html">const_accessor</a> &item_accessor ) {
+<a name="l01049"></a>01049     __TBB_ASSERT( item_accessor.<a class="code" href="a00272.html#21856da696b0765cc3db90663160d95e">my_node</a>, NULL );
+<a name="l01050"></a>01050     node_base *<span class="keyword">const</span> n = item_accessor.<a class="code" href="a00272.html#21856da696b0765cc3db90663160d95e">my_node</a>;
+<a name="l01051"></a>01051     hashcode_t <span class="keyword">const</span> h = item_accessor.<a class="code" href="a00272.html#4936cc9432926ed38f0207828b388e24">my_hash</a>;
+<a name="l01052"></a>01052     hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
+<a name="l01053"></a>01053     <span class="keywordflow">do</span> {
+<a name="l01054"></a>01054         <span class="comment">// get bucket</span>
+<a name="l01055"></a>01055         <a class="code" href="a00271.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m, <span class="comment">/*writer=*/</span><span class="keyword">true</span> );
+<a name="l01056"></a>01056         node_base **p = &b()->node_list;
+<a name="l01057"></a>01057         <span class="keywordflow">while</span>( *p && *p != n )
+<a name="l01058"></a>01058             p = &(*p)->next;
+<a name="l01059"></a>01059         <span class="keywordflow">if</span>( !*p ) { <span class="comment">// someone else was first</span>
+<a name="l01060"></a>01060             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l01061"></a>01061                 <span class="keywordflow">continue</span>;
+<a name="l01062"></a>01062             item_accessor.<a class="code" href="a00272.html#7db006d41b49dc5f1716a913769d4698">release</a>();
+<a name="l01063"></a>01063             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01064"></a>01064         }
+<a name="l01065"></a>01065         __TBB_ASSERT( *p == n, NULL );
+<a name="l01066"></a>01066         *p = n->next; <span class="comment">// remove from container</span>
+<a name="l01067"></a>01067         my_size--;
+<a name="l01068"></a>01068         <span class="keywordflow">break</span>;
+<a name="l01069"></a>01069     } <span class="keywordflow">while</span>(<span class="keyword">true</span>);
+<a name="l01070"></a>01070     <span class="keywordflow">if</span>( !item_accessor.<a class="code" href="a00272.html#45ab59454c6f11fe938bbcab637cdd73">is_writer</a>() ) <span class="comment">// need to get exclusive lock</span>
+<a name="l01071"></a>01071         item_accessor.upgrade_to_writer(); <span class="comment">// return value means nothing here</span>
+<a name="l01072"></a>01072     item_accessor.<a class="code" href="a00272.html#7db006d41b49dc5f1716a913769d4698">release</a>();
+<a name="l01073"></a>01073     delete_node( n ); <span class="comment">// Only one thread can delete it</span>
+<a name="l01074"></a>01074     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01075"></a>01075 }
+<a name="l01076"></a>01076 
+<a name="l01077"></a>01077 <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="l01078"></a><a class="code" href="a00269.html#f27802b3a8d1863c29e743e9c6b4e870">01078</a> <span class="keywordtype">bool</span> <a class="code" href="a00269.html">concurrent_hash_map<Key,T,HashCompare,A>::erase</a>( <span class="keyword">const</span> Key &key ) {
+<a name="l01079"></a>01079     node_base *n;
+<a name="l01080"></a>01080     hashcode_t <span class="keyword">const</span> h = my_hash_compare.hash( key );
+<a name="l01081"></a>01081     hashcode_t m = (hashcode_t) itt_load_word_with_acquire( my_mask );
+<a name="l01082"></a>01082 restart:
+<a name="l01083"></a>01083     {<span class="comment">//lock scope</span>
+<a name="l01084"></a>01084         <span class="comment">// get bucket</span>
+<a name="l01085"></a>01085         <a class="code" href="a00271.html">bucket_accessor</a> b( <span class="keyword">this</span>, h & m );
+<a name="l01086"></a>01086     search:
+<a name="l01087"></a>01087         node_base **p = &b()->node_list;
+<a name="l01088"></a>01088         n = *p;
+<a name="l01089"></a>01089         <span class="keywordflow">while</span>( is_valid(n) && !my_hash_compare.equal(key, static_cast<node*>(n)->item.first ) ) {
+<a name="l01090"></a>01090             p = &n->next;
+<a name="l01091"></a>01091             n = *p;
+<a name="l01092"></a>01092         }
+<a name="l01093"></a>01093         <span class="keywordflow">if</span>( !n ) { <span class="comment">// not found, but mask could be changed</span>
+<a name="l01094"></a>01094             <span class="keywordflow">if</span>( check_mask_race( h, m ) )
+<a name="l01095"></a>01095                 <span class="keywordflow">goto</span> restart;
+<a name="l01096"></a>01096             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01097"></a>01097         }
+<a name="l01098"></a>01098         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( !b.<a class="code" href="a00271.html#07d958f151a0eaa92f50fd56ad6440e2">is_writer</a>() && !b.upgrade_to_writer() ) {
+<a name="l01099"></a>01099             <span class="keywordflow">if</span>( check_mask_race( h, m ) ) <span class="comment">// contended upgrade, check mask</span>
+<a name="l01100"></a>01100                 <span class="keywordflow">goto</span> restart;
+<a name="l01101"></a>01101             <span class="keywordflow">goto</span> search;
+<a name="l01102"></a>01102         }
+<a name="l01103"></a>01103         *p = n->next;
+<a name="l01104"></a>01104         my_size--;
+<a name="l01105"></a>01105     }
+<a name="l01106"></a>01106     {
+<a name="l01107"></a>01107         <span class="keyword">typename</span> node::scoped_t item_locker( n->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
+<a name="l01108"></a>01108     }
+<a name="l01109"></a>01109     <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="l01110"></a>01110     delete_node( n ); <span class="comment">// Only one thread can delete it due to write lock on the bucket</span>
+<a name="l01111"></a>01111     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01112"></a>01112 }
+<a name="l01113"></a>01113 
+<a name="l01114"></a>01114 <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="l01115"></a>01115 <span class="keywordtype">void</span> <a class="code" href="a00269.html">concurrent_hash_map<Key,T,HashCompare,A>::swap</a>(<a class="code" href="a00269.html">concurrent_hash_map<Key,T,HashCompare,A></a> &table) {
+<a name="l01116"></a>01116     std::swap(this->my_allocator, table.<a class="code" href="a00269.html#a72cb6e9873e5541295682179e5a7f74">my_allocator</a>);
+<a name="l01117"></a>01117     std::swap(this->my_hash_compare, table.<a class="code" href="a00269.html#53c747a3f2d2d2c85aec866e19c31c29">my_hash_compare</a>);
+<a name="l01118"></a>01118     internal_swap(table);
+<a name="l01119"></a>01119 }
+<a name="l01120"></a>01120 
+<a name="l01121"></a>01121 <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="l01122"></a><a class="code" href="a00269.html#94758113d8993cfe5afdf2d63a728869">01122</a> <span class="keywordtype">void</span> <a class="code" href="a00269.html">concurrent_hash_map<Key,T,HashCompare,A>::rehash</a>(size_type sz) {
+<a name="l01123"></a>01123     reserve( sz ); <span class="comment">// TODO: add reduction of number of buckets as well</span>
+<a name="l01124"></a>01124     hashcode_t mask = my_mask;
+<a name="l01125"></a>01125     hashcode_t b = (mask+1)>>1; <span class="comment">// size or first index of the last segment</span>
+<a name="l01126"></a>01126     __TBB_ASSERT((b&(b-1))==0, NULL); <span class="comment">// zero or power of 2</span>
+<a name="l01127"></a>01127     bucket *bp = get_bucket( b ); <span class="comment">// only the last segment should be scanned for rehashing</span>
+<a name="l01128"></a>01128     <span class="keywordflow">for</span>(; b <= mask; b++, bp++ ) {
+<a name="l01129"></a>01129         node_base *n = bp->node_list;
+<a name="l01130"></a>01130         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, <span class="stringliteral">"Broken internal structure"</span> );
+<a name="l01131"></a>01131         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during rehash() execution"</span> );
+<a name="l01132"></a>01132         <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="l01133"></a>01133             hashcode_t h = b; bucket *b_old = bp;
+<a name="l01134"></a>01134             <span class="keywordflow">do</span> {
+<a name="l01135"></a>01135                 __TBB_ASSERT( h > 1, <span class="stringliteral">"The lowermost buckets can't be rehashed"</span> );
+<a name="l01136"></a>01136                 hashcode_t m = ( 1u<<__TBB_Log2( h ) ) - 1; <span class="comment">// get parent mask from the topmost bit</span>
+<a name="l01137"></a>01137                 b_old = get_bucket( h &= m );
+<a name="l01138"></a>01138             } <span class="keywordflow">while</span>( b_old->node_list == internal::rehash_req );
+<a name="l01139"></a>01139             <span class="comment">// now h - is index of the root rehashed bucket b_old</span>
+<a name="l01140"></a>01140             mark_rehashed_levels( h ); <span class="comment">// mark all non-rehashed children recursively across all segments</span>
+<a name="l01141"></a>01141             <span class="keywordflow">for</span>( node_base **p = &b_old->node_list, *q = *p; is_valid(q); q = *p ) {
+<a name="l01142"></a>01142                 hashcode_t c = my_hash_compare.hash( static_cast<node*>(q)->item.first );
+<a name="l01143"></a>01143                 <span class="keywordflow">if</span>( (c & mask) != h ) { <span class="comment">// should be rehashed</span>
+<a name="l01144"></a>01144                     *p = q->next; <span class="comment">// exclude from b_old</span>
+<a name="l01145"></a>01145                     bucket *b_new = get_bucket( c & mask );
+<a name="l01146"></a>01146                     __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="l01147"></a>01147                     add_to_bucket( b_new, q );
+<a name="l01148"></a>01148                 } <span class="keywordflow">else</span> p = &q->next; <span class="comment">// iterate to next item</span>
+<a name="l01149"></a>01149             }
+<a name="l01150"></a>01150         }
+<a name="l01151"></a>01151     }
+<a name="l01152"></a>01152 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01153"></a>01153 <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="l01154"></a>01154     <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
+<a name="l01155"></a>01155 <span class="preprocessor">#endif</span>
+<a name="l01156"></a>01156 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01157"></a>01157 <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="l01158"></a>01158         <span class="keywordflow">if</span>( b & (b-2) ) ++bp; <span class="comment">// not the beginning of a segment</span>
+<a name="l01159"></a>01159         <span class="keywordflow">else</span> bp = get_bucket( b );
+<a name="l01160"></a>01160         node_base *n = bp->node_list;
+<a name="l01161"></a>01161         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during rehash() execution"</span> );
+<a name="l01162"></a>01162         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed, <span class="stringliteral">"Broken internal structure"</span> );
+<a name="l01163"></a>01163 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01164"></a>01164 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( n == internal::empty_rehashed ) empty_buckets++;
+<a name="l01165"></a>01165         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n->next ) overpopulated_buckets++;
+<a name="l01166"></a>01166 <span class="preprocessor">#endif</span>
+<a name="l01167"></a>01167 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l01168"></a>01168 <span class="preprocessor"></span>        <span class="keywordflow">for</span>( ; is_valid(n); n = n->next ) {
+<a name="l01169"></a>01169             hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first ) & mask;
+<a name="l01170"></a>01170             __TBB_ASSERT( h == b, <span class="stringliteral">"hash() function changed for key in table or internal error"</span> );
+<a name="l01171"></a>01171         }
+<a name="l01172"></a>01172 <span class="preprocessor">#endif</span>
+<a name="l01173"></a>01173 <span class="preprocessor"></span>    }
+<a name="l01174"></a>01174 <span class="preprocessor">#endif // TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01175"></a>01175 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l01176"></a>01176 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( buckets > current_size) empty_buckets -= buckets - current_size;
+<a name="l01177"></a>01177     <span class="keywordflow">else</span> overpopulated_buckets -= current_size - buckets; <span class="comment">// TODO: load_factor?</span>
+<a name="l01178"></a>01178     <span class="keywordflow">if</span>( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
+<a name="l01179"></a>01179         tbb::internal::runtime_warning(
+<a name="l01180"></a>01180             <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="l01181"></a>01181             <span class="keyword">typeid</span>(*this).name(), current_size, empty_buckets, overpopulated_buckets );
+<a name="l01182"></a>01182         reported = <span class="keyword">true</span>;
+<a name="l01183"></a>01183     }
+<a name="l01184"></a>01184 <span class="preprocessor">#endif</span>
+<a name="l01185"></a>01185 <span class="preprocessor"></span>}
+<a name="l01186"></a>01186 
+<a name="l01187"></a>01187 <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="l01188"></a><a class="code" href="a00269.html#220686fe17b197eedf19dd856cd02e36">01188</a> <span class="keywordtype">void</span> <a class="code" href="a00269.html">concurrent_hash_map<Key,T,HashCompare,A>::clear</a>() {
+<a name="l01189"></a>01189     hashcode_t m = my_mask;
+<a name="l01190"></a>01190     __TBB_ASSERT((m&(m+1))==0, NULL);
+<a name="l01191"></a>01191 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
+<a name="l01192"></a>01192 <span class="preprocessor"></span><span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
+<a name="l01193"></a>01193 <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="l01194"></a>01194     <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
+<a name="l01195"></a>01195 <span class="preprocessor">#endif</span>
+<a name="l01196"></a>01196 <span class="preprocessor"></span>    bucket *bp = 0;
+<a name="l01197"></a>01197     <span class="comment">// check consistency</span>
+<a name="l01198"></a>01198     <span class="keywordflow">for</span>( segment_index_t b = 0; b <= m; b++ ) {
+<a name="l01199"></a>01199         <span class="keywordflow">if</span>( b & (b-2) ) ++bp; <span class="comment">// not the beginning of a segment</span>
+<a name="l01200"></a>01200         <span class="keywordflow">else</span> bp = get_bucket( b );
+<a name="l01201"></a>01201         node_base *n = bp->node_list;
+<a name="l01202"></a>01202         __TBB_ASSERT( is_valid(n) || n == internal::empty_rehashed || n == internal::rehash_req, <span class="stringliteral">"Broken internal structure"</span> );
+<a name="l01203"></a>01203         __TBB_ASSERT( *reinterpret_cast<intptr_t*>(&bp->mutex) == 0, <span class="stringliteral">"concurrent or unexpectedly terminated operation during clear() execution"</span> );
+<a name="l01204"></a>01204 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
+<a name="l01205"></a>01205 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( n == internal::empty_rehashed ) empty_buckets++;
+<a name="l01206"></a>01206         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n == internal::rehash_req ) buckets--;
+<a name="l01207"></a>01207         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( n->next ) overpopulated_buckets++;
+<a name="l01208"></a>01208 <span class="preprocessor">#endif</span>
+<a name="l01209"></a>01209 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
+<a name="l01210"></a>01210 <span class="preprocessor"></span>        <span class="keywordflow">for</span>(; is_valid(n); n = n->next ) {
+<a name="l01211"></a>01211             hashcode_t h = my_hash_compare.hash( static_cast<node*>(n)->item.first );
+<a name="l01212"></a>01212             h &= m;
+<a name="l01213"></a>01213             __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="l01214"></a>01214         }
+<a name="l01215"></a>01215 <span class="preprocessor">#endif</span>
+<a name="l01216"></a>01216 <span class="preprocessor"></span>    }
+<a name="l01217"></a>01217 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
+<a name="l01218"></a>01218 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_STATISTICS</span>
+<a name="l01219"></a>01219 <span class="preprocessor"></span>    printf( <span class="stringliteral">"items=%d buckets: capacity=%d rehashed=%d empty=%d overpopulated=%d"</span>
+<a name="l01220"></a>01220         <span class="stringliteral">" concurrent: resizes=%u rehashes=%u restarts=%u\n"</span>,
+<a name="l01221"></a>01221         current_size, <span class="keywordtype">int</span>(m+1), buckets, empty_buckets, overpopulated_buckets,
+<a name="l01222"></a>01222         <span class="keywordtype">unsigned</span>(my_info_resizes), <span class="keywordtype">unsigned</span>(my_info_rehashes), <span class="keywordtype">unsigned</span>(my_info_restarts) );
+<a name="l01223"></a>01223     my_info_resizes = 0; <span class="comment">// concurrent ones</span>
+<a name="l01224"></a>01224     my_info_restarts = 0; <span class="comment">// race collisions</span>
+<a name="l01225"></a>01225     my_info_rehashes = 0;  <span class="comment">// invocations of rehash_bucket</span>
+<a name="l01226"></a>01226 <span class="preprocessor">#endif</span>
+<a name="l01227"></a>01227 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( buckets > current_size) empty_buckets -= buckets - current_size;
+<a name="l01228"></a>01228     <span class="keywordflow">else</span> overpopulated_buckets -= current_size - buckets; <span class="comment">// TODO: load_factor?</span>
+<a name="l01229"></a>01229     <span class="keywordflow">if</span>( !reported && buckets >= 512 && ( 2*empty_buckets > current_size || 2*overpopulated_buckets > current_size ) ) {
+<a name="l01230"></a>01230         tbb::internal::runtime_warning(
+<a name="l01231"></a>01231             <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="l01232"></a>01232             <span class="keyword">typeid</span>(*this).name(), current_size, empty_buckets, overpopulated_buckets );
+<a name="l01233"></a>01233         reported = <span class="keyword">true</span>;
+<a name="l01234"></a>01234     }
+<a name="l01235"></a>01235 <span class="preprocessor">#endif</span>
+<a name="l01236"></a>01236 <span class="preprocessor"></span><span class="preprocessor">#endif//TBB_USE_ASSERT || TBB_USE_PERFORMANCE_WARNINGS || __TBB_STATISTICS</span>
+<a name="l01237"></a>01237 <span class="preprocessor"></span>    my_size = 0;
+<a name="l01238"></a>01238     segment_index_t s = segment_index_of( m );
+<a name="l01239"></a>01239     __TBB_ASSERT( s+1 == pointers_per_table || !my_table[s+1], <span class="stringliteral">"wrong mask or concurrent grow"</span> );
+<a name="l01240"></a>01240     <a class="code" href="a00264.html">cache_aligned_allocator<bucket></a> alloc;
+<a name="l01241"></a>01241     <span class="keywordflow">do</span> {
+<a name="l01242"></a>01242         __TBB_ASSERT( is_valid( my_table[s] ), <span class="stringliteral">"wrong mask or concurrent grow"</span> );
+<a name="l01243"></a>01243         segment_ptr_t buckets_ptr = my_table[s];
+<a name="l01244"></a>01244         size_type sz = segment_size( s ? s : 1 );
+<a name="l01245"></a>01245         <span class="keywordflow">for</span>( segment_index_t i = 0; i < sz; i++ )
+<a name="l01246"></a>01246             <span class="keywordflow">for</span>( node_base *n = buckets_ptr[i].node_list; is_valid(n); n = buckets_ptr[i].node_list ) {
+<a name="l01247"></a>01247                 buckets_ptr[i].node_list = n->next;
+<a name="l01248"></a>01248                 delete_node( n );
+<a name="l01249"></a>01249             }
+<a name="l01250"></a>01250         <span class="keywordflow">if</span>( s >= first_block) <span class="comment">// the first segment or the next</span>
+<a name="l01251"></a>01251             alloc.<a class="code" href="a00264.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets_ptr, sz );
+<a name="l01252"></a>01252         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( s == embedded_block && embedded_block != first_block )
+<a name="l01253"></a>01253             alloc.<a class="code" href="a00264.html#3d4eadf188f7d85d3805ae534e0b8e1c">deallocate</a>( buckets_ptr, segment_size(first_block)-embedded_buckets );
+<a name="l01254"></a>01254         <span class="keywordflow">if</span>( s >= embedded_block ) my_table[s] = 0;
+<a name="l01255"></a>01255     } <span class="keywordflow">while</span>(s-- > 0);
+<a name="l01256"></a>01256     my_mask = embedded_buckets - 1;
+<a name="l01257"></a>01257 }
+<a name="l01258"></a>01258 
+<a name="l01259"></a>01259 <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="l01260"></a><a class="code" href="a00269.html#72c9c9e9655fcf096f5f0ed9c8ba6669">01260</a> <span class="keywordtype">void</span> <a class="code" href="a00269.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>( <span class="keyword">const</span> <a class="code" href="a00269.html">concurrent_hash_map</a>& source ) {
+<a name="l01261"></a>01261     reserve( source.my_size ); <span class="comment">// TODO: load_factor?</span>
+<a name="l01262"></a>01262     hashcode_t mask = source.my_mask;
+<a name="l01263"></a>01263     <span class="keywordflow">if</span>( my_mask == mask ) { <span class="comment">// optimized version</span>
+<a name="l01264"></a>01264         bucket *dst = 0, *src = 0;
+<a name="l01265"></a>01265         <span class="keywordtype">bool</span> rehash_required = <span class="keyword">false</span>;
+<a name="l01266"></a>01266         <span class="keywordflow">for</span>( hashcode_t k = 0; k <= mask; k++ ) {
+<a name="l01267"></a>01267             <span class="keywordflow">if</span>( k & (k-2) ) ++dst,src++; <span class="comment">// not the beginning of a segment</span>
+<a name="l01268"></a>01268             <span class="keywordflow">else</span> { dst = get_bucket( k ); src = source.get_bucket( k ); }
+<a name="l01269"></a>01269             __TBB_ASSERT( dst->node_list != internal::rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
+<a name="l01270"></a>01270             node *n = static_cast<node*>( src->node_list );
+<a name="l01271"></a>01271             <span class="keywordflow">if</span>( n == internal::rehash_req ) { <span class="comment">// source is not rehashed, items are in previous buckets</span>
+<a name="l01272"></a>01272                 rehash_required = <span class="keyword">true</span>;
+<a name="l01273"></a>01273                 dst->node_list = internal::rehash_req;
+<a name="l01274"></a>01274             } <span class="keywordflow">else</span> <span class="keywordflow">for</span>(; n; n = static_cast<node*>( n->next ) ) {
+<a name="l01275"></a>01275                 add_to_bucket( dst, <span class="keyword">new</span>( my_allocator ) node(n->item.first, n->item.second) );
+<a name="l01276"></a>01276                 ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
+<a name="l01277"></a>01277             }
+<a name="l01278"></a>01278         }
+<a name="l01279"></a>01279         <span class="keywordflow">if</span>( rehash_required ) <a class="code" href="a00269.html#94758113d8993cfe5afdf2d63a728869">rehash</a>();
+<a name="l01280"></a>01280     } <span class="keywordflow">else</span> <a class="code" href="a00269.html#72c9c9e9655fcf096f5f0ed9c8ba6669">internal_copy</a>( source.<a class="code" href="a00269.html#35a8c373fc3d52099ae18f0553162491">begin</a>(), source.<a class="code" href="a00269.html#67c50bddda53b9a10318f8981e4fc4fa">end</a>() );
+<a name="l01281"></a>01281 }
+<a name="l01282"></a>01282 
+<a name="l01283"></a>01283 <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="l01284"></a>01284 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l01285"></a>01285 <span class="keywordtype">void</span> <a class="code" href="a00269.html">concurrent_hash_map<Key,T,HashCompare,A>::internal_copy</a>(I first, I last) {
+<a name="l01286"></a>01286     hashcode_t m = my_mask;
+<a name="l01287"></a>01287     <span class="keywordflow">for</span>(; first != last; ++first) {
+<a name="l01288"></a>01288         hashcode_t h = my_hash_compare.hash( first->first );
+<a name="l01289"></a>01289         bucket *b = get_bucket( h & m );
+<a name="l01290"></a>01290         __TBB_ASSERT( b->node_list != internal::rehash_req, <span class="stringliteral">"Invalid bucket in destination table"</span>);
+<a name="l01291"></a>01291         node *n = <span class="keyword">new</span>( my_allocator ) node(first->first, first->second);
+<a name="l01292"></a>01292         add_to_bucket( b, n );
+<a name="l01293"></a>01293         ++my_size; <span class="comment">// TODO: replace by non-atomic op</span>
+<a name="l01294"></a>01294     }
+<a name="l01295"></a>01295 }
+<a name="l01296"></a>01296 
+<a name="l01297"></a>01297 } <span class="comment">// namespace interface5</span>
+<a name="l01298"></a>01298 
+<a name="l01299"></a>01299 <span class="keyword">using</span> interface5::concurrent_hash_map;
+<a name="l01300"></a>01300 
+<a name="l01301"></a>01301 
+<a name="l01302"></a>01302 <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="l01303"></a>01303 <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="l01304"></a>01304     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01305"></a>01305     <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A1>::const_iterator i(a.begin()), i_end(a.end());
+<a name="l01306"></a>01306     <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A2>::const_iterator j, j_end(b.end());
+<a name="l01307"></a>01307     <span class="keywordflow">for</span>(; i != i_end; ++i) {
+<a name="l01308"></a>01308         j = b.equal_range(i->first).first;
+<a name="l01309"></a>01309         <span class="keywordflow">if</span>( j == j_end || !(i->second == j->second) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01310"></a>01310     }
+<a name="l01311"></a>01311     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01312"></a>01312 }
+<a name="l01313"></a>01313 
+<a name="l01314"></a>01314 <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="l01315"></a>01315 <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="l01316"></a>01316 {    <span class="keywordflow">return</span> !(a == b); }
+<a name="l01317"></a>01317 
+<a name="l01318"></a>01318 <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="l01319"></a>01319 <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="l01320"></a>01320 {    a.swap( b ); }
+<a name="l01321"></a>01321 
+<a name="l01322"></a>01322 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l01323"></a>01323 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( pop )</span>
+<a name="l01324"></a>01324 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4127 is back</span>
+<a name="l01325"></a>01325 <span class="preprocessor"></span>
+<a name="l01326"></a>01326 } <span class="comment">// namespace tbb</span>
+<a name="l01327"></a>01327 
+<a name="l01328"></a>01328 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_hash_map_H */</span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00466.html b/doc/html/a00466.html
new file mode 100644
index 0000000..96b7814
--- /dev/null
+++ b/doc/html/a00466.html
@@ -0,0 +1,260 @@
+<!DOCTYPE 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_lru_cache.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_lru_cache.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-2012 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_lru_cache_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_lru_cache_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#if ! TBB_PREVIEW_CONCURRENT_LRU_CACHE</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">    #error Set TBB_PREVIEW_CONCURRENT_LRU_CACHE to include concurrent_lru_cache.h</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="l00028"></a>00028 <span class="preprocessor">#include <map></span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include <list></span>
+<a name="l00030"></a>00030 
+<a name="l00031"></a>00031 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "internal/_aggregator_impl.h"</span>
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="keyword">namespace </span>tbb{
+<a name="l00036"></a>00036 <span class="keyword">namespace </span>interface6 {
+<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> key_type, <span class="keyword">typename</span> value_type, <span class="keyword">typename</span> value_functor_type = value_type (*)(key_type) >
+<a name="l00040"></a>00040 <span class="keyword">class </span>concurrent_lru_cache : internal::no_assign{
+<a name="l00041"></a>00041 <span class="keyword">private</span>:
+<a name="l00042"></a>00042     <span class="keyword">typedef</span> concurrent_lru_cache self_type;
+<a name="l00043"></a>00043     <span class="keyword">typedef</span> value_functor_type value_function_type;
+<a name="l00044"></a>00044     <span class="keyword">typedef</span> std::size_t ref_counter_type;
+<a name="l00045"></a>00045     <span class="keyword">struct </span>map_value_type;
+<a name="l00046"></a>00046     <span class="keyword">typedef</span> std::map<key_type, map_value_type> map_storage_type;
+<a name="l00047"></a>00047     <span class="keyword">typedef</span> std::list<typename map_storage_type::iterator> lru_list_type;
+<a name="l00048"></a>00048     <span class="keyword">struct </span>map_value_type {
+<a name="l00049"></a>00049         value_type my_value;
+<a name="l00050"></a>00050         ref_counter_type my_ref_counter;
+<a name="l00051"></a>00051         <span class="keyword">typename</span> lru_list_type::iterator my_lru_list_iterator;
+<a name="l00052"></a>00052         <span class="keywordtype">bool</span> my_is_ready;
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054         map_value_type (value_type <span class="keyword">const</span>& a_value,  ref_counter_type a_ref_counter,    <span class="keyword">typename</span> lru_list_type::iterator a_lru_list_iterator, <span class="keywordtype">bool</span> a_is_ready)
+<a name="l00055"></a>00055             : my_value(a_value), my_ref_counter(a_ref_counter), my_lru_list_iterator (a_lru_list_iterator), my_is_ready(a_is_ready)
+<a name="l00056"></a>00056         {}
+<a name="l00057"></a>00057     };
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059     <span class="keyword">class </span>handle_object;
+<a name="l00060"></a>00060 
+<a name="l00061"></a>00061     <span class="keyword">struct </span>aggregator_operation;
+<a name="l00062"></a>00062     <span class="keyword">typedef</span> aggregator_operation aggregated_operation_type;
+<a name="l00063"></a>00063     <span class="keyword">typedef</span> tbb::internal::aggregating_functor<self_type,aggregated_operation_type> aggregator_function_type;
+<a name="l00064"></a>00064     <span class="keyword">friend</span> <span class="keyword">class </span>tbb::internal::aggregating_functor<self_type,aggregated_operation_type>;
+<a name="l00065"></a>00065     <span class="keyword">typedef</span> tbb::internal::aggregator<aggregator_function_type, aggregated_operation_type> aggregator_type;
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067 <span class="keyword">private</span>:
+<a name="l00068"></a>00068     value_function_type my_value_function;
+<a name="l00069"></a>00069     std::size_t <span class="keyword">const</span> my_number_of_lru_history_items;
+<a name="l00070"></a>00070     map_storage_type my_map_storage;
+<a name="l00071"></a>00071     lru_list_type my_lru_list;
+<a name="l00072"></a>00072     aggregator_type my_aggregator;
+<a name="l00073"></a>00073 
+<a name="l00074"></a>00074 <span class="keyword">public</span>:
+<a name="l00075"></a>00075     <span class="keyword">typedef</span> handle_object handle;
+<a name="l00076"></a>00076 
+<a name="l00077"></a>00077 <span class="keyword">public</span>:
+<a name="l00078"></a>00078     concurrent_lru_cache(value_function_type f, std::size_t number_of_lru_history_items)
+<a name="l00079"></a>00079         : my_value_function(f),my_number_of_lru_history_items(number_of_lru_history_items)
+<a name="l00080"></a>00080     {
+<a name="l00081"></a>00081         my_aggregator.initialize_handler(aggregator_function_type(<span class="keyword">this</span>));
+<a name="l00082"></a>00082     }
+<a name="l00083"></a>00083 
+<a name="l00084"></a>00084     handle_object operator[](key_type k){
+<a name="l00085"></a>00085         retrieve_aggregator_operation op(k);
+<a name="l00086"></a>00086         my_aggregator.execute(&op);
+<a name="l00087"></a>00087         <span class="keywordflow">if</span> (op.is_new_value_needed()){
+<a name="l00088"></a>00088              op.result().second.my_value = my_value_function(k);
+<a name="l00089"></a>00089              __TBB_store_with_release(op.result().second.my_is_ready, <span class="keyword">true</span>);
+<a name="l00090"></a>00090         }<span class="keywordflow">else</span>{
+<a name="l00091"></a>00091             tbb::internal::spin_wait_while_eq(op.result().second.my_is_ready,<span class="keyword">false</span>);
+<a name="l00092"></a>00092         }
+<a name="l00093"></a>00093         <span class="keywordflow">return</span> handle_object(*<span class="keyword">this</span>,op.result());
+<a name="l00094"></a>00094     }
+<a name="l00095"></a>00095 <span class="keyword">private</span>:
+<a name="l00096"></a>00096     <span class="keywordtype">void</span> signal_end_of_usage(<span class="keyword">typename</span> map_storage_type::reference value_ref){
+<a name="l00097"></a>00097         signal_end_of_usage_aggregator_operation op(value_ref);
+<a name="l00098"></a>00098         my_aggregator.execute(&op);
+<a name="l00099"></a>00099     }
+<a name="l00100"></a>00100 
+<a name="l00101"></a>00101 <span class="keyword">private</span>:
+<a name="l00102"></a>00102     <span class="keyword">struct </span>handle_move_t:no_assign{
+<a name="l00103"></a>00103         concurrent_lru_cache & my_cache_ref;
+<a name="l00104"></a>00104         <span class="keyword">typename</span> map_storage_type::reference my_map_record_ref;
+<a name="l00105"></a>00105         handle_move_t(concurrent_lru_cache & cache_ref, <span class="keyword">typename</span> map_storage_type::reference value_ref):my_cache_ref(cache_ref),my_map_record_ref(value_ref) {};
+<a name="l00106"></a>00106     };
+<a name="l00107"></a>00107     <span class="keyword">class </span>handle_object {
+<a name="l00108"></a>00108         concurrent_lru_cache * my_cache_pointer;
+<a name="l00109"></a>00109         <span class="keyword">typename</span> map_storage_type::reference my_map_record_ref;
+<a name="l00110"></a>00110     <span class="keyword">public</span>:
+<a name="l00111"></a>00111         handle_object(concurrent_lru_cache & cache_ref, <span class="keyword">typename</span> map_storage_type::reference value_ref):my_cache_pointer(&cache_ref), my_map_record_ref(value_ref) {}
+<a name="l00112"></a>00112         handle_object(handle_move_t m):my_cache_pointer(&m.my_cache_ref), my_map_record_ref(m.my_map_record_ref){}
+<a name="l00113"></a>00113         operator handle_move_t(){ <span class="keywordflow">return</span> move(*<span class="keyword">this</span>);}
+<a name="l00114"></a>00114         value_type& value(){
+<a name="l00115"></a>00115             __TBB_ASSERT(my_cache_pointer,<span class="stringliteral">"get value from moved from object?"</span>);
+<a name="l00116"></a>00116             <span class="keywordflow">return</span> my_map_record_ref.second.my_value;
+<a name="l00117"></a>00117         }
+<a name="l00118"></a>00118         ~handle_object(){
+<a name="l00119"></a>00119             <span class="keywordflow">if</span> (my_cache_pointer){
+<a name="l00120"></a>00120                 my_cache_pointer->signal_end_of_usage(my_map_record_ref);
+<a name="l00121"></a>00121             }
+<a name="l00122"></a>00122         }
+<a name="l00123"></a>00123     <span class="keyword">private</span>:
+<a name="l00124"></a>00124         <span class="keyword">friend</span> handle_move_t move(handle_object& h){
+<a name="l00125"></a>00125             <span class="keywordflow">return</span> handle_object::move(h);
+<a name="l00126"></a>00126         }
+<a name="l00127"></a>00127         <span class="keyword">static</span> handle_move_t move(handle_object& h){
+<a name="l00128"></a>00128             __TBB_ASSERT(h.my_cache_pointer,<span class="stringliteral">"move from the same object twice ?"</span>);
+<a name="l00129"></a>00129             concurrent_lru_cache * cache_pointer = NULL;
+<a name="l00130"></a>00130             std::swap(cache_pointer,h.my_cache_pointer);
+<a name="l00131"></a>00131             <span class="keywordflow">return</span> handle_move_t(*cache_pointer,h.my_map_record_ref);
+<a name="l00132"></a>00132         }
+<a name="l00133"></a>00133     <span class="keyword">private</span>:
+<a name="l00134"></a>00134         <span class="keywordtype">void</span> operator=(handle_object&);
+<a name="l00135"></a>00135         handle_object(handle_object &);
+<a name="l00136"></a>00136     };
+<a name="l00137"></a>00137 <span class="keyword">private</span>:
+<a name="l00138"></a>00138     <span class="comment">//TODO: looks like aggregator_operation is a perfect match for statically typed variant type</span>
+<a name="l00139"></a>00139     <span class="keyword">struct </span>aggregator_operation : tbb::internal::aggregated_operation<aggregator_operation>{
+<a name="l00140"></a>00140         <span class="keyword">enum</span> e_op_type {op_retive, op_signal_end_of_usage};
+<a name="l00141"></a>00141         <span class="comment">//TODO: try to use pointer to function apply_visitor here</span>
+<a name="l00142"></a>00142         <span class="comment">//TODO: try virtual functions and measure the difference</span>
+<a name="l00143"></a>00143         e_op_type my_operation_type;
+<a name="l00144"></a>00144         aggregator_operation(e_op_type operation_type): my_operation_type(operation_type) {}
+<a name="l00145"></a>00145         <span class="keywordtype">void</span> cast_and_handle(self_type& container ){
+<a name="l00146"></a>00146             <span class="keywordflow">if</span> (my_operation_type==op_retive){
+<a name="l00147"></a>00147                 static_cast<retrieve_aggregator_operation*>(<span class="keyword">this</span>)->handle(container);
+<a name="l00148"></a>00148             }<span class="keywordflow">else</span>{
+<a name="l00149"></a>00149                 static_cast<signal_end_of_usage_aggregator_operation*>(<span class="keyword">this</span>)->handle(container);
+<a name="l00150"></a>00150             }
+<a name="l00151"></a>00151         }
+<a name="l00152"></a>00152     };
+<a name="l00153"></a>00153     <span class="keyword">struct </span>retrieve_aggregator_operation : aggregator_operation, <span class="keyword">private</span> internal::no_assign {
+<a name="l00154"></a>00154         key_type my_key;
+<a name="l00155"></a>00155         <span class="keyword">typename</span> map_storage_type::pointer my_result_map_record_pointer;
+<a name="l00156"></a>00156         <span class="keywordtype">bool</span> my_is_new_value_needed;
+<a name="l00157"></a>00157         retrieve_aggregator_operation(key_type key):aggregator_operation(aggregator_operation::op_retive),my_key(key),my_is_new_value_needed(false){}
+<a name="l00158"></a>00158         <span class="keywordtype">void</span> handle(self_type& container ){
+<a name="l00159"></a>00159             my_result_map_record_pointer = & container.retrieve_serial(my_key,my_is_new_value_needed);
+<a name="l00160"></a>00160         }
+<a name="l00161"></a>00161         <span class="keyword">typename</span> map_storage_type::reference result(){ <span class="keywordflow">return</span> * my_result_map_record_pointer; }
+<a name="l00162"></a>00162         <span class="keywordtype">bool</span> is_new_value_needed(){<span class="keywordflow">return</span> my_is_new_value_needed;}
+<a name="l00163"></a>00163     };
+<a name="l00164"></a>00164     <span class="keyword">struct </span>signal_end_of_usage_aggregator_operation : aggregator_operation, <span class="keyword">private</span> internal::no_assign {
+<a name="l00165"></a>00165         <span class="keyword">typename</span> map_storage_type::reference my_map_record_ref;
+<a name="l00166"></a>00166         signal_end_of_usage_aggregator_operation(<span class="keyword">typename</span> map_storage_type::reference map_record_ref):aggregator_operation(aggregator_operation::op_signal_end_of_usage),my_map_record_ref(map_record_ref){}
+<a name="l00167"></a>00167         <span class="keywordtype">void</span> handle(self_type& container ){
+<a name="l00168"></a>00168             container.signal_end_of_usage_serial(my_map_record_ref);
+<a name="l00169"></a>00169         }
+<a name="l00170"></a>00170     };
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172 <span class="keyword">private</span>:
+<a name="l00173"></a>00173    <span class="keywordtype">void</span> handle_operations(aggregator_operation* op_list){
+<a name="l00174"></a>00174        <span class="keywordflow">while</span>(op_list){
+<a name="l00175"></a>00175            op_list->cast_and_handle(*<span class="keyword">this</span>);
+<a name="l00176"></a>00176            aggregator_operation* tmp = op_list;
+<a name="l00177"></a>00177            op_list=op_list->next;
+<a name="l00178"></a>00178            tbb::internal::itt_store_word_with_release(tmp->status, uintptr_t(1));
+<a name="l00179"></a>00179        }
+<a name="l00180"></a>00180    }
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182 <span class="keyword">private</span>:
+<a name="l00183"></a>00183    <span class="keyword">typename</span> map_storage_type::reference retrieve_serial(key_type k, <span class="keywordtype">bool</span>& is_new_value_needed){
+<a name="l00184"></a>00184         <span class="keyword">typename</span> map_storage_type::iterator it = my_map_storage.find(k);
+<a name="l00185"></a>00185         <span class="keywordflow">if</span> (it == my_map_storage.end()){
+<a name="l00186"></a>00186             it = my_map_storage.insert(it,std::make_pair(k,map_value_type(value_type(),0,my_lru_list.end(),<span class="keyword">false</span>)));
+<a name="l00187"></a>00187             is_new_value_needed = <span class="keyword">true</span>;
+<a name="l00188"></a>00188         }<span class="keywordflow">else</span> {
+<a name="l00189"></a>00189             <span class="keyword">typename</span> lru_list_type::iterator list_it = it->second.my_lru_list_iterator;
+<a name="l00190"></a>00190             <span class="keywordflow">if</span> (list_it!=my_lru_list.end()) {
+<a name="l00191"></a>00191                 __TBB_ASSERT(!it->second.my_ref_counter,<span class="stringliteral">"item to be evicted should not have a live references"</span>);
+<a name="l00192"></a>00192                 <span class="comment">//item is going to be used. Therefore it is not a subject for eviction</span>
+<a name="l00193"></a>00193                 <span class="comment">//so - remove it from LRU history.</span>
+<a name="l00194"></a>00194                 my_lru_list.erase(list_it);
+<a name="l00195"></a>00195                 it->second.my_lru_list_iterator= my_lru_list.end();
+<a name="l00196"></a>00196             }
+<a name="l00197"></a>00197         }
+<a name="l00198"></a>00198         ++(it->second.my_ref_counter);
+<a name="l00199"></a>00199         <span class="keywordflow">return</span> *it;
+<a name="l00200"></a>00200     }
+<a name="l00201"></a>00201 
+<a name="l00202"></a>00202     <span class="keywordtype">void</span> signal_end_of_usage_serial(<span class="keyword">typename</span> map_storage_type::reference map_record_ref){
+<a name="l00203"></a>00203         <span class="keyword">typename</span> map_storage_type::iterator it = my_map_storage.find(map_record_ref.first);
+<a name="l00204"></a>00204         __TBB_ASSERT(it!=my_map_storage.end(),<span class="stringliteral">"cache should not return past-end iterators to outer world"</span>);
+<a name="l00205"></a>00205         __TBB_ASSERT(&(*it) == &map_record_ref,<span class="stringliteral">"dangling reference has been returned to outside world? data race ?"</span>);
+<a name="l00206"></a>00206         __TBB_ASSERT( my_lru_list.end()== std::find(my_lru_list.begin(),my_lru_list.end(),it),
+<a name="l00207"></a>00207                 <span class="stringliteral">"object in use should not be in list of unused objects "</span>);
+<a name="l00208"></a>00208         <span class="keywordflow">if</span> (! --(it->second.my_ref_counter)){
+<a name="l00209"></a>00209             <span class="comment">//it was the last reference so put it to the LRU history</span>
+<a name="l00210"></a>00210             <span class="keywordflow">if</span> (my_lru_list.size()>=my_number_of_lru_history_items){
+<a name="l00211"></a>00211                 <span class="comment">//evict items in order to get a space</span>
+<a name="l00212"></a>00212                 size_t number_of_elements_to_evict = 1 + my_lru_list.size() - my_number_of_lru_history_items;
+<a name="l00213"></a>00213                 <span class="keywordflow">for</span> (size_t i=0; i<number_of_elements_to_evict; ++i){
+<a name="l00214"></a>00214                     <span class="keyword">typename</span> map_storage_type::iterator it_to_evict = my_lru_list.back();
+<a name="l00215"></a>00215                     __TBB_ASSERT(!it_to_evict->second.my_ref_counter,<span class="stringliteral">"item to be evicted should not have a live references"</span>);
+<a name="l00216"></a>00216                     my_lru_list.pop_back();
+<a name="l00217"></a>00217                     my_map_storage.erase(it_to_evict);
+<a name="l00218"></a>00218                 }
+<a name="l00219"></a>00219             }
+<a name="l00220"></a>00220             my_lru_list.push_front(it);
+<a name="l00221"></a>00221             it->second.my_lru_list_iterator = my_lru_list.begin();
+<a name="l00222"></a>00222         }
+<a name="l00223"></a>00223     }
+<a name="l00224"></a>00224 };
+<a name="l00225"></a>00225 } <span class="comment">// namespace interface6</span>
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227 <span class="keyword">using</span> interface6::concurrent_lru_cache;
+<a name="l00228"></a>00228 
+<a name="l00229"></a>00229 } <span class="comment">// namespace tbb</span>
+<a name="l00230"></a>00230 <span class="preprocessor">#endif //__TBB_concurrent_lru_cache_H</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00468.html b/doc/html/a00468.html
deleted file mode 100644
index 2bbd57d..0000000
--- a/doc/html/a00468.html
+++ /dev/null
@@ -1,1479 +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>flow_graph.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>flow_graph.h</h1><a href="a00343.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-2011 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_flow_graph_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_flow_graph_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 "atomic.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "spin_mutex.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "null_mutex.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include "null_rw_mutex.h"</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "task.h"</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "concurrent_vector.h"</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "internal/_aggregator_impl.h"</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="comment">// use the VC10 or gcc version of tuple if it is available.</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#if TBB_IMPLEMENT_CPP0X && (!defined(_MSC_VER) || _MSC_VER < 1600)</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define TBB_PREVIEW_TUPLE 1</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include "compat/tuple"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#else</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#include <tuple></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#endif</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include<list></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include<queue></span>
-<a name="l00044"></a>00044 
-<a name="l00055"></a>00055 <span class="keyword">namespace </span>tbb {
-<a name="l00056"></a>00056 <span class="keyword">namespace </span>flow {
-<a name="l00057"></a>00057 
-<a name="l00059"></a>00059 <span class="keyword">enum</span> concurrency { unlimited = 0, serial = 1 };
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="keyword">namespace </span>interface6 {
-<a name="l00062"></a>00062 
-<a name="l00064"></a><a class="code" href="a00263.html">00064</a> <span class="keyword">class </span><a class="code" href="a00263.html">graph_node</a> {
-<a name="l00065"></a>00065 <span class="keyword">public</span>:
-<a name="l00066"></a>00066     <span class="keyword">virtual</span> ~<a class="code" href="a00263.html">graph_node</a>() {} 
-<a name="l00067"></a>00067 }; 
-<a name="l00068"></a>00068 
-<a name="l00070"></a><a class="code" href="a00251.html">00070</a> <span class="keyword">class </span><a class="code" href="a00251.html">continue_msg</a> {};
-<a name="l00071"></a>00071         
-<a name="l00072"></a>00072 <span class="keyword">template</span>< <span class="keyword">typename</span> T > <span class="keyword">class </span><a class="code" href="a00301.html">sender</a>;
-<a name="l00073"></a>00073 <span class="keyword">template</span>< <span class="keyword">typename</span> T > <span class="keyword">class </span><a class="code" href="a00295.html">receiver</a>;
-<a name="l00074"></a>00074 <span class="keyword">class </span><a class="code" href="a00253.html">continue_receiver</a>;
-<a name="l00075"></a>00075         
-<a name="l00077"></a>00077 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
-<a name="l00078"></a><a class="code" href="a00301.html">00078</a> <span class="keyword">class </span><a class="code" href="a00301.html">sender</a> {
-<a name="l00079"></a>00079 <span class="keyword">public</span>:
-<a name="l00081"></a><a class="code" href="a00301.html#127af99916cc085cd9dbc09c53299928">00081</a>     <span class="keyword">typedef</span> T <a class="code" href="a00301.html#127af99916cc085cd9dbc09c53299928">output_type</a>;
-<a name="l00082"></a>00082         
-<a name="l00084"></a><a class="code" href="a00301.html#d690e8a54e358968f0ee4fdf9ee73068">00084</a>     <span class="keyword">typedef</span> <a class="code" href="a00295.html">receiver<T></a> <a class="code" href="a00295.html">successor_type</a>;
-<a name="l00085"></a>00085         
-<a name="l00086"></a>00086     <span class="keyword">virtual</span> ~<a class="code" href="a00301.html">sender</a>() {}
-<a name="l00087"></a>00087         
-<a name="l00089"></a>00089     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00301.html#68b8941ad77b9303cf3bcb8cf1f2d28a">register_successor</a>( <a class="code" href="a00301.html#d690e8a54e358968f0ee4fdf9ee73068">successor_type</a> &r ) = 0;
-<a name="l00090"></a>00090         
-<a name="l00092"></a>00092     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00301.html#82f363bfb1738bb8789e167590b10ef9">remove_successor</a>( <a class="code" href="a00301.html#d690e8a54e358968f0ee4fdf9ee73068">successor_type</a> &r ) = 0;
-<a name="l00093"></a>00093         
-<a name="l00095"></a><a class="code" href="a00301.html#922fb56b0aad090b90a98b7d56b76a59">00095</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00301.html#922fb56b0aad090b90a98b7d56b76a59">try_get</a>( T & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
-<a name="l00096"></a>00096         
-<a name="l00098"></a><a class="code" href="a00301.html#02c05b472271db1b68a48ea2618fa72f">00098</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00301.html#02c05b472271db1b68a48ea2618fa72f">try_reserve</a>( T & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
-<a name="l00099"></a>00099         
-<a name="l00101"></a><a class="code" href="a00301.html#27036b06d6a91e97007e14f400529199">00101</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00301.html#27036b06d6a91e97007e14f400529199">try_release</a>( ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
-<a name="l00102"></a>00102         
-<a name="l00104"></a><a class="code" href="a00301.html#7b840f50da117a0d6848707c1857ea2e">00104</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00301.html#7b840f50da117a0d6848707c1857ea2e">try_consume</a>( ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
-<a name="l00105"></a>00105         
-<a name="l00106"></a>00106 };
-<a name="l00107"></a>00107         
-<a name="l00108"></a>00108         
-<a name="l00110"></a>00110 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
-<a name="l00111"></a><a class="code" href="a00295.html">00111</a> <span class="keyword">class </span><a class="code" href="a00295.html">receiver</a> {
-<a name="l00112"></a>00112 <span class="keyword">public</span>:
-<a name="l00113"></a>00113         
-<a name="l00115"></a><a class="code" href="a00295.html#0d0524c99313dedea1e04464bbf2f7ef">00115</a>     <span class="keyword">typedef</span> T <a class="code" href="a00251.html">input_type</a>;
-<a name="l00116"></a>00116         
-<a name="l00118"></a><a class="code" href="a00295.html#7fa8cff811e7c1589b805a4bb4c7a74f">00118</a>     <span class="keyword">typedef</span> <a class="code" href="a00301.html">sender<T></a> <a class="code" href="a00301.html">predecessor_type</a>;
-<a name="l00119"></a>00119         
-<a name="l00121"></a><a class="code" href="a00295.html#b00699b235435f7b65b663d5063624a1">00121</a>     <span class="keyword">virtual</span> <a class="code" href="a00295.html#b00699b235435f7b65b663d5063624a1">~receiver</a>() {}
-<a name="l00122"></a>00122         
-<a name="l00124"></a>00124     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00295.html#c6d5d0cb8ebe5771be91933609fe31b8">try_put</a>( <span class="keyword">const</span> T& t ) = 0;
-<a name="l00125"></a>00125         
-<a name="l00127"></a><a class="code" href="a00295.html#30e3316466efe3a713c23062b6e806f3">00127</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00295.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>( <a class="code" href="a00301.html">predecessor_type</a> & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
-<a name="l00128"></a>00128         
-<a name="l00130"></a><a class="code" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">00130</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>( <a class="code" href="a00301.html">predecessor_type</a> & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
-<a name="l00131"></a>00131         
-<a name="l00132"></a>00132 };
-<a name="l00133"></a>00133         
-<a name="l00135"></a>00135 
-<a name="l00136"></a><a class="code" href="a00253.html">00136</a> <span class="keyword">class </span><a class="code" href="a00253.html">continue_receiver</a> : <span class="keyword">public</span> <a class="code" href="a00295.html">receiver</a>< continue_msg > {
-<a name="l00137"></a>00137 <span class="keyword">public</span>:
-<a name="l00138"></a>00138         
-<a name="l00140"></a><a class="code" href="a00253.html#3c43c166af832d9187035985841e0a7f">00140</a>     <span class="keyword">typedef</span> <a class="code" href="a00251.html">continue_msg</a> <a class="code" href="a00251.html">input_type</a>;
-<a name="l00141"></a>00141         
-<a name="l00143"></a><a class="code" href="a00253.html#f9c58b3e9c46afd2518d0fd8957a5a2f">00143</a>     <span class="keyword">typedef</span> <a class="code" href="a00301.html">sender< continue_msg ></a> <a class="code" href="a00301.html">predecessor_type</a>;
-<a name="l00144"></a>00144         
-<a name="l00146"></a><a class="code" href="a00253.html#177db82d548a1f8471371331890b91a8">00146</a>     <a class="code" href="a00253.html#177db82d548a1f8471371331890b91a8">continue_receiver</a>( <span class="keywordtype">int</span> number_of_predecessors = 0 ) { 
-<a name="l00147"></a>00147         my_predecessor_count = my_initial_predecessor_count = number_of_predecessors;
-<a name="l00148"></a>00148         my_current_count = 0;
-<a name="l00149"></a>00149     }
-<a name="l00150"></a>00150         
-<a name="l00152"></a><a class="code" href="a00253.html#a0b292ed7fa6556b2a735f6d1e82dc74">00152</a>     <a class="code" href="a00253.html#177db82d548a1f8471371331890b91a8">continue_receiver</a>( <span class="keyword">const</span> <a class="code" href="a00253.html">continue_receiver</a>& src ) : <a class="code" href="a00295.html">receiver</a><<a class="code" href="a00251.html">continue_msg</a>>() { 
-<a name="l00153"></a>00153         my_predecessor_count = my_initial_predecessor_count = src.<a class="code" href="a00253.html#8a0d4c3084fd13902c2d38f31c1dc232">my_initial_predecessor_count</a>;
-<a name="l00154"></a>00154         my_current_count = 0;
-<a name="l00155"></a>00155     }
-<a name="l00156"></a>00156         
-<a name="l00158"></a><a class="code" href="a00253.html#1e14828fa079b9835ff7267df5ee45d7">00158</a>     <span class="keyword">virtual</span> <a class="code" href="a00253.html#1e14828fa079b9835ff7267df5ee45d7">~continue_receiver</a>() { }
-<a name="l00159"></a>00159         
-<a name="l00161"></a><a class="code" href="a00253.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">00161</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00253.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">register_predecessor</a>( <a class="code" href="a00301.html">predecessor_type</a> & ) {
-<a name="l00162"></a>00162         <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> l(my_mutex);
-<a name="l00163"></a>00163         ++my_predecessor_count;
-<a name="l00164"></a>00164         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00165"></a>00165     }
-<a name="l00166"></a>00166         
-<a name="l00168"></a>00168 
-<a name="l00171"></a><a class="code" href="a00253.html#cb691b18416d4742265aed84d496ebbd">00171</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00253.html#cb691b18416d4742265aed84d496ebbd">remove_predecessor</a>( <a class="code" href="a00301.html">predecessor_type</a> & ) {
-<a name="l00172"></a>00172         <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> l(my_mutex);
-<a name="l00173"></a>00173         --my_predecessor_count;
-<a name="l00174"></a>00174         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00175"></a>00175     }
-<a name="l00176"></a>00176         
-<a name="l00178"></a>00178 
-<a name="l00180"></a><a class="code" href="a00253.html#3969c70fb89c0a982f142ae9eb5facae">00180</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00253.html#3969c70fb89c0a982f142ae9eb5facae">try_put</a>( <span class="keyword">const</span> <a class="code" href="a00251.html">input_type</a> & ) {
-<a name="l00181"></a>00181         {
-<a name="l00182"></a>00182             <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> l(my_mutex);
-<a name="l00183"></a>00183             <span class="keywordflow">if</span> ( ++my_current_count < my_predecessor_count ) 
-<a name="l00184"></a>00184                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00185"></a>00185             <span class="keywordflow">else</span>
-<a name="l00186"></a>00186                 my_current_count = 0;
-<a name="l00187"></a>00187         }
-<a name="l00188"></a>00188         <a class="code" href="a00253.html#40ca8b7e96c5bc3428b4d1e409725ee5">execute</a>();
-<a name="l00189"></a>00189         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00190"></a>00190     }
-<a name="l00191"></a>00191         
-<a name="l00192"></a>00192 <span class="keyword">protected</span>:
-<a name="l00193"></a>00193         
-<a name="l00194"></a>00194     <a class="code" href="a00305.html">spin_mutex</a> my_mutex;
-<a name="l00195"></a>00195     <span class="keywordtype">int</span> my_predecessor_count;
-<a name="l00196"></a>00196     <span class="keywordtype">int</span> my_current_count;
-<a name="l00197"></a>00197     <span class="keywordtype">int</span> my_initial_predecessor_count;
-<a name="l00198"></a>00198         
-<a name="l00200"></a>00200 
-<a name="l00202"></a>00202     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00253.html#40ca8b7e96c5bc3428b4d1e409725ee5">execute</a>() = 0;
-<a name="l00203"></a>00203         
-<a name="l00204"></a>00204 };
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 <span class="preprocessor">#include "internal/_flow_graph_impl.h"</span>
-<a name="l00207"></a>00207 <span class="keyword">using namespace </span>internal::graph_policy_namespace;
-<a name="l00208"></a>00208 
-<a name="l00210"></a>00210 
-<a name="l00211"></a><a class="code" href="a00262.html">00211</a> <span class="keyword">class </span><a class="code" href="a00262.html">graph</a> : tbb::internal::no_copy {
-<a name="l00212"></a>00212         
-<a name="l00213"></a>00213     <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
-<a name="l00214"></a>00214     <span class="keyword">class </span>run_task : <span class="keyword">public</span> <a class="code" href="a00311.html">task</a> {
-<a name="l00215"></a>00215     <span class="keyword">public</span>: 
-<a name="l00216"></a>00216         run_task( Body& body ) : my_body(body) {}
-<a name="l00217"></a>00217         <a class="code" href="a00311.html">task</a> *execute() {
-<a name="l00218"></a>00218             my_body();
-<a name="l00219"></a>00219             <span class="keywordflow">return</span> NULL;
-<a name="l00220"></a>00220         }
-<a name="l00221"></a>00221     <span class="keyword">private</span>:
-<a name="l00222"></a>00222         Body my_body;
-<a name="l00223"></a>00223     };
-<a name="l00224"></a>00224         
-<a name="l00225"></a>00225     <span class="keyword">template</span>< <span class="keyword">typename</span> Receiver, <span class="keyword">typename</span> Body >
-<a name="l00226"></a>00226     <span class="keyword">class </span>run_and_put_task : <span class="keyword">public</span> <a class="code" href="a00311.html">task</a> {
-<a name="l00227"></a>00227     <span class="keyword">public</span>: 
-<a name="l00228"></a>00228         run_and_put_task( Receiver &r, Body& body ) : my_receiver(r), my_body(body) {}
-<a name="l00229"></a>00229         <a class="code" href="a00311.html">task</a> *execute() {
-<a name="l00230"></a>00230             my_receiver.try_put( my_body() );
-<a name="l00231"></a>00231             <span class="keywordflow">return</span> NULL;
-<a name="l00232"></a>00232         }
-<a name="l00233"></a>00233     <span class="keyword">private</span>:
-<a name="l00234"></a>00234         Receiver &my_receiver;
-<a name="l00235"></a>00235         Body my_body;
-<a name="l00236"></a>00236     };
-<a name="l00237"></a>00237         
-<a name="l00238"></a>00238 <span class="keyword">public</span>:
-<a name="l00239"></a>00239         
-<a name="l00240"></a>00240         
-<a name="l00242"></a><a class="code" href="a00262.html#4ab3d4b5208ece28c4c3ced647e26e12">00242</a>     <a class="code" href="a00262.html#4ab3d4b5208ece28c4c3ced647e26e12">graph</a>() : my_root_task( new ( <a class="code" href="a00311.html">task</a>::allocate_root( ) ) <a class="code" href="a00254.html">empty_task</a> ) {
-<a name="l00243"></a>00243         my_root_task-><a class="code" href="a00311.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(1);
-<a name="l00244"></a>00244     }
-<a name="l00245"></a>00245         
-<a name="l00247"></a>00247 
-<a name="l00249"></a><a class="code" href="a00262.html#8a7d424c0616a1c37a908ead182e2fe5">00249</a>     <a class="code" href="a00262.html#8a7d424c0616a1c37a908ead182e2fe5">~graph</a>() {
-<a name="l00250"></a>00250         <a class="code" href="a00262.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all</a>();
-<a name="l00251"></a>00251         my_root_task-><a class="code" href="a00311.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(0);
-<a name="l00252"></a>00252         <a class="code" href="a00311.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>( *my_root_task );
-<a name="l00253"></a>00253     }
-<a name="l00254"></a>00254         
-<a name="l00255"></a>00255         
-<a name="l00257"></a>00257 
-<a name="l00259"></a><a class="code" href="a00262.html#a993b789d1e488e0c3929135beae560e">00259</a>     <span class="keywordtype">void</span> <a class="code" href="a00262.html#a993b789d1e488e0c3929135beae560e">increment_wait_count</a>() { 
-<a name="l00260"></a>00260         <span class="keywordflow">if</span> (my_root_task)
-<a name="l00261"></a>00261             my_root_task-><a class="code" href="a00311.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>();
-<a name="l00262"></a>00262     }
-<a name="l00263"></a>00263         
-<a name="l00265"></a>00265 
-<a name="l00267"></a><a class="code" href="a00262.html#29b85506870f13a884a21655aec2a65d">00267</a>     <span class="keywordtype">void</span> <a class="code" href="a00262.html#29b85506870f13a884a21655aec2a65d">decrement_wait_count</a>() { 
-<a name="l00268"></a>00268         <span class="keywordflow">if</span> (my_root_task)
-<a name="l00269"></a>00269             my_root_task-><a class="code" href="a00311.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>(); 
-<a name="l00270"></a>00270     }
-<a name="l00271"></a>00271         
-<a name="l00273"></a>00273 
-<a name="l00275"></a>00275     <span class="keyword">template</span>< <span class="keyword">typename</span> Receiver, <span class="keyword">typename</span> Body >
-<a name="l00276"></a><a class="code" href="a00262.html#50a7938df01b6148ab2c0696835f002e">00276</a>         <span class="keywordtype">void</span> <a class="code" href="a00262.html#50a7938df01b6148ab2c0696835f002e">run</a>( Receiver &r, Body body ) {
-<a name="l00277"></a>00277        <a class="code" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
-<a name="l00278"></a>00278            run_and_put_task< Receiver, Body >( r, body ) );
-<a name="l00279"></a>00279     }
-<a name="l00280"></a>00280         
-<a name="l00282"></a>00282 
-<a name="l00284"></a>00284     <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
-<a name="l00285"></a><a class="code" href="a00262.html#c1145b00e063793a7e7bf994d202c7a0">00285</a>     <span class="keywordtype">void</span> <a class="code" href="a00262.html#50a7938df01b6148ab2c0696835f002e">run</a>( Body body ) {
-<a name="l00286"></a>00286        <a class="code" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
-<a name="l00287"></a>00287            run_task< Body >( body ) );
-<a name="l00288"></a>00288     }
-<a name="l00289"></a>00289         
-<a name="l00291"></a>00291 
-<a name="l00292"></a><a class="code" href="a00262.html#a66b0020f7514b86d030fa8aea073d37">00292</a>     <span class="keywordtype">void</span> <a class="code" href="a00262.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all</a>() {
-<a name="l00293"></a>00293         <span class="keywordflow">if</span> (my_root_task)
-<a name="l00294"></a>00294             my_root_task-><a class="code" href="a00311.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>();
-<a name="l00295"></a>00295         my_root_task-><a class="code" href="a00311.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(1);
-<a name="l00296"></a>00296     }
-<a name="l00297"></a>00297         
-<a name="l00299"></a><a class="code" href="a00262.html#7f4e3ae90811a5d8b597146b5b586d10">00299</a>     <a class="code" href="a00311.html">task</a> * <a class="code" href="a00262.html#7f4e3ae90811a5d8b597146b5b586d10">root_task</a>() {
-<a name="l00300"></a>00300         <span class="keywordflow">return</span> my_root_task;
-<a name="l00301"></a>00301     }
-<a name="l00302"></a>00302         
-<a name="l00303"></a>00303 <span class="keyword">private</span>:
-<a name="l00304"></a>00304         
-<a name="l00305"></a>00305     <a class="code" href="a00311.html">task</a> *my_root_task;
-<a name="l00306"></a>00306         
-<a name="l00307"></a>00307 };
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309 <span class="preprocessor">#include "internal/_flow_graph_node_impl.h"</span>
-<a name="l00310"></a>00310 
-<a name="l00312"></a>00312 <span class="keyword">template</span> < <span class="keyword">typename</span> Output >
-<a name="l00313"></a><a class="code" href="a00304.html">00313</a> <span class="keyword">class </span><a class="code" href="a00304.html">source_node</a> : <span class="keyword">public</span> <a class="code" href="a00263.html">graph_node</a>, <span class="keyword">public</span> <a class="code" href="a00301.html">sender</a>< Output > {
-<a name="l00314"></a>00314 <span class="keyword">public</span>:
-<a name="l00315"></a>00315         
-<a name="l00317"></a><a class="code" href="a00304.html#407533487cc3f6032c1072cba19c609c">00317</a>     <span class="keyword">typedef</span> Output <a class="code" href="a00304.html#407533487cc3f6032c1072cba19c609c">output_type</a>;           
-<a name="l00318"></a>00318         
-<a name="l00320"></a><a class="code" href="a00304.html#dd7b8fe78f0bec9d6b70cbf1018a69fe">00320</a>     <span class="keyword">typedef</span> <a class="code" href="a00295.html">receiver< Output ></a> <a class="code" href="a00295.html">successor_type</a>;
-<a name="l00321"></a>00321         
-<a name="l00323"></a>00323     <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
-<a name="l00324"></a><a class="code" href="a00304.html#503c3b395c629296bf5cccd96d6388c1">00324</a>     <a class="code" href="a00304.html#503c3b395c629296bf5cccd96d6388c1">source_node</a>( <a class="code" href="a00262.html">graph</a> &g, Body body, <span class="keywordtype">bool</span> is_active = <span class="keyword">true</span> )
-<a name="l00325"></a>00325         : my_root_task(g.root_task()), my_active(is_active), init_my_active(is_active),
-<a name="l00326"></a>00326         my_body( new internal::source_body_leaf< <a class="code" href="a00304.html#407533487cc3f6032c1072cba19c609c">output_type</a>, Body>(body) ),
-<a name="l00327"></a>00327         my_reserved(false), my_has_cached_item(false) 
-<a name="l00328"></a>00328     { 
-<a name="l00329"></a>00329         my_successors.set_owner(<span class="keyword">this</span>);
-<a name="l00330"></a>00330     }
-<a name="l00331"></a>00331         
-<a name="l00333"></a><a class="code" href="a00304.html#adaac111fbcace95804219a5f2929304">00333</a>     <a class="code" href="a00304.html#503c3b395c629296bf5cccd96d6388c1">source_node</a>( <span class="keyword">const</span> <a class="code" href="a00304.html">source_node</a>& src ) :
-<a name="l00334"></a>00334         <a class="code" href="a00263.html">graph_node</a>(), <a class="code" href="a00301.html">sender</a><Output>(),
-<a name="l00335"></a>00335         my_root_task( src.my_root_task), my_active(src.init_my_active),
-<a name="l00336"></a>00336         init_my_active(src.init_my_active), my_body( src.my_body->clone() ),
-<a name="l00337"></a>00337         my_reserved(false), my_has_cached_item(false)
-<a name="l00338"></a>00338     {
-<a name="l00339"></a>00339         my_successors.set_owner(<span class="keyword">this</span>);
-<a name="l00340"></a>00340     }
-<a name="l00341"></a>00341 
-<a name="l00343"></a><a class="code" href="a00304.html#61700b0865fc17188b0abe26bbde65b6">00343</a>     <a class="code" href="a00304.html#61700b0865fc17188b0abe26bbde65b6">~source_node</a>() { <span class="keyword">delete</span> my_body; }
-<a name="l00344"></a>00344         
-<a name="l00346"></a><a class="code" href="a00304.html#22960d499df9f1569a9d8a544e35afe3">00346</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00304.html#22960d499df9f1569a9d8a544e35afe3">register_successor</a>( <a class="code" href="a00295.html">receiver<output_type></a> &r ) {
-<a name="l00347"></a>00347         <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l00348"></a>00348         my_successors.register_successor(r);
-<a name="l00349"></a>00349         <span class="keywordflow">if</span> ( my_active )
-<a name="l00350"></a>00350             spawn_put();
-<a name="l00351"></a>00351         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00352"></a>00352     }
-<a name="l00353"></a>00353         
-<a name="l00355"></a><a class="code" href="a00304.html#222484bf295f39df36415a29e508e5c9">00355</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00304.html#222484bf295f39df36415a29e508e5c9">remove_successor</a>( <a class="code" href="a00295.html">receiver<output_type></a> &r ) {
-<a name="l00356"></a>00356         <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l00357"></a>00357         my_successors.remove_successor(r);
-<a name="l00358"></a>00358         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00359"></a>00359     }
-<a name="l00360"></a>00360         
-<a name="l00362"></a><a class="code" href="a00304.html#41073ad4d3510ed5a8b6bda9c0f58636">00362</a>     <span class="comment">/*override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00304.html#41073ad4d3510ed5a8b6bda9c0f58636">try_get</a>( <a class="code" href="a00304.html#407533487cc3f6032c1072cba19c609c">output_type</a> &v ) {
-<a name="l00363"></a>00363         <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l00364"></a>00364         <span class="keywordflow">if</span> ( my_reserved )  
-<a name="l00365"></a>00365             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00366"></a>00366         
-<a name="l00367"></a>00367         <span class="keywordflow">if</span> ( my_has_cached_item ) {
-<a name="l00368"></a>00368             v = my_cached_item;
-<a name="l00369"></a>00369             my_has_cached_item = <span class="keyword">false</span>;
-<a name="l00370"></a>00370         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (*my_body)(v) == <span class="keyword">false</span> ) {
-<a name="l00371"></a>00371             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00372"></a>00372         }
-<a name="l00373"></a>00373         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00374"></a>00374     }
-<a name="l00375"></a>00375         
-<a name="l00377"></a><a class="code" href="a00304.html#ad459713ff3c1c9ad0f4826daa141f65">00377</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00304.html#ad459713ff3c1c9ad0f4826daa141f65">try_reserve</a>( <a class="code" href="a00304.html#407533487cc3f6032c1072cba19c609c">output_type</a> &v ) {
-<a name="l00378"></a>00378         <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l00379"></a>00379         <span class="keywordflow">if</span> ( my_reserved ) {
-<a name="l00380"></a>00380             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00381"></a>00381         }
-<a name="l00382"></a>00382         
-<a name="l00383"></a>00383         <span class="keywordflow">if</span> ( !my_has_cached_item && (*my_body)(my_cached_item) )  
-<a name="l00384"></a>00384             my_has_cached_item = <span class="keyword">true</span>;
-<a name="l00385"></a>00385         
-<a name="l00386"></a>00386         <span class="keywordflow">if</span> ( my_has_cached_item ) {
-<a name="l00387"></a>00387             v = my_cached_item;
-<a name="l00388"></a>00388             my_reserved = <span class="keyword">true</span>;
-<a name="l00389"></a>00389             <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00390"></a>00390         } <span class="keywordflow">else</span> {
-<a name="l00391"></a>00391             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00392"></a>00392         }
-<a name="l00393"></a>00393     }
-<a name="l00394"></a>00394         
-<a name="l00396"></a>00396 
-<a name="l00397"></a><a class="code" href="a00304.html#494678baf9096835268736b800824460">00397</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00304.html#494678baf9096835268736b800824460">try_release</a>( ) {
-<a name="l00398"></a>00398         <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l00399"></a>00399         __TBB_ASSERT( my_reserved && my_has_cached_item, <span class="stringliteral">"releasing non-existent reservation"</span> );
-<a name="l00400"></a>00400         my_reserved = <span class="keyword">false</span>;
-<a name="l00401"></a>00401         spawn_put();
-<a name="l00402"></a>00402         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00403"></a>00403     }
-<a name="l00404"></a>00404         
-<a name="l00406"></a><a class="code" href="a00304.html#2c7fcc29e2894b29138be3c1edce9bc9">00406</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00304.html#2c7fcc29e2894b29138be3c1edce9bc9">try_consume</a>( ) {
-<a name="l00407"></a>00407         <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l00408"></a>00408         __TBB_ASSERT( my_reserved && my_has_cached_item, <span class="stringliteral">"consuming non-existent reservation"</span> );
-<a name="l00409"></a>00409         my_reserved = <span class="keyword">false</span>;
-<a name="l00410"></a>00410         my_has_cached_item = <span class="keyword">false</span>;
-<a name="l00411"></a>00411         <span class="keywordflow">if</span> ( !my_successors.empty() ) {
-<a name="l00412"></a>00412             spawn_put();
-<a name="l00413"></a>00413         }
-<a name="l00414"></a>00414         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00415"></a>00415     }
-<a name="l00416"></a>00416         
-<a name="l00418"></a><a class="code" href="a00304.html#4b647e4a93d08ccdd8d323279e4eaaa6">00418</a>     <span class="keywordtype">void</span> <a class="code" href="a00304.html#4b647e4a93d08ccdd8d323279e4eaaa6">activate</a>() {
-<a name="l00419"></a>00419         <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l00420"></a>00420         my_active = <span class="keyword">true</span>;
-<a name="l00421"></a>00421         <span class="keywordflow">if</span> ( !my_successors.empty() )
-<a name="l00422"></a>00422             spawn_put();
-<a name="l00423"></a>00423     }
-<a name="l00424"></a>00424         
-<a name="l00425"></a>00425 <span class="keyword">private</span>:
-<a name="l00426"></a>00426         
-<a name="l00427"></a>00427     <a class="code" href="a00311.html">task</a> *my_root_task;
-<a name="l00428"></a>00428     <a class="code" href="a00305.html">spin_mutex</a> my_mutex;
-<a name="l00429"></a>00429     <span class="keywordtype">bool</span> my_active;
-<a name="l00430"></a>00430     <span class="keywordtype">bool</span> init_my_active;
-<a name="l00431"></a>00431     internal::source_body<output_type> *my_body;
-<a name="l00432"></a>00432     internal::broadcast_cache< output_type > my_successors;
-<a name="l00433"></a>00433     <span class="keywordtype">bool</span> my_reserved;
-<a name="l00434"></a>00434     <span class="keywordtype">bool</span> my_has_cached_item;
-<a name="l00435"></a>00435     <a class="code" href="a00304.html#407533487cc3f6032c1072cba19c609c">output_type</a> my_cached_item;
-<a name="l00436"></a>00436         
-<a name="l00437"></a>00437     <span class="keyword">friend</span> <span class="keyword">class </span>internal::source_task< source_node< output_type > >;
-<a name="l00438"></a>00438         
-<a name="l00440"></a>00440     <span class="comment">/* override */</span> <span class="keywordtype">void</span> apply_body( ) {
-<a name="l00441"></a>00441         output_type v;
-<a name="l00442"></a>00442         <span class="keywordflow">if</span> ( <a class="code" href="a00304.html#ad459713ff3c1c9ad0f4826daa141f65">try_reserve</a>(v) == <span class="keyword">false</span> )
-<a name="l00443"></a>00443             <span class="keywordflow">return</span>;
-<a name="l00444"></a>00444         
-<a name="l00445"></a>00445         <span class="keywordflow">if</span> ( my_successors.try_put( v ) ) 
-<a name="l00446"></a>00446             <a class="code" href="a00304.html#2c7fcc29e2894b29138be3c1edce9bc9">try_consume</a>();
-<a name="l00447"></a>00447         <span class="keywordflow">else</span>
-<a name="l00448"></a>00448             <a class="code" href="a00304.html#494678baf9096835268736b800824460">try_release</a>();
-<a name="l00449"></a>00449     }
-<a name="l00450"></a>00450         
-<a name="l00452"></a>00452     <span class="comment">/* override */</span> <span class="keywordtype">void</span> spawn_put( ) {
-<a name="l00453"></a>00453         <a class="code" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
-<a name="l00454"></a>00454            internal::source_task< <a class="code" href="a00304.html">source_node< output_type ></a> >( *<span class="keyword">this</span> ) ); 
-<a name="l00455"></a>00455     }
-<a name="l00456"></a>00456         
-<a name="l00457"></a>00457 };
-<a name="l00458"></a>00458         
-<a name="l00460"></a>00460 <span class="keyword">template</span> < <span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output = continue_msg, graph_buffer_policy = queueing, <span class="keyword">typename</span> Allocator=cache_aligned_allocator<Input> >
-<a name="l00461"></a><a class="code" href="a00260.html">00461</a> <span class="keyword">class </span><a class="code" href="a00260.html">function_node</a> : <span class="keyword">public</span> <a class="code" href="a00263.html">graph_node</a>, <span class="keyword">public</span> internal::function_input<Input,Output,Allocator>, <span class="keyword">public</span> internal::function_output<Output> {
-<a name="l00462"></a>00462 <span class="keyword">public</span>:
-<a name="l00463"></a>00463         
-<a name="l00464"></a>00464     <span class="keyword">typedef</span> Input input_type;
-<a name="l00465"></a>00465     <span class="keyword">typedef</span> Output output_type;
-<a name="l00466"></a>00466     <span class="keyword">typedef</span> <a class="code" href="a00301.html">sender< input_type ></a> <a class="code" href="a00301.html">predecessor_type</a>;
-<a name="l00467"></a>00467     <span class="keyword">typedef</span> <a class="code" href="a00295.html">receiver< output_type ></a> <a class="code" href="a00295.html">successor_type</a>;
-<a name="l00468"></a>00468     <span class="keyword">typedef</span> internal::function_output<output_type> fOutput_type;
-<a name="l00469"></a>00469         
-<a name="l00471"></a>00471     <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
-<a name="l00472"></a><a class="code" href="a00260.html#5c215b40e3daf73d1c6802ecb5aded6c">00472</a>     <a class="code" href="a00260.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a>( <a class="code" href="a00262.html">graph</a> &g, size_t concurrency, Body body )
-<a name="l00473"></a>00473     : internal::function_input<input_type,output_type,Allocator>( g, concurrency, body ) {
-<a name="l00474"></a>00474     }
-<a name="l00475"></a>00475 
-<a name="l00477"></a><a class="code" href="a00260.html#d5132323fd2ac6a00ea0c78beda78723">00477</a>     <a class="code" href="a00260.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a>( <span class="keyword">const</span> <a class="code" href="a00260.html">function_node</a>& src ) : 
-<a name="l00478"></a>00478         <a class="code" href="a00263.html">graph_node</a>(), internal::function_input<input_type,output_type,Allocator>( src ),
-<a name="l00479"></a>00479         fOutput_type() {}
-<a name="l00480"></a>00480         
-<a name="l00481"></a>00481 <span class="keyword">protected</span>:
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483     <span class="comment">/* override */</span> internal::broadcast_cache<output_type> &successors () { <span class="keywordflow">return</span> fOutput_type::my_successors; }
-<a name="l00484"></a>00484         
-<a name="l00485"></a>00485 };
-<a name="l00486"></a>00486 
-<a name="l00488"></a>00488 <span class="keyword">template</span> < <span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output, <span class="keyword">typename</span> Allocator >
-<a name="l00489"></a><a class="code" href="a00261.html">00489</a> <span class="keyword">class </span><a class="code" href="a00260.html">function_node</a><Input,Output,queueing,Allocator> : <span class="keyword">public</span> <a class="code" href="a00263.html">graph_node</a>, <span class="keyword">public</span> internal::function_input<Input,Output,Allocator>, <span class="keyword">public</span> internal::function_output<Output> {
-<a name="l00490"></a>00490 <span class="keyword">public</span>:
-<a name="l00491"></a>00491         
-<a name="l00492"></a>00492     <span class="keyword">typedef</span> Input input_type;
-<a name="l00493"></a>00493     <span class="keyword">typedef</span> Output output_type;
-<a name="l00494"></a>00494     <span class="keyword">typedef</span> <a class="code" href="a00301.html">sender< input_type ></a> <a class="code" href="a00301.html">predecessor_type</a>;
-<a name="l00495"></a>00495     <span class="keyword">typedef</span> <a class="code" href="a00295.html">receiver< output_type ></a> <a class="code" href="a00295.html">successor_type</a>;
-<a name="l00496"></a>00496     <span class="keyword">typedef</span> internal::function_input<input_type,output_type,Allocator> fInput_type;
-<a name="l00497"></a>00497     <span class="keyword">typedef</span> internal::function_input_queue<input_type, Allocator> queue_type;
-<a name="l00498"></a>00498     <span class="keyword">typedef</span> internal::function_output<output_type> fOutput_type;
-<a name="l00499"></a>00499         
-<a name="l00501"></a>00501     <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
-<a name="l00502"></a><a class="code" href="a00261.html#5b9019c1e6e9b2c41c986a384bd179db">00502</a>     <a class="code" href="a00260.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a>( <a class="code" href="a00262.html">graph</a> &g, size_t concurrency, Body body ) : fInput_type( g, concurrency, body, new queue_type() ) {
-<a name="l00503"></a>00503     }
-<a name="l00504"></a>00504 
-<a name="l00506"></a><a class="code" href="a00261.html#01055081ed477714503820035db3a965">00506</a>     <a class="code" href="a00260.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a>( <span class="keyword">const</span> <a class="code" href="a00260.html">function_node</a>& src ) : 
-<a name="l00507"></a>00507         <a class="code" href="a00263.html">graph_node</a>(), fInput_type( src, new queue_type() ) , fOutput_type() { }
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509 <span class="keyword">protected</span>:
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511     <span class="comment">/* override */</span> internal::broadcast_cache<output_type> &successors () { <span class="keywordflow">return</span> fOutput_type::my_successors; }
-<a name="l00512"></a>00512         
-<a name="l00513"></a>00513 };
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515 <span class="preprocessor">#include "tbb/internal/_flow_graph_types_impl.h"</span>
-<a name="l00516"></a>00516 
-<a name="l00517"></a>00517 <span class="preprocessor">#if TBB_PREVIEW_GRAPH_NODES</span>
-<a name="l00519"></a>00519 <span class="preprocessor">// Output is a tuple of output types.</span>
-<a name="l00520"></a>00520 <span class="preprocessor"></span><span class="keyword">template</span> < <span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output, graph_buffer_policy = queueing, <span class="keyword">typename</span> Allocator=cache_aligned_allocator<Input> >
-<a name="l00521"></a><a class="code" href="a00274.html">00521</a> <span class="keyword">class </span><a class="code" href="a00274.html">multioutput_function_node</a> : 
-<a name="l00522"></a>00522     <span class="keyword">public</span> <a class="code" href="a00263.html">graph_node</a>, 
-<a name="l00523"></a>00523     <span class="keyword">public</span> internal::multioutput_function_input
-<a name="l00524"></a>00524     <  
-<a name="l00525"></a>00525         Input, 
-<a name="l00526"></a>00526         typename internal::wrap_tuple_elements<
-<a name="l00527"></a>00527             std::tuple_size<Output>::value,  <span class="comment">// #elements in tuple</span>
-<a name="l00528"></a>00528             internal::function_output,  <span class="comment">// wrap this around each element</span>
-<a name="l00529"></a>00529             Output <span class="comment">// the tuple providing the types</span>
-<a name="l00530"></a>00530         >::type,
-<a name="l00531"></a>00531         Allocator
-<a name="l00532"></a>00532     > {
-<a name="l00533"></a>00533 <span class="keyword">private</span>:
-<a name="l00534"></a>00534     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<Output>::value;
-<a name="l00535"></a>00535 <span class="keyword">public</span>:
-<a name="l00536"></a>00536     <span class="keyword">typedef</span> Input input_type;
-<a name="l00537"></a>00537     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::wrap_tuple_elements<N,internal::function_output, Output>::type ports_type;
-<a name="l00538"></a>00538 <span class="keyword">private</span>:
-<a name="l00539"></a>00539     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::multioutput_function_input<input_type, ports_type, Allocator> base_type;
-<a name="l00540"></a>00540     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::function_input_queue<input_type,Allocator> queue_type;
-<a name="l00541"></a>00541 <span class="keyword">public</span>:
-<a name="l00542"></a>00542     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00543"></a>00543     <a class="code" href="a00274.html">multioutput_function_node</a>( <a class="code" href="a00262.html">graph</a> &g, size_t concurrency, Body body ) : base_type(g,concurrency, body) {}
-<a name="l00544"></a>00544     <a class="code" href="a00274.html">multioutput_function_node</a>( <span class="keyword">const</span> <a class="code" href="a00274.html">multioutput_function_node</a> &other) :
-<a name="l00545"></a>00545         <a class="code" href="a00263.html">graph_node</a>(), base_type(other) {}
-<a name="l00546"></a>00546     <span class="comment">// all the guts are in multioutput_function_input...</span>
-<a name="l00547"></a>00547 
-<a name="l00548"></a>00548 };  <span class="comment">// multioutput_function_node</span>
-<a name="l00549"></a>00549         
-<a name="l00550"></a>00550 <span class="keyword">template</span> < <span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output, <span class="keyword">typename</span> Allocator >
-<a name="l00551"></a>00551 <span class="keyword">class </span><a class="code" href="a00274.html">multioutput_function_node</a><Input,Output,queueing,Allocator> : <span class="keyword">public</span> <a class="code" href="a00263.html">graph_node</a>, <span class="keyword">public</span> internal::multioutput_function_input<Input, 
-<a name="l00552"></a>00552     typename internal::wrap_tuple_elements<std::tuple_size<Output>::value, internal::function_output, Output>::type, Allocator> {
-<a name="l00553"></a>00553     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<Output>::value;
-<a name="l00554"></a>00554 <span class="keyword">public</span>:
-<a name="l00555"></a>00555     <span class="keyword">typedef</span> Input input_type;
-<a name="l00556"></a>00556     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::wrap_tuple_elements<N, internal::function_output, Output>::type ports_type;
-<a name="l00557"></a>00557 <span class="keyword">private</span>:
-<a name="l00558"></a>00558     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::multioutput_function_input<input_type, ports_type, Allocator> base_type;
-<a name="l00559"></a>00559     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::function_input_queue<input_type,Allocator> queue_type;
-<a name="l00560"></a>00560 <span class="keyword">public</span>:
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00563"></a>00563     <a class="code" href="a00274.html">multioutput_function_node</a>( <a class="code" href="a00262.html">graph</a> &g, size_t concurrency, Body body) : base_type(g,concurrency, body, new queue_type()) {}
-<a name="l00564"></a>00564     <a class="code" href="a00274.html">multioutput_function_node</a>( <span class="keyword">const</span> <a class="code" href="a00274.html">multioutput_function_node</a> &other) :
-<a name="l00565"></a>00565         <a class="code" href="a00263.html">graph_node</a>(), base_type(other, new queue_type()) {}
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567 };  <span class="comment">// multioutput_function_node</span>
-<a name="l00568"></a>00568 
-<a name="l00570"></a>00570 <span class="comment">//  successors.  The node has unlimited concurrency, so though it is marked as</span>
-<a name="l00571"></a>00571 <span class="comment">//  "rejecting" it does not reject inputs.</span>
-<a name="l00572"></a>00572 <span class="keyword">template</span><<span class="keyword">typename</span> TupleType, <span class="keyword">typename</span> Allocator=cache_aligned_allocator<TupleType> >
-<a name="l00573"></a><a class="code" href="a00310.html">00573</a> <span class="keyword">class </span><a class="code" href="a00310.html">split_node</a> : <span class="keyword">public</span> <a class="code" href="a00274.html">multioutput_function_node</a><TupleType, TupleType, rejecting, Allocator> {
-<a name="l00574"></a>00574     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<TupleType>::value;
-<a name="l00575"></a>00575     <span class="keyword">typedef</span> <a class="code" href="a00274.html">multioutput_function_node<TupleType,TupleType,rejecting,Allocator></a> <a class="code" href="a00274.html">base_type</a>;
-<a name="l00576"></a>00576 <span class="keyword">public</span>:
-<a name="l00577"></a>00577     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::ports_type ports_type;
-<a name="l00578"></a>00578 <span class="keyword">private</span>:
-<a name="l00579"></a>00579 
-<a name="l00580"></a>00580     <span class="keyword">struct </span>splitting_body {
-<a name="l00581"></a>00581         <span class="keywordtype">void</span> operator()(<span class="keyword">const</span> TupleType& t, ports_type &p) {
-<a name="l00582"></a>00582             internal::emit_element<N>::emit_this(t, p);
-<a name="l00583"></a>00583         }
-<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> TupleType input_type;
-<a name="l00587"></a>00587     <span class="keyword">typedef</span> Allocator allocator_type;
-<a name="l00588"></a>00588     <a class="code" href="a00310.html">split_node</a>(<a class="code" href="a00262.html">graph</a> &g) : <a class="code" href="a00274.html">base_type</a>(g, unlimited, splitting_body()) { }
-<a name="l00589"></a>00589     <a class="code" href="a00310.html">split_node</a>( <span class="keyword">const</span> <a class="code" href="a00310.html">split_node</a> & other) : <a class="code" href="a00274.html">base_type</a>(other) { }
-<a name="l00590"></a>00590 };
-<a name="l00591"></a>00591 <span class="preprocessor">#endif  // TBB_PREVIEW_GRAPH_NODES</span>
-<a name="l00592"></a>00592 <span class="preprocessor"></span>
-<a name="l00594"></a>00594 <span class="keyword">template</span> <<span class="keyword">typename</span> Output>
-<a name="l00595"></a><a class="code" href="a00252.html">00595</a> <span class="keyword">class </span><a class="code" href="a00252.html">continue_node</a> : <span class="keyword">public</span> <a class="code" href="a00263.html">graph_node</a>, <span class="keyword">public</span> internal::continue_input<Output>, <span class="keyword">public</span> internal::function_output<Output> {
-<a name="l00596"></a>00596 <span class="keyword">public</span>:
-<a name="l00597"></a>00597         
-<a name="l00598"></a>00598     <span class="keyword">typedef</span> <a class="code" href="a00251.html">continue_msg</a> <a class="code" href="a00251.html">input_type</a>;
-<a name="l00599"></a>00599     <span class="keyword">typedef</span> Output output_type;
-<a name="l00600"></a>00600     <span class="keyword">typedef</span> <a class="code" href="a00301.html">sender< input_type ></a> <a class="code" href="a00301.html">predecessor_type</a>;
-<a name="l00601"></a>00601     <span class="keyword">typedef</span> <a class="code" href="a00295.html">receiver< output_type ></a> <a class="code" href="a00295.html">successor_type</a>;
-<a name="l00602"></a>00602     <span class="keyword">typedef</span> internal::function_output<output_type> fOutput_type;
-<a name="l00603"></a>00603         
-<a name="l00605"></a>00605      <span class="keyword">template</span> <<span class="keyword">typename</span> Body >
-<a name="l00606"></a><a class="code" href="a00252.html#2f200db877d2f80c08d09422e8bffd5a">00606</a>      <a class="code" href="a00252.html#2f200db877d2f80c08d09422e8bffd5a">continue_node</a>( <a class="code" href="a00262.html">graph</a> &g, Body body )
-<a name="l00607"></a>00607              : internal::continue_input<output_type>( g, body ) {
-<a name="l00608"></a>00608      }
-<a name="l00609"></a>00609         
-<a name="l00611"></a>00611     <span class="keyword">template</span> <<span class="keyword">typename</span> Body >
-<a name="l00612"></a><a class="code" href="a00252.html#7817aebf22dd125ca04df53ac488d163">00612</a>     <a class="code" href="a00252.html#2f200db877d2f80c08d09422e8bffd5a">continue_node</a>( <a class="code" href="a00262.html">graph</a> &g, <span class="keywordtype">int</span> number_of_predecessors, Body body )
-<a name="l00613"></a>00613         : internal::continue_input<output_type>( g, number_of_predecessors, body )
-<a name="l00614"></a>00614     {
-<a name="l00615"></a>00615     }
-<a name="l00616"></a>00616  
-<a name="l00618"></a><a class="code" href="a00252.html#869562787fcb5c57a90aea120f26d492">00618</a>     <a class="code" href="a00252.html#2f200db877d2f80c08d09422e8bffd5a">continue_node</a>( <span class="keyword">const</span> <a class="code" href="a00252.html">continue_node</a>& src ) :
-<a name="l00619"></a>00619         <a class="code" href="a00263.html">graph_node</a>(), internal::continue_input<output_type>(src),
-<a name="l00620"></a>00620         internal::function_output<Output>() { }
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622 <span class="keyword">protected</span>:
-<a name="l00623"></a>00623         
-<a name="l00624"></a>00624     <span class="comment">/* override */</span> internal::broadcast_cache<output_type> &successors () { <span class="keywordflow">return</span> fOutput_type::my_successors; }
-<a name="l00625"></a>00625         
-<a name="l00626"></a>00626 };
-<a name="l00627"></a>00627         
-<a name="l00628"></a>00628 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
-<a name="l00629"></a>00629 <span class="keyword">class </span>overwrite_node : <span class="keyword">public</span> graph_node, <span class="keyword">public</span> receiver<T>, <span class="keyword">public</span> sender<T> {
-<a name="l00630"></a>00630 <span class="keyword">public</span>:
-<a name="l00631"></a>00631         
-<a name="l00632"></a>00632     <span class="keyword">typedef</span> T input_type;
-<a name="l00633"></a>00633     <span class="keyword">typedef</span> T output_type;
-<a name="l00634"></a>00634     <span class="keyword">typedef</span> sender< input_type > predecessor_type;
-<a name="l00635"></a>00635     <span class="keyword">typedef</span> receiver< output_type > successor_type;
-<a name="l00636"></a>00636         
-<a name="l00637"></a>00637     overwrite_node() : my_buffer_is_valid(false) {
-<a name="l00638"></a>00638         my_successors.set_owner( <span class="keyword">this</span> );
-<a name="l00639"></a>00639     }
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641     <span class="comment">// Copy constructor; doesn't take anything from src; default won't work</span>
-<a name="l00642"></a>00642     overwrite_node( <span class="keyword">const</span> overwrite_node& ) : 
-<a name="l00643"></a>00643         graph_node(), receiver<T>(), sender<T>(), my_buffer_is_valid(false) {
-<a name="l00644"></a>00644         my_successors.set_owner( <span class="keyword">this</span> );
-<a name="l00645"></a>00645     }
-<a name="l00646"></a>00646         
-<a name="l00647"></a>00647     ~overwrite_node() {}
-<a name="l00648"></a>00648         
-<a name="l00649"></a>00649     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00301.html#68b8941ad77b9303cf3bcb8cf1f2d28a">register_successor</a>( successor_type &s ) {
-<a name="l00650"></a>00650         spin_mutex::scoped_lock l( my_mutex );
-<a name="l00651"></a>00651         <span class="keywordflow">if</span> ( my_buffer_is_valid ) {
-<a name="l00652"></a>00652             <span class="comment">// We have a valid value that must be forwarded immediately.</span>
-<a name="l00653"></a>00653             <span class="keywordflow">if</span> ( s.try_put( my_buffer ) || !s.register_predecessor( *<span class="keyword">this</span>  ) ) {
-<a name="l00654"></a>00654                 <span class="comment">// We add the successor: it accepted our put or it rejected it but won't let use become a predecessor</span>
-<a name="l00655"></a>00655                 my_successors.register_successor( s );
-<a name="l00656"></a>00656                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00657"></a>00657             } <span class="keywordflow">else</span> {
-<a name="l00658"></a>00658                 <span class="comment">// We don't add the successor: it rejected our put and we became its predecessor instead</span>
-<a name="l00659"></a>00659                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00660"></a>00660             }
-<a name="l00661"></a>00661         } <span class="keywordflow">else</span> {
-<a name="l00662"></a>00662             <span class="comment">// No valid value yet, just add as successor</span>
-<a name="l00663"></a>00663             my_successors.register_successor( s );
-<a name="l00664"></a>00664             <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00665"></a>00665         }
-<a name="l00666"></a>00666     }
-<a name="l00667"></a>00667         
-<a name="l00668"></a>00668     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00301.html#82f363bfb1738bb8789e167590b10ef9">remove_successor</a>( successor_type &s ) {
-<a name="l00669"></a>00669         spin_mutex::scoped_lock l( my_mutex );
-<a name="l00670"></a>00670         my_successors.remove_successor(s);
-<a name="l00671"></a>00671         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00672"></a>00672     }
-<a name="l00673"></a>00673         
-<a name="l00674"></a>00674     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> try_put( <span class="keyword">const</span> T &v ) {
-<a name="l00675"></a>00675         spin_mutex::scoped_lock l( my_mutex );
-<a name="l00676"></a>00676         my_buffer = v;
-<a name="l00677"></a>00677         my_buffer_is_valid = <span class="keyword">true</span>;
-<a name="l00678"></a>00678         my_successors.try_put(v);
-<a name="l00679"></a>00679         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00680"></a>00680     }
-<a name="l00681"></a>00681         
-<a name="l00682"></a>00682     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> try_get( T &v ) {
-<a name="l00683"></a>00683         spin_mutex::scoped_lock l( my_mutex );
-<a name="l00684"></a>00684         <span class="keywordflow">if</span> ( my_buffer_is_valid ) {
-<a name="l00685"></a>00685             v = my_buffer;
-<a name="l00686"></a>00686             <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00687"></a>00687         } <span class="keywordflow">else</span> {
-<a name="l00688"></a>00688             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00689"></a>00689         }
-<a name="l00690"></a>00690     }
-<a name="l00691"></a>00691         
-<a name="l00692"></a>00692     <span class="keywordtype">bool</span> is_valid() {
-<a name="l00693"></a>00693        spin_mutex::scoped_lock l( my_mutex );
-<a name="l00694"></a>00694        <span class="keywordflow">return</span> my_buffer_is_valid;
-<a name="l00695"></a>00695     }
-<a name="l00696"></a>00696         
-<a name="l00697"></a>00697     <span class="keywordtype">void</span> clear() {
-<a name="l00698"></a>00698        spin_mutex::scoped_lock l( my_mutex );
-<a name="l00699"></a>00699        my_buffer_is_valid = <span class="keyword">false</span>;
-<a name="l00700"></a>00700     }
-<a name="l00701"></a>00701         
-<a name="l00702"></a>00702 <span class="keyword">protected</span>:
-<a name="l00703"></a>00703         
-<a name="l00704"></a>00704     spin_mutex my_mutex;
-<a name="l00705"></a>00705     internal::broadcast_cache< T, null_rw_mutex > my_successors;
-<a name="l00706"></a>00706     T my_buffer;
-<a name="l00707"></a>00707     <span class="keywordtype">bool</span> my_buffer_is_valid;
-<a name="l00708"></a>00708         
-<a name="l00709"></a>00709 };
-<a name="l00710"></a>00710         
-<a name="l00711"></a>00711 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
-<a name="l00712"></a>00712 <span class="keyword">class </span>write_once_node : <span class="keyword">public</span> overwrite_node<T> {
-<a name="l00713"></a>00713 <span class="keyword">public</span>:
-<a name="l00714"></a>00714         
-<a name="l00715"></a>00715     <span class="keyword">typedef</span> T input_type;
-<a name="l00716"></a>00716     <span class="keyword">typedef</span> T output_type;
-<a name="l00717"></a>00717     <span class="keyword">typedef</span> sender< input_type > predecessor_type;
-<a name="l00718"></a>00718     <span class="keyword">typedef</span> receiver< output_type > successor_type;
-<a name="l00719"></a>00719         
-<a name="l00721"></a>00721     write_once_node() : overwrite_node<T>() {}
-<a name="l00722"></a>00722 
-<a name="l00724"></a>00724     write_once_node( <span class="keyword">const</span> write_once_node& src ) : overwrite_node<T>(src) {}
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> try_put( <span class="keyword">const</span> T &v ) {
-<a name="l00727"></a>00727         spin_mutex::scoped_lock l( this->my_mutex );
-<a name="l00728"></a>00728         <span class="keywordflow">if</span> ( this->my_buffer_is_valid ) {
-<a name="l00729"></a>00729             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00730"></a>00730         } <span class="keywordflow">else</span> {
-<a name="l00731"></a>00731             this->my_buffer = v;
-<a name="l00732"></a>00732             this->my_buffer_is_valid = <span class="keyword">true</span>;
-<a name="l00733"></a>00733             this->my_successors.try_put(v);
-<a name="l00734"></a>00734             <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00735"></a>00735         }
-<a name="l00736"></a>00736     }
-<a name="l00737"></a>00737 };
-<a name="l00738"></a>00738         
-<a name="l00740"></a>00740 <span class="keyword">template</span> <<span class="keyword">typename</span> T>
-<a name="l00741"></a><a class="code" href="a00236.html">00741</a> <span class="keyword">class </span><a class="code" href="a00236.html">broadcast_node</a> : <span class="keyword">public</span> <a class="code" href="a00263.html">graph_node</a>, <span class="keyword">public</span> <a class="code" href="a00295.html">receiver</a><T>, <span class="keyword">public</span> <a class="code" href="a00301.html">sender</a><T> {
-<a name="l00742"></a>00742         
-<a name="l00743"></a>00743     internal::broadcast_cache<T> my_successors;
-<a name="l00744"></a>00744         
-<a name="l00745"></a>00745 <span class="keyword">public</span>:
-<a name="l00746"></a>00746         
-<a name="l00747"></a><a class="code" href="a00236.html#43c775d80e98cc601de69764983319f9">00747</a>     <span class="keyword">typedef</span> T <a class="code" href="a00236.html#43c775d80e98cc601de69764983319f9">input_type</a>;
-<a name="l00748"></a><a class="code" href="a00236.html#8fd8d3075823e08b879be46c1215ab0f">00748</a>     <span class="keyword">typedef</span> T output_type;
-<a name="l00749"></a><a class="code" href="a00236.html#0e2ad9a121cb286aa0d0142fef33c646">00749</a>     <span class="keyword">typedef</span> <a class="code" href="a00301.html">sender< input_type ></a> <a class="code" href="a00301.html">predecessor_type</a>;
-<a name="l00750"></a><a class="code" href="a00236.html#cc6a0eb1c4ee65465770628d8366f055">00750</a>     <span class="keyword">typedef</span> <a class="code" href="a00295.html">receiver< output_type ></a> <a class="code" href="a00295.html">successor_type</a>;
-<a name="l00751"></a>00751         
-<a name="l00752"></a>00752     <a class="code" href="a00236.html">broadcast_node</a>( ) {
-<a name="l00753"></a>00753         my_successors.set_owner( <span class="keyword">this</span> );
-<a name="l00754"></a>00754     }
-<a name="l00755"></a>00755         
-<a name="l00756"></a>00756     <span class="comment">// Copy constructor</span>
-<a name="l00757"></a>00757     <a class="code" href="a00236.html">broadcast_node</a>( <span class="keyword">const</span> <a class="code" href="a00236.html">broadcast_node</a>& ) : <a class="code" href="a00263.html">graph_node</a>(), <a class="code" href="a00295.html">receiver</a><T>(), <a class="code" href="a00301.html">sender</a><T>() {
-<a name="l00758"></a>00758         my_successors.set_owner( <span class="keyword">this</span> );
-<a name="l00759"></a>00759     }
-<a name="l00760"></a>00760         
-<a name="l00762"></a><a class="code" href="a00236.html#fd0324c9ddb51fe6f95b3d015d338941">00762</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00236.html#fd0324c9ddb51fe6f95b3d015d338941">register_successor</a>( <a class="code" href="a00295.html">receiver<T></a> &r ) {
-<a name="l00763"></a>00763         my_successors.register_successor( r );
-<a name="l00764"></a>00764         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00765"></a>00765     }
-<a name="l00766"></a>00766         
-<a name="l00768"></a><a class="code" href="a00236.html#366efcc046ec08a104281109801ae629">00768</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00236.html#366efcc046ec08a104281109801ae629">remove_successor</a>( <a class="code" href="a00295.html">receiver<T></a> &r ) {
-<a name="l00769"></a>00769         my_successors.remove_successor( r );
-<a name="l00770"></a>00770         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00771"></a>00771     }
-<a name="l00772"></a>00772         
-<a name="l00773"></a><a class="code" href="a00236.html#29eb768c10b377880bbf83d31ee49acf">00773</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00236.html#29eb768c10b377880bbf83d31ee49acf">try_put</a>( <span class="keyword">const</span> T &t ) {
-<a name="l00774"></a>00774         my_successors.try_put(t);
-<a name="l00775"></a>00775         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00776"></a>00776     }
-<a name="l00777"></a>00777         
-<a name="l00778"></a>00778 };
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780 <span class="preprocessor">#include "internal/_flow_graph_item_buffer_impl.h"</span>
-<a name="l00781"></a>00781 
-<a name="l00783"></a>00783 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> A=cache_aligned_allocator<T> >
-<a name="l00784"></a><a class="code" href="a00237.html">00784</a> <span class="keyword">class </span><a class="code" href="a00237.html">buffer_node</a> : <span class="keyword">public</span> <a class="code" href="a00263.html">graph_node</a>, <span class="keyword">public</span> reservable_item_buffer<T, A>, <span class="keyword">public</span> <a class="code" href="a00295.html">receiver</a><T>, <span class="keyword">public</span> <a class="code" href="a00301.html">sender</a><T> {
-<a name="l00785"></a>00785 <span class="keyword">public</span>:
-<a name="l00786"></a><a class="code" href="a00237.html#334efb81b56a2f2b3ae08a16e8d65620">00786</a>     <span class="keyword">typedef</span> T <a class="code" href="a00237.html#334efb81b56a2f2b3ae08a16e8d65620">input_type</a>;
-<a name="l00787"></a><a class="code" href="a00237.html#089520db81f6a1551dc94c01efbdd7be">00787</a>     <span class="keyword">typedef</span> T output_type;
-<a name="l00788"></a><a class="code" href="a00237.html#5fb0ad03a822ca0fc34ad5d56a4093a2">00788</a>     <span class="keyword">typedef</span> <a class="code" href="a00301.html">sender< input_type ></a> <a class="code" href="a00301.html">predecessor_type</a>;
-<a name="l00789"></a><a class="code" href="a00237.html#66f7eda69b75e08f50726e50a11429cd">00789</a>     <span class="keyword">typedef</span> <a class="code" href="a00295.html">receiver< output_type ></a> <a class="code" href="a00295.html">successor_type</a>;
-<a name="l00790"></a>00790     <span class="keyword">typedef</span> <a class="code" href="a00237.html">buffer_node<T, A></a> <a class="code" href="a00237.html">my_class</a>;
-<a name="l00791"></a>00791 <span class="keyword">protected</span>:
-<a name="l00792"></a>00792     <span class="keyword">typedef</span> size_t size_type;
-<a name="l00793"></a>00793     internal::round_robin_cache< T, null_rw_mutex > my_successors;
-<a name="l00794"></a>00794         
-<a name="l00795"></a>00795     <a class="code" href="a00311.html">task</a> *my_parent;
-<a name="l00796"></a>00796         
-<a name="l00797"></a>00797     <span class="keyword">friend</span> <span class="keyword">class </span>internal::forward_task< buffer_node< T, A > >;
-<a name="l00798"></a>00798         
-<a name="l00799"></a>00799     <span class="keyword">enum</span> op_type {reg_succ, rem_succ, req_item, res_item, rel_res, con_res, put_item, try_fwd};
-<a name="l00800"></a>00800     <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
-<a name="l00801"></a>00801         
-<a name="l00802"></a>00802     <span class="comment">// implements the aggregator_operation concept</span>
-<a name="l00803"></a>00803     <span class="keyword">class </span>buffer_operation : <span class="keyword">public</span> internal::aggregated_operation< buffer_operation > {
-<a name="l00804"></a>00804     <span class="keyword">public</span>:
-<a name="l00805"></a>00805         <span class="keywordtype">char</span> type;
-<a name="l00806"></a>00806         T *elem;
-<a name="l00807"></a>00807         <a class="code" href="a00237.html#66f7eda69b75e08f50726e50a11429cd">successor_type</a> *r;
-<a name="l00808"></a>00808         buffer_operation(<span class="keyword">const</span> T& e, op_type t) :
-<a name="l00809"></a>00809             type(char(t)), elem(const_cast<T*>(&e)), r(NULL) {}
-<a name="l00810"></a>00810         buffer_operation(op_type t) : type(char(t)), r(NULL) {}
-<a name="l00811"></a>00811     };
-<a name="l00812"></a>00812         
-<a name="l00813"></a>00813     <span class="keywordtype">bool</span> forwarder_busy;
-<a name="l00814"></a>00814     <span class="keyword">typedef</span> internal::aggregating_functor<my_class, buffer_operation> my_handler;
-<a name="l00815"></a>00815     <span class="keyword">friend</span> <span class="keyword">class </span>internal::aggregating_functor<my_class, buffer_operation>;
-<a name="l00816"></a>00816     internal::aggregator< my_handler, buffer_operation> my_aggregator;
-<a name="l00817"></a>00817         
-<a name="l00818"></a>00818     <span class="keyword">virtual</span> <span class="keywordtype">void</span> handle_operations(buffer_operation *op_list) {
-<a name="l00819"></a>00819         buffer_operation *tmp;
-<a name="l00820"></a>00820         <span class="keywordtype">bool</span> try_forwarding=<span class="keyword">false</span>;
-<a name="l00821"></a>00821         <span class="keywordflow">while</span> (op_list) {
-<a name="l00822"></a>00822             tmp = op_list;
-<a name="l00823"></a>00823             op_list = op_list->next;
-<a name="l00824"></a>00824             <span class="keywordflow">switch</span> (tmp->type) {
-<a name="l00825"></a>00825             <span class="keywordflow">case</span> reg_succ: <a class="code" href="a00237.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
-<a name="l00826"></a>00826             <span class="keywordflow">case</span> rem_succ: <a class="code" href="a00237.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(tmp); <span class="keywordflow">break</span>;
-<a name="l00827"></a>00827             <span class="keywordflow">case</span> req_item: internal_pop(tmp); <span class="keywordflow">break</span>;
-<a name="l00828"></a>00828             <span class="keywordflow">case</span> res_item: internal_reserve(tmp); <span class="keywordflow">break</span>;
-<a name="l00829"></a>00829             <span class="keywordflow">case</span> rel_res:  internal_release(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
-<a name="l00830"></a>00830             <span class="keywordflow">case</span> con_res:  internal_consume(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
-<a name="l00831"></a>00831             <span class="keywordflow">case</span> put_item: internal_push(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
-<a name="l00832"></a>00832             <span class="keywordflow">case</span> try_fwd:  <a class="code" href="a00237.html#dcbffbae514f4d95205b0845785c0a91">internal_forward</a>(tmp); <span class="keywordflow">break</span>;
-<a name="l00833"></a>00833             }
-<a name="l00834"></a>00834         }
-<a name="l00835"></a>00835         <span class="keywordflow">if</span> (try_forwarding && !forwarder_busy) {
-<a name="l00836"></a>00836             forwarder_busy = <span class="keyword">true</span>;
-<a name="l00837"></a>00837             <a class="code" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>(*<span class="keyword">new</span>(task::allocate_additional_child_of(*my_parent)) internal::forward_task< buffer_node<input_type, A> >(*<span class="keyword">this</span>));
-<a name="l00838"></a>00838         }
-<a name="l00839"></a>00839     }
-<a name="l00840"></a>00840         
-<a name="l00842"></a><a class="code" href="a00237.html#2648324ce0a38b40132b8502ef250e3a">00842</a>     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00237.html#2648324ce0a38b40132b8502ef250e3a">forward</a>() {
-<a name="l00843"></a>00843         buffer_operation op_data(try_fwd);
-<a name="l00844"></a>00844         <span class="keywordflow">do</span> {
-<a name="l00845"></a>00845             op_data.status = WAIT;
-<a name="l00846"></a>00846             my_aggregator.execute(&op_data);
-<a name="l00847"></a>00847         } <span class="keywordflow">while</span> (op_data.status == SUCCEEDED);
-<a name="l00848"></a>00848     }
-<a name="l00849"></a>00849         
-<a name="l00851"></a><a class="code" href="a00237.html#df21388252b8963e839dca29d2c67ea5">00851</a>     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00237.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(buffer_operation *op) {
-<a name="l00852"></a>00852         my_successors.register_successor(*(op->r));
-<a name="l00853"></a>00853         __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l00854"></a>00854     }
-<a name="l00855"></a>00855         
-<a name="l00857"></a><a class="code" href="a00237.html#6b6cf76dff80fd679251da93351c1291">00857</a>     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00237.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(buffer_operation *op) {
-<a name="l00858"></a>00858         my_successors.remove_successor(*(op->r));
-<a name="l00859"></a>00859         __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l00860"></a>00860     }
-<a name="l00861"></a>00861         
-<a name="l00863"></a><a class="code" href="a00237.html#dcbffbae514f4d95205b0845785c0a91">00863</a>     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00237.html#dcbffbae514f4d95205b0845785c0a91">internal_forward</a>(buffer_operation *op) {
-<a name="l00864"></a>00864         T i_copy;
-<a name="l00865"></a>00865         <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; <span class="comment">// flagged when a successor accepts</span>
-<a name="l00866"></a>00866         size_type counter = my_successors.size();
-<a name="l00867"></a>00867         <span class="comment">// Try forwarding, giving each successor a chance</span>
-<a name="l00868"></a>00868         <span class="keywordflow">while</span> (counter>0 && !this->buffer_empty() && this->item_valid(this->my_tail-1)) {
-<a name="l00869"></a>00869             this->fetch_back(i_copy);
-<a name="l00870"></a>00870             <span class="keywordflow">if</span>( my_successors.try_put(i_copy) ) {
-<a name="l00871"></a>00871                 this->invalidate_back();
-<a name="l00872"></a>00872                 --(this->my_tail);
-<a name="l00873"></a>00873                 success = <span class="keyword">true</span>; <span class="comment">// found an accepting successor</span>
-<a name="l00874"></a>00874             }
-<a name="l00875"></a>00875             --counter;
-<a name="l00876"></a>00876         }
-<a name="l00877"></a>00877         <span class="keywordflow">if</span> (success && !counter)
-<a name="l00878"></a>00878             __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l00879"></a>00879         <span class="keywordflow">else</span> {
-<a name="l00880"></a>00880             __TBB_store_with_release(op->status, FAILED);
-<a name="l00881"></a>00881             forwarder_busy = <span class="keyword">false</span>;
-<a name="l00882"></a>00882         }
-<a name="l00883"></a>00883     }
-<a name="l00884"></a>00884         
-<a name="l00885"></a>00885     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_push(buffer_operation *op) {
-<a name="l00886"></a>00886         this->push_back(*(op->elem));
-<a name="l00887"></a>00887         __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l00888"></a>00888     }
-<a name="l00889"></a>00889         
-<a name="l00890"></a>00890     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_pop(buffer_operation *op) {
-<a name="l00891"></a>00891         <span class="keywordflow">if</span>(this->pop_back(*(op->elem))) {
-<a name="l00892"></a>00892             __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l00893"></a>00893         }
-<a name="l00894"></a>00894         <span class="keywordflow">else</span> {
-<a name="l00895"></a>00895             __TBB_store_with_release(op->status, FAILED);
-<a name="l00896"></a>00896         }
-<a name="l00897"></a>00897     }
-<a name="l00898"></a>00898         
-<a name="l00899"></a>00899     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_reserve(buffer_operation *op) {
-<a name="l00900"></a>00900         <span class="keywordflow">if</span>(this->reserve_front(*(op->elem))) {
-<a name="l00901"></a>00901             __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l00902"></a>00902         }
-<a name="l00903"></a>00903         <span class="keywordflow">else</span> {
-<a name="l00904"></a>00904             __TBB_store_with_release(op->status, FAILED);
-<a name="l00905"></a>00905         }
-<a name="l00906"></a>00906     }
-<a name="l00907"></a>00907         
-<a name="l00908"></a>00908     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_consume(buffer_operation *op) {
-<a name="l00909"></a>00909         this->consume_front();
-<a name="l00910"></a>00910         __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l00911"></a>00911     }
-<a name="l00912"></a>00912         
-<a name="l00913"></a>00913     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_release(buffer_operation *op) {
-<a name="l00914"></a>00914         this->release_front();
-<a name="l00915"></a>00915         __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l00916"></a>00916     }
-<a name="l00917"></a>00917         
-<a name="l00918"></a>00918 <span class="keyword">public</span>:
-<a name="l00920"></a><a class="code" href="a00237.html#5fe4b79f780586ff66e002ce32a5c60d">00920</a>     <a class="code" href="a00237.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>( <a class="code" href="a00262.html">graph</a> &g ) : reservable_item_buffer<T>(),
-<a name="l00921"></a>00921         my_parent( g.root_task() ), forwarder_busy(false) {
-<a name="l00922"></a>00922         my_successors.set_owner(<span class="keyword">this</span>);
-<a name="l00923"></a>00923         my_aggregator.initialize_handler(my_handler(<span class="keyword">this</span>));
-<a name="l00924"></a>00924     }
-<a name="l00925"></a>00925 
-<a name="l00927"></a><a class="code" href="a00237.html#03ad7b85a8341437f584af06ad050cdc">00927</a>     <a class="code" href="a00237.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>( <span class="keyword">const</span> buffer_node& src ) :
-<a name="l00928"></a>00928         <a class="code" href="a00263.html">graph_node</a>(), reservable_item_buffer<T>(), <a class="code" href="a00295.html">receiver</a><T>(), <a class="code" href="a00301.html">sender</a><T>(),
-<a name="l00929"></a>00929         my_parent( src.my_parent ) {
-<a name="l00930"></a>00930         forwarder_busy = <span class="keyword">false</span>;
-<a name="l00931"></a>00931         my_successors.set_owner(<span class="keyword">this</span>);
-<a name="l00932"></a>00932         my_aggregator.initialize_handler(my_handler(<span class="keyword">this</span>));
-<a name="l00933"></a>00933     }
-<a name="l00934"></a>00934 
-<a name="l00935"></a>00935     <span class="keyword">virtual</span> ~buffer_node() {}
-<a name="l00936"></a>00936         
-<a name="l00937"></a>00937     <span class="comment">//</span>
-<a name="l00938"></a>00938     <span class="comment">// message sender implementation</span>
-<a name="l00939"></a>00939     <span class="comment">//</span>
-<a name="l00940"></a>00940         
-<a name="l00942"></a>00942 
-<a name="l00943"></a><a class="code" href="a00237.html#f8bf4944ede4fc106423d67715beb695">00943</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00237.html#f8bf4944ede4fc106423d67715beb695">register_successor</a>( <a class="code" href="a00295.html">receiver<output_type></a> &r ) {
-<a name="l00944"></a>00944         buffer_operation op_data(reg_succ);
-<a name="l00945"></a>00945         op_data.r = &r;
-<a name="l00946"></a>00946         my_aggregator.execute(&op_data);
-<a name="l00947"></a>00947         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00948"></a>00948     }
-<a name="l00949"></a>00949         
-<a name="l00951"></a>00951 
-<a name="l00953"></a><a class="code" href="a00237.html#2074da0e39b9477c32897d6e5786196f">00953</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00237.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a>( <a class="code" href="a00295.html">receiver<output_type></a> &r ) {
-<a name="l00954"></a>00954         r.<a class="code" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(*<span class="keyword">this</span>);
-<a name="l00955"></a>00955         buffer_operation op_data(rem_succ);
-<a name="l00956"></a>00956         op_data.r = &r;
-<a name="l00957"></a>00957         my_aggregator.execute(&op_data);
-<a name="l00958"></a>00958         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00959"></a>00959     }
-<a name="l00960"></a>00960         
-<a name="l00962"></a>00962 
-<a name="l00964"></a><a class="code" href="a00237.html#aeb8aec46ca99ca022356a792c46735e">00964</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00237.html#aeb8aec46ca99ca022356a792c46735e">try_get</a>( T &v ) {
-<a name="l00965"></a>00965         buffer_operation op_data(req_item);
-<a name="l00966"></a>00966         op_data.elem = &v;
-<a name="l00967"></a>00967         my_aggregator.execute(&op_data);
-<a name="l00968"></a>00968         <span class="keywordflow">return</span> (op_data.status==SUCCEEDED);
-<a name="l00969"></a>00969     }
-<a name="l00970"></a>00970         
-<a name="l00972"></a>00972 
-<a name="l00974"></a><a class="code" href="a00237.html#1cc889bb6c38bcb81757d0ebbc3a5e64">00974</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00237.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a>( T &v ) {
-<a name="l00975"></a>00975         buffer_operation op_data(res_item);
-<a name="l00976"></a>00976         op_data.elem = &v;
-<a name="l00977"></a>00977         my_aggregator.execute(&op_data);
-<a name="l00978"></a>00978         <span class="keywordflow">return</span> (op_data.status==SUCCEEDED);
-<a name="l00979"></a>00979     }
-<a name="l00980"></a>00980         
-<a name="l00982"></a>00982 
-<a name="l00983"></a><a class="code" href="a00237.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">00983</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00237.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a>() {
-<a name="l00984"></a>00984         buffer_operation op_data(rel_res);
-<a name="l00985"></a>00985         my_aggregator.execute(&op_data);
-<a name="l00986"></a>00986         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00987"></a>00987     }
-<a name="l00988"></a>00988         
-<a name="l00990"></a>00990 
-<a name="l00991"></a><a class="code" href="a00237.html#8ef07c434eb763d947a7b4e80c086a49">00991</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00237.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a>() {
-<a name="l00992"></a>00992         buffer_operation op_data(con_res);
-<a name="l00993"></a>00993         my_aggregator.execute(&op_data);
-<a name="l00994"></a>00994         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00995"></a>00995     }
-<a name="l00996"></a>00996         
-<a name="l00998"></a>00998 
-<a name="l00999"></a><a class="code" href="a00237.html#2b02fe332e704bbe14f297802298b63a">00999</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00237.html#2b02fe332e704bbe14f297802298b63a">try_put</a>(<span class="keyword">const</span> T &t) {
-<a name="l01000"></a>01000         buffer_operation op_data(t, put_item);
-<a name="l01001"></a>01001         my_aggregator.execute(&op_data);
-<a name="l01002"></a>01002         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01003"></a>01003     }
-<a name="l01004"></a>01004 };
-<a name="l01005"></a>01005         
-<a name="l01006"></a>01006         
-<a name="l01008"></a>01008 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> A=cache_aligned_allocator<T> >
-<a name="l01009"></a><a class="code" href="a00287.html">01009</a> <span class="keyword">class </span><a class="code" href="a00287.html">queue_node</a> : <span class="keyword">public</span> buffer_node<T, A> {
-<a name="l01010"></a>01010 <span class="keyword">protected</span>:
-<a name="l01011"></a>01011 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00237.html">buffer_node<T, A>::size_type</a> size_type;
-<a name="l01012"></a>01012 <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00237.html">buffer_node<T, A>::buffer_operation</a> queue_operation;
-<a name="l01013"></a>01013         
-<a name="l01014"></a>01014     <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
-<a name="l01015"></a>01015         
-<a name="l01017"></a><a class="code" href="a00287.html#eadcbbb81f9a9d223afabe0f40e77ecb">01017</a>     <span class="comment">/* override */</span> <span class="keywordtype">void</span> <a class="code" href="a00287.html#eadcbbb81f9a9d223afabe0f40e77ecb">internal_forward</a>(queue_operation *op) {
-<a name="l01018"></a>01018         T i_copy;
-<a name="l01019"></a>01019         <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; <span class="comment">// flagged when a successor accepts</span>
-<a name="l01020"></a>01020         size_type counter = this->my_successors.size();
-<a name="l01021"></a>01021         <span class="keywordflow">if</span> (this->my_reserved || !this->item_valid(this->my_head)){
-<a name="l01022"></a>01022             __TBB_store_with_release(op->status, FAILED);
-<a name="l01023"></a>01023             this->forwarder_busy = <span class="keyword">false</span>;
-<a name="l01024"></a>01024             <span class="keywordflow">return</span>;
-<a name="l01025"></a>01025         }
-<a name="l01026"></a>01026         <span class="comment">// Keep trying to send items while there is at least one accepting successor</span>
-<a name="l01027"></a>01027         <span class="keywordflow">while</span> (counter>0 && this->item_valid(this->my_head)) {
-<a name="l01028"></a>01028             this->fetch_front(i_copy);
-<a name="l01029"></a>01029             <span class="keywordflow">if</span>(this->my_successors.try_put(i_copy)) {
-<a name="l01030"></a>01030                  this->invalidate_front();
-<a name="l01031"></a>01031                  ++(this->my_head);
-<a name="l01032"></a>01032                 success = <span class="keyword">true</span>; <span class="comment">// found an accepting successor</span>
-<a name="l01033"></a>01033             }
-<a name="l01034"></a>01034             --counter;
-<a name="l01035"></a>01035         }
-<a name="l01036"></a>01036         <span class="keywordflow">if</span> (success && !counter)
-<a name="l01037"></a>01037             __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01038"></a>01038         <span class="keywordflow">else</span> {
-<a name="l01039"></a>01039             __TBB_store_with_release(op->status, FAILED);
-<a name="l01040"></a>01040             this->forwarder_busy = <span class="keyword">false</span>;
-<a name="l01041"></a>01041         }
-<a name="l01042"></a>01042     }
-<a name="l01043"></a>01043         
-<a name="l01044"></a>01044     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_pop(queue_operation *op) {
-<a name="l01045"></a>01045         <span class="keywordflow">if</span> ( this->my_reserved || !this->item_valid(this->my_head)){
-<a name="l01046"></a>01046             __TBB_store_with_release(op->status, FAILED);
-<a name="l01047"></a>01047         }
-<a name="l01048"></a>01048         <span class="keywordflow">else</span> {
-<a name="l01049"></a>01049             this->pop_front(*(op->elem));
-<a name="l01050"></a>01050             __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01051"></a>01051         }
-<a name="l01052"></a>01052     }
-<a name="l01053"></a>01053     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_reserve(queue_operation *op) {
-<a name="l01054"></a>01054         <span class="keywordflow">if</span> (this->my_reserved || !this->item_valid(this->my_head)) {
-<a name="l01055"></a>01055             __TBB_store_with_release(op->status, FAILED);
-<a name="l01056"></a>01056         }
-<a name="l01057"></a>01057         <span class="keywordflow">else</span> {
-<a name="l01058"></a>01058             this->my_reserved = <span class="keyword">true</span>;
-<a name="l01059"></a>01059             this->fetch_front(*(op->elem));
-<a name="l01060"></a>01060             this->invalidate_front();
-<a name="l01061"></a>01061             __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01062"></a>01062         }
-<a name="l01063"></a>01063     }
-<a name="l01064"></a>01064     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_consume(queue_operation *op) {
-<a name="l01065"></a>01065         this->consume_front();
-<a name="l01066"></a>01066         __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01067"></a>01067     }
-<a name="l01068"></a>01068         
-<a name="l01069"></a>01069 <span class="keyword">public</span>:
-<a name="l01070"></a>01070         
-<a name="l01071"></a><a class="code" href="a00287.html#1e71030845210b6c4c7380eb9e11a2ac">01071</a>     <span class="keyword">typedef</span> T <a class="code" href="a00287.html#1e71030845210b6c4c7380eb9e11a2ac">input_type</a>;
-<a name="l01072"></a><a class="code" href="a00287.html#25b5a53ab1f9a342644fa3759bc0b1ad">01072</a>     <span class="keyword">typedef</span> T output_type;
-<a name="l01073"></a><a class="code" href="a00287.html#5e2fdd33c45d44549dee9c1638e19898">01073</a>     <span class="keyword">typedef</span> <a class="code" href="a00301.html">sender< input_type ></a> <a class="code" href="a00301.html">predecessor_type</a>;
-<a name="l01074"></a><a class="code" href="a00287.html#f35076a19f256f9e7a61bed77ca1ccc5">01074</a>     <span class="keyword">typedef</span> <a class="code" href="a00295.html">receiver< output_type ></a> <a class="code" href="a00295.html">successor_type</a>;
-<a name="l01075"></a>01075         
-<a name="l01077"></a><a class="code" href="a00287.html#c716593a92448b0f429d1f3a38e67996">01077</a>     <a class="code" href="a00287.html#c716593a92448b0f429d1f3a38e67996">queue_node</a>( <a class="code" href="a00262.html">graph</a> &g ) : buffer_node<T, A>(g) {}
-<a name="l01078"></a>01078 
-<a name="l01080"></a><a class="code" href="a00287.html#0226762d9ebba28311b7b1518d948ab1">01080</a>     <a class="code" href="a00287.html#c716593a92448b0f429d1f3a38e67996">queue_node</a>( <span class="keyword">const</span> <a class="code" href="a00287.html">queue_node</a>& src) : buffer_node<T, A>(src) {}
-<a name="l01081"></a>01081 };
-<a name="l01082"></a>01082         
-<a name="l01084"></a>01084 <span class="keyword">template</span>< <span class="keyword">typename</span> T, <span class="keyword">typename</span> A=cache_aligned_allocator<T> >
-<a name="l01085"></a><a class="code" href="a00302.html">01085</a> <span class="keyword">class </span><a class="code" href="a00302.html">sequencer_node</a> : <span class="keyword">public</span> <a class="code" href="a00287.html">queue_node</a><T, A> {
-<a name="l01086"></a>01086     internal::function_body< T, size_t > *my_sequencer;
-<a name="l01087"></a>01087 <span class="keyword">public</span>:
-<a name="l01088"></a>01088         
-<a name="l01089"></a><a class="code" href="a00302.html#af629f26832ff4e476e240637a78bc0c">01089</a>     <span class="keyword">typedef</span> T <a class="code" href="a00302.html#af629f26832ff4e476e240637a78bc0c">input_type</a>;
-<a name="l01090"></a><a class="code" href="a00302.html#ca026eaef70e35791c407323199031a7">01090</a>     <span class="keyword">typedef</span> T output_type;
-<a name="l01091"></a><a class="code" href="a00302.html#8127e36811832563fe1e9bc3ba391f79">01091</a>     <span class="keyword">typedef</span> <a class="code" href="a00301.html">sender< input_type ></a> <a class="code" href="a00301.html">predecessor_type</a>;
-<a name="l01092"></a><a class="code" href="a00302.html#795f3ee75f133b9d3b159172fc4a197f">01092</a>     <span class="keyword">typedef</span> <a class="code" href="a00295.html">receiver< output_type ></a> <a class="code" href="a00295.html">successor_type</a>;
-<a name="l01093"></a>01093         
-<a name="l01095"></a>01095     <span class="keyword">template</span>< <span class="keyword">typename</span> Sequencer >
-<a name="l01096"></a><a class="code" href="a00302.html#7e71cbdf78f989091bc162b89bee7e66">01096</a>     <a class="code" href="a00302.html#7e71cbdf78f989091bc162b89bee7e66">sequencer_node</a>( <a class="code" href="a00262.html">graph</a> &g, <span class="keyword">const</span> Sequencer& s ) : <a class="code" href="a00287.html">queue_node</a><T, A>(g),
-<a name="l01097"></a>01097         my_sequencer(new internal::function_body_leaf< T, size_t, Sequencer>(s) ) {}
-<a name="l01098"></a>01098 
-<a name="l01100"></a><a class="code" href="a00302.html#b38e7a070552960384bcc1d91af13a5c">01100</a>     <a class="code" href="a00302.html#7e71cbdf78f989091bc162b89bee7e66">sequencer_node</a>( <span class="keyword">const</span> <a class="code" href="a00302.html">sequencer_node</a>& src ) : <a class="code" href="a00287.html">queue_node</a><T, A>(src),
-<a name="l01101"></a>01101         my_sequencer( src.my_sequencer->clone() ) {}
-<a name="l01102"></a>01102         
-<a name="l01104"></a><a class="code" href="a00302.html#93d3d8f6a72b3e1387047282116ed6ee">01104</a>     <a class="code" href="a00302.html#93d3d8f6a72b3e1387047282116ed6ee">~sequencer_node</a>() { <span class="keyword">delete</span> my_sequencer; }
-<a name="l01105"></a>01105 <span class="keyword">protected</span>:
-<a name="l01106"></a>01106     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00237.html">buffer_node<T, A>::size_type</a> size_type;
-<a name="l01107"></a>01107     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00237.html">buffer_node<T, A>::buffer_operation</a> sequencer_operation;
-<a name="l01108"></a>01108         
-<a name="l01109"></a>01109     <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
-<a name="l01110"></a>01110         
-<a name="l01111"></a>01111 <span class="keyword">private</span>:
-<a name="l01112"></a>01112     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_push(sequencer_operation *op) {
-<a name="l01113"></a>01113         size_type tag = (*my_sequencer)(*(op->elem));
-<a name="l01114"></a>01114         
-<a name="l01115"></a>01115         this->my_tail = (tag+1 > this->my_tail) ? tag+1 : this->my_tail;
-<a name="l01116"></a>01116         
-<a name="l01117"></a>01117         <span class="keywordflow">if</span>(this->size() > this->capacity())
-<a name="l01118"></a>01118             this->grow_my_array(this->size());  <span class="comment">// tail already has 1 added to it</span>
-<a name="l01119"></a>01119         this->item(tag) = std::make_pair( *(op->elem), <span class="keyword">true</span> );
-<a name="l01120"></a>01120         __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01121"></a>01121     }
-<a name="l01122"></a>01122 };
-<a name="l01123"></a>01123         
-<a name="l01125"></a>01125 <span class="keyword">template</span>< <span class="keyword">typename</span> T, <span class="keyword">typename</span> Compare = std::less<T>, <span class="keyword">typename</span> A=cache_aligned_allocator<T> >
-<a name="l01126"></a><a class="code" href="a00286.html">01126</a> <span class="keyword">class </span><a class="code" href="a00286.html">priority_queue_node</a> : <span class="keyword">public</span> buffer_node<T, A> {
-<a name="l01127"></a>01127 <span class="keyword">public</span>:
-<a name="l01128"></a><a class="code" href="a00286.html#b2829b518979874ad3d2a939e14ae7bd">01128</a>     <span class="keyword">typedef</span> T <a class="code" href="a00286.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a>;
-<a name="l01129"></a><a class="code" href="a00286.html#2cb099b590246b6bc93cc15e78c6ee5c">01129</a>     <span class="keyword">typedef</span> T output_type;
-<a name="l01130"></a><a class="code" href="a00286.html#fdea783bf9d5a4c98e794ac7e0f84ccf">01130</a>     <span class="keyword">typedef</span> <a class="code" href="a00301.html">sender< input_type ></a> <a class="code" href="a00301.html">predecessor_type</a>;
-<a name="l01131"></a><a class="code" href="a00286.html#09ab5064ca8192e68c03da47603e68eb">01131</a>     <span class="keyword">typedef</span> <a class="code" href="a00295.html">receiver< output_type ></a> <a class="code" href="a00295.html">successor_type</a>;
-<a name="l01132"></a>01132         
-<a name="l01134"></a><a class="code" href="a00286.html#497ec2612615249bf5a294eb1b7b93b3">01134</a>     <a class="code" href="a00286.html#497ec2612615249bf5a294eb1b7b93b3">priority_queue_node</a>( <a class="code" href="a00262.html">graph</a> &g ) : buffer_node<T, A>(g), mark(0) {}
-<a name="l01135"></a>01135 
-<a name="l01137"></a><a class="code" href="a00286.html#17a4f66e23d54100b64805405e905d62">01137</a>     <a class="code" href="a00286.html#497ec2612615249bf5a294eb1b7b93b3">priority_queue_node</a>( <span class="keyword">const</span> <a class="code" href="a00286.html">priority_queue_node</a> &src ) : buffer_node<T, A>(src), mark(0) {}
-<a name="l01138"></a>01138         
-<a name="l01139"></a>01139 <span class="keyword">protected</span>:
-<a name="l01140"></a>01140     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00237.html">buffer_node<T, A>::size_type</a> size_type;
-<a name="l01141"></a>01141     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00237.html">buffer_node<T, A>::item_type</a> item_type;
-<a name="l01142"></a>01142     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00237.html">buffer_node<T, A>::buffer_operation</a> prio_operation;
-<a name="l01143"></a>01143         
-<a name="l01144"></a>01144     <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
-<a name="l01145"></a>01145         
-<a name="l01146"></a>01146     <span class="comment">/* override */</span> <span class="keywordtype">void</span> handle_operations(prio_operation *op_list) {
-<a name="l01147"></a>01147         prio_operation *tmp <span class="comment">/*, *pop_list*/</span> ;
-<a name="l01148"></a>01148         <span class="keywordtype">bool</span> try_forwarding=<span class="keyword">false</span>;
-<a name="l01149"></a>01149         <span class="keywordflow">while</span> (op_list) {
-<a name="l01150"></a>01150             tmp = op_list;
-<a name="l01151"></a>01151             op_list = op_list->next;
-<a name="l01152"></a>01152             <span class="keywordflow">switch</span> (tmp->type) {
-<a name="l01153"></a>01153             <span class="keywordflow">case</span> <a class="code" href="a00237.html">buffer_node<T, A>::reg_succ</a>: this-><a class="code" href="a00237.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
-<a name="l01154"></a>01154             <span class="keywordflow">case</span> <a class="code" href="a00237.html">buffer_node<T, A>::rem_succ</a>: this-><a class="code" href="a00237.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(tmp); <span class="keywordflow">break</span>;
-<a name="l01155"></a>01155             <span class="keywordflow">case</span> <a class="code" href="a00237.html">buffer_node<T, A>::put_item</a>: internal_push(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
-<a name="l01156"></a>01156             <span class="keywordflow">case</span> <a class="code" href="a00237.html">buffer_node<T, A>::try_fwd</a>: <a class="code" href="a00286.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">internal_forward</a>(tmp); <span class="keywordflow">break</span>;
-<a name="l01157"></a>01157             <span class="keywordflow">case</span> <a class="code" href="a00237.html">buffer_node<T, A>::rel_res</a>: internal_release(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
-<a name="l01158"></a>01158             <span class="keywordflow">case</span> <a class="code" href="a00237.html">buffer_node<T, A>::con_res</a>: internal_consume(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
-<a name="l01159"></a>01159             <span class="keywordflow">case</span> <a class="code" href="a00237.html">buffer_node<T, A>::req_item</a>: internal_pop(tmp); <span class="keywordflow">break</span>;
-<a name="l01160"></a>01160             <span class="keywordflow">case</span> <a class="code" href="a00237.html">buffer_node<T, A>::res_item</a>: internal_reserve(tmp); <span class="keywordflow">break</span>;
-<a name="l01161"></a>01161             }
-<a name="l01162"></a>01162         }
-<a name="l01163"></a>01163         <span class="comment">// process pops!  for now, no special pop processing</span>
-<a name="l01164"></a>01164         <span class="keywordflow">if</span> (mark<this->my_tail) heapify();
-<a name="l01165"></a>01165         <span class="keywordflow">if</span> (try_forwarding && !this->forwarder_busy) {
-<a name="l01166"></a>01166             this->forwarder_busy = <span class="keyword">true</span>;
-<a name="l01167"></a>01167             <a class="code" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>(*<span class="keyword">new</span>(task::allocate_additional_child_of(*(this->my_parent))) internal::forward_task< buffer_node<input_type, A> >(*<span class="keyword">this</span>));
-<a name="l01168"></a>01168         }
-<a name="l01169"></a>01169     }
-<a name="l01170"></a>01170         
-<a name="l01172"></a><a class="code" href="a00286.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">01172</a>     <span class="comment">/* override */</span> <span class="keywordtype">void</span> <a class="code" href="a00286.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">internal_forward</a>(prio_operation *op) {
-<a name="l01173"></a>01173         T i_copy;
-<a name="l01174"></a>01174         <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; <span class="comment">// flagged when a successor accepts</span>
-<a name="l01175"></a>01175         size_type counter = this->my_successors.size();
-<a name="l01176"></a>01176         
-<a name="l01177"></a>01177         <span class="keywordflow">if</span> (this->my_reserved || this->my_tail == 0) {
-<a name="l01178"></a>01178             __TBB_store_with_release(op->status, FAILED);
-<a name="l01179"></a>01179             this->forwarder_busy = <span class="keyword">false</span>;
-<a name="l01180"></a>01180             <span class="keywordflow">return</span>;
-<a name="l01181"></a>01181         }
-<a name="l01182"></a>01182         <span class="comment">// Keep trying to send while there exists an accepting successor</span>
-<a name="l01183"></a>01183         <span class="keywordflow">while</span> (counter>0 && this->my_tail > 0) {
-<a name="l01184"></a>01184             i_copy = this->my_array[0].first;
-<a name="l01185"></a>01185             <span class="keywordtype">bool</span> msg = this->my_successors.try_put(i_copy);
-<a name="l01186"></a>01186             <span class="keywordflow">if</span> ( msg == <span class="keyword">true</span> ) {
-<a name="l01187"></a>01187                  <span class="keywordflow">if</span> (mark == this->my_tail) --mark;
-<a name="l01188"></a>01188                 --(this->my_tail);
-<a name="l01189"></a>01189                 this->my_array[0].first=this->my_array[this->my_tail].first;
-<a name="l01190"></a>01190                 <span class="keywordflow">if</span> (this->my_tail > 1) <span class="comment">// don't reheap for heap of size 1</span>
-<a name="l01191"></a>01191                     reheap();
-<a name="l01192"></a>01192                 success = <span class="keyword">true</span>; <span class="comment">// found an accepting successor</span>
-<a name="l01193"></a>01193             }
-<a name="l01194"></a>01194             --counter;
-<a name="l01195"></a>01195         }
-<a name="l01196"></a>01196         <span class="keywordflow">if</span> (success && !counter)
-<a name="l01197"></a>01197             __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01198"></a>01198         <span class="keywordflow">else</span> {
-<a name="l01199"></a>01199             __TBB_store_with_release(op->status, FAILED);
-<a name="l01200"></a>01200             this->forwarder_busy = <span class="keyword">false</span>;
-<a name="l01201"></a>01201         }
-<a name="l01202"></a>01202     }
-<a name="l01203"></a>01203         
-<a name="l01204"></a>01204     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_push(prio_operation *op) {
-<a name="l01205"></a>01205         <span class="keywordflow">if</span> ( this->my_tail >= this->my_array_size )
-<a name="l01206"></a>01206             this->grow_my_array( this->my_tail + 1 );
-<a name="l01207"></a>01207         this->my_array[this->my_tail] = std::make_pair( *(op->elem), <span class="keyword">true</span> );
-<a name="l01208"></a>01208         ++(this->my_tail);
-<a name="l01209"></a>01209         __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01210"></a>01210     }
-<a name="l01211"></a>01211     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_pop(prio_operation *op) {
-<a name="l01212"></a>01212         <span class="keywordflow">if</span> ( this->my_reserved == <span class="keyword">true</span> || this->my_tail == 0 ) {
-<a name="l01213"></a>01213             __TBB_store_with_release(op->status, FAILED);
-<a name="l01214"></a>01214         }
-<a name="l01215"></a>01215         <span class="keywordflow">else</span> {
-<a name="l01216"></a>01216             <span class="keywordflow">if</span> (mark<this->my_tail &&
-<a name="l01217"></a>01217                 compare(this->my_array[0].first,
-<a name="l01218"></a>01218                         this->my_array[this->my_tail-1].first)) {
-<a name="l01219"></a>01219                 <span class="comment">// there are newly pushed elems; last one higher than top</span>
-<a name="l01220"></a>01220                 <span class="comment">// copy the data</span>
-<a name="l01221"></a>01221                 *(op->elem) = this->my_array[this->my_tail-1].first;
-<a name="l01222"></a>01222                 --(this->my_tail);
-<a name="l01223"></a>01223                 __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01224"></a>01224             }
-<a name="l01225"></a>01225             <span class="keywordflow">else</span> { <span class="comment">// extract and push the last element down heap</span>
-<a name="l01226"></a>01226                 *(op->elem) = this->my_array[0].first; <span class="comment">// copy the data</span>
-<a name="l01227"></a>01227                 if (mark == this->my_tail) --mark;
-<a name="l01228"></a>01228                 --(this->my_tail);
-<a name="l01229"></a>01229                 __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01230"></a>01230                 this->my_array[0].first=this->my_array[this->my_tail].first;
-<a name="l01231"></a>01231                 <span class="keywordflow">if</span> (this->my_tail > 1) <span class="comment">// don't reheap for heap of size 1</span>
-<a name="l01232"></a>01232                     reheap();
-<a name="l01233"></a>01233             }
-<a name="l01234"></a>01234         }
-<a name="l01235"></a>01235     }
-<a name="l01236"></a>01236     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_reserve(prio_operation *op) {
-<a name="l01237"></a>01237         <span class="keywordflow">if</span> (this->my_reserved == <span class="keyword">true</span> || this->my_tail == 0) {
-<a name="l01238"></a>01238             __TBB_store_with_release(op->status, FAILED);
-<a name="l01239"></a>01239         }
-<a name="l01240"></a>01240         <span class="keywordflow">else</span> {
-<a name="l01241"></a>01241             this->my_reserved = <span class="keyword">true</span>;
-<a name="l01242"></a>01242             *(op->elem) = reserved_item = this->my_array[0].first;
-<a name="l01243"></a>01243             if (mark == this->my_tail) --mark;
-<a name="l01244"></a>01244             --(this->my_tail);
-<a name="l01245"></a>01245             __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01246"></a>01246             this->my_array[0].first = this->my_array[this->my_tail].first;
-<a name="l01247"></a>01247             <span class="keywordflow">if</span> (this->my_tail > 1) <span class="comment">// don't reheap for heap of size 1</span>
-<a name="l01248"></a>01248                 reheap();
-<a name="l01249"></a>01249         }
-<a name="l01250"></a>01250     }
-<a name="l01251"></a>01251     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_consume(prio_operation *op) {
-<a name="l01252"></a>01252         this->my_reserved = <span class="keyword">false</span>;
-<a name="l01253"></a>01253         __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01254"></a>01254     }
-<a name="l01255"></a>01255     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_release(prio_operation *op) {
-<a name="l01256"></a>01256         <span class="keywordflow">if</span> (this->my_tail >= this->my_array_size)
-<a name="l01257"></a>01257             this->grow_my_array( this->my_tail + 1 );
-<a name="l01258"></a>01258         this->my_array[this->my_tail] = std::make_pair(reserved_item, <span class="keyword">true</span>);
-<a name="l01259"></a>01259         ++(this->my_tail);
-<a name="l01260"></a>01260         this->my_reserved = <span class="keyword">false</span>;
-<a name="l01261"></a>01261         __TBB_store_with_release(op->status, SUCCEEDED);
-<a name="l01262"></a>01262         heapify();
-<a name="l01263"></a>01263     }
-<a name="l01264"></a>01264 <span class="keyword">private</span>:
-<a name="l01265"></a>01265     Compare compare;
-<a name="l01266"></a>01266     size_type mark;
-<a name="l01267"></a>01267     <a class="code" href="a00286.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a> reserved_item;
-<a name="l01268"></a>01268         
-<a name="l01269"></a>01269     <span class="keywordtype">void</span> heapify() {
-<a name="l01270"></a>01270         <span class="keywordflow">if</span> (!mark) mark = 1;
-<a name="l01271"></a>01271         <span class="keywordflow">for</span> (; mark<this->my_tail; ++mark) { <span class="comment">// for each unheaped element</span>
-<a name="l01272"></a>01272             size_type cur_pos = mark;
-<a name="l01273"></a>01273             <a class="code" href="a00286.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a> to_place = this->my_array[mark].first;
-<a name="l01274"></a>01274             <span class="keywordflow">do</span> { <span class="comment">// push to_place up the heap</span>
-<a name="l01275"></a>01275                 size_type parent = (cur_pos-1)>>1;
-<a name="l01276"></a>01276                 <span class="keywordflow">if</span> (!compare(this->my_array[parent].first, to_place))
-<a name="l01277"></a>01277                     <span class="keywordflow">break</span>;
-<a name="l01278"></a>01278                 this->my_array[cur_pos].first = this->my_array[parent].first;
-<a name="l01279"></a>01279                 cur_pos = parent;
-<a name="l01280"></a>01280             } <span class="keywordflow">while</span>( cur_pos );
-<a name="l01281"></a>01281             this->my_array[cur_pos].first = to_place;
-<a name="l01282"></a>01282         }
-<a name="l01283"></a>01283     }
-<a name="l01284"></a>01284         
-<a name="l01285"></a>01285     <span class="keywordtype">void</span> reheap() {
-<a name="l01286"></a>01286         size_type cur_pos=0, child=1;
-<a name="l01287"></a>01287         <span class="keywordflow">while</span> (child < mark) {
-<a name="l01288"></a>01288             size_type target = child;
-<a name="l01289"></a>01289             <span class="keywordflow">if</span> (child+1<mark &&
-<a name="l01290"></a>01290                 compare(this->my_array[child].first,
-<a name="l01291"></a>01291                         this->my_array[child+1].first))
-<a name="l01292"></a>01292                 ++target;
-<a name="l01293"></a>01293             <span class="comment">// target now has the higher priority child</span>
-<a name="l01294"></a>01294             <span class="keywordflow">if</span> (compare(this->my_array[target].first,
-<a name="l01295"></a>01295                         this->my_array[this->my_tail].first))
-<a name="l01296"></a>01296                 <span class="keywordflow">break</span>;
-<a name="l01297"></a>01297             this->my_array[cur_pos].first = this->my_array[target].first;
-<a name="l01298"></a>01298             cur_pos = target;
-<a name="l01299"></a>01299             child = (cur_pos<<1)+1;
-<a name="l01300"></a>01300         }
-<a name="l01301"></a>01301         this->my_array[cur_pos].first = this->my_array[this->my_tail].first;
-<a name="l01302"></a>01302     }
-<a name="l01303"></a>01303 };
-<a name="l01304"></a>01304         
-<a name="l01306"></a>01306 
-<a name="l01309"></a>01309 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
-<a name="l01310"></a><a class="code" href="a00266.html">01310</a> <span class="keyword">class </span><a class="code" href="a00266.html">limiter_node</a> : <span class="keyword">public</span> <a class="code" href="a00263.html">graph_node</a>, <span class="keyword">public</span> <a class="code" href="a00295.html">receiver</a>< T >, <span class="keyword">public</span> <a class="code" href="a00301.html">sender</a>< T > {
-<a name="l01311"></a>01311 <span class="keyword">public</span>:
-<a name="l01312"></a>01312         
-<a name="l01313"></a><a class="code" href="a00266.html#035196d3c9240ef041f528ebcde8baa7">01313</a>     <span class="keyword">typedef</span> T <a class="code" href="a00266.html#035196d3c9240ef041f528ebcde8baa7">input_type</a>;
-<a name="l01314"></a><a class="code" href="a00266.html#6e67fc480147c0b88a483b85db6457b0">01314</a>     <span class="keyword">typedef</span> T output_type;
-<a name="l01315"></a><a class="code" href="a00266.html#f89fcf44f38eb33f965ee5362d3e68e9">01315</a>     <span class="keyword">typedef</span> <a class="code" href="a00301.html">sender< input_type ></a> <a class="code" href="a00301.html">predecessor_type</a>;
-<a name="l01316"></a><a class="code" href="a00266.html#e8945e4dd6ea759ff9e4735da13f12ef">01316</a>     <span class="keyword">typedef</span> <a class="code" href="a00295.html">receiver< output_type ></a> <a class="code" href="a00295.html">successor_type</a>;
-<a name="l01317"></a>01317         
-<a name="l01318"></a>01318 <span class="keyword">private</span>:
-<a name="l01319"></a>01319         
-<a name="l01320"></a>01320     <a class="code" href="a00311.html">task</a> *my_root_task;
-<a name="l01321"></a>01321     size_t my_threshold;
-<a name="l01322"></a>01322     size_t my_count;
-<a name="l01323"></a>01323     internal::predecessor_cache< T > my_predecessors;
-<a name="l01324"></a>01324     <a class="code" href="a00305.html">spin_mutex</a> my_mutex;
-<a name="l01325"></a>01325     internal::broadcast_cache< T > my_successors;
-<a name="l01326"></a>01326     <span class="keywordtype">int</span> init_decrement_predecessors;
-<a name="l01327"></a>01327 
-<a name="l01328"></a>01328     <span class="keyword">friend</span> <span class="keyword">class </span>internal::forward_task< limiter_node<T> >;
-<a name="l01329"></a>01329         
-<a name="l01330"></a>01330     <span class="comment">// Let decrementer call decrement_counter()</span>
-<a name="l01331"></a>01331     <span class="keyword">friend</span> <span class="keyword">class </span>internal::decrementer< limiter_node<T> >;
-<a name="l01332"></a>01332         
-<a name="l01333"></a>01333     <span class="keywordtype">void</span> decrement_counter() {
-<a name="l01334"></a>01334         <a class="code" href="a00266.html#035196d3c9240ef041f528ebcde8baa7">input_type</a> v;
-<a name="l01335"></a>01335         
-<a name="l01336"></a>01336         <span class="comment">// If we can't get / put an item immediately then drop the count</span>
-<a name="l01337"></a>01337         <span class="keywordflow">if</span> ( my_predecessors.get_item( v ) == <span class="keyword">false</span> 
-<a name="l01338"></a>01338              || my_successors.try_put(v) == false ) {
-<a name="l01339"></a>01339             <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l01340"></a>01340             --my_count;
-<a name="l01341"></a>01341             <span class="keywordflow">if</span> ( !my_predecessors.empty() ) 
-<a name="l01342"></a>01342                 <a class="code" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
-<a name="l01343"></a>01343                             internal::forward_task< <a class="code" href="a00266.html">limiter_node<T></a> >( *<span class="keyword">this</span> ) );
-<a name="l01344"></a>01344         }
-<a name="l01345"></a>01345     }
-<a name="l01346"></a>01346         
-<a name="l01347"></a>01347     <span class="keywordtype">void</span> forward() {
-<a name="l01348"></a>01348         {
-<a name="l01349"></a>01349             <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l01350"></a>01350             <span class="keywordflow">if</span> ( my_count < my_threshold ) 
-<a name="l01351"></a>01351                 ++my_count;
-<a name="l01352"></a>01352             <span class="keywordflow">else</span>
-<a name="l01353"></a>01353                 <span class="keywordflow">return</span>;
-<a name="l01354"></a>01354         }
-<a name="l01355"></a>01355         decrement_counter();
-<a name="l01356"></a>01356     }
-<a name="l01357"></a>01357         
-<a name="l01358"></a>01358 <span class="keyword">public</span>:
-<a name="l01359"></a>01359         
-<a name="l01361"></a><a class="code" href="a00266.html#a3344b2461966631b6ee34b79fb105c7">01361</a>     internal::decrementer< limiter_node<T> > <a class="code" href="a00266.html#a3344b2461966631b6ee34b79fb105c7">decrement</a>;
-<a name="l01362"></a>01362         
-<a name="l01364"></a><a class="code" href="a00266.html#831b06576f46fe2bf3ed0f86b793c1b2">01364</a>     <a class="code" href="a00266.html#831b06576f46fe2bf3ed0f86b793c1b2">limiter_node</a>(<a class="code" href="a00262.html">graph</a> &g, size_t threshold, <span class="keywordtype">int</span> num_decrement_predecessors=0) : 
-<a name="l01365"></a>01365         my_root_task(g.root_task()), my_threshold(threshold), my_count(0), 
-<a name="l01366"></a>01366         init_decrement_predecessors(num_decrement_predecessors), 
-<a name="l01367"></a>01367         <a class="code" href="a00266.html#a3344b2461966631b6ee34b79fb105c7">decrement</a>(num_decrement_predecessors) 
-<a name="l01368"></a>01368     {
-<a name="l01369"></a>01369         my_predecessors.set_owner(<span class="keyword">this</span>);
-<a name="l01370"></a>01370         my_successors.set_owner(<span class="keyword">this</span>);
-<a name="l01371"></a>01371         <a class="code" href="a00266.html#a3344b2461966631b6ee34b79fb105c7">decrement</a>.set_owner(<span class="keyword">this</span>);
-<a name="l01372"></a>01372     }
-<a name="l01373"></a>01373         
-<a name="l01375"></a><a class="code" href="a00266.html#83d3ab884543b070ee5b345a87f241fa">01375</a>     <a class="code" href="a00266.html#831b06576f46fe2bf3ed0f86b793c1b2">limiter_node</a>( <span class="keyword">const</span> limiter_node& src ) : 
-<a name="l01376"></a>01376         <a class="code" href="a00263.html">graph_node</a>(), <a class="code" href="a00295.html">receiver</a><T>(), <a class="code" href="a00301.html">sender</a><T>(),
-<a name="l01377"></a>01377         my_root_task(src.my_root_task), my_threshold(src.my_threshold), my_count(0), 
-<a name="l01378"></a>01378         init_decrement_predecessors(src.init_decrement_predecessors), 
-<a name="l01379"></a>01379         <a class="code" href="a00266.html#a3344b2461966631b6ee34b79fb105c7">decrement</a>(src.init_decrement_predecessors) 
-<a name="l01380"></a>01380     {
-<a name="l01381"></a>01381         my_predecessors.set_owner(<span class="keyword">this</span>);
-<a name="l01382"></a>01382         my_successors.set_owner(<span class="keyword">this</span>);
-<a name="l01383"></a>01383         <a class="code" href="a00266.html#a3344b2461966631b6ee34b79fb105c7">decrement</a>.set_owner(<span class="keyword">this</span>);
-<a name="l01384"></a>01384     }
-<a name="l01385"></a>01385 
-<a name="l01387"></a><a class="code" href="a00266.html#c76561d8d871b4769876988a4de12a9b">01387</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00266.html#c76561d8d871b4769876988a4de12a9b">register_successor</a>( <a class="code" href="a00295.html">receiver<output_type></a> &r ) {
-<a name="l01388"></a>01388         my_successors.register_successor(r);
-<a name="l01389"></a>01389         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01390"></a>01390     }
-<a name="l01391"></a>01391         
-<a name="l01393"></a>01393 
-<a name="l01394"></a><a class="code" href="a00266.html#275e328063c121b3e506ccef2a825d28">01394</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00266.html#275e328063c121b3e506ccef2a825d28">remove_successor</a>( <a class="code" href="a00295.html">receiver<output_type></a> &r ) {
-<a name="l01395"></a>01395         r.<a class="code" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(*<span class="keyword">this</span>);
-<a name="l01396"></a>01396         my_successors.remove_successor(r);
-<a name="l01397"></a>01397         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01398"></a>01398     }
-<a name="l01399"></a>01399         
-<a name="l01401"></a><a class="code" href="a00266.html#55a02d458a4d8ffa6accd7a70605da2f">01401</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00266.html#55a02d458a4d8ffa6accd7a70605da2f">try_put</a>( <span class="keyword">const</span> T &t ) {
-<a name="l01402"></a>01402         {
-<a name="l01403"></a>01403             <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l01404"></a>01404             <span class="keywordflow">if</span> ( my_count >= my_threshold ) 
-<a name="l01405"></a>01405                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l01406"></a>01406             <span class="keywordflow">else</span>
-<a name="l01407"></a>01407                 ++my_count; 
-<a name="l01408"></a>01408         }
-<a name="l01409"></a>01409         
-<a name="l01410"></a>01410         <span class="keywordtype">bool</span> msg = my_successors.try_put(t);
-<a name="l01411"></a>01411         
-<a name="l01412"></a>01412         <span class="keywordflow">if</span> ( msg != <span class="keyword">true</span> ) {
-<a name="l01413"></a>01413             <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l01414"></a>01414             --my_count;
-<a name="l01415"></a>01415             <span class="keywordflow">if</span> ( !my_predecessors.empty() ) 
-<a name="l01416"></a>01416                 <a class="code" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
-<a name="l01417"></a>01417                             internal::forward_task< <a class="code" href="a00266.html">limiter_node<T></a> >( *<span class="keyword">this</span> ) );
-<a name="l01418"></a>01418         }
-<a name="l01419"></a>01419         
-<a name="l01420"></a>01420         <span class="keywordflow">return</span> msg;
-<a name="l01421"></a>01421     }
-<a name="l01422"></a>01422         
-<a name="l01424"></a><a class="code" href="a00266.html#de70a0e88ce7655d8c14b6af57f7496f">01424</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00266.html#de70a0e88ce7655d8c14b6af57f7496f">register_predecessor</a>( <a class="code" href="a00301.html">predecessor_type</a> &src ) {
-<a name="l01425"></a>01425         <a class="code" href="a00306.html">spin_mutex::scoped_lock</a> lock(my_mutex);
-<a name="l01426"></a>01426         my_predecessors.add( src );
-<a name="l01427"></a>01427         <span class="keywordflow">if</span> ( my_count < my_threshold && !my_successors.empty() ) 
-<a name="l01428"></a>01428             <a class="code" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) ) 
-<a name="l01429"></a>01429                            internal::forward_task< <a class="code" href="a00266.html">limiter_node<T></a> >( *<span class="keyword">this</span> ) );
-<a name="l01430"></a>01430         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01431"></a>01431     }
-<a name="l01432"></a>01432         
-<a name="l01434"></a><a class="code" href="a00266.html#c530e7b469454e2340460795f2da3317">01434</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00266.html#c530e7b469454e2340460795f2da3317">remove_predecessor</a>( <a class="code" href="a00301.html">predecessor_type</a> &src ) {
-<a name="l01435"></a>01435         my_predecessors.remove( src );
-<a name="l01436"></a>01436         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l01437"></a>01437     }
-<a name="l01438"></a>01438         
-<a name="l01439"></a>01439 };
-<a name="l01440"></a>01440 
-<a name="l01441"></a>01441 <span class="preprocessor">#include "internal/_flow_graph_join_impl.h"</span>
-<a name="l01442"></a>01442 
-<a name="l01443"></a>01443 <span class="keyword">using</span> internal::reserving_port;
-<a name="l01444"></a>01444 <span class="keyword">using</span> internal::queueing_port;
-<a name="l01445"></a>01445 <span class="keyword">using</span> internal::tag_matching_port;
-<a name="l01446"></a>01446 <span class="keyword">using</span> internal::input_port;
-<a name="l01447"></a>01447 <span class="keyword">using</span> internal::tag_value;
-<a name="l01448"></a>01448 <span class="keyword">using</span> internal::NO_TAG;
-<a name="l01449"></a>01449 
-<a name="l01450"></a>01450 <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple, graph_buffer_policy JP=queueing> <span class="keyword">class </span>join_node;
-<a name="l01451"></a>01451 
-<a name="l01452"></a>01452 <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
-<a name="l01453"></a>01453 <span class="keyword">class </span>join_node<OutputTuple,reserving>: <span class="keyword">public</span> internal::unfolded_join_node<std::tuple_size<OutputTuple>::value, reserving_port, OutputTuple, reserving> {
-<a name="l01454"></a>01454 <span class="keyword">private</span>:
-<a name="l01455"></a>01455     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<OutputTuple>::value;
-<a name="l01456"></a>01456     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::unfolded_join_node<N, reserving_port, OutputTuple, reserving> unfolded_type;
-<a name="l01457"></a>01457 <span class="keyword">public</span>:
-<a name="l01458"></a>01458     <span class="keyword">typedef</span> OutputTuple output_type;
-<a name="l01459"></a>01459     <span class="keyword">typedef</span> <span class="keyword">typename</span> unfolded_type::input_ports_tuple_type input_ports_tuple_type;
-<a name="l01460"></a>01460     join_node(<a class="code" href="a00262.html">graph</a> &g) : unfolded_type(g) { }
-<a name="l01461"></a>01461     join_node(<span class="keyword">const</span> join_node &other) : unfolded_type(other) {}
-<a name="l01462"></a>01462 };
-<a name="l01463"></a>01463 
-<a name="l01464"></a>01464 <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
-<a name="l01465"></a>01465 <span class="keyword">class </span>join_node<OutputTuple,queueing>: <span class="keyword">public</span> internal::unfolded_join_node<std::tuple_size<OutputTuple>::value, queueing_port, OutputTuple, queueing> {
-<a name="l01466"></a>01466 <span class="keyword">private</span>:
-<a name="l01467"></a>01467     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<OutputTuple>::value;
-<a name="l01468"></a>01468     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::unfolded_join_node<N, queueing_port, OutputTuple, queueing> unfolded_type;
-<a name="l01469"></a>01469 <span class="keyword">public</span>:
-<a name="l01470"></a>01470     <span class="keyword">typedef</span> OutputTuple output_type;
-<a name="l01471"></a>01471     <span class="keyword">typedef</span> <span class="keyword">typename</span> unfolded_type::input_ports_tuple_type input_ports_tuple_type;
-<a name="l01472"></a>01472     join_node(graph &g) : unfolded_type(g) { }
-<a name="l01473"></a>01473     join_node(<span class="keyword">const</span> join_node &other) : unfolded_type(other) {}
-<a name="l01474"></a>01474 };
-<a name="l01475"></a>01475 
-<a name="l01476"></a>01476 <span class="comment">// template for tag_matching join_node</span>
-<a name="l01477"></a>01477 <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
-<a name="l01478"></a>01478 <span class="keyword">class </span>join_node<OutputTuple, tag_matching> : <span class="keyword">public</span> internal::unfolded_join_node<std::tuple_size<OutputTuple>::value,
-<a name="l01479"></a>01479       tag_matching_port, OutputTuple, tag_matching> {
-<a name="l01480"></a>01480 <span class="keyword">private</span>:
-<a name="l01481"></a>01481     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<OutputTuple>::value;
-<a name="l01482"></a>01482     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::unfolded_join_node<N, tag_matching_port, OutputTuple, tag_matching> unfolded_type;
-<a name="l01483"></a>01483 <span class="keyword">public</span>:
-<a name="l01484"></a>01484     <span class="keyword">typedef</span> OutputTuple output_type;
-<a name="l01485"></a>01485     <span class="keyword">typedef</span> <span class="keyword">typename</span> unfolded_type::input_ports_tuple_type input_ports_tuple_type;
-<a name="l01486"></a>01486     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1>
-<a name="l01487"></a>01487     join_node(graph &g, B0 b0, B1 b1) : unfolded_type(g, b0, b1) { }
-<a name="l01488"></a>01488     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2>
-<a name="l01489"></a>01489     join_node(graph &g, B0 b0, B1 b1, B2 b2) : unfolded_type(g, b0, b1, b2) { }
-<a name="l01490"></a>01490     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3>
-<a name="l01491"></a>01491     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3) : unfolded_type(g, b0, b1, b2, b3) { }
-<a name="l01492"></a>01492     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4>
-<a name="l01493"></a>01493     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) : unfolded_type(g, b0, b1, b2, b3, b4) { }
-<a name="l01494"></a>01494     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4, <span class="keyword">typename</span> B5>
-<a name="l01495"></a>01495     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5) : unfolded_type(g, b0, b1, b2, b3, b4, b5) { }
-<a name="l01496"></a>01496     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4, <span class="keyword">typename</span> B5, <span class="keyword">typename</span> B6>
-<a name="l01497"></a>01497     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6) { }
-<a name="l01498"></a>01498     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4, <span class="keyword">typename</span> B5, <span class="keyword">typename</span> B6, <span class="keyword">typename</span> B7>
-<a name="l01499"></a>01499     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6, B7 b7) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7) { }
-<a name="l01500"></a>01500     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4, <span class="keyword">typename</span> B5, <span class="keyword">typename</span> B6, <span class="keyword">typename</span> B7, <span class="keyword">typename</span> B8>
-<a name="l01501"></a>01501     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6, B7 b7, B8 b8) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8) { }
-<a name="l01502"></a>01502     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4, <span class="keyword">typename</span> B5, <span class="keyword">typename</span> B6, <span class="keyword">typename</span> B7, <span class="keyword">typename</span> B8, <span class="keyword">typename</span> B9>
-<a name="l01503"></a>01503     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6, B7 b7, B8 b8, B9 b9) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9) { }
-<a name="l01504"></a>01504     join_node(<span class="keyword">const</span> join_node &other) : unfolded_type(other) {}
-<a name="l01505"></a>01505 };
-<a name="l01506"></a>01506 
-<a name="l01507"></a>01507 <span class="preprocessor">#if TBB_PREVIEW_GRAPH_NODES</span>
-<a name="l01508"></a>01508 <span class="preprocessor"></span><span class="comment">// or node</span>
-<a name="l01509"></a>01509 <span class="preprocessor">#include "internal/_flow_graph_or_impl.h"</span>
-<a name="l01510"></a>01510 
-<a name="l01511"></a>01511 <span class="keyword">template</span><<span class="keyword">typename</span> InputTuple>
-<a name="l01512"></a>01512 <span class="keyword">class </span>or_node : <span class="keyword">public</span> internal::unfolded_or_node<InputTuple> {
-<a name="l01513"></a>01513 <span class="keyword">private</span>:
-<a name="l01514"></a>01514     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<InputTuple>::value;
-<a name="l01515"></a>01515 <span class="keyword">public</span>:
-<a name="l01516"></a>01516     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::or_output_type<InputTuple>::type output_type;
-<a name="l01517"></a>01517     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::unfolded_or_node<InputTuple> unfolded_type;
-<a name="l01518"></a>01518     or_node() : unfolded_type() { }
-<a name="l01519"></a>01519     <span class="comment">// Copy constructor</span>
-<a name="l01520"></a>01520     or_node( <span class="keyword">const</span> or_node& <span class="comment">/*other*/</span> ) : unfolded_type() { }
-<a name="l01521"></a>01521 };
-<a name="l01522"></a>01522 <span class="preprocessor">#endif  // TBB_PREVIEW_GRAPH_NODES</span>
-<a name="l01523"></a>01523 <span class="preprocessor"></span>
-<a name="l01525"></a>01525 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
-<a name="l01526"></a>01526 <span class="keyword">inline</span> <span class="keywordtype">void</span> make_edge( sender<T> &p, receiver<T> &s ) {
-<a name="l01527"></a>01527     p.register_successor( s );
-<a name="l01528"></a>01528 }
-<a name="l01529"></a>01529         
-<a name="l01531"></a>01531 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
-<a name="l01532"></a>01532 <span class="keyword">inline</span> <span class="keywordtype">void</span> remove_edge( sender<T> &p, receiver<T> &s ) {
-<a name="l01533"></a>01533     p.remove_successor( s );
-<a name="l01534"></a>01534 }
-<a name="l01535"></a>01535 
-<a name="l01537"></a>01537 <span class="keyword">template</span>< <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Node >
-<a name="l01538"></a>01538 Body copy_body( Node &n ) {
-<a name="l01539"></a>01539     <span class="keywordflow">return</span> n.template copy_function_object<Body>();
-<a name="l01540"></a>01540 }
-<a name="l01541"></a>01541         
-<a name="l01542"></a>01542         
-<a name="l01543"></a>01543 } <span class="comment">// interface6</span>
-<a name="l01544"></a>01544 
-<a name="l01545"></a>01545     <span class="keyword">using</span> interface6::graph;
-<a name="l01546"></a>01546     <span class="keyword">using</span> interface6::graph_node;
-<a name="l01547"></a>01547     <span class="keyword">using</span> interface6::continue_msg;
-<a name="l01548"></a>01548     <span class="keyword">using</span> interface6::sender;
-<a name="l01549"></a>01549     <span class="keyword">using</span> interface6::receiver;
-<a name="l01550"></a>01550     <span class="keyword">using</span> interface6::continue_receiver;
-<a name="l01551"></a>01551 
-<a name="l01552"></a>01552     <span class="keyword">using</span> interface6::source_node;
-<a name="l01553"></a>01553     <span class="keyword">using</span> interface6::function_node;
-<a name="l01554"></a>01554 <span class="preprocessor">#if TBB_PREVIEW_GRAPH_NODES</span>
-<a name="l01555"></a>01555 <span class="preprocessor"></span>    <span class="keyword">using</span> interface6::multioutput_function_node;
-<a name="l01556"></a>01556     <span class="keyword">using</span> interface6::split_node;
-<a name="l01557"></a>01557     <span class="keyword">using</span> interface6::internal::output_port;
-<a name="l01558"></a>01558     <span class="keyword">using</span> interface6::or_node;
-<a name="l01559"></a>01559 <span class="preprocessor">#endif</span>
-<a name="l01560"></a>01560 <span class="preprocessor"></span>    <span class="keyword">using</span> interface6::continue_node;
-<a name="l01561"></a>01561     <span class="keyword">using</span> interface6::overwrite_node;
-<a name="l01562"></a>01562     <span class="keyword">using</span> interface6::write_once_node;
-<a name="l01563"></a>01563     <span class="keyword">using</span> interface6::broadcast_node;
-<a name="l01564"></a>01564     <span class="keyword">using</span> interface6::buffer_node;
-<a name="l01565"></a>01565     <span class="keyword">using</span> interface6::queue_node;
-<a name="l01566"></a>01566     <span class="keyword">using</span> interface6::sequencer_node;
-<a name="l01567"></a>01567     <span class="keyword">using</span> interface6::priority_queue_node;
-<a name="l01568"></a>01568     <span class="keyword">using</span> interface6::limiter_node;
-<a name="l01569"></a>01569     <span class="keyword">using namespace </span>interface6::internal::graph_policy_namespace;
-<a name="l01570"></a>01570     <span class="keyword">using</span> interface6::join_node;
-<a name="l01571"></a>01571     <span class="keyword">using</span> interface6::input_port;
-<a name="l01572"></a>01572     <span class="keyword">using</span> interface6::copy_body; 
-<a name="l01573"></a>01573     <span class="keyword">using</span> interface6::make_edge; 
-<a name="l01574"></a>01574     <span class="keyword">using</span> interface6::remove_edge; 
-<a name="l01575"></a>01575     <span class="keyword">using</span> interface6::internal::NO_TAG;
-<a name="l01576"></a>01576     <span class="keyword">using</span> interface6::internal::tag_value;
-<a name="l01577"></a>01577 
-<a name="l01578"></a>01578 } <span class="comment">// flow</span>
-<a name="l01579"></a>01579 } <span class="comment">// tbb</span>
-<a name="l01580"></a>01580 
-<a name="l01581"></a>01581 <span class="preprocessor">#endif // __TBB_flow_graph_H</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00473.html b/doc/html/a00473.html
new file mode 100644
index 0000000..f639f2c
--- /dev/null
+++ b/doc/html/a00473.html
@@ -0,0 +1,327 @@
+<!DOCTYPE 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_priority_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_priority_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-2012 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_priority_queue_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_priority_queue_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 "cache_aligned_allocator.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "internal/_aggregator_impl.h"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include <vector></span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include <iterator></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include <functional></span>
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034 <span class="keyword">namespace </span>tbb {
+<a name="l00035"></a>00035 <span class="keyword">namespace </span>interface5 {
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037 <span class="keyword">using namespace </span>tbb::internal;
+<a name="l00038"></a>00038 
+<a name="l00040"></a>00040 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Compare=std::less<T>, <span class="keyword">typename</span> A=cache_aligned_allocator<T> >
+<a name="l00041"></a><a class="code" href="a00273.html">00041</a> <span class="keyword">class </span><a class="code" href="a00273.html">concurrent_priority_queue</a> {
+<a name="l00042"></a>00042  <span class="keyword">public</span>:
+<a name="l00044"></a><a class="code" href="a00273.html#7c611a6b5b8f94b0e7f2afc97e31efb1">00044</a>     <span class="keyword">typedef</span> T <a class="code" href="a00273.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a>;
+<a name="l00045"></a>00045 
+<a name="l00047"></a><a class="code" href="a00273.html#5804b3c708ef4e50d603f918ef2b9e58">00047</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00273.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a>;
+<a name="l00048"></a>00048 
+<a name="l00050"></a><a class="code" href="a00273.html#a4ded8601a434098605be0dcc4febc60">00050</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00273.html#a4ded8601a434098605be0dcc4febc60">const_reference</a>;
+<a name="l00051"></a>00051 
+<a name="l00053"></a><a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">00053</a>     <span class="keyword">typedef</span> size_t <a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a>;
+<a name="l00054"></a>00054 
+<a name="l00056"></a><a class="code" href="a00273.html#77399bc76b3ecd60e33f7e35a5becd87">00056</a>     <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="a00273.html#77399bc76b3ecd60e33f7e35a5becd87">difference_type</a>;
+<a name="l00057"></a>00057 
+<a name="l00059"></a><a class="code" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">00059</a>     <span class="keyword">typedef</span> A <a class="code" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>;
+<a name="l00060"></a>00060 
+<a name="l00062"></a><a class="code" href="a00273.html#eefa40599afe00ea393897d8f5662e65">00062</a>     <span class="keyword">explicit</span> <a class="code" href="a00273.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<span class="keyword">const</span> <a class="code" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a = <a class="code" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>()) : mark(0), my_size(0), data(a)
+<a name="l00063"></a>00063     {
+<a name="l00064"></a>00064         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
+<a name="l00065"></a>00065     }
+<a name="l00066"></a>00066 
+<a name="l00068"></a><a class="code" href="a00273.html#4555b4a55415a70024c4004b51e9f385">00068</a>     <span class="keyword">explicit</span> <a class="code" href="a00273.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> init_capacity, <span class="keyword">const</span> <a class="code" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a = <a class="code" href="a00 [...]
+<a name="l00069"></a>00069         mark(0), my_size(0), data(a)
+<a name="l00070"></a>00070     {
+<a name="l00071"></a>00071         data.reserve(init_capacity);
+<a name="l00072"></a>00072         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
+<a name="l00073"></a>00073     }
+<a name="l00074"></a>00074 
+<a name="l00076"></a>00076     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
+<a name="l00077"></a><a class="code" href="a00273.html#9147cb4207017c260a0c3929c12cd40f">00077</a>     <a class="code" href="a00273.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a = <a class="code" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>()) :
+<a name="l00078"></a>00078         data(begin, end, a)
+<a name="l00079"></a>00079     {
+<a name="l00080"></a>00080         mark = 0;
+<a name="l00081"></a>00081         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
+<a name="l00082"></a>00082         heapify();
+<a name="l00083"></a>00083         my_size = data.size();
+<a name="l00084"></a>00084     }
+<a name="l00085"></a>00085 
+<a name="l00087"></a>00087 
+<a name="l00088"></a><a class="code" href="a00273.html#509419e320f200456d89dc54a65140b3">00088</a>     <span class="keyword">explicit</span> <a class="code" href="a00273.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<span class="keyword">const</span> <a class="code" href="a00273.html">concurrent_priority_queue</a>& src) : mark(src.mark),
+<a name="l00089"></a>00089         my_size(src.my_size), data(src.data.begin(), src.data.end(), src.data.<a class="code" href="a00273.html#d545d444fb0d16148f9b61fd89f9a337">get_allocator</a>())
+<a name="l00090"></a>00090     {
+<a name="l00091"></a>00091         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
+<a name="l00092"></a>00092         heapify();
+<a name="l00093"></a>00093     }
+<a name="l00094"></a>00094 
+<a name="l00096"></a>00096 
+<a name="l00097"></a><a class="code" href="a00273.html#c8b20e7430c5302936030bef59a562be">00097</a>     <a class="code" href="a00273.html#eefa40599afe00ea393897d8f5662e65">concurrent_priority_queue</a>(<span class="keyword">const</span> <a class="code" href="a00273.html">concurrent_priority_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a>& a) : mark(src.mark),
+<a name="l00098"></a>00098         my_size(src.my_size), data(src.data.begin(), src.data.end(), a)
+<a name="l00099"></a>00099     {
+<a name="l00100"></a>00100         my_aggregator.initialize_handler(my_functor_t(<span class="keyword">this</span>));
+<a name="l00101"></a>00101         heapify();
+<a name="l00102"></a>00102     }
+<a name="l00103"></a>00103 
+<a name="l00105"></a>00105 
+<a name="l00106"></a><a class="code" href="a00273.html#2ab7f7808891027ac0f0f5b3a4be51e9">00106</a>     <a class="code" href="a00273.html">concurrent_priority_queue</a>& <a class="code" href="a00273.html#2ab7f7808891027ac0f0f5b3a4be51e9">operator=</a>(<span class="keyword">const</span> <a class="code" href="a00273.html">concurrent_priority_queue</a>& src) {
+<a name="l00107"></a>00107         <span class="keywordflow">if</span> (<span class="keyword">this</span> != &src) {
+<a name="l00108"></a>00108             std::vector<value_type, allocator_type>(src.<a class="code" href="a00273.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>.begin(), src.<a class="code" href="a00273.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>.end(), src.<a class="code" href="a00273.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>.get_allocator()).<a class="code" href="a00273.html#0ecdc6a04aa259374425d424ca2a6082">swap</a>(data);
+<a name="l00109"></a>00109             mark = src.<a class="code" href="a00273.html#7fcd8d21ea4228b6079a2f2723550af0">mark</a>;
+<a name="l00110"></a>00110             my_size = src.<a class="code" href="a00273.html#9e480a4ce8950a0729a642cdac2bec41">my_size</a>;
+<a name="l00111"></a>00111         }
+<a name="l00112"></a>00112         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00113"></a>00113     }
+<a name="l00114"></a>00114 
+<a name="l00116"></a>00116 
+<a name="l00118"></a><a class="code" href="a00273.html#317c508fa92df218be5d014c26c09bb7">00118</a>     <span class="keywordtype">bool</span> <a class="code" href="a00273.html#317c508fa92df218be5d014c26c09bb7">empty</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00273.html#8b2ae25c61338c6fd59e94fe09822ba5">size</a>()==0; }
+<a name="l00119"></a>00119 
+<a name="l00121"></a>00121 
+<a name="l00123"></a><a class="code" href="a00273.html#8b2ae25c61338c6fd59e94fe09822ba5">00123</a>     <a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> <a class="code" href="a00273.html#8b2ae25c61338c6fd59e94fe09822ba5">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> __TBB_load_with_acquire(my_size); }
+<a name="l00124"></a>00124 
+<a name="l00126"></a>00126 
+<a name="l00127"></a><a class="code" href="a00273.html#d905af7b8f6defff562f5ae9c3275763">00127</a>     <span class="keywordtype">void</span> <a class="code" href="a00273.html#d905af7b8f6defff562f5ae9c3275763">push</a>(<a class="code" href="a00273.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> elem) {
+<a name="l00128"></a>00128         cpq_operation op_data(elem, PUSH_OP);
+<a name="l00129"></a>00129         my_aggregator.execute(&op_data);
+<a name="l00130"></a>00130         <span class="keywordflow">if</span> (op_data.status == FAILED) <span class="comment">// exception thrown</span>
+<a name="l00131"></a>00131             throw_exception(eid_bad_alloc);
+<a name="l00132"></a>00132     }
+<a name="l00133"></a>00133 
+<a name="l00135"></a>00135 
+<a name="l00138"></a><a class="code" href="a00273.html#e036461a29cc40902a2bb79abf9f5146">00138</a>     <span class="keywordtype">bool</span> <a class="code" href="a00273.html#e036461a29cc40902a2bb79abf9f5146">try_pop</a>(<a class="code" href="a00273.html#5804b3c708ef4e50d603f918ef2b9e58">reference</a> elem) {
+<a name="l00139"></a>00139         cpq_operation op_data(POP_OP);
+<a name="l00140"></a>00140         op_data.elem = &elem;
+<a name="l00141"></a>00141         my_aggregator.execute(&op_data);
+<a name="l00142"></a>00142         <span class="keywordflow">return</span> op_data.status==SUCCEEDED;
+<a name="l00143"></a>00143     }
+<a name="l00144"></a>00144 
+<a name="l00146"></a>00146 
+<a name="l00149"></a><a class="code" href="a00273.html#0bdcdf7cde9fd369edca845bec34ca94">00149</a>     <span class="keywordtype">void</span> <a class="code" href="a00273.html#0bdcdf7cde9fd369edca845bec34ca94">clear</a>() {
+<a name="l00150"></a>00150         data.clear();
+<a name="l00151"></a>00151         mark = 0;
+<a name="l00152"></a>00152         my_size = 0;
+<a name="l00153"></a>00153     }
+<a name="l00154"></a>00154 
+<a name="l00156"></a>00156 
+<a name="l00157"></a><a class="code" href="a00273.html#0ecdc6a04aa259374425d424ca2a6082">00157</a>     <span class="keywordtype">void</span> <a class="code" href="a00273.html#0ecdc6a04aa259374425d424ca2a6082">swap</a>(<a class="code" href="a00273.html">concurrent_priority_queue</a>& q) {
+<a name="l00158"></a>00158         data.swap(q.<a class="code" href="a00273.html#384fd94d6b4d4dfce7aa64b531be7545">data</a>);
+<a name="l00159"></a>00159         std::swap(mark, q.<a class="code" href="a00273.html#7fcd8d21ea4228b6079a2f2723550af0">mark</a>);
+<a name="l00160"></a>00160         std::swap(my_size, q.<a class="code" href="a00273.html#9e480a4ce8950a0729a642cdac2bec41">my_size</a>);
+<a name="l00161"></a>00161     }
+<a name="l00162"></a>00162 
+<a name="l00164"></a><a class="code" href="a00273.html#d545d444fb0d16148f9b61fd89f9a337">00164</a>     <a class="code" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">allocator_type</a> <a class="code" href="a00273.html#d545d444fb0d16148f9b61fd89f9a337">get_allocator</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data.get_allocator(); }
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166  <span class="keyword">private</span>:
+<a name="l00167"></a>00167     <span class="keyword">enum</span> operation_type {INVALID_OP, PUSH_OP, POP_OP};
+<a name="l00168"></a>00168     <span class="keyword">enum</span> operation_status { WAIT=0, SUCCEEDED, FAILED };
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170     <span class="keyword">class </span>cpq_operation : <span class="keyword">public</span> aggregated_operation<cpq_operation> {
+<a name="l00171"></a>00171      <span class="keyword">public</span>:
+<a name="l00172"></a>00172         operation_type type;
+<a name="l00173"></a>00173         <span class="keyword">union </span>{
+<a name="l00174"></a>00174             <a class="code" href="a00273.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a> *elem;
+<a name="l00175"></a>00175             <a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> sz;
+<a name="l00176"></a>00176         };
+<a name="l00177"></a>00177         cpq_operation(<a class="code" href="a00273.html#a4ded8601a434098605be0dcc4febc60">const_reference</a> e, operation_type t) :
+<a name="l00178"></a>00178             type(t), elem(const_cast<<a class="code" href="a00273.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a>*>(&e)) {}
+<a name="l00179"></a>00179         cpq_operation(operation_type t) : type(t) {}
+<a name="l00180"></a>00180     };
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182     <span class="keyword">class </span>my_functor_t {
+<a name="l00183"></a>00183         concurrent_priority_queue<T, Compare, A> *cpq;
+<a name="l00184"></a>00184      <span class="keyword">public</span>:
+<a name="l00185"></a>00185         my_functor_t() {}
+<a name="l00186"></a>00186         my_functor_t(concurrent_priority_queue<T, Compare, A> *cpq_) : cpq(cpq_) {}
+<a name="l00187"></a>00187         <span class="keywordtype">void</span> operator()(cpq_operation* op_list) {
+<a name="l00188"></a>00188             cpq->handle_operations(op_list);
+<a name="l00189"></a>00189         }
+<a name="l00190"></a>00190     };
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192     aggregator< my_functor_t, cpq_operation> my_aggregator;
+<a name="l00194"></a>00194     <span class="keywordtype">char</span> padding1[NFS_MaxLineSize - <span class="keyword">sizeof</span>(aggregator< my_functor_t, cpq_operation >)];
+<a name="l00196"></a>00196     <a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> mark;
+<a name="l00197"></a>00197     __TBB_atomic <a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> my_size;
+<a name="l00198"></a>00198     Compare compare;
+<a name="l00200"></a>00200     <span class="keywordtype">char</span> padding2[NFS_MaxLineSize - (2*<span class="keyword">sizeof</span>(<a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a>)) - <span class="keyword">sizeof</span>(Compare)];
+<a name="l00202"></a>00202 
+<a name="l00219"></a>00219     std::vector<value_type, allocator_type> data;
+<a name="l00220"></a>00220 
+<a name="l00221"></a>00221     <span class="keywordtype">void</span> handle_operations(cpq_operation *op_list) {
+<a name="l00222"></a>00222         cpq_operation *tmp, *pop_list=NULL;
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224         __TBB_ASSERT(mark == data.size(), NULL);
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226         <span class="comment">// First pass processes all constant (amortized; reallocation may happen) time pushes and pops.</span>
+<a name="l00227"></a>00227         <span class="keywordflow">while</span> (op_list) {
+<a name="l00228"></a>00228             <span class="comment">// ITT note: &(op_list->status) tag is used to cover accesses to op_list</span>
+<a name="l00229"></a>00229             <span class="comment">// node. This thread is going to handle the operation, and so will acquire it</span>
+<a name="l00230"></a>00230             <span class="comment">// and perform the associated operation w/o triggering a race condition; the</span>
+<a name="l00231"></a>00231             <span class="comment">// thread that created the operation is waiting on the status field, so when</span>
+<a name="l00232"></a>00232             <span class="comment">// this thread is done with the operation, it will perform a</span>
+<a name="l00233"></a>00233             <span class="comment">// store_with_release to give control back to the waiting thread in</span>
+<a name="l00234"></a>00234             <span class="comment">// aggregator::insert_operation.</span>
+<a name="l00235"></a>00235             call_itt_notify(acquired, &(op_list->status));
+<a name="l00236"></a>00236             __TBB_ASSERT(op_list->type != INVALID_OP, NULL);
+<a name="l00237"></a>00237             tmp = op_list;
+<a name="l00238"></a>00238             op_list = itt_hide_load_word(op_list->next);
+<a name="l00239"></a>00239             <span class="keywordflow">if</span> (tmp->type == PUSH_OP) {
+<a name="l00240"></a>00240                 __TBB_TRY {
+<a name="l00241"></a>00241                     data.push_back(*(tmp->elem));
+<a name="l00242"></a>00242                     __TBB_store_with_release(my_size, my_size+1);
+<a name="l00243"></a>00243                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+<a name="l00244"></a>00244                 } __TBB_CATCH(...) {
+<a name="l00245"></a>00245                     itt_store_word_with_release(tmp->status, uintptr_t(FAILED));
+<a name="l00246"></a>00246                 }
+<a name="l00247"></a>00247             }
+<a name="l00248"></a>00248             <span class="keywordflow">else</span> { <span class="comment">// tmp->type == POP_OP</span>
+<a name="l00249"></a>00249                 __TBB_ASSERT(tmp->type == POP_OP, NULL);
+<a name="l00250"></a>00250                 <span class="keywordflow">if</span> (mark < data.size() &&
+<a name="l00251"></a>00251                     compare(data[0], data[data.size()-1])) {
+<a name="l00252"></a>00252                     <span class="comment">// there are newly pushed elems and the last one</span>
+<a name="l00253"></a>00253                     <span class="comment">// is higher than top</span>
+<a name="l00254"></a>00254                     *(tmp->elem) = data[data.size()-1]; <span class="comment">// copy the data</span>
+<a name="l00255"></a>00255                     __TBB_store_with_release(my_size, my_size-1);
+<a name="l00256"></a>00256                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+<a name="l00257"></a>00257                     data.pop_back();
+<a name="l00258"></a>00258                     __TBB_ASSERT(mark<=data.size(), NULL);
+<a name="l00259"></a>00259                 }
+<a name="l00260"></a>00260                 <span class="keywordflow">else</span> { <span class="comment">// no convenient item to pop; postpone</span>
+<a name="l00261"></a>00261                     itt_hide_store_word(tmp->next, pop_list);
+<a name="l00262"></a>00262                     pop_list = tmp;
+<a name="l00263"></a>00263                 }
+<a name="l00264"></a>00264             }
+<a name="l00265"></a>00265         }
+<a name="l00266"></a>00266 
+<a name="l00267"></a>00267         <span class="comment">// second pass processes pop operations</span>
+<a name="l00268"></a>00268         <span class="keywordflow">while</span> (pop_list) {
+<a name="l00269"></a>00269             tmp = pop_list;
+<a name="l00270"></a>00270             pop_list = itt_hide_load_word(pop_list->next);
+<a name="l00271"></a>00271             __TBB_ASSERT(tmp->type == POP_OP, NULL);
+<a name="l00272"></a>00272             <span class="keywordflow">if</span> (data.empty()) {
+<a name="l00273"></a>00273                 itt_store_word_with_release(tmp->status, uintptr_t(FAILED));
+<a name="l00274"></a>00274             }
+<a name="l00275"></a>00275             <span class="keywordflow">else</span> {
+<a name="l00276"></a>00276                 __TBB_ASSERT(mark<=data.size(), NULL);
+<a name="l00277"></a>00277                 <span class="keywordflow">if</span> (mark < data.size() &&
+<a name="l00278"></a>00278                     compare(data[0], data[data.size()-1])) {
+<a name="l00279"></a>00279                     <span class="comment">// there are newly pushed elems and the last one is</span>
+<a name="l00280"></a>00280                     <span class="comment">// higher than top</span>
+<a name="l00281"></a>00281                     *(tmp->elem) = data[data.size()-1]; <span class="comment">// copy the data</span>
+<a name="l00282"></a>00282                     __TBB_store_with_release(my_size, my_size-1);
+<a name="l00283"></a>00283                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+<a name="l00284"></a>00284                     data.pop_back();
+<a name="l00285"></a>00285                 }
+<a name="l00286"></a>00286                 <span class="keywordflow">else</span> { <span class="comment">// extract top and push last element down heap</span>
+<a name="l00287"></a>00287                     *(tmp->elem) = data[0]; <span class="comment">// copy the data</span>
+<a name="l00288"></a>00288                     __TBB_store_with_release(my_size, my_size-1);
+<a name="l00289"></a>00289                     itt_store_word_with_release(tmp->status, uintptr_t(SUCCEEDED));
+<a name="l00290"></a>00290                     reheap();
+<a name="l00291"></a>00291                 }
+<a name="l00292"></a>00292             }
+<a name="l00293"></a>00293         }
+<a name="l00294"></a>00294 
+<a name="l00295"></a>00295         <span class="comment">// heapify any leftover pushed elements before doing the next</span>
+<a name="l00296"></a>00296         <span class="comment">// batch of operations</span>
+<a name="l00297"></a>00297         <span class="keywordflow">if</span> (mark<data.size()) heapify();
+<a name="l00298"></a>00298         __TBB_ASSERT(mark == data.size(), NULL);
+<a name="l00299"></a>00299     }
+<a name="l00300"></a>00300 
+<a name="l00302"></a>00302     <span class="keywordtype">void</span> heapify() {
+<a name="l00303"></a>00303         <span class="keywordflow">if</span> (!mark && data.size()>0) mark = 1;
+<a name="l00304"></a>00304         <span class="keywordflow">for</span> (; mark<data.size(); ++mark) {
+<a name="l00305"></a>00305             <span class="comment">// for each unheapified element under size</span>
+<a name="l00306"></a>00306             <a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> cur_pos = mark;
+<a name="l00307"></a>00307             <a class="code" href="a00273.html#7c611a6b5b8f94b0e7f2afc97e31efb1">value_type</a> to_place = data[mark];
+<a name="l00308"></a>00308             <span class="keywordflow">do</span> { <span class="comment">// push to_place up the heap</span>
+<a name="l00309"></a>00309                 <a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> parent = (cur_pos-1)>>1;
+<a name="l00310"></a>00310                 <span class="keywordflow">if</span> (!compare(data[parent], to_place)) <span class="keywordflow">break</span>;
+<a name="l00311"></a>00311                 data[cur_pos] = data[parent];
+<a name="l00312"></a>00312                 cur_pos = parent;
+<a name="l00313"></a>00313             } <span class="keywordflow">while</span>( cur_pos );
+<a name="l00314"></a>00314             data[cur_pos] = to_place;
+<a name="l00315"></a>00315         }
+<a name="l00316"></a>00316     }
+<a name="l00317"></a>00317 
+<a name="l00319"></a>00319 
+<a name="l00320"></a>00320     <span class="keywordtype">void</span> reheap() {
+<a name="l00321"></a>00321         <a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> cur_pos=0, child=1;
+<a name="l00322"></a>00322 
+<a name="l00323"></a>00323         <span class="keywordflow">while</span> (child < mark) {
+<a name="l00324"></a>00324             <a class="code" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">size_type</a> target = child;
+<a name="l00325"></a>00325             <span class="keywordflow">if</span> (child+1 < mark && compare(data[child], data[child+1]))
+<a name="l00326"></a>00326                 ++target;
+<a name="l00327"></a>00327             <span class="comment">// target now has the higher priority child</span>
+<a name="l00328"></a>00328             <span class="keywordflow">if</span> (compare(data[target], data[data.size()-1])) <span class="keywordflow">break</span>;
+<a name="l00329"></a>00329             data[cur_pos] = data[target];
+<a name="l00330"></a>00330             cur_pos = target;
+<a name="l00331"></a>00331             child = (cur_pos<<1)+1;
+<a name="l00332"></a>00332         }
+<a name="l00333"></a>00333         data[cur_pos] = data[data.size()-1];
+<a name="l00334"></a>00334         data.pop_back();
+<a name="l00335"></a>00335         <span class="keywordflow">if</span> (mark > data.size()) mark = data.size();
+<a name="l00336"></a>00336     }
+<a name="l00337"></a>00337 };
+<a name="l00338"></a>00338 
+<a name="l00339"></a>00339 } <span class="comment">// namespace interface5</span>
+<a name="l00340"></a>00340 
+<a name="l00341"></a>00341 <span class="keyword">using</span> interface5::concurrent_priority_queue;
+<a name="l00342"></a>00342 
+<a name="l00343"></a>00343 } <span class="comment">// namespace tbb</span>
+<a name="l00344"></a>00344 
+<a name="l00345"></a>00345 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_priority_queue_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00476.html b/doc/html/a00476.html
new file mode 100644
index 0000000..1b9d6f5
--- /dev/null
+++ b/doc/html/a00476.html
@@ -0,0 +1,371 @@
+<!DOCTYPE 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-2012 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 "internal/_concurrent_queue_impl.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="a00274.html">00035</a> <span class="keyword">class </span><a class="code" href="a00274.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">/*override*/</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="a00274.html#682c3978d5cb0620000994f11c44a476">00057</a>     <span class="keyword">typedef</span> T <a class="code" href="a00274.html#682c3978d5cb0620000994f11c44a476">value_type</a>;
+<a name="l00058"></a>00058 
+<a name="l00060"></a><a class="code" href="a00274.html#a8d725c50a9834bb7af5b67c0aff92b8">00060</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00274.html#a8d725c50a9834bb7af5b67c0aff92b8">reference</a>;
+<a name="l00061"></a>00061 
+<a name="l00063"></a><a class="code" href="a00274.html#4d48e7ff93f81636bca2c74f7da34750">00063</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00274.html#4d48e7ff93f81636bca2c74f7da34750">const_reference</a>;
+<a name="l00064"></a>00064 
+<a name="l00066"></a><a class="code" href="a00274.html#8fc30e93f8342a1960357f71e4fe8a2b">00066</a>     <span class="keyword">typedef</span> size_t <a class="code" href="a00274.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a>;
+<a name="l00067"></a>00067 
+<a name="l00069"></a><a class="code" href="a00274.html#068576d16c7e4e05d52f9db7a45b5b65">00069</a>     <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="a00274.html#068576d16c7e4e05d52f9db7a45b5b65">difference_type</a>;
+<a name="l00070"></a>00070 
+<a name="l00072"></a><a class="code" href="a00274.html#5a3956341728eaa558d8827063718cac">00072</a>     <span class="keyword">typedef</span> A <a class="code" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a>;
+<a name="l00073"></a>00073 
+<a name="l00075"></a><a class="code" href="a00274.html#7c48a05a94a1f4f98fdfadfbef98ecf6">00075</a>     <span class="keyword">explicit</span> <a class="code" href="a00274.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>(<span class="keyword">const</span> <a class="code" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a>()) : 
+<a name="l00076"></a>00076         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="a00274.html#25209656c84f2f9b030e2f9162713341">00082</a>     <a class="code" href="a00274.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a>()) :
+<a name="l00083"></a>00083         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             this->internal_push(&*begin);
+<a name="l00087"></a>00087     }
+<a name="l00088"></a>00088     
+<a name="l00090"></a><a class="code" href="a00274.html#8a6b98ea11a867db8ac868f0113ca429">00090</a>     <a class="code" href="a00274.html#7c48a05a94a1f4f98fdfadfbef98ecf6">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00274.html">concurrent_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a>& a = <a class="code" href="a00274.html#5a3956341728eaa558d8827063718cac" [...]
+<a name="l00091"></a>00091         internal::concurrent_queue_base_v3<T>(), my_allocator( a )
+<a name="l00092"></a>00092     {
+<a name="l00093"></a>00093         this->assign( src );
+<a name="l00094"></a>00094     }
+<a name="l00095"></a>00095     
+<a name="l00097"></a>00097     <a class="code" href="a00274.html#830b33753d6b149c366344e29b2edd8c">~concurrent_queue</a>();
+<a name="l00098"></a>00098 
+<a name="l00100"></a><a class="code" href="a00274.html#73c47563ffcc4c2f6452f25a04ebe2e2">00100</a>     <span class="keywordtype">void</span> <a class="code" href="a00274.html#73c47563ffcc4c2f6452f25a04ebe2e2">push</a>( <span class="keyword">const</span> T& source ) {
+<a name="l00101"></a>00101         this->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="a00274.html#ae31ca0db34ef96ef1e74aa0d28c95f8">00107</a>     <span class="keywordtype">bool</span> <a class="code" href="a00274.html#ae31ca0db34ef96ef1e74aa0d28c95f8">try_pop</a>( T& result ) {
+<a name="l00108"></a>00108         <span class="keywordflow">return</span> this->internal_try_pop( &result );
+<a name="l00109"></a>00109     }
+<a name="l00110"></a>00110 
+<a name="l00112"></a><a class="code" href="a00274.html#eaa35a5274606779802e9a669a706260">00112</a>     <a class="code" href="a00274.html#8fc30e93f8342a1960357f71e4fe8a2b">size_type</a> <a class="code" href="a00274.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="a00274.html#f3f6fce0cfa2d581d6f3b47e0613ad64">00115</a>     <span class="keywordtype">bool</span> <a class="code" href="a00274.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="a00274.html#c32e8e84c0524155133b4aae32d2a827">clear</a>() ;
+<a name="l00119"></a>00119 
+<a name="l00121"></a><a class="code" href="a00274.html#f034f70caef445fe8abc9113ec926a8d">00121</a>     <a class="code" href="a00274.html#5a3956341728eaa558d8827063718cac">allocator_type</a> <a class="code" href="a00274.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="a00274.html#830b33753d6b149c366344e29b2edd8c">00136</a> <a class="code" href="a00274.html">concurrent_queue<T,A>::~concurrent_queue</a>() {
+<a name="l00137"></a>00137     <a class="code" href="a00274.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="a00274.html#c32e8e84c0524155133b4aae32d2a827">00142</a> <span class="keywordtype">void</span> <a class="code" href="a00274.html">concurrent_queue<T,A>::clear</a>() {
+<a name="l00143"></a>00143     <span class="keywordflow">while</span>( !<a class="code" href="a00274.html#f3f6fce0cfa2d581d6f3b47e0613ad64">empty</a>() ) {
+<a name="l00144"></a>00144         T value;
+<a name="l00145"></a>00145         this->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="a00268.html">00158</a> <span class="keyword">class </span><a class="code" href="a00268.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="l00165"></a>00165     <span class="keyword">typedef</span> <span class="keyword">typename</span> concurrent_queue_base_v3::padded_page<T> padded_page;
+<a name="l00166"></a>00166  
+<a name="l00168"></a>00168     <span class="keyword">class </span>destroyer: internal::no_copy {
+<a name="l00169"></a>00169         T& my_value;
+<a name="l00170"></a>00170     <span class="keyword">public</span>:
+<a name="l00171"></a>00171         destroyer( T& value ) : my_value(value) {}
+<a name="l00172"></a>00172         ~destroyer() {my_value.~T();}          
+<a name="l00173"></a>00173     };
+<a name="l00174"></a>00174 
+<a name="l00175"></a>00175     T& get_ref( page& p, size_t index ) {
+<a name="l00176"></a>00176         __TBB_ASSERT( index<items_per_page, NULL );
+<a name="l00177"></a>00177         <span class="keywordflow">return</span> (&static_cast<padded_page*>(static_cast<void*>(&p))->last)[index];
+<a name="l00178"></a>00178     }
+<a name="l00179"></a>00179 
+<a name="l00180"></a>00180     <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="l00181"></a>00181         <span class="keyword">new</span>( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
+<a name="l00182"></a>00182     }
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184     <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="l00185"></a>00185         <span class="keyword">new</span>( &get_ref(dst,dindex) ) T( get_ref( const_cast<page&>(src), sindex ) );
+<a name="l00186"></a>00186     }
+<a name="l00187"></a>00187 
+<a name="l00188"></a>00188     <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="l00189"></a>00189         T& from = get_ref(src,index);
+<a name="l00190"></a>00190         destroyer d(from);
+<a name="l00191"></a>00191         *static_cast<T*>(dst) = from;
+<a name="l00192"></a>00192     }
+<a name="l00193"></a>00193 
+<a name="l00194"></a>00194     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> page *allocate_page() {
+<a name="l00195"></a>00195         size_t n = <span class="keyword">sizeof</span>(padded_page) + (items_per_page-1)*<span class="keyword">sizeof</span>(T);
+<a name="l00196"></a>00196         page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));
+<a name="l00197"></a>00197         <span class="keywordflow">if</span>( !p )
+<a name="l00198"></a>00198             internal::throw_exception(internal::eid_bad_alloc); 
+<a name="l00199"></a>00199         <span class="keywordflow">return</span> p;
+<a name="l00200"></a>00200     }
+<a name="l00201"></a>00201 
+<a name="l00202"></a>00202     <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) {
+<a name="l00203"></a>00203         size_t n = <span class="keyword">sizeof</span>(padded_page) + (items_per_page-1)*<span class="keyword">sizeof</span>(T);
+<a name="l00204"></a>00204         my_allocator.deallocate( reinterpret_cast<char*>(p), n );
+<a name="l00205"></a>00205     }
+<a name="l00206"></a>00206 
+<a name="l00207"></a>00207 <span class="keyword">public</span>:
+<a name="l00209"></a><a class="code" href="a00268.html#98245517a931e5893f6601e66c51fc75">00209</a>     <span class="keyword">typedef</span> T <a class="code" href="a00268.html#98245517a931e5893f6601e66c51fc75">value_type</a>;
+<a name="l00210"></a>00210 
+<a name="l00212"></a><a class="code" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">00212</a>     <span class="keyword">typedef</span> A <a class="code" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>;
+<a name="l00213"></a>00213 
+<a name="l00215"></a><a class="code" href="a00268.html#dcd44ca6a88c0dc7a847a47a10811f0c">00215</a>     <span class="keyword">typedef</span> T& <a class="code" href="a00268.html#dcd44ca6a88c0dc7a847a47a10811f0c">reference</a>;
+<a name="l00216"></a>00216 
+<a name="l00218"></a><a class="code" href="a00268.html#796713d0b9ba93a4721cbe13e4474068">00218</a>     <span class="keyword">typedef</span> <span class="keyword">const</span> T& <a class="code" href="a00268.html#796713d0b9ba93a4721cbe13e4474068">const_reference</a>;
+<a name="l00219"></a>00219 
+<a name="l00221"></a>00221 
+<a name="l00223"></a><a class="code" href="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">00223</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">size_type</a>;
+<a name="l00224"></a>00224 
+<a name="l00226"></a><a class="code" href="a00268.html#4b45c91297e69515d83d5eef85ae1f49">00226</a>     <span class="keyword">typedef</span> std::ptrdiff_t <a class="code" href="a00268.html#4b45c91297e69515d83d5eef85ae1f49">difference_type</a>;
+<a name="l00227"></a>00227 
+<a name="l00229"></a><a class="code" href="a00268.html#e3525226732963ff0f13e89d8e6dab5b">00229</a>     <span class="keyword">explicit</span> <a class="code" href="a00268.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>(<span class="keyword">const</span> <a class="code" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>()) : 
+<a name="l00230"></a>00230         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+<a name="l00231"></a>00231     {
+<a name="l00232"></a>00232     }
+<a name="l00233"></a>00233 
+<a name="l00235"></a><a class="code" href="a00268.html#7b7fb414d2eaa8a7f5d68fc4cd63ac50">00235</a>     <a class="code" href="a00268.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( <span class="keyword">const</span> <a class="code" href="a00268.html">concurrent_bounded_queue</a>& src, <span class="keyword">const</span> <a class="code" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00268.html#2e2726fccf6d975dc [...]
+<a name="l00236"></a>00236         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+<a name="l00237"></a>00237     {
+<a name="l00238"></a>00238         assign( src );
+<a name="l00239"></a>00239     }
+<a name="l00240"></a>00240 
+<a name="l00242"></a>00242     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
+<a name="l00243"></a><a class="code" href="a00268.html#a5e04dcd7db9fd9b583b4e7df832246a">00243</a>     <a class="code" href="a00268.html#e3525226732963ff0f13e89d8e6dab5b">concurrent_bounded_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> <a class="code" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>& a = <a class="code" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">allocator_type</a>()) :
+<a name="l00244"></a>00244         concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+<a name="l00245"></a>00245     {
+<a name="l00246"></a>00246         <span class="keywordflow">for</span>( ; begin != end; ++begin )
+<a name="l00247"></a>00247             internal_push_if_not_full(&*begin);
+<a name="l00248"></a>00248     }
+<a name="l00249"></a>00249 
+<a name="l00251"></a>00251     <a class="code" href="a00268.html#acaf5b510dc0dfc7780b8c956cf773cf">~concurrent_bounded_queue</a>();
+<a name="l00252"></a>00252 
+<a name="l00254"></a><a class="code" href="a00268.html#ceb08c743b11ba88c878e73fff8af20b">00254</a>     <span class="keywordtype">void</span> <a class="code" href="a00268.html#ceb08c743b11ba88c878e73fff8af20b">push</a>( <span class="keyword">const</span> T& source ) {
+<a name="l00255"></a>00255         internal_push( &source );
+<a name="l00256"></a>00256     }
+<a name="l00257"></a>00257 
+<a name="l00259"></a>00259 
+<a name="l00260"></a><a class="code" href="a00268.html#41f4c6bd7a82ab070e840bbf81b0b123">00260</a>     <span class="keywordtype">void</span> <a class="code" href="a00268.html#41f4c6bd7a82ab070e840bbf81b0b123">pop</a>( T& destination ) {
+<a name="l00261"></a>00261         internal_pop( &destination );
+<a name="l00262"></a>00262     }
+<a name="l00263"></a>00263 
+<a name="l00264"></a>00264 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
+<a name="l00266"></a><a class="code" href="a00268.html#86c77a6c1317239405968f5afc7b10d3">00266</a> <span class="preprocessor">    void abort() {</span>
+<a name="l00267"></a>00267 <span class="preprocessor"></span>        internal_abort();
+<a name="l00268"></a>00268     }
+<a name="l00269"></a>00269 <span class="preprocessor">#endif</span>
+<a name="l00270"></a>00270 <span class="preprocessor"></span>
+<a name="l00272"></a>00272 
+<a name="l00274"></a><a class="code" href="a00268.html#2bd6232531279fb3ccbd296bea23066b">00274</a>     <span class="keywordtype">bool</span> try_push( <span class="keyword">const</span> T& source ) {
+<a name="l00275"></a>00275         <span class="keywordflow">return</span> internal_push_if_not_full( &source );
+<a name="l00276"></a>00276     }
+<a name="l00277"></a>00277 
+<a name="l00279"></a>00279 
+<a name="l00281"></a><a class="code" href="a00268.html#0ca487019bbb00a196442aff78a1e4f7">00281</a>     <span class="keywordtype">bool</span> try_pop( T& destination ) {
+<a name="l00282"></a>00282         <span class="keywordflow">return</span> internal_pop_if_present( &destination );
+<a name="l00283"></a>00283     }
+<a name="l00284"></a>00284 
+<a name="l00286"></a>00286 
+<a name="l00289"></a><a class="code" href="a00268.html#7dc14d1a579a4cccda9f857585e1768d">00289</a>     size_type size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_size();}
+<a name="l00290"></a>00290 
+<a name="l00292"></a><a class="code" href="a00268.html#f64924f2ee9225c368a270fc3c394db9">00292</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_empty();}
+<a name="l00293"></a>00293 
+<a name="l00295"></a><a class="code" href="a00268.html#b2888b3e4e837d7e03f2c731963a402b">00295</a>     size_type capacity()<span class="keyword"> const </span>{
+<a name="l00296"></a>00296         <span class="keywordflow">return</span> my_capacity;
+<a name="l00297"></a>00297     }
+<a name="l00298"></a>00298 
+<a name="l00300"></a>00300 
+<a name="l00302"></a><a class="code" href="a00268.html#f3c6c934f85fd02aedbc83a16943193b">00302</a>     <span class="keywordtype">void</span> set_capacity( size_type new_capacity ) {
+<a name="l00303"></a>00303         internal_set_capacity( new_capacity, <span class="keyword">sizeof</span>(T) );
+<a name="l00304"></a>00304     }
+<a name="l00305"></a>00305 
+<a name="l00307"></a><a class="code" href="a00268.html#415eb87e53b1c6a266de06ecbc490d16">00307</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+<a name="l00308"></a>00308 
+<a name="l00310"></a>00310     <span class="keywordtype">void</span> clear() ;
+<a name="l00311"></a>00311 
+<a name="l00312"></a>00312     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_bounded_queue,T> iterator;
+<a name="l00313"></a>00313     <span class="keyword">typedef</span> internal::concurrent_queue_iterator<concurrent_bounded_queue,const T> const_iterator;
+<a name="l00314"></a>00314 
+<a name="l00315"></a>00315     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00316"></a>00316     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
+<a name="l00317"></a>00317     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00318"></a>00318     iterator unsafe_begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>);}
+<a name="l00319"></a>00319     iterator unsafe_end() {<span class="keywordflow">return</span> iterator();}
+<a name="l00320"></a>00320     const_iterator unsafe_begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>);}
+<a name="l00321"></a>00321     const_iterator unsafe_end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator();}
+<a name="l00322"></a>00322 
+<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> T, <span class="keyword">class</span> A>
+<a name="l00326"></a><a class="code" href="a00268.html#acaf5b510dc0dfc7780b8c956cf773cf">00326</a> <a class="code" href="a00268.html">concurrent_bounded_queue<T,A>::~concurrent_bounded_queue</a>() {
+<a name="l00327"></a>00327     <a class="code" href="a00268.html#90b31e2954c6e4596c7900435a5f4bc1">clear</a>();
+<a name="l00328"></a>00328     internal_finish_clear();
+<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> T, <span class="keyword">class</span> A>
+<a name="l00332"></a><a class="code" href="a00268.html#90b31e2954c6e4596c7900435a5f4bc1">00332</a> <span class="keywordtype">void</span> <a class="code" href="a00268.html">concurrent_bounded_queue<T,A>::clear</a>() {
+<a name="l00333"></a>00333     <span class="keywordflow">while</span>( !<a class="code" href="a00268.html#f64924f2ee9225c368a270fc3c394db9">empty</a>() ) {
+<a name="l00334"></a>00334         T value;
+<a name="l00335"></a>00335         internal_pop_if_present(&value);
+<a name="l00336"></a>00336     }
+<a name="l00337"></a>00337 }
+<a name="l00338"></a>00338 
+<a name="l00339"></a>00339 <span class="keyword">namespace </span>deprecated {
+<a name="l00340"></a>00340 
+<a name="l00342"></a>00342 
+<a name="l00347"></a>00347 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> > 
+<a name="l00348"></a><a class="code" href="a00275.html">00348</a> <span class="keyword">class </span><a class="code" href="a00275.html">concurrent_queue</a>: <span class="keyword">public</span> <a class="code" href="a00268.html">concurrent_bounded_queue</a><T,A> {
+<a name="l00349"></a>00349 <span class="preprocessor">#if !__TBB_TEMPLATE_FRIENDS_BROKEN</span>
+<a name="l00350"></a>00350 <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="l00351"></a>00351 <span class="preprocessor">#endif </span>
+<a name="l00352"></a>00352 <span class="preprocessor"></span>
+<a name="l00353"></a>00353 <span class="keyword">public</span>:
+<a name="l00355"></a><a class="code" href="a00275.html#aaf19bd7337b72f3131ece60f7315ef7">00355</a>     <span class="keyword">explicit</span> <a class="code" href="a00275.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>(<span class="keyword">const</span> A& a = A()) : 
+<a name="l00356"></a>00356         <a class="code" href="a00268.html">concurrent_bounded_queue</a><T,A>( a )
+<a name="l00357"></a>00357     {
+<a name="l00358"></a>00358     }
+<a name="l00359"></a>00359 
+<a name="l00361"></a><a class="code" href="a00275.html#fc092b9082f233482f3513fc3bb670f7">00361</a>     <a class="code" href="a00275.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00275.html">concurrent_queue</a>& src, <span class="keyword">const</span> A& a = A()) : 
+<a name="l00362"></a>00362         <a class="code" href="a00268.html">concurrent_bounded_queue</a><T,A>( src, a )
+<a name="l00363"></a>00363     {
+<a name="l00364"></a>00364     }
+<a name="l00365"></a>00365 
+<a name="l00367"></a>00367     <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
+<a name="l00368"></a><a class="code" href="a00275.html#9102b897776bd2d9e908e6604ff16b5f">00368</a>     <a class="code" href="a00275.html#aaf19bd7337b72f3131ece60f7315ef7">concurrent_queue</a>( InputIterator b <span class="comment">/*begin*/</span>, InputIterator e <span class="comment">/*end*/</span>, <span class="keyword">const</span> A& a = A()) :
+<a name="l00369"></a>00369         <a class="code" href="a00268.html">concurrent_bounded_queue</a><T,A>( b, e, a )
+<a name="l00370"></a>00370     {
+<a name="l00371"></a>00371     }
+<a name="l00372"></a>00372 
+<a name="l00374"></a>00374 
+<a name="l00376"></a><a class="code" href="a00275.html#7c45561bafe71107d09b2bc1b8f4e681">00376</a>     <span class="keywordtype">bool</span> <a class="code" href="a00275.html#7c45561bafe71107d09b2bc1b8f4e681">push_if_not_full</a>( <span class="keyword">const</span> T& source ) {
+<a name="l00377"></a>00377         <span class="keywordflow">return</span> this-><a class="code" href="a00268.html#2bd6232531279fb3ccbd296bea23066b">try_push</a>( source );
+<a name="l00378"></a>00378     }
+<a name="l00379"></a>00379 
+<a name="l00381"></a>00381 
+<a name="l00385"></a><a class="code" href="a00275.html#48da3536245318af6cb5fd58bac78039">00385</a>     <span class="keywordtype">bool</span> <a class="code" href="a00275.html#48da3536245318af6cb5fd58bac78039">pop_if_present</a>( T& destination ) {
+<a name="l00386"></a>00386         <span class="keywordflow">return</span> this-><a class="code" href="a00268.html#0ca487019bbb00a196442aff78a1e4f7">try_pop</a>( destination );
+<a name="l00387"></a>00387     }
+<a name="l00388"></a>00388 
+<a name="l00389"></a>00389     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00268.html">concurrent_bounded_queue<T,A>::iterator</a> iterator;
+<a name="l00390"></a>00390     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00268.html">concurrent_bounded_queue<T,A>::const_iterator</a> const_iterator;
+<a name="l00391"></a>00391     <span class="comment">//</span>
+<a name="l00392"></a>00392     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00393"></a>00393     <span class="comment">// The iterators are intended only for debugging.  They are slow and not thread safe.</span>
+<a name="l00394"></a>00394     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00395"></a>00395     iterator begin() {<span class="keywordflow">return</span> this->unsafe_begin();}
+<a name="l00396"></a>00396     iterator end() {<span class="keywordflow">return</span> this->unsafe_end();}
+<a name="l00397"></a>00397     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->unsafe_begin();}
+<a name="l00398"></a>00398     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this->unsafe_end();}
+<a name="l00399"></a>00399 }; 
+<a name="l00400"></a>00400 
+<a name="l00401"></a>00401 }
+<a name="l00402"></a>00402     
+<a name="l00403"></a>00403 
+<a name="l00404"></a>00404 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00405"></a>00405 <span class="preprocessor"></span><span class="keyword">using</span> deprecated::concurrent_queue;
+<a name="l00406"></a>00406 <span class="preprocessor">#else</span>
+<a name="l00407"></a>00407 <span class="preprocessor"></span><span class="keyword">using</span> strict_ppl::concurrent_queue;    
+<a name="l00408"></a>00408 <span class="preprocessor">#endif</span>
+<a name="l00409"></a>00409 <span class="preprocessor"></span>
+<a name="l00410"></a>00410 } <span class="comment">// namespace tbb</span>
+<a name="l00411"></a>00411 
+<a name="l00412"></a>00412 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_queue_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00480.html b/doc/html/a00480.html
index 9b4b4cc..6fb956c 100644
--- a/doc/html/a00480.html
+++ b/doc/html/a00480.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>memory_pool.h Source File</title>
+<title>concurrent_unordered_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>
@@ -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>memory_pool.h</h1><a href="a00344.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-2011 Intel Corporation.  All Rights Reserved.</span>
+<h1>concurrent_unordered_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-2012 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,218 +39,209 @@
 <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_memory_pool_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_memory_pool_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#if !TBB_PREVIEW_MEMORY_POOL</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#error Set TBB_PREVIEW_MEMORY_POOL to include memory_pool.h</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="l00029"></a>00029 <span class="preprocessor">#include "<a class="code" href="a00363.html">scalable_allocator.h</a>"</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "tbb_machine.h"</span> <span class="comment">// TODO: Itanium requires linkage with TBB library</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <new></span> <span class="comment">// std::bad_alloc</span>
+<a name="l00021"></a>00021 <span class="comment">/* Container implementations in this header are based on PPL implementations</span>
+<a name="l00022"></a>00022 <span class="comment">   provided by Microsoft. */</span>
+<a name="l00023"></a>00023 
+<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __TBB_concurrent_unordered_map_H</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_unordered_map_H</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "internal/_concurrent_unordered_impl.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="l00031"></a>00031 
+<a name="l00032"></a>00032 <span class="keyword">namespace </span>interface5 {
 <a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define __TBBMALLOC_ASSERT 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 __TBBMALLOC_ASSERT(a,b) ((void)0)</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><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 <span class="keyword">namespace </span>interface6 {
-<a name="l00043"></a>00043 <span class="keyword">namespace </span>internal {
+<a name="l00034"></a>00034 <span class="comment">// Template class for hash map traits</span>
+<a name="l00035"></a>00035 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> Hash_compare, <span class="keyword">typename</span> Allocator, <span class="keywordtype">bool</span> Allow_multimapping>
+<a name="l00036"></a>00036 <span class="keyword">class </span>concurrent_unordered_map_traits
+<a name="l00037"></a>00037 {
+<a name="l00038"></a>00038 <span class="keyword">protected</span>:
+<a name="l00039"></a>00039     <span class="keyword">typedef</span> std::pair<const Key, T> value_type;
+<a name="l00040"></a>00040     <span class="keyword">typedef</span> Key key_type;
+<a name="l00041"></a>00041     <span class="keyword">typedef</span> Hash_compare hash_compare;
+<a name="l00042"></a>00042     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<value_type>::other allocator_type;
+<a name="l00043"></a>00043     <span class="keyword">enum</span> { allow_multimapping = Allow_multimapping };
 <a name="l00044"></a>00044 
-<a name="l00046"></a>00046 <span class="keyword">class </span>pool_base : tbb::internal::no_copy {
-<a name="l00047"></a>00047     <span class="comment">// Pool interface is separate from standard allocator classes because it has</span>
-<a name="l00048"></a>00048     <span class="comment">// to maintain internal state, no copy or assignment. Move and swap are possible.</span>
-<a name="l00049"></a>00049 <span class="keyword">public</span>:
-<a name="l00051"></a>00051     <span class="keywordtype">void</span> recycle() { rml::pool_reset(my_pool); }
-<a name="l00052"></a>00052 
-<a name="l00054"></a>00054     <span class="keywordtype">void</span> *malloc(size_t size) { <span class="keywordflow">return</span> rml::pool_malloc(my_pool, size); }
-<a name="l00055"></a>00055 
-<a name="l00057"></a>00057     <span class="keywordtype">void</span> free(<span class="keywordtype">void</span>* ptr) { rml::pool_free(my_pool, ptr); }
-<a name="l00058"></a>00058 
-<a name="l00060"></a>00060     <span class="comment">// Enables some low-level optimization possibilities</span>
-<a name="l00061"></a>00061     <span class="keywordtype">void</span> *realloc(<span class="keywordtype">void</span>* ptr, size_t size) {
-<a name="l00062"></a>00062         <span class="keywordflow">return</span> rml::pool_realloc(my_pool, ptr, size);
-<a name="l00063"></a>00063     }
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="keyword">protected</span>:
-<a name="l00067"></a>00067     <span class="keywordtype">void</span> destroy() { rml::pool_destroy(my_pool); }
+<a name="l00045"></a>00045     concurrent_unordered_map_traits() : my_hash_compare() {}
+<a name="l00046"></a>00046     concurrent_unordered_map_traits(<span class="keyword">const</span> hash_compare& hc) : my_hash_compare(hc) {}
+<a name="l00047"></a>00047 
+<a name="l00048"></a>00048     <span class="keyword">class </span>value_compare : <span class="keyword">public</span> std::binary_function<value_type, value_type, bool>
+<a name="l00049"></a>00049     {
+<a name="l00050"></a>00050         <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_unordered_map_traits<Key, T, Hash_compare, Allocator, Allow_multimapping>;
+<a name="l00051"></a>00051 
+<a name="l00052"></a>00052     <span class="keyword">public</span>:
+<a name="l00053"></a>00053         <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> value_type& left, <span class="keyword">const</span> value_type& right)<span class="keyword"> const</span>
+<a name="l00054"></a>00054 <span class="keyword">        </span>{
+<a name="l00055"></a>00055             <span class="keywordflow">return</span> (my_hash_compare(left.first, right.first));
+<a name="l00056"></a>00056         }
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058         value_compare(<span class="keyword">const</span> hash_compare& comparator) : my_hash_compare(comparator) {}
+<a name="l00059"></a>00059 
+<a name="l00060"></a>00060     <span class="keyword">protected</span>:
+<a name="l00061"></a>00061         hash_compare my_hash_compare;    <span class="comment">// the comparator predicate for keys</span>
+<a name="l00062"></a>00062     };
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064     <span class="keyword">template</span><<span class="keyword">class</span> Type1, <span class="keyword">class</span> Type2>
+<a name="l00065"></a>00065     <span class="keyword">static</span> <span class="keyword">const</span> Key& get_key(<span class="keyword">const</span> std::pair<Type1, Type2>& value) {
+<a name="l00066"></a>00066         <span class="keywordflow">return</span> (value.first);
+<a name="l00067"></a>00067     }
 <a name="l00068"></a>00068 
-<a name="l00069"></a>00069     rml::MemoryPool *my_pool;
+<a name="l00069"></a>00069     hash_compare my_hash_compare; <span class="comment">// the comparator predicate for keys</span>
 <a name="l00070"></a>00070 };
 <a name="l00071"></a>00071 
-<a name="l00072"></a>00072 } <span class="comment">// namespace internal</span>
-<a name="l00074"></a>00074 <span class="comment"></span>
-<a name="l00075"></a>00075 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
-<a name="l00077"></a>00077 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span>
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> P = <span class="keywordtype">int</span>ernal::pool_base>
-<a name="l00084"></a><a class="code" href="a00270.html">00084</a> <span class="keyword">class </span><a class="code" href="a00270.html">memory_pool_allocator</a> {
-<a name="l00085"></a>00085 <span class="keyword">protected</span>:
-<a name="l00086"></a>00086     <span class="keyword">typedef</span> P pool_type;
-<a name="l00087"></a>00087     pool_type *my_pool;
-<a name="l00088"></a>00088     <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
-<a name="l00089"></a>00089     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00270.html">memory_pool_allocator</a>;
-<a name="l00090"></a>00090     <span class="keyword">template</span><<span class="keyword">typename</span> V, <span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
-<a name="l00091"></a>00091     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<V,R></a>& a, <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<U,R></a>& b);
-<a name="l00092"></a>00092     <span class="keyword">template</span><<span class="keyword">typename</span> V, <span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
-<a name="l00093"></a>00093     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<V,R></a>& a, <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<U,R></a>& b);
-<a name="l00094"></a>00094 <span class="keyword">public</span>:
-<a name="l00095"></a>00095     <span class="keyword">typedef</span> <span class="keyword">typename</span> tbb::internal::allocator_type<T>::value_type value_type;
-<a name="l00096"></a>00096     <span class="keyword">typedef</span> value_type* pointer;
-<a name="l00097"></a>00097     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
-<a name="l00098"></a>00098     <span class="keyword">typedef</span> value_type& reference;
-<a name="l00099"></a>00099     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference;
-<a name="l00100"></a>00100     <span class="keyword">typedef</span> size_t size_type;
-<a name="l00101"></a>00101     <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00102"></a>00102     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00103"></a>00103         <span class="keyword">typedef</span> <a class="code" href="a00270.html">memory_pool_allocator<U, P></a> other;
-<a name="l00104"></a>00104     };
+<a name="l00072"></a>00072 <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> Hasher = tbb::tbb_hash<Key>, <span class="keyword">typename</span> Key_equality = std::equal_to<Key>, <span class="keyword">typename</span> Allocator = tbb::tbb_allocator<std::pair<const Key, T> > >
+<a name="l00073"></a>00073 <span class="keyword">class </span>concurrent_unordered_map : <span class="keyword">public</span> internal::concurrent_unordered_base< concurrent_unordered_map_traits<Key, T, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> >
+<a name="l00074"></a>00074 {
+<a name="l00075"></a>00075     <span class="comment">// Base type definitions</span>
+<a name="l00076"></a>00076     <span class="keyword">typedef</span> internal::hash_compare<Key, Hasher, Key_equality> hash_compare;
+<a name="l00077"></a>00077     <span class="keyword">typedef</span> internal::concurrent_unordered_base< concurrent_unordered_map_traits<Key, T, hash_compare, Allocator, false> > base_type;
+<a name="l00078"></a>00078     <span class="keyword">typedef</span> concurrent_unordered_map_traits<Key, T, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, <span class="keyword">false</span>> traits_type;
+<a name="l00079"></a>00079     <span class="keyword">using</span> traits_type::my_hash_compare;
+<a name="l00080"></a>00080 <span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="keyword">public</span>:
+<a name="l00082"></a>00082 <span class="preprocessor">#endif</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>    <span class="keyword">using</span> traits_type::allow_multimapping;
+<a name="l00084"></a>00084 <span class="keyword">public</span>:
+<a name="l00085"></a>00085     <span class="keyword">using</span> base_type::end;
+<a name="l00086"></a>00086     <span class="keyword">using</span> base_type::find;
+<a name="l00087"></a>00087     <span class="keyword">using</span> base_type::insert;
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089     <span class="comment">// Type definitions</span>
+<a name="l00090"></a>00090     <span class="keyword">typedef</span> Key key_type;
+<a name="l00091"></a>00091     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::value_type value_type;
+<a name="l00092"></a>00092     <span class="keyword">typedef</span> T mapped_type;
+<a name="l00093"></a>00093     <span class="keyword">typedef</span> Hasher hasher;
+<a name="l00094"></a>00094     <span class="keyword">typedef</span> Key_equality key_equal;
+<a name="l00095"></a>00095     <span class="keyword">typedef</span> hash_compare key_compare;
+<a name="l00096"></a>00096 
+<a name="l00097"></a>00097     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::allocator_type allocator_type;
+<a name="l00098"></a>00098     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::pointer pointer;
+<a name="l00099"></a>00099     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_pointer const_pointer;
+<a name="l00100"></a>00100     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::reference reference;
+<a name="l00101"></a>00101     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_reference const_reference;
+<a name="l00102"></a>00102 
+<a name="l00103"></a>00103     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::size_type size_type;
+<a name="l00104"></a>00104     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::difference_type difference_type;
 <a name="l00105"></a>00105 
-<a name="l00106"></a>00106     <a class="code" href="a00270.html">memory_pool_allocator</a>(pool_type &pool) <span class="keywordflow">throw</span>() : my_pool(&pool) {}
-<a name="l00107"></a>00107     <a class="code" href="a00270.html">memory_pool_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator</a>& src) <span class="keywordflow">throw</span>() : my_pool(src.<a class="code" href="a00270.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>) {}
-<a name="l00108"></a>00108     <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00109"></a>00109     <a class="code" href="a00270.html">memory_pool_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<U,P></a>& src) <span class="keywordflow">throw</span>() : my_pool(src.<a class="code" href="a00270.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>) {}
+<a name="l00106"></a>00106     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator iterator;
+<a name="l00107"></a>00107     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_iterator;
+<a name="l00108"></a>00108     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator local_iterator;
+<a name="l00109"></a>00109     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_local_iterator;
 <a name="l00110"></a>00110 
-<a name="l00111"></a>00111     pointer address(reference x)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &x; }
-<a name="l00112"></a>00112     const_pointer address(const_reference x)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &x; }
-<a name="l00113"></a>00113     
-<a name="l00115"></a><a class="code" href="a00270.html#365bd64d284c80d85bb2149a12681526">00115</a>     pointer <a class="code" href="a00270.html#365bd64d284c80d85bb2149a12681526">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> = 0) {
-<a name="l00116"></a>00116         <span class="keywordflow">return</span> static_cast<pointer>( my_pool->malloc( n*<span class="keyword">sizeof</span>(value_type) ) );
-<a name="l00117"></a>00117     }
-<a name="l00119"></a><a class="code" href="a00270.html#4e24a03de38638af07548383024c54ab">00119</a>     <span class="keywordtype">void</span> <a class="code" href="a00270.html#4e24a03de38638af07548383024c54ab">deallocate</a>( pointer p, size_type ) {
-<a name="l00120"></a>00120         my_pool->free(p);
-<a name="l00121"></a>00121     }
-<a name="l00123"></a><a class="code" href="a00270.html#beebdb6144df8ba219fadfad4de866ea">00123</a>     size_type <a class="code" href="a00270.html#beebdb6144df8ba219fadfad4de866ea">max_size</a>() const throw() {
-<a name="l00124"></a>00124         size_type max = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (value_type);
-<a name="l00125"></a>00125         <span class="keywordflow">return</span> (max > 0 ? max : 1);
-<a name="l00126"></a>00126     }
-<a name="l00128"></a><a class="code" href="a00270.html#c7e1671b725894b94ce9a6ac544e24f2">00128</a>     <span class="keywordtype">void</span> <a class="code" href="a00270.html#c7e1671b725894b94ce9a6ac544e24f2">construct</a>( pointer p, <span class="keyword">const</span> value_type& value ) { ::new((<span class="keywordtype">void</span>*)(p)) value_type(value); }
-<a name="l00129"></a>00129 
-<a name="l00131"></a><a class="code" href="a00270.html#a3af27e1f8535cc512134ec9a82ff4fc">00131</a>     <span class="keywordtype">void</span> <a class="code" href="a00270.html#a3af27e1f8535cc512134ec9a82ff4fc">destroy</a>( pointer p ) { p->~value_type(); }
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133 };
+<a name="l00111"></a>00111     <span class="comment">// Construction/destruction/copying</span>
+<a name="l00112"></a>00112     <span class="keyword">explicit</span> concurrent_unordered_map(size_type n_of_buckets = 8, <span class="keyword">const</span> hasher& a_hasher = hasher(),
+<a name="l00113"></a>00113         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
+<a name="l00114"></a>00114         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
+<a name="l00115"></a>00115     {
+<a name="l00116"></a>00116     }
+<a name="l00117"></a>00117 
+<a name="l00118"></a>00118     concurrent_unordered_map(<span class="keyword">const</span> Allocator& a) : base_type(8, key_compare(), a)
+<a name="l00119"></a>00119     {
+<a name="l00120"></a>00120     }
+<a name="l00121"></a>00121 
+<a name="l00122"></a>00122     <span class="keyword">template</span> <<span class="keyword">typename</span> Iterator>
+<a name="l00123"></a>00123     concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets = 8, <span class="keyword">const</span> hasher& a_hasher = hasher(),
+<a name="l00124"></a>00124         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
+<a name="l00125"></a>00125         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
+<a name="l00126"></a>00126     {
+<a name="l00127"></a>00127         <span class="keywordflow">for</span> (; first != last; ++first)
+<a name="l00128"></a>00128             base_type::insert(*first);
+<a name="l00129"></a>00129     }
+<a name="l00130"></a>00130 
+<a name="l00131"></a>00131     concurrent_unordered_map(<span class="keyword">const</span> concurrent_unordered_map& table) : base_type(table)
+<a name="l00132"></a>00132     {
+<a name="l00133"></a>00133     }
 <a name="l00134"></a>00134 
-<a name="l00135"></a>00135 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span>
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 <span class="keyword">template</span><<span class="keyword">typename</span> P> 
-<a name="l00142"></a><a class="code" href="a00271.html">00142</a> <span class="keyword">class </span><a class="code" href="a00270.html">memory_pool_allocator</a><void, P> {
-<a name="l00143"></a>00143 <span class="keyword">public</span>:
-<a name="l00144"></a>00144     <span class="keyword">typedef</span> P pool_type;
-<a name="l00145"></a>00145     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
-<a name="l00146"></a>00146     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
-<a name="l00147"></a>00147     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
-<a name="l00148"></a>00148     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00149"></a>00149         <span class="keyword">typedef</span> <a class="code" href="a00270.html">memory_pool_allocator<U, P></a> other;
-<a name="l00150"></a>00150     };
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152     <a class="code" href="a00270.html">memory_pool_allocator</a>( pool_type &pool) <span class="keywordflow">throw</span>() : my_pool(&pool) {}
-<a name="l00153"></a>00153     <a class="code" href="a00270.html">memory_pool_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator</a>& src) <span class="keywordflow">throw</span>() : my_pool(src.<a class="code" href="a00270.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>) {}
-<a name="l00154"></a>00154     <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00155"></a>00155     <a class="code" href="a00270.html">memory_pool_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<U,P></a>& src) <span class="keywordflow">throw</span>() : my_pool(src.<a class="code" href="a00270.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>) {}
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157 <span class="keyword">protected</span>:
-<a name="l00158"></a>00158     pool_type *my_pool;
-<a name="l00159"></a>00159     <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
-<a name="l00160"></a>00160     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00270.html">memory_pool_allocator</a>;
-<a name="l00161"></a>00161     <span class="keyword">template</span><<span class="keyword">typename</span> V, <span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
-<a name="l00162"></a>00162     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<V,R></a>& a, <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<U,R></a>& b);
-<a name="l00163"></a>00163     <span class="keyword">template</span><<span class="keyword">typename</span> V, <span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
-<a name="l00164"></a>00164     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<V,R></a>& a, <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<U,R></a>& b);
-<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, <span class="keyword">typename</span> P>
-<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="a00270.html">memory_pool_allocator<T,P></a>& a, <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<U,P></a>& b) {<span class="keywordflow">return</span> a.<a class="code" href="a00270.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>==b.<a class="code" href="a [...]
-<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, <span class="keyword">typename</span> P>
-<a name="l00171"></a>00171 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<T,P></a>& a, <span class="keyword">const</span> <a class="code" href="a00270.html">memory_pool_allocator<U,P></a>& b) {<span class="keywordflow">return</span> a.<a class="code" href="a00270.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>!=b.<a class="code" href="a [...]
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 
-<a name="l00175"></a>00175 <span class="keyword">template</span> <<span class="keyword">typename</span> Alloc>
-<a name="l00176"></a><a class="code" href="a00269.html">00176</a> <span class="keyword">class </span><a class="code" href="a00269.html">memory_pool</a> : <span class="keyword">public</span> internal::pool_base {
-<a name="l00177"></a>00177     Alloc my_alloc; <span class="comment">// TODO: base-class optimization</span>
-<a name="l00178"></a>00178     <span class="keyword">static</span> <span class="keywordtype">void</span> *allocate_request(intptr_t pool_id, size_t & bytes);
-<a name="l00179"></a>00179     <span class="keyword">static</span> <span class="keywordtype">int</span> deallocate_request(intptr_t pool_id, <span class="keywordtype">void</span>*, size_t raw_bytes);
+<a name="l00135"></a>00135     concurrent_unordered_map(<span class="keyword">const</span> concurrent_unordered_map& table, <span class="keyword">const</span> Allocator& a)
+<a name="l00136"></a>00136         : base_type(table, a)
+<a name="l00137"></a>00137     {
+<a name="l00138"></a>00138     }
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140     concurrent_unordered_map& operator=(<span class="keyword">const</span> concurrent_unordered_map& table)
+<a name="l00141"></a>00141     {
+<a name="l00142"></a>00142         base_type::operator=(table);
+<a name="l00143"></a>00143         <span class="keywordflow">return</span> (*<span class="keyword">this</span>);
+<a name="l00144"></a>00144     }
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146     iterator unsafe_erase(const_iterator where)
+<a name="l00147"></a>00147     {
+<a name="l00148"></a>00148         <span class="keywordflow">return</span> base_type::unsafe_erase(where);
+<a name="l00149"></a>00149     }
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151     size_type unsafe_erase(<span class="keyword">const</span> key_type& key)
+<a name="l00152"></a>00152     {
+<a name="l00153"></a>00153         <span class="keywordflow">return</span> base_type::unsafe_erase(key);
+<a name="l00154"></a>00154     }
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156     iterator unsafe_erase(const_iterator first, const_iterator last)
+<a name="l00157"></a>00157     {
+<a name="l00158"></a>00158         <span class="keywordflow">return</span> base_type::unsafe_erase(first, last);
+<a name="l00159"></a>00159     }
+<a name="l00160"></a>00160 
+<a name="l00161"></a>00161     <span class="keywordtype">void</span> swap(concurrent_unordered_map& table)
+<a name="l00162"></a>00162     {
+<a name="l00163"></a>00163         base_type::swap(table);
+<a name="l00164"></a>00164     }
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166     <span class="comment">// Observers</span>
+<a name="l00167"></a>00167     hasher hash_function()<span class="keyword"> const</span>
+<a name="l00168"></a>00168 <span class="keyword">    </span>{
+<a name="l00169"></a>00169         <span class="keywordflow">return</span> my_hash_compare.my_hash_object;
+<a name="l00170"></a>00170     }
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172     key_equal key_eq()<span class="keyword"> const</span>
+<a name="l00173"></a>00173 <span class="keyword">    </span>{
+<a name="l00174"></a>00174         <span class="keywordflow">return</span> my_hash_compare.my_key_compare_object;
+<a name="l00175"></a>00175     }
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177     mapped_type& operator[](<span class="keyword">const</span> key_type& key)
+<a name="l00178"></a>00178     {
+<a name="l00179"></a>00179         iterator where = find(key);
 <a name="l00180"></a>00180 
-<a name="l00181"></a>00181 <span class="keyword">public</span>:
-<a name="l00183"></a>00183     <a class="code" href="a00269.html#2822528265718a4c779591fc37c02ca8">memory_pool</a>(<span class="keyword">const</span> Alloc &src = Alloc());
-<a name="l00184"></a>00184 
-<a name="l00186"></a><a class="code" href="a00269.html#fdad7c4ed08332ec384491a71b721957">00186</a>     <a class="code" href="a00269.html#fdad7c4ed08332ec384491a71b721957">~memory_pool</a>() { destroy(); } <span class="comment">// call the callbacks first and destroy my_alloc latter</span>
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188 };
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 <span class="keyword">class </span>fixed_pool : <span class="keyword">public</span> internal::pool_base {
-<a name="l00191"></a>00191     <span class="keywordtype">void</span> *my_buffer;
-<a name="l00192"></a>00192     size_t my_size;
-<a name="l00193"></a>00193     <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> *allocate_request(intptr_t pool_id, size_t & bytes);
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195 <span class="keyword">public</span>:
-<a name="l00197"></a>00197     <span class="keyword">inline</span> fixed_pool(<span class="keywordtype">void</span> *buf, size_t size);
-<a name="l00199"></a>00199     ~fixed_pool() { destroy(); }
-<a name="l00200"></a>00200 };
-<a name="l00201"></a>00201 
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 <span class="keyword">template</span> <<span class="keyword">typename</span> Alloc>
-<a name="l00205"></a><a class="code" href="a00269.html#2822528265718a4c779591fc37c02ca8">00205</a> <a class="code" href="a00269.html">memory_pool<Alloc>::memory_pool</a>(<span class="keyword">const</span> Alloc &src) : my_alloc(src) {
-<a name="l00206"></a>00206     rml::MemPoolPolicy args = {
-<a name="l00207"></a>00207         allocate_request, deallocate_request, <span class="keyword">sizeof</span>(<span class="keyword">typename</span> Alloc::value_type)
-<a name="l00208"></a>00208     };
-<a name="l00209"></a>00209     my_pool = rml::pool_create(intptr_t(<span class="keyword">this</span>), &args);
-<a name="l00210"></a>00210     __TBBMALLOC_ASSERT(my_pool, <span class="stringliteral">"Pool is not created"</span>);
-<a name="l00211"></a>00211     <span class="keywordflow">if</span>( !my_pool ) __TBB_THROW(std::bad_alloc());
-<a name="l00212"></a>00212 }
-<a name="l00213"></a>00213 <span class="keyword">template</span> <<span class="keyword">typename</span> Alloc>
-<a name="l00214"></a>00214 <span class="keywordtype">void</span> *<a class="code" href="a00269.html">memory_pool<Alloc>::allocate_request</a>(intptr_t pool_id, size_t & bytes) {
-<a name="l00215"></a>00215     <a class="code" href="a00269.html">memory_pool<Alloc></a> &<span class="keyword">self</span> = *reinterpret_cast<memory_pool<Alloc>*>(pool_id);
-<a name="l00216"></a>00216     <span class="keyword">const</span> size_t unit_size = <span class="keyword">sizeof</span>(<span class="keyword">typename</span> Alloc::value_type);
-<a name="l00217"></a>00217     __TBBMALLOC_ASSERT( 0 == bytes%unit_size, NULL);
-<a name="l00218"></a>00218     <span class="keywordtype">void</span> *ptr;
-<a name="l00219"></a>00219     __TBB_TRY { ptr = <span class="keyword">self</span>.my_alloc.allocate( bytes/unit_size ); }
-<a name="l00220"></a>00220     __TBB_CATCH(...) { <span class="keywordflow">return</span> 0; }
-<a name="l00221"></a>00221     <span class="keywordflow">return</span> ptr;
-<a name="l00222"></a>00222 }
-<a name="l00223"></a>00223 <span class="keyword">template</span> <<span class="keyword">typename</span> Alloc>
-<a name="l00224"></a>00224 <span class="keywordtype">int</span> <a class="code" href="a00269.html">memory_pool<Alloc>::deallocate_request</a>(intptr_t pool_id, <span class="keywordtype">void</span>* raw_ptr, size_t raw_bytes) {
-<a name="l00225"></a>00225     <a class="code" href="a00269.html">memory_pool<Alloc></a> &<span class="keyword">self</span> = *reinterpret_cast<memory_pool<Alloc>*>(pool_id);
-<a name="l00226"></a>00226     <span class="keyword">const</span> size_t unit_size = <span class="keyword">sizeof</span>(<span class="keyword">typename</span> Alloc::value_type);
-<a name="l00227"></a>00227     __TBBMALLOC_ASSERT( 0 == raw_bytes%unit_size, NULL);
-<a name="l00228"></a>00228     <span class="keyword">self</span>.my_alloc.deallocate( static_cast<typename Alloc::value_type*>(raw_ptr), raw_bytes/unit_size );
-<a name="l00229"></a>00229     <span class="keywordflow">return</span> 0;
-<a name="l00230"></a>00230 }
-<a name="l00231"></a>00231 <span class="keyword">inline</span> fixed_pool::fixed_pool(<span class="keywordtype">void</span> *buf, size_t size) : my_buffer(buf), my_size(size) {
-<a name="l00232"></a>00232     rml::MemPoolPolicy args = { allocate_request, 0, size };
-<a name="l00233"></a>00233     my_pool = rml::pool_create(intptr_t(<span class="keyword">this</span>), &args);
-<a name="l00234"></a>00234     __TBBMALLOC_ASSERT(my_pool, <span class="stringliteral">"Pool is not created"</span>);
-<a name="l00235"></a>00235     <span class="keywordflow">if</span>( !my_pool ) __TBB_THROW(std::bad_alloc());
-<a name="l00236"></a>00236 }
-<a name="l00237"></a>00237 <span class="keyword">inline</span> <span class="keywordtype">void</span> *fixed_pool::allocate_request(intptr_t pool_id, size_t & bytes) {
-<a name="l00238"></a>00238     fixed_pool &<span class="keyword">self</span> = *reinterpret_cast<fixed_pool*>(pool_id);
-<a name="l00239"></a>00239     <span class="keywordflow">if</span>( bytes > <span class="keyword">self</span>.my_size || !__TBB_CompareAndSwapW(&<span class="keyword">self</span>.my_size, 0, (bytes=<span class="keyword">self</span>.my_size)) )
-<a name="l00240"></a>00240         <span class="keywordflow">return</span> 0; <span class="comment">// all the memory was given already</span>
-<a name="l00241"></a>00241     <span class="keywordflow">return</span> <span class="keyword">self</span>.my_buffer;
-<a name="l00242"></a>00242 }
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244 } <span class="comment">//namespace interface6</span>
-<a name="l00245"></a>00245 <span class="keyword">using</span> <a class="code" href="a00270.html">interface6::memory_pool_allocator</a>;
-<a name="l00246"></a>00246 <span class="keyword">using</span> <a class="code" href="a00269.html">interface6::memory_pool</a>;
-<a name="l00247"></a>00247 <span class="keyword">using</span> interface6::fixed_pool;
-<a name="l00248"></a>00248 } <span class="comment">//namespace tbb</span>
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250 <span class="preprocessor">#undef __TBBMALLOC_ASSERT</span>
-<a name="l00251"></a>00251 <span class="preprocessor"></span><span class="preprocessor">#endif// __TBB_memory_pool_H</span>
+<a name="l00181"></a>00181         <span class="keywordflow">if</span> (where == end())
+<a name="l00182"></a>00182         {
+<a name="l00183"></a>00183             where = insert(std::pair<key_type, mapped_type>(key, mapped_type())).first;
+<a name="l00184"></a>00184         }
+<a name="l00185"></a>00185 
+<a name="l00186"></a>00186         <span class="keywordflow">return</span> ((*where).second);
+<a name="l00187"></a>00187     }
+<a name="l00188"></a>00188 
+<a name="l00189"></a>00189     mapped_type& at(<span class="keyword">const</span> key_type& key)
+<a name="l00190"></a>00190     {
+<a name="l00191"></a>00191         iterator where = find(key);
+<a name="l00192"></a>00192 
+<a name="l00193"></a>00193         <span class="keywordflow">if</span> (where == end())
+<a name="l00194"></a>00194         {
+<a name="l00195"></a>00195             tbb::internal::throw_exception(tbb::internal::eid_invalid_key);
+<a name="l00196"></a>00196         }
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198         <span class="keywordflow">return</span> ((*where).second);
+<a name="l00199"></a>00199     }
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201     <span class="keyword">const</span> mapped_type& at(<span class="keyword">const</span> key_type& key)<span class="keyword"> const</span>
+<a name="l00202"></a>00202 <span class="keyword">    </span>{
+<a name="l00203"></a>00203         const_iterator where = find(key);
+<a name="l00204"></a>00204 
+<a name="l00205"></a>00205         <span class="keywordflow">if</span> (where == end())
+<a name="l00206"></a>00206         {
+<a name="l00207"></a>00207             tbb::internal::throw_exception(tbb::internal::eid_invalid_key);
+<a name="l00208"></a>00208         }
+<a name="l00209"></a>00209 
+<a name="l00210"></a>00210         <span class="keywordflow">return</span> ((*where).second);
+<a name="l00211"></a>00211     }
+<a name="l00212"></a>00212 };
+<a name="l00213"></a>00213 
+<a name="l00214"></a>00214 } <span class="comment">// namespace interface5</span>
+<a name="l00215"></a>00215 
+<a name="l00216"></a>00216 <span class="keyword">using</span> interface5::concurrent_unordered_map;
+<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// __TBB_concurrent_unordered_map_H</span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00484.html b/doc/html/a00484.html
new file mode 100644
index 0000000..7226c70
--- /dev/null
+++ b/doc/html/a00484.html
@@ -0,0 +1,199 @@
+<!DOCTYPE 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_unordered_set.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_unordered_set.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-2012 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="comment">/* Container implementations in this header are based on PPL implementations</span>
+<a name="l00022"></a>00022 <span class="comment">   provided by Microsoft. */</span>
+<a name="l00023"></a>00023 
+<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __TBB_concurrent_unordered_set_H</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_unordered_set_H</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "internal/_concurrent_unordered_impl.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="l00031"></a>00031 
+<a name="l00032"></a>00032 <span class="keyword">namespace </span>interface5 {
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034 <span class="comment">// Template class for hash set traits</span>
+<a name="l00035"></a>00035 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> Hash_compare, <span class="keyword">typename</span> Allocator, <span class="keywordtype">bool</span> Allow_multimapping>
+<a name="l00036"></a>00036 <span class="keyword">class </span>concurrent_unordered_set_traits
+<a name="l00037"></a>00037 {
+<a name="l00038"></a>00038 <span class="keyword">protected</span>:
+<a name="l00039"></a>00039     <span class="keyword">typedef</span> Key value_type;
+<a name="l00040"></a>00040     <span class="keyword">typedef</span> Key key_type;
+<a name="l00041"></a>00041     <span class="keyword">typedef</span> Hash_compare hash_compare;
+<a name="l00042"></a>00042     <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind<value_type>::other allocator_type;
+<a name="l00043"></a>00043     <span class="keyword">enum</span> { allow_multimapping = Allow_multimapping };
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045     concurrent_unordered_set_traits() : my_hash_compare() {}
+<a name="l00046"></a>00046     concurrent_unordered_set_traits(<span class="keyword">const</span> hash_compare& hc) : my_hash_compare(hc) {}
+<a name="l00047"></a>00047 
+<a name="l00048"></a>00048     <span class="keyword">typedef</span> hash_compare value_compare;
+<a name="l00049"></a>00049 
+<a name="l00050"></a>00050     <span class="keyword">static</span> <span class="keyword">const</span> Key& get_key(<span class="keyword">const</span> value_type& value) {
+<a name="l00051"></a>00051         <span class="keywordflow">return</span> value;
+<a name="l00052"></a>00052     }
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054     hash_compare my_hash_compare; <span class="comment">// the comparator predicate for keys</span>
+<a name="l00055"></a>00055 };
+<a name="l00056"></a>00056 
+<a name="l00057"></a>00057 <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> Hasher = tbb::tbb_hash<Key>, <span class="keyword">typename</span> Key_equality = std::equal_to<Key>, <span class="keyword">typename</span> Allocator = tbb::tbb_allocator<Key> >
+<a name="l00058"></a>00058 <span class="keyword">class </span>concurrent_unordered_set : <span class="keyword">public</span> internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> >
+<a name="l00059"></a>00059 {
+<a name="l00060"></a>00060     <span class="comment">// Base type definitions</span>
+<a name="l00061"></a>00061     <span class="keyword">typedef</span> internal::hash_compare<Key, Hasher, Key_equality> hash_compare;
+<a name="l00062"></a>00062     <span class="keyword">typedef</span> internal::concurrent_unordered_base< concurrent_unordered_set_traits<Key, hash_compare, Allocator, false> > base_type;
+<a name="l00063"></a>00063     <span class="keyword">typedef</span> concurrent_unordered_set_traits<Key, internal::hash_compare<Key, Hasher, Key_equality>, Allocator, <span class="keyword">false</span>> traits_type;
+<a name="l00064"></a>00064     <span class="keyword">using</span> traits_type::my_hash_compare;
+<a name="l00065"></a>00065 <span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="keyword">public</span>:
+<a name="l00067"></a>00067 <span class="preprocessor">#endif</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span>    <span class="keyword">using</span> traits_type::allow_multimapping;
+<a name="l00069"></a>00069 <span class="keyword">public</span>:
+<a name="l00070"></a>00070     <span class="keyword">using</span> base_type::end;
+<a name="l00071"></a>00071     <span class="keyword">using</span> base_type::find;
+<a name="l00072"></a>00072     <span class="keyword">using</span> base_type::insert;
+<a name="l00073"></a>00073 
+<a name="l00074"></a>00074     <span class="comment">// Type definitions</span>
+<a name="l00075"></a>00075     <span class="keyword">typedef</span> Key key_type;
+<a name="l00076"></a>00076     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::value_type value_type;
+<a name="l00077"></a>00077     <span class="keyword">typedef</span> Key mapped_type;
+<a name="l00078"></a>00078     <span class="keyword">typedef</span> Hasher hasher;
+<a name="l00079"></a>00079     <span class="keyword">typedef</span> Key_equality key_equal;
+<a name="l00080"></a>00080     <span class="keyword">typedef</span> hash_compare key_compare;
+<a name="l00081"></a>00081 
+<a name="l00082"></a>00082     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::allocator_type allocator_type;
+<a name="l00083"></a>00083     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::pointer pointer;
+<a name="l00084"></a>00084     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_pointer const_pointer;
+<a name="l00085"></a>00085     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::reference reference;
+<a name="l00086"></a>00086     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_reference const_reference;
+<a name="l00087"></a>00087 
+<a name="l00088"></a>00088     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::size_type size_type;
+<a name="l00089"></a>00089     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::difference_type difference_type;
+<a name="l00090"></a>00090 
+<a name="l00091"></a>00091     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator iterator;
+<a name="l00092"></a>00092     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_iterator;
+<a name="l00093"></a>00093     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::iterator local_iterator;
+<a name="l00094"></a>00094     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::const_iterator const_local_iterator;
+<a name="l00095"></a>00095 
+<a name="l00096"></a>00096     <span class="comment">// Construction/destruction/copying</span>
+<a name="l00097"></a>00097     <span class="keyword">explicit</span> concurrent_unordered_set(size_type n_of_buckets = 8, <span class="keyword">const</span> hasher& a_hasher = hasher(),
+<a name="l00098"></a>00098         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
+<a name="l00099"></a>00099         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
+<a name="l00100"></a>00100     {
+<a name="l00101"></a>00101     }
+<a name="l00102"></a>00102 
+<a name="l00103"></a>00103     concurrent_unordered_set(<span class="keyword">const</span> Allocator& a) : base_type(8, key_compare(), a)
+<a name="l00104"></a>00104     {
+<a name="l00105"></a>00105     }
+<a name="l00106"></a>00106 
+<a name="l00107"></a>00107     <span class="keyword">template</span> <<span class="keyword">typename</span> Iterator>
+<a name="l00108"></a>00108     concurrent_unordered_set(Iterator first, Iterator last, size_type n_of_buckets = 8, <span class="keyword">const</span> hasher& a_hasher = hasher(),
+<a name="l00109"></a>00109         <span class="keyword">const</span> key_equal& a_keyeq = key_equal(), <span class="keyword">const</span> allocator_type& a = allocator_type())
+<a name="l00110"></a>00110         : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
+<a name="l00111"></a>00111     {
+<a name="l00112"></a>00112         <span class="keywordflow">for</span> (; first != last; ++first)
+<a name="l00113"></a>00113             base_type::insert(*first);
+<a name="l00114"></a>00114     }
+<a name="l00115"></a>00115 
+<a name="l00116"></a>00116     concurrent_unordered_set(<span class="keyword">const</span> concurrent_unordered_set& table) : base_type(table)
+<a name="l00117"></a>00117     {
+<a name="l00118"></a>00118     }
+<a name="l00119"></a>00119 
+<a name="l00120"></a>00120     concurrent_unordered_set(<span class="keyword">const</span> concurrent_unordered_set& table, <span class="keyword">const</span> Allocator& a)
+<a name="l00121"></a>00121         : base_type(table, a)
+<a name="l00122"></a>00122     {
+<a name="l00123"></a>00123     }
+<a name="l00124"></a>00124 
+<a name="l00125"></a>00125     concurrent_unordered_set& operator=(<span class="keyword">const</span> concurrent_unordered_set& table)
+<a name="l00126"></a>00126     {
+<a name="l00127"></a>00127         base_type::operator=(table);
+<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     iterator unsafe_erase(const_iterator where)
+<a name="l00132"></a>00132     {
+<a name="l00133"></a>00133         <span class="keywordflow">return</span> base_type::unsafe_erase(where);
+<a name="l00134"></a>00134     }
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136     size_type unsafe_erase(<span class="keyword">const</span> key_type& key)
+<a name="l00137"></a>00137     {
+<a name="l00138"></a>00138         <span class="keywordflow">return</span> base_type::unsafe_erase(key);
+<a name="l00139"></a>00139     }
+<a name="l00140"></a>00140 
+<a name="l00141"></a>00141     iterator unsafe_erase(const_iterator first, const_iterator last)
+<a name="l00142"></a>00142     {
+<a name="l00143"></a>00143         <span class="keywordflow">return</span> base_type::unsafe_erase(first, last);
+<a name="l00144"></a>00144     }
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146     <span class="keywordtype">void</span> swap(concurrent_unordered_set& table)
+<a name="l00147"></a>00147     {
+<a name="l00148"></a>00148         base_type::swap(table);
+<a name="l00149"></a>00149     }
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151     <span class="comment">// Observers</span>
+<a name="l00152"></a>00152     hasher hash_function()<span class="keyword"> const</span>
+<a name="l00153"></a>00153 <span class="keyword">    </span>{
+<a name="l00154"></a>00154         <span class="keywordflow">return</span> my_hash_compare.my_hash_object;
+<a name="l00155"></a>00155     }
+<a name="l00156"></a>00156 
+<a name="l00157"></a>00157     key_equal key_eq()<span class="keyword"> const</span>
+<a name="l00158"></a>00158 <span class="keyword">    </span>{
+<a name="l00159"></a>00159         <span class="keywordflow">return</span> my_hash_compare.my_key_compare_object;
+<a name="l00160"></a>00160     }
+<a name="l00161"></a>00161 };
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163 } <span class="comment">// namespace interface5</span>
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165 <span class="keyword">using</span> interface5::concurrent_unordered_set;
+<a name="l00166"></a>00166 
+<a name="l00167"></a>00167 } <span class="comment">// namespace tbb</span>
+<a name="l00168"></a>00168 
+<a name="l00169"></a>00169 <span class="preprocessor">#endif// __TBB_concurrent_unordered_set_H</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00487.html b/doc/html/a00487.html
index 50a926d..2c739ce 100644
--- a/doc/html/a00487.html
+++ b/doc/html/a00487.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>mutex.h Source File</title>
+<title>concurrent_vector.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>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-2011 Intel Corporation.  All Rights Reserved.</span>
+<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-2012 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,199 +39,887 @@
 <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="l00021"></a>00021 <span class="preprocessor">#ifndef __TBB_concurrent_vector_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_vector_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 "machine/windows_api.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">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#include <new></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keyword">namespace </span>tbb {
-<a name="l00036"></a>00036 
-<a name="l00038"></a>00038 
-<a name="l00040"></a><a class="code" href="a00275.html">00040</a> <span class="keyword">class </span><a class="code" href="a00275.html">mutex</a> {
-<a name="l00041"></a>00041 <span class="keyword">public</span>:
-<a name="l00043"></a><a class="code" href="a00275.html#05313cb77d4f85213103d4dab74ed454">00043</a>     <a class="code" href="a00275.html#05313cb77d4f85213103d4dab74ed454">mutex</a>() {
-<a name="l00044"></a>00044 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span>    internal_construct();
-<a name="l00046"></a>00046 <span class="preprocessor">#else</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span>        InitializeCriticalSection(&impl);
-<a name="l00049"></a>00049 <span class="preprocessor">  #else</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span>        <span class="keywordtype">int</span> error_code = pthread_mutex_init(&impl,NULL);
-<a name="l00051"></a>00051         <span class="keywordflow">if</span>( error_code )
-<a name="l00052"></a>00052             tbb::internal::handle_perror(error_code,<span class="stringliteral">"mutex: pthread_mutex_init failed"</span>);
-<a name="l00053"></a>00053 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00055"></a>00055     };
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057     ~<a class="code" href="a00275.html">mutex</a>() {
-<a name="l00058"></a>00058 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span>        internal_destroy();
-<a name="l00060"></a>00060 <span class="preprocessor">#else</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span>        DeleteCriticalSection(&impl);
-<a name="l00063"></a>00063 <span class="preprocessor">  #else</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span>        pthread_mutex_destroy(&impl); 
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00067"></a>00067 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00068"></a>00068     };
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070     <span class="keyword">class </span>scoped_lock;
-<a name="l00071"></a>00071     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-<a name="l00072"></a>00072 
-<a name="l00074"></a>00074 
-<a name="l00076"></a><a class="code" href="a00276.html">00076</a>     <span class="keyword">class </span><a class="code" href="a00276.html">scoped_lock</a> : internal::no_copy {
-<a name="l00077"></a>00077     <span class="keyword">public</span>:
-<a name="l00079"></a><a class="code" href="a00276.html#1d403ae51b484df5d86d85ae38f11e6e">00079</a>         <a class="code" href="a00276.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>() : my_mutex(NULL) {};
-<a name="l00080"></a>00080 
-<a name="l00082"></a><a class="code" href="a00276.html#605a6b9af0f8cdabdf81825e0de99600">00082</a>         <a class="code" href="a00276.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>( <a class="code" href="a00275.html">mutex</a>& <a class="code" href="a00275.html">mutex</a> ) {
-<a name="l00083"></a>00083             <a class="code" href="a00276.html#862e022841cdc522e4296a5533b22efd">acquire</a>( mutex );
-<a name="l00084"></a>00084         }
-<a name="l00085"></a>00085 
-<a name="l00087"></a><a class="code" href="a00276.html#0ebbbecaf4311e9df7362cb76ceaa368">00087</a>         <a class="code" href="a00276.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>() {
-<a name="l00088"></a>00088             <span class="keywordflow">if</span>( my_mutex ) 
-<a name="l00089"></a>00089                 <a class="code" href="a00276.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>();
-<a name="l00090"></a>00090         }
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include <new></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include <cstring></span>   <span class="comment">// for memset()</span>
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
+<a name="l00036"></a>00036 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include <algorithm></span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include <iterator></span>
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a>00047 <span class="preprocessor">#if _MSC_VER==1500 && !__INTEL_COMPILER</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>    <span class="comment">// VS2008/VC9 seems to have an issue; limits pull in math.h</span>
+<a name="l00049"></a>00049 <span class="preprocessor">    #pragma warning( push )</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( disable: 4985 )</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#include <limits></span> <span class="comment">/* std::numeric_limits */</span>
+<a name="l00053"></a>00053 <span class="preprocessor">#if _MSC_VER==1500 && !__INTEL_COMPILER</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning( pop )</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span>
+<a name="l00057"></a>00057 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warnings in /Wp64 mode</span>
+<a name="l00059"></a>00059 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4267)</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>
+<a name="l00063"></a>00063 <span class="keyword">namespace </span>tbb {
+<a name="l00064"></a>00064 
+<a name="l00065"></a>00065 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> >
+<a name="l00066"></a>00066 <span class="keyword">class </span>concurrent_vector;
+<a name="l00067"></a>00067 
+<a name="l00069"></a>00069 <span class="keyword">namespace </span>internal {
+<a name="l00070"></a>00070 
+<a name="l00072"></a>00072     <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="l00073"></a>00073 
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076     <span class="keyword">class </span>concurrent_vector_base_v3 {
+<a name="l00077"></a>00077     <span class="keyword">protected</span>:
+<a name="l00078"></a>00078 
+<a name="l00079"></a>00079         <span class="comment">// Basic types declarations</span>
+<a name="l00080"></a>00080         <span class="keyword">typedef</span> size_t segment_index_t;
+<a name="l00081"></a>00081         <span class="keyword">typedef</span> size_t size_type;
+<a name="l00082"></a>00082 
+<a name="l00083"></a>00083         <span class="comment">// Using enumerations due to Mac linking problems of static const variables</span>
+<a name="l00084"></a>00084         <span class="keyword">enum</span> {
+<a name="l00085"></a>00085             <span class="comment">// Size constants</span>
+<a name="l00086"></a>00086             default_initial_segments = 1, <span class="comment">// 2 initial items</span>
+<a name="l00088"></a>00088 <span class="comment"></span>            pointers_per_short_table = 3, <span class="comment">// to fit into 8 words of entire structure</span>
+<a name="l00089"></a>00089             pointers_per_long_table = <span class="keyword">sizeof</span>(segment_index_t) * 8 <span class="comment">// one segment per bit</span>
+<a name="l00090"></a>00090         };
 <a name="l00091"></a>00091 
-<a name="l00093"></a><a class="code" href="a00276.html#862e022841cdc522e4296a5533b22efd">00093</a>         <span class="keywordtype">void</span> <a class="code" href="a00276.html#862e022841cdc522e4296a5533b22efd">acquire</a>( <a class="code" href="a00275.html">mutex</a>& <a class="code" href="a00275.html">mutex</a> ) {
-<a name="l00094"></a>00094 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00095"></a>00095 <span class="preprocessor"></span>            internal_acquire(mutex);
-<a name="l00096"></a>00096 <span class="preprocessor">#else</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span>            mutex.<a class="code" href="a00275.html#4470e61c24c129a0299ca6c17240adbb">lock</a>();
-<a name="l00098"></a>00098             my_mutex = &mutex;
+<a name="l00092"></a>00092         <span class="comment">// Segment pointer. Can be zero-initialized</span>
+<a name="l00093"></a>00093         <span class="keyword">struct </span>segment_t {
+<a name="l00094"></a>00094             <span class="keywordtype">void</span>* array;
+<a name="l00095"></a>00095 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span>            ~segment_t() {
+<a name="l00097"></a>00097                 __TBB_ASSERT( array <= internal::vector_allocation_error_flag, <span class="stringliteral">"should have been freed by clear"</span> );
+<a name="l00098"></a>00098             }
 <a name="l00099"></a>00099 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00100"></a>00100         }
+<a name="l00100"></a>00100         };
 <a name="l00101"></a>00101 
-<a name="l00103"></a><a class="code" href="a00276.html#591e0c49b82bcedffcbe0923f1b915ec">00103</a>         <span class="keywordtype">bool</span> <a class="code" href="a00276.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>( <a class="code" href="a00275.html">mutex</a>& <a class="code" href="a00275.html">mutex</a> ) {
-<a name="l00104"></a>00104 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire (mutex);
-<a name="l00106"></a>00106 <span class="preprocessor">#else</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00275.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>();
-<a name="l00108"></a>00108             <span class="keywordflow">if</span>( result )
-<a name="l00109"></a>00109                 my_mutex = &mutex;
-<a name="l00110"></a>00110             <span class="keywordflow">return</span> result;
-<a name="l00111"></a>00111 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00112"></a>00112         }
-<a name="l00113"></a>00113 
-<a name="l00115"></a><a class="code" href="a00276.html#0d51d18cd99df3b2e93bf07378d0992c">00115</a>         <span class="keywordtype">void</span> <a class="code" href="a00276.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>() {
-<a name="l00116"></a>00116 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span>            internal_release ();
-<a name="l00118"></a>00118 <span class="preprocessor">#else</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span>            my_mutex-><a class="code" href="a00275.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>();
-<a name="l00120"></a>00120             my_mutex = NULL;
-<a name="l00121"></a>00121 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00122"></a>00122         }
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124     <span class="keyword">private</span>:
-<a name="l00126"></a>00126         <a class="code" href="a00275.html">mutex</a>* my_mutex;
-<a name="l00127"></a>00127 
-<a name="l00129"></a>00129         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00275.html">mutex</a>& m );
-<a name="l00130"></a>00130 
-<a name="l00132"></a>00132         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00275.html">mutex</a>& m );
+<a name="l00102"></a>00102         <span class="comment">// Data fields</span>
+<a name="l00103"></a>00103 
+<a name="l00105"></a>00105         <span class="keywordtype">void</span>* (*vector_allocator_ptr)(concurrent_vector_base_v3 &, size_t);
+<a name="l00106"></a>00106 
+<a name="l00108"></a>00108         atomic<size_type> my_first_block;
+<a name="l00109"></a>00109 
+<a name="l00111"></a>00111         atomic<size_type> my_early_size;
+<a name="l00112"></a>00112 
+<a name="l00114"></a>00114         atomic<segment_t*> my_segment;
+<a name="l00115"></a>00115 
+<a name="l00117"></a>00117         segment_t my_storage[pointers_per_short_table];
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119         <span class="comment">// Methods</span>
+<a name="l00120"></a>00120 
+<a name="l00121"></a>00121         concurrent_vector_base_v3() {
+<a name="l00122"></a>00122             my_early_size = 0;
+<a name="l00123"></a>00123             my_first_block = 0; <span class="comment">// here is not default_initial_segments</span>
+<a name="l00124"></a>00124             <span class="keywordflow">for</span>( segment_index_t i = 0; i < pointers_per_short_table; i++)
+<a name="l00125"></a>00125                 my_storage[i].array = NULL;
+<a name="l00126"></a>00126             my_segment = my_storage;
+<a name="l00127"></a>00127         }
+<a name="l00128"></a>00128         __TBB_EXPORTED_METHOD ~concurrent_vector_base_v3();
+<a name="l00129"></a>00129 
+<a name="l00130"></a>00130         <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
+<a name="l00131"></a>00131             <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
+<a name="l00132"></a>00132         }
 <a name="l00133"></a>00133 
-<a name="l00135"></a>00135         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00275.html">mutex</a>;
-<a name="l00138"></a>00138     };
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140     <span class="comment">// Mutex traits</span>
-<a name="l00141"></a>00141     <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="l00142"></a>00142     <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="l00143"></a>00143     <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="l00144"></a>00144 
-<a name="l00145"></a>00145     <span class="comment">// ISO C++0x compatibility methods</span>
-<a name="l00146"></a>00146 
-<a name="l00148"></a><a class="code" href="a00275.html#4470e61c24c129a0299ca6c17240adbb">00148</a>     <span class="keywordtype">void</span> <a class="code" href="a00275.html#4470e61c24c129a0299ca6c17240adbb">lock</a>() {
-<a name="l00149"></a>00149 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00150"></a>00150 <span class="preprocessor"></span>        <a class="code" href="a00227.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00151"></a>00151         <span class="keyword">new</span>(tmp.<a class="code" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00276.html">scoped_lock</a>(*<span class="keyword">this</span>);
-<a name="l00152"></a>00152 <span class="preprocessor">#else</span>
-<a name="l00153"></a>00153 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00154"></a>00154 <span class="preprocessor"></span>        EnterCriticalSection(&impl);
-<a name="l00155"></a>00155 <span class="preprocessor">  #else</span>
-<a name="l00156"></a>00156 <span class="preprocessor"></span>        pthread_mutex_lock(&impl);
-<a name="l00157"></a>00157 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00158"></a>00158 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00159"></a>00159     }
-<a name="l00160"></a>00160 
-<a name="l00162"></a>00162 
-<a name="l00163"></a><a class="code" href="a00275.html#4331652c79dea1c1131bd59ab161b234">00163</a>     <span class="keywordtype">bool</span> <a class="code" href="a00275.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>() {
-<a name="l00164"></a>00164 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00165"></a>00165 <span class="preprocessor"></span>        <a class="code" href="a00227.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00166"></a>00166         <a class="code" href="a00276.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00167"></a>00167         s.<a class="code" href="a00276.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = NULL;
-<a name="l00168"></a>00168         <span class="keywordflow">return</span> s.<a class="code" href="a00276.html#e86ffb41a026694b16637f78aa337874">internal_try_acquire</a>(*<span class="keyword">this</span>);
-<a name="l00169"></a>00169 <span class="preprocessor">#else</span>
-<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00171"></a>00171 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&impl)!=0;
-<a name="l00172"></a>00172 <span class="preprocessor">  #else</span>
-<a name="l00173"></a>00173 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&impl)==0;
-<a name="l00174"></a>00174 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00175"></a>00175 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00176"></a>00176     }
+<a name="l00134"></a>00134         <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
+<a name="l00135"></a>00135             <span class="keywordflow">return</span> (segment_index_t(1)<<k & ~segment_index_t(1));
+<a name="l00136"></a>00136         }
+<a name="l00137"></a>00137 
+<a name="l00138"></a>00138         <span class="keyword">static</span> <span class="keyword">inline</span> segment_index_t segment_base_index_of( segment_index_t &index ) {
+<a name="l00139"></a>00139             segment_index_t k = segment_index_of( index );
+<a name="l00140"></a>00140             index -= segment_base(k);
+<a name="l00141"></a>00141             <span class="keywordflow">return</span> k;
+<a name="l00142"></a>00142         }
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144         <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
+<a name="l00145"></a>00145             <span class="keywordflow">return</span> segment_index_t(1)<<k; <span class="comment">// fake value for k==0</span>
+<a name="l00146"></a>00146         }
+<a name="l00147"></a>00147 
+<a name="l00149"></a>00149         <span class="keyword">typedef</span> void (__TBB_EXPORTED_FUNC *internal_array_op1)(<span class="keywordtype">void</span>* begin, size_type n );
+<a name="l00150"></a>00150 
+<a name="l00152"></a>00152         <span class="keyword">typedef</span> void (__TBB_EXPORTED_FUNC *internal_array_op2)(<span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
+<a name="l00153"></a>00153 
+<a name="l00155"></a>00155         <span class="keyword">struct </span>internal_segments_table {
+<a name="l00156"></a>00156             segment_index_t first_block;
+<a name="l00157"></a>00157             <span class="keywordtype">void</span>* table[pointers_per_long_table];
+<a name="l00158"></a>00158         };
+<a name="l00159"></a>00159 
+<a name="l00160"></a>00160         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );
+<a name="l00161"></a>00161         size_type __TBB_EXPORTED_METHOD internal_capacity() <span class="keyword">const</span>;
+<a name="l00162"></a>00162         <span class="keywordtype">void</span> internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
+<a name="l00163"></a>00163         size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
+<a name="l00164"></a>00164         <span class="keywordtype">void</span>* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );
+<a name="l00165"></a>00165         segment_index_t __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy );
+<a name="l00166"></a>00166         <span class="keywordtype">void</span>* __TBB_EXPORTED_METHOD internal_compact( size_type element_size, <span class="keywordtype">void</span> *table, internal_array_op1 destroy, internal_array_op2 copy );
+<a name="l00167"></a>00167         <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="l00168"></a>00168         <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="l00169"></a>00169                               internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
+<a name="l00171"></a>00171         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception(size_type) <span class="keyword">const</span>;
+<a name="l00172"></a>00172         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);
+<a name="l00173"></a>00173 
+<a name="l00174"></a>00174         <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="l00175"></a>00175                                                     internal_array_op1 destroy, internal_array_op2 init );
+<a name="l00176"></a>00176         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="l00177"></a>00177 
-<a name="l00179"></a><a class="code" href="a00275.html#5fc9ef443ae75d966695546be399cc6b">00179</a>     <span class="keywordtype">void</span> <a class="code" href="a00275.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>() {
-<a name="l00180"></a>00180 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00181"></a>00181 <span class="preprocessor"></span>        <a class="code" href="a00227.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00182"></a>00182         <a class="code" href="a00276.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00183"></a>00183         s.<a class="code" href="a00276.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = <span class="keyword">this</span>;
-<a name="l00184"></a>00184         s.<a class="code" href="a00276.html#448b7e9042afcdc455ea3f929ac4c594">internal_release</a>();
-<a name="l00185"></a>00185 <span class="preprocessor">#else</span>
-<a name="l00186"></a>00186 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00187"></a>00187 <span class="preprocessor"></span>        LeaveCriticalSection(&impl);
-<a name="l00188"></a>00188 <span class="preprocessor">  #else</span>
-<a name="l00189"></a>00189 <span class="preprocessor"></span>        pthread_mutex_unlock(&impl);
-<a name="l00190"></a>00190 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00191"></a>00191 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00192"></a>00192     }
-<a name="l00193"></a>00193 
-<a name="l00195"></a>00195 <span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00196"></a><a class="code" href="a00275.html#9f1ec84d5815263ceae853f06ddb4cac">00196</a> <span class="preprocessor"></span>    <span class="keyword">typedef</span> LPCRITICAL_SECTION <a class="code" href="a00275.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a>;
-<a name="l00197"></a>00197 <span class="preprocessor">  #else</span>
-<a name="l00198"></a>00198 <span class="preprocessor"></span>    <span class="keyword">typedef</span> pthread_mutex_t* <a class="code" href="a00275.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a>;
-<a name="l00199"></a>00199 <span class="preprocessor">  #endif</span>
-<a name="l00200"></a>00200 <span class="preprocessor"></span>    <a class="code" href="a00275.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> native_handle() { <span class="keywordflow">return</span> (<a class="code" href="a00275.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a>) &impl; }
+<a name="l00179"></a>00179         <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="l00180"></a>00180 <span class="keyword">private</span>:
+<a name="l00182"></a>00182         <span class="keyword">class </span>helper;
+<a name="l00183"></a>00183         <span class="keyword">friend</span> <span class="keyword">class </span>helper;
+<a name="l00184"></a>00184     };
+<a name="l00185"></a>00185 
+<a name="l00186"></a>00186     <span class="keyword">typedef</span> concurrent_vector_base_v3 concurrent_vector_base;
+<a name="l00187"></a>00187 
+<a name="l00189"></a>00189 
+<a name="l00191"></a>00191     <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00192"></a>00192     <span class="keyword">class </span>vector_iterator
+<a name="l00193"></a>00193     {
+<a name="l00195"></a>00195         Container* my_vector;
+<a name="l00196"></a>00196 
+<a name="l00198"></a>00198         size_t my_index;
+<a name="l00199"></a>00199 
 <a name="l00201"></a>00201 
-<a name="l00202"></a>00202     <span class="keyword">enum</span> state_t {
-<a name="l00203"></a>00203         INITIALIZED=0x1234,
-<a name="l00204"></a>00204         DESTROYED=0x789A,
-<a name="l00205"></a>00205         HELD=0x56CD
-<a name="l00206"></a>00206     };
-<a name="l00207"></a>00207 <span class="keyword">private</span>:
-<a name="l00208"></a>00208 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00209"></a>00209 <span class="preprocessor"></span>    CRITICAL_SECTION impl;    
-<a name="l00210"></a>00210     <span class="keyword">enum</span> state_t state;
-<a name="l00211"></a>00211 <span class="preprocessor">#else</span>
-<a name="l00212"></a>00212 <span class="preprocessor"></span>    pthread_mutex_t impl;
-<a name="l00213"></a>00213 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00214"></a>00214 
-<a name="l00216"></a>00216     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00217"></a>00217 
-<a name="l00219"></a>00219     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00222"></a>00222 <span class="preprocessor"></span><span class="keyword">public</span>:
-<a name="l00224"></a><a class="code" href="a00275.html#795649a185b0d6af6dc81c5f378616dd">00224</a>     <span class="keywordtype">void</span> <a class="code" href="a00275.html#795649a185b0d6af6dc81c5f378616dd">set_state</a>( state_t to ) { state = to; }
-<a name="l00225"></a>00225 <span class="preprocessor">#endif</span>
-<a name="l00226"></a>00226 <span class="preprocessor"></span>};
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 __TBB_DEFINE_PROFILING_SET_NAME(mutex)
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230 } <span class="comment">// namespace tbb </span>
+<a name="l00202"></a>00202         <span class="keyword">mutable</span> Value* my_item;
+<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>
+<a name="l00205"></a>00205         <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="l00206"></a>00206 
+<a name="l00207"></a>00207         <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="l00208"></a>00208         <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="l00209"></a>00209 
+<a name="l00210"></a>00210         <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="l00211"></a>00211         <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="l00212"></a>00212 
+<a name="l00213"></a>00213         <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="l00214"></a>00214         <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="l00215"></a>00215 
+<a name="l00216"></a>00216         <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
+<a name="l00217"></a>00217         <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
+<a name="l00218"></a>00218 
+<a name="l00219"></a>00219 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+<a name="l00220"></a>00220 <span class="preprocessor"></span>        <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00221"></a>00221         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00276.html">tbb::concurrent_vector</a>;
+<a name="l00222"></a>00222 <span class="preprocessor">#else</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+<a name="l00224"></a>00224 <span class="preprocessor">#endif</span>
+<a name="l00225"></a>00225 <span class="preprocessor"></span>
+<a name="l00226"></a>00226         vector_iterator( <span class="keyword">const</span> Container& vector, size_t index, <span class="keywordtype">void</span> *ptr = 0 ) :
+<a name="l00227"></a>00227             my_vector(const_cast<Container*>(&vector)),
+<a name="l00228"></a>00228             my_index(index),
+<a name="l00229"></a>00229             my_item(static_cast<Value*>(ptr))
+<a name="l00230"></a>00230         {}
 <a name="l00231"></a>00231 
-<a name="l00232"></a>00232 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_mutex_H */</span>
+<a name="l00232"></a>00232     <span class="keyword">public</span>:
+<a name="l00234"></a>00234         vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236         vector_iterator( <span class="keyword">const</span> vector_iterator<Container,typename Container::value_type>& other ) :
+<a name="l00237"></a>00237             my_vector(other.my_vector),
+<a name="l00238"></a>00238             my_index(other.my_index),
+<a name="l00239"></a>00239             my_item(other.my_item)
+<a name="l00240"></a>00240         {}
+<a name="l00241"></a>00241 
+<a name="l00242"></a>00242         vector_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00243"></a>00243             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index+offset );
+<a name="l00244"></a>00244         }
+<a name="l00245"></a>00245         vector_iterator &operator+=( ptrdiff_t offset ) {
+<a name="l00246"></a>00246             my_index+=offset;
+<a name="l00247"></a>00247             my_item = NULL;
+<a name="l00248"></a>00248             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00249"></a>00249         }
+<a name="l00250"></a>00250         vector_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00251"></a>00251             <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index-offset );
+<a name="l00252"></a>00252         }
+<a name="l00253"></a>00253         vector_iterator &operator-=( ptrdiff_t offset ) {
+<a name="l00254"></a>00254             my_index-=offset;
+<a name="l00255"></a>00255             my_item = NULL;
+<a name="l00256"></a>00256             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00257"></a>00257         }
+<a name="l00258"></a>00258         Value& operator*()<span class="keyword"> const </span>{
+<a name="l00259"></a>00259             Value* item = my_item;
+<a name="l00260"></a>00260             <span class="keywordflow">if</span>( !item ) {
+<a name="l00261"></a>00261                 item = my_item = &my_vector->internal_subscript(my_index);
+<a name="l00262"></a>00262             }
+<a name="l00263"></a>00263             __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), <span class="stringliteral">"corrupt cache"</span> );
+<a name="l00264"></a>00264             <span class="keywordflow">return</span> *item;
+<a name="l00265"></a>00265         }
+<a name="l00266"></a>00266         Value& <a class="code" href="a00276.html#4c52f2950bb1832886bd4458eb09d7eb">operator[]</a>( ptrdiff_t k )<span class="keyword"> const </span>{
+<a name="l00267"></a>00267             <span class="keywordflow">return</span> my_vector->internal_subscript(my_index+k);
+<a name="l00268"></a>00268         }
+<a name="l00269"></a>00269         Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+<a name="l00270"></a>00270 
+<a name="l00272"></a>00272         vector_iterator& operator++() {
+<a name="l00273"></a>00273             size_t k = ++my_index;
+<a name="l00274"></a>00274             <span class="keywordflow">if</span>( my_item ) {
+<a name="l00275"></a>00275                 <span class="comment">// Following test uses 2's-complement wizardry</span>
+<a name="l00276"></a>00276                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
+<a name="l00277"></a>00277                     <span class="comment">// k is a power of two that is at least k-2</span>
+<a name="l00278"></a>00278                     my_item= NULL;
+<a name="l00279"></a>00279                 } <span class="keywordflow">else</span> {
+<a name="l00280"></a>00280                     ++my_item;
+<a name="l00281"></a>00281                 }
+<a name="l00282"></a>00282             }
+<a name="l00283"></a>00283             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00284"></a>00284         }
+<a name="l00285"></a>00285 
+<a name="l00287"></a>00287         vector_iterator& operator--() {
+<a name="l00288"></a>00288             __TBB_ASSERT( my_index>0, <span class="stringliteral">"operator--() applied to iterator already at beginning of concurrent_vector"</span> );
+<a name="l00289"></a>00289             size_t k = my_index--;
+<a name="l00290"></a>00290             <span class="keywordflow">if</span>( my_item ) {
+<a name="l00291"></a>00291                 <span class="comment">// Following test uses 2's-complement wizardry</span>
+<a name="l00292"></a>00292                 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
+<a name="l00293"></a>00293                     <span class="comment">// k is a power of two that is at least k-2  </span>
+<a name="l00294"></a>00294                     my_item= NULL;
+<a name="l00295"></a>00295                 } <span class="keywordflow">else</span> {
+<a name="l00296"></a>00296                     --my_item;
+<a name="l00297"></a>00297                 }
+<a name="l00298"></a>00298             }
+<a name="l00299"></a>00299             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00300"></a>00300         }
+<a name="l00301"></a>00301 
+<a name="l00303"></a>00303         vector_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00304"></a>00304             vector_iterator result = *<span class="keyword">this</span>;
+<a name="l00305"></a>00305             operator++();
+<a name="l00306"></a>00306             <span class="keywordflow">return</span> result;
+<a name="l00307"></a>00307         }
+<a name="l00308"></a>00308 
+<a name="l00310"></a>00310         vector_iterator operator--(<span class="keywordtype">int</span>) {
+<a name="l00311"></a>00311             vector_iterator result = *<span class="keyword">this</span>;
+<a name="l00312"></a>00312             operator--();
+<a name="l00313"></a>00313             <span class="keywordflow">return</span> result;
+<a name="l00314"></a>00314         }
+<a name="l00315"></a>00315 
+<a name="l00316"></a>00316         <span class="comment">// STL support</span>
+<a name="l00317"></a>00317 
+<a name="l00318"></a>00318         <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00319"></a>00319         <span class="keyword">typedef</span> Value value_type;
+<a name="l00320"></a>00320         <span class="keyword">typedef</span> Value* pointer;
+<a name="l00321"></a>00321         <span class="keyword">typedef</span> Value& reference;
+<a name="l00322"></a>00322         <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
+<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>
+<a name="l00326"></a>00326     vector_iterator<Container,T> operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator<Container,T>& v ) {
+<a name="l00327"></a>00327         <span class="keywordflow">return</span> vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );
+<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==( <span class="keyword">const</span> 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 && i.my_vector == j.my_vector;
+<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> !(i==j);
+<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<( const 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.my_index<j.my_index;
+<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>( <span class="keyword">const</span> 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     <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="l00352"></a>00352         <span class="keywordflow">return</span> !(i<j);
+<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> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00356"></a>00356     <span class="keywordtype">bool</span> operator<=( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+<a name="l00357"></a>00357         <span class="keywordflow">return</span> !(j<i);
+<a name="l00358"></a>00358     }
+<a name="l00359"></a>00359 
+<a name="l00360"></a>00360     <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="l00361"></a>00361     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="l00362"></a>00362         <span class="keywordflow">return</span> ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
+<a name="l00363"></a>00363     }
+<a name="l00364"></a>00364 
+<a name="l00365"></a>00365     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00366"></a>00366     <span class="keyword">class </span>allocator_base {
+<a name="l00367"></a>00367     <span class="keyword">public</span>:
+<a name="l00368"></a>00368         <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template
+<a name="l00369"></a>00369             rebind<T>::other allocator_type;
+<a name="l00370"></a>00370         allocator_type my_allocator;
+<a name="l00371"></a>00371 
+<a name="l00372"></a>00372         allocator_base(<span class="keyword">const</span> allocator_type &a = allocator_type() ) : my_allocator(a) {}
+<a name="l00373"></a>00373     };
+<a name="l00374"></a>00374 
+<a name="l00375"></a>00375 } <span class="comment">// namespace internal</span>
+<a name="l00377"></a>00377 <span class="comment"></span>
+<a name="l00379"></a>00379 
+<a name="l00440"></a>00440 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00441"></a><a class="code" href="a00276.html">00441</a> <span class="keyword">class </span><a class="code" href="a00276.html">concurrent_vector</a>: <span class="keyword">protected</span> internal::allocator_base<T, A>,
+<a name="l00442"></a>00442                          <span class="keyword">private</span> internal::concurrent_vector_base {
+<a name="l00443"></a>00443 <span class="keyword">private</span>:
+<a name="l00444"></a>00444     <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00445"></a>00445     <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00259.html">blocked_range</a><I> {
+<a name="l00446"></a>00446     <span class="keyword">public</span>:
+<a name="l00447"></a>00447         <span class="keyword">typedef</span> T value_type;
+<a name="l00448"></a>00448         <span class="keyword">typedef</span> T& reference;
+<a name="l00449"></a>00449         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+<a name="l00450"></a>00450         <span class="keyword">typedef</span> I iterator;
+<a name="l00451"></a>00451         <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00452"></a>00452         generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : <a class="code" href="a00259.html">blocked_range<I></a>(begin_,end_,grainsize_) {}
+<a name="l00453"></a>00453         template<typename U>
+<a name="l00454"></a>00454         generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00259.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {}
+<a name="l00455"></a>00455         generic_range_type( generic_range_type& r, <a class="code" href="a00335.html">split</a> ) : <a class="code" href="a00259.html">blocked_range<I></a>(r,<a class="code" href="a00335.html">split</a>()) {}
+<a name="l00456"></a>00456     };
+<a name="l00457"></a>00457 
+<a name="l00458"></a>00458     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
+<a name="l00459"></a>00459     <span class="keyword">friend</span> <span class="keyword">class </span>internal::vector_iterator;
+<a name="l00460"></a>00460 <span class="keyword">public</span>:
+<a name="l00461"></a>00461     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00462"></a>00462     <span class="comment">// STL compatible types</span>
+<a name="l00463"></a>00463     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00464"></a>00464     <span class="keyword">typedef</span> internal::concurrent_vector_base_v3::size_type size_type;
+<a name="l00465"></a>00465     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_base<T, A>::allocator_type allocator_type;
+<a name="l00466"></a>00466 
+<a name="l00467"></a>00467     <span class="keyword">typedef</span> T value_type;
+<a name="l00468"></a>00468     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00469"></a>00469     <span class="keyword">typedef</span> T& reference;
+<a name="l00470"></a>00470     <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+<a name="l00471"></a>00471     <span class="keyword">typedef</span> T *pointer;
+<a name="l00472"></a>00472     <span class="keyword">typedef</span> <span class="keyword">const</span> T *const_pointer;
+<a name="l00473"></a>00473 
+<a name="l00474"></a>00474     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,T> iterator;
+<a name="l00475"></a>00475     <span class="keyword">typedef</span> internal::vector_iterator<concurrent_vector,const T> const_iterator;
+<a name="l00476"></a>00476 
+<a name="l00477"></a>00477 <span class="preprocessor">#if !defined(_MSC_VER) || _CPPLIB_VER>=300</span>
+<a name="l00478"></a>00478 <span class="preprocessor"></span>    <span class="comment">// Assume ISO standard definition of std::reverse_iterator</span>
+<a name="l00479"></a>00479     <span class="keyword">typedef</span> std::reverse_iterator<iterator> reverse_iterator;
+<a name="l00480"></a>00480     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator> const_reverse_iterator;
+<a name="l00481"></a>00481 <span class="preprocessor">#else</span>
+<a name="l00482"></a>00482 <span class="preprocessor"></span>    <span class="comment">// Use non-standard std::reverse_iterator</span>
+<a name="l00483"></a>00483     <span class="keyword">typedef</span> std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;
+<a name="l00484"></a>00484     <span class="keyword">typedef</span> std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
+<a name="l00485"></a>00485 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && (_MSC_VER<1300) */</span>
+<a name="l00486"></a>00486 
+<a name="l00487"></a>00487     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00488"></a>00488     <span class="comment">// Parallel algorithm support</span>
+<a name="l00489"></a>00489     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00490"></a>00490     <span class="keyword">typedef</span> generic_range_type<iterator> range_type;
+<a name="l00491"></a>00491     <span class="keyword">typedef</span> generic_range_type<const_iterator> const_range_type;
+<a name="l00492"></a>00492 
+<a name="l00493"></a>00493     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00494"></a>00494     <span class="comment">// STL compatible constructors & destructors</span>
+<a name="l00495"></a>00495     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00496"></a>00496 
+<a name="l00498"></a><a class="code" href="a00276.html#2c8ca9cabfcd30ad5943324c853664b5">00498</a>     <span class="keyword">explicit</span> <a class="code" href="a00276.html">concurrent_vector</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00499"></a>00499         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
+<a name="l00500"></a>00500     {
+<a name="l00501"></a>00501         vector_allocator_ptr = &internal_allocator;
+<a name="l00502"></a>00502     }
+<a name="l00503"></a>00503 
+<a name="l00505"></a><a class="code" href="a00276.html#dd8a200b99a8088435a37934b58fe335">00505</a>     <a class="code" href="a00276.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00276.html">concurrent_vector</a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
+<a name="l00506"></a>00506         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
+<a name="l00507"></a>00507     {
+<a name="l00508"></a>00508         vector_allocator_ptr = &internal_allocator;
+<a name="l00509"></a>00509         __TBB_TRY {
+<a name="l00510"></a>00510             internal_copy(vector, <span class="keyword">sizeof</span>(T), &copy_array);
+<a name="l00511"></a>00511         } __TBB_CATCH(...) {
+<a name="l00512"></a>00512             segment_t *table = my_segment;
+<a name="l00513"></a>00513             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00514"></a>00514             __TBB_RETHROW();
+<a name="l00515"></a>00515         }
+<a name="l00516"></a>00516     }
+<a name="l00517"></a>00517 
+<a name="l00519"></a>00519     <span class="keyword">template</span><<span class="keyword">class</span> M>
+<a name="l00520"></a><a class="code" href="a00276.html#64432f13f7b29bfe4acfb5568f34f3a8">00520</a>     <a class="code" href="a00276.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00276.html">concurrent_vector<T, M></a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
+<a name="l00521"></a>00521         : internal::allocator_base<T, A>(a), internal::concurrent_vector_base()
+<a name="l00522"></a>00522     {
+<a name="l00523"></a>00523         vector_allocator_ptr = &internal_allocator;
+<a name="l00524"></a>00524         __TBB_TRY {
+<a name="l00525"></a>00525             internal_copy(vector.<a class="code" href="a00276.html#bb5ae659871478f1f5c68039e1273e12">internal_vector_base</a>(), <span class="keyword">sizeof</span>(T), &copy_array);
+<a name="l00526"></a>00526         } __TBB_CATCH(...) {
+<a name="l00527"></a>00527             segment_t *table = my_segment;
+<a name="l00528"></a>00528             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00529"></a>00529             __TBB_RETHROW();
+<a name="l00530"></a>00530         }
+<a name="l00531"></a>00531     }
+<a name="l00532"></a>00532 
+<a name="l00534"></a><a class="code" href="a00276.html#2a2e261dfe1cab3f73f7b1a94137cfca">00534</a>     <span class="keyword">explicit</span> <a class="code" href="a00276.html">concurrent_vector</a>(size_type n)
+<a name="l00535"></a>00535     {
+<a name="l00536"></a>00536         vector_allocator_ptr = &internal_allocator;
+<a name="l00537"></a>00537         __TBB_TRY {
+<a name="l00538"></a>00538             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &destroy_array, &initialize_array );
+<a name="l00539"></a>00539         } __TBB_CATCH(...) {
+<a name="l00540"></a>00540             segment_t *table = my_segment;
+<a name="l00541"></a>00541             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00542"></a>00542             __TBB_RETHROW();
+<a name="l00543"></a>00543         }
+<a name="l00544"></a>00544     }
+<a name="l00545"></a>00545 
+<a name="l00547"></a><a class="code" href="a00276.html#3883a8a908b44e249a57f454de3f55d8">00547</a>     <a class="code" href="a00276.html">concurrent_vector</a>(size_type n, const_reference t, <span class="keyword">const</span> allocator_type& a = allocator_type())
+<a name="l00548"></a>00548         : internal::allocator_base<T, A>(a)
+<a name="l00549"></a>00549     {
+<a name="l00550"></a>00550         vector_allocator_ptr = &internal_allocator;
+<a name="l00551"></a>00551         __TBB_TRY {
+<a name="l00552"></a>00552             internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+<a name="l00553"></a>00553         } __TBB_CATCH(...) {
+<a name="l00554"></a>00554             segment_t *table = my_segment;
+<a name="l00555"></a>00555             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00556"></a>00556             __TBB_RETHROW();
+<a name="l00557"></a>00557         }
+<a name="l00558"></a>00558     }
+<a name="l00559"></a>00559 
+<a name="l00561"></a>00561     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00562"></a><a class="code" href="a00276.html#4450de83c5862ea4bcd9443fd7e67419">00562</a>     <a class="code" href="a00276.html">concurrent_vector</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
+<a name="l00563"></a>00563         : internal::allocator_base<T, A>(a)
+<a name="l00564"></a>00564     {
+<a name="l00565"></a>00565         vector_allocator_ptr = &internal_allocator;
+<a name="l00566"></a>00566         __TBB_TRY {
+<a name="l00567"></a>00567             internal_assign_range(first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
+<a name="l00568"></a>00568         } __TBB_CATCH(...) {
+<a name="l00569"></a>00569             segment_t *table = my_segment;
+<a name="l00570"></a>00570             internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00571"></a>00571             __TBB_RETHROW();
+<a name="l00572"></a>00572         }
+<a name="l00573"></a>00573     }
+<a name="l00574"></a>00574 
+<a name="l00576"></a><a class="code" href="a00276.html#691f0f3cda3e489c37a657016e375eaf">00576</a>     <a class="code" href="a00276.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00276.html">concurrent_vector</a>& vector ) {
+<a name="l00577"></a>00577         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector )
+<a name="l00578"></a>00578             internal_assign(vector, <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="l00583"></a>00583     <span class="keyword">template</span><<span class="keyword">class</span> M>
+<a name="l00584"></a><a class="code" href="a00276.html#19f4ab88a01b0fd056af3bba463e7bd6">00584</a>     <a class="code" href="a00276.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00276.html">concurrent_vector<T, M></a>& vector ) {
+<a name="l00585"></a>00585         <span class="keywordflow">if</span>( static_cast<void*>( <span class="keyword">this</span> ) != static_cast<const void*>( &vector ) )
+<a name="l00586"></a>00586             internal_assign(vector.internal_vector_base(),
+<a name="l00587"></a>00587                 <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, &copy_array);
+<a name="l00588"></a>00588         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00589"></a>00589     }
+<a name="l00590"></a>00590 
+<a name="l00591"></a>00591     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00592"></a>00592     <span class="comment">// Concurrent operations</span>
+<a name="l00593"></a>00593     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00595"></a>00595 <span class="comment"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00596"></a>00596 <span class="preprocessor"></span>
+<a name="l00597"></a><a class="code" href="a00276.html#30484e3959892fd5392fa93c873c31f0">00597</a>     size_type grow_by( size_type delta ) {
+<a name="l00598"></a>00598         <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array, NULL ) : my_early_size;
+<a name="l00599"></a>00599     }
+<a name="l00600"></a>00600 <span class="preprocessor">#else</span>
+<a name="l00601"></a>00601 <span class="preprocessor"></span>
+<a name="l00602"></a><a class="code" href="a00276.html#c8177b1865270ea68aa1ab9148e5e35e">00602</a>     iterator grow_by( size_type delta ) {
+<a name="l00603"></a>00603         <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="l00604"></a>00604     }
+<a name="l00605"></a>00605 <span class="preprocessor">#endif</span>
+<a name="l00606"></a>00606 <span class="preprocessor"></span>
+<a name="l00608"></a>00608 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00609"></a>00609 <span class="preprocessor"></span>
+<a name="l00610"></a><a class="code" href="a00276.html#38274ab3f772ecba600c7daca7690102">00610</a>     size_type grow_by( size_type delta, const_reference t ) {
+<a name="l00611"></a>00611         <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="l00612"></a>00612     }
+<a name="l00613"></a>00613 <span class="preprocessor">#else</span>
+<a name="l00614"></a>00614 <span class="preprocessor"></span>
+<a name="l00615"></a><a class="code" href="a00276.html#473a59a4c9308b93411b898b3110d26c">00615</a>     iterator grow_by( size_type delta, const_reference t ) {
+<a name="l00616"></a>00616         <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="l00617"></a>00617     }
+<a name="l00618"></a>00618 <span class="preprocessor">#endif</span>
+<a name="l00619"></a>00619 <span class="preprocessor"></span>
+<a name="l00621"></a>00621 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00622"></a>00622 <span class="preprocessor"></span>
+<a name="l00624"></a><a class="code" href="a00276.html#47fe588214dd5fa06ab6e8ab78d83874">00624</a>     <span class="keywordtype">void</span> grow_to_at_least( size_type n ) {
+<a name="l00625"></a>00625         <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="l00626"></a>00626     };
+<a name="l00627"></a>00627 <span class="preprocessor">#else</span>
+<a name="l00628"></a>00628 <span class="preprocessor"></span>
+<a name="l00632"></a><a class="code" href="a00276.html#a7e3b67c8ccab16d0aecc80899ae799d">00632</a>     iterator grow_to_at_least( size_type n ) {
+<a name="l00633"></a>00633         size_type m=0;
+<a name="l00634"></a>00634         <span class="keywordflow">if</span>( n ) {
+<a name="l00635"></a>00635             m = internal_grow_to_at_least_with_result( n, <span class="keyword">sizeof</span>(T), &initialize_array, NULL );
+<a name="l00636"></a>00636             <span class="keywordflow">if</span>( m>n ) m=n;
+<a name="l00637"></a>00637         }
+<a name="l00638"></a>00638         <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, m);
+<a name="l00639"></a>00639     };
+<a name="l00640"></a>00640 <span class="preprocessor">#endif</span>
+<a name="l00641"></a>00641 <span class="preprocessor"></span>
+<a name="l00643"></a>00643 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00644"></a><a class="code" href="a00276.html#e94e038f915c0268fdf2d3d7f87d81b8">00644</a> <span class="preprocessor"></span>    size_type push_back( const_reference item )
+<a name="l00645"></a>00645 <span class="preprocessor">#else</span>
+<a name="l00646"></a>00646 <span class="preprocessor"></span>
+<a name="l00647"></a>00647     iterator push_back( const_reference item )
+<a name="l00648"></a>00648 <span class="preprocessor">#endif</span>
+<a name="l00649"></a>00649 <span class="preprocessor"></span>    {
+<a name="l00650"></a>00650         size_type k;
+<a name="l00651"></a>00651         <span class="keywordtype">void</span> *ptr = internal_push_back(<span class="keyword">sizeof</span>(T),k);
+<a name="l00652"></a>00652         internal_loop_guide loop(1, ptr);
+<a name="l00653"></a>00653         loop.init(&item);
+<a name="l00654"></a>00654 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00655"></a>00655 <span class="preprocessor"></span>        <span class="keywordflow">return</span> k;
+<a name="l00656"></a>00656 <span class="preprocessor">#else</span>
+<a name="l00657"></a>00657 <span class="preprocessor"></span>        <span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>, k, ptr);
+<a name="l00658"></a>00658 <span class="preprocessor">#endif</span>
+<a name="l00659"></a>00659 <span class="preprocessor"></span>    }
+<a name="l00660"></a>00660 
+<a name="l00662"></a>00662 
+<a name="l00664"></a><a class="code" href="a00276.html#4c52f2950bb1832886bd4458eb09d7eb">00664</a>     reference operator[]( size_type index ) {
+<a name="l00665"></a>00665         <span class="keywordflow">return</span> internal_subscript(index);
+<a name="l00666"></a>00666     }
+<a name="l00667"></a>00667 
+<a name="l00669"></a><a class="code" href="a00276.html#c6fade5c732cc95274d1d8277ea619d1">00669</a>     const_reference operator[]( size_type index )<span class="keyword"> const </span>{
+<a name="l00670"></a>00670         <span class="keywordflow">return</span> internal_subscript(index);
+<a name="l00671"></a>00671     }
+<a name="l00672"></a>00672 
+<a name="l00674"></a><a class="code" href="a00276.html#0c073ca43e787c7cbf7b0e26d2221748">00674</a>     reference at( size_type index ) {
+<a name="l00675"></a>00675         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
+<a name="l00676"></a>00676     }
+<a name="l00677"></a>00677 
+<a name="l00679"></a><a class="code" href="a00276.html#23e14a38af748edff96a7adc3a0f1c58">00679</a>     const_reference at( size_type index )<span class="keyword"> const </span>{
+<a name="l00680"></a>00680         <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
+<a name="l00681"></a>00681     }
+<a name="l00682"></a>00682 
+<a name="l00684"></a><a class="code" href="a00276.html#a4c6ffff3bf08b92939aa2fc516edfba">00684</a>     range_type range( size_t grainsize = 1 ) {
+<a name="l00685"></a>00685         <span class="keywordflow">return</span> range_type( begin(), end(), grainsize );
+<a name="l00686"></a>00686     }
+<a name="l00687"></a>00687 
+<a name="l00689"></a><a class="code" href="a00276.html#3d09ccfb581b879ae64203741035e193">00689</a>     const_range_type range( size_t grainsize = 1 )<span class="keyword"> const </span>{
+<a name="l00690"></a>00690         <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize );
+<a name="l00691"></a>00691     }
+<a name="l00692"></a>00692 
+<a name="l00693"></a>00693     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00694"></a>00694     <span class="comment">// Capacity</span>
+<a name="l00695"></a>00695     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00697"></a><a class="code" href="a00276.html#715fe313c4a9c22731cc404dd80c9ec9">00697</a> <span class="comment"></span>    size_type size()<span class="keyword"> const </span>{
+<a name="l00698"></a>00698         size_type sz = my_early_size, cp = internal_capacity();
+<a name="l00699"></a>00699         <span class="keywordflow">return</span> cp < sz ? cp : sz;
+<a name="l00700"></a>00700     }
+<a name="l00701"></a>00701 
+<a name="l00703"></a><a class="code" href="a00276.html#c6426cb93cf20d3af40f3c90f1f0481a">00703</a>     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_early_size;}
+<a name="l00704"></a>00704 
+<a name="l00706"></a><a class="code" href="a00276.html#3ed6b9ae7217af5103d974045b6f5cd5">00706</a>     size_type capacity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_capacity();}
+<a name="l00707"></a>00707 
+<a name="l00709"></a>00709 
+<a name="l00711"></a><a class="code" href="a00276.html#5a0ce05026994b010018f72cfdeb72c1">00711</a>     <span class="keywordtype">void</span> reserve( size_type n ) {
+<a name="l00712"></a>00712         <span class="keywordflow">if</span>( n )
+<a name="l00713"></a>00713             internal_reserve(n, <span class="keyword">sizeof</span>(T), max_size());
+<a name="l00714"></a>00714     }
+<a name="l00715"></a>00715 
+<a name="l00717"></a><a class="code" href="a00276.html#8dfb0cb0eef96d440b4dcf801807a718">00717</a>     <span class="keywordtype">void</span> resize( size_type n ) {
+<a name="l00718"></a>00718         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), NULL, &destroy_array, &initialize_array );
+<a name="l00719"></a>00719     }
+<a name="l00720"></a>00720 
+<a name="l00722"></a><a class="code" href="a00276.html#98ce6b2c6d2622f0c030b46dfac3880c">00722</a>     <span class="keywordtype">void</span> resize( size_type n, const_reference t ) {
+<a name="l00723"></a>00723         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+<a name="l00724"></a>00724     }
+<a name="l00725"></a>00725 
+<a name="l00726"></a>00726 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00728"></a><a class="code" href="a00276.html#1693d1da41b1a8235871be9c6633be35">00728</a> <span class="preprocessor">    void compact() {shrink_to_fit();}</span>
+<a name="l00729"></a>00729 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEPRECATED */</span>
+<a name="l00730"></a>00730 
+<a name="l00732"></a>00732     <span class="keywordtype">void</span> shrink_to_fit();
+<a name="l00733"></a>00733 
+<a name="l00735"></a><a class="code" href="a00276.html#2c248a017f0576df3e7cd99627836fd6">00735</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="l00736"></a>00736 
+<a name="l00737"></a>00737     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00738"></a>00738     <span class="comment">// STL support</span>
+<a name="l00739"></a>00739     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00740"></a>00740 
+<a name="l00742"></a><a class="code" href="a00276.html#730b23a251ecb6d37f692fb22f38e029">00742</a>     iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0);}
+<a name="l00744"></a><a class="code" href="a00276.html#c0b51160e5a764982ec97a455f94f2c6">00744</a>     iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,size());}
+<a name="l00746"></a><a class="code" href="a00276.html#78a06182276ff758788d4c0623ae0d71">00746</a>     const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
+<a name="l00748"></a><a class="code" href="a00276.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">00748</a>     const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
+<a name="l00750"></a><a class="code" href="a00276.html#f88fcf1c920693c39bd9709db33c199f">00750</a>     const_iterator cbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
+<a name="l00752"></a><a class="code" href="a00276.html#0c15a5d0f1cf75d687dabba07da1d46b">00752</a>     const_iterator cend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,size());}
+<a name="l00754"></a><a class="code" href="a00276.html#5e220926d09236d98f04fe0721e5f9a1">00754</a>     reverse_iterator rbegin() {<span class="keywordflow">return</span> reverse_iterator(end());}
+<a name="l00756"></a><a class="code" href="a00276.html#290119a4eb43cd6a9e98fa17016ba3c2">00756</a>     reverse_iterator rend() {<span class="keywordflow">return</span> reverse_iterator(begin());}
+<a name="l00758"></a><a class="code" href="a00276.html#9f9c103e18d5f212703805354074ad44">00758</a>     const_reverse_iterator rbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
+<a name="l00760"></a><a class="code" href="a00276.html#d438b9b32ea3a8ffb703015b6dce055b">00760</a>     const_reverse_iterator rend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
+<a name="l00762"></a><a class="code" href="a00276.html#db78a1d28c9c966050e8a2926d834a33">00762</a>     const_reverse_iterator crbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
+<a name="l00764"></a><a class="code" href="a00276.html#fff9cece89438587997ebedf93c5e962">00764</a>     const_reverse_iterator crend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
+<a name="l00766"></a><a class="code" href="a00276.html#15181759c0bfa2ddce5d10c7550e0002">00766</a>     reference front() {
+<a name="l00767"></a>00767         __TBB_ASSERT( size()>0, NULL);
+<a name="l00768"></a>00768         <span class="keywordflow">return</span> static_cast<T*>(my_segment[0].array)[0];
+<a name="l00769"></a>00769     }
+<a name="l00771"></a><a class="code" href="a00276.html#502615a858eb9fa0390ee59169065e90">00771</a>     const_reference front()<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> static_cast<const T*>(my_segment[0].array)[0];
+<a name="l00774"></a>00774     }
+<a name="l00776"></a><a class="code" href="a00276.html#41ce48d6015a1a2812d41cf620ec3476">00776</a>     reference back() {
+<a name="l00777"></a>00777         __TBB_ASSERT( size()>0, NULL);
+<a name="l00778"></a>00778         <span class="keywordflow">return</span> internal_subscript( size()-1 );
+<a name="l00779"></a>00779     }
+<a name="l00781"></a><a class="code" href="a00276.html#bd518e204107d07fd08d0ec5bdfd383d">00781</a>     const_reference back()<span class="keyword"> const </span>{
+<a name="l00782"></a>00782         __TBB_ASSERT( size()>0, NULL);
+<a name="l00783"></a>00783         <span class="keywordflow">return</span> internal_subscript( size()-1 );
+<a name="l00784"></a>00784     }
+<a name="l00786"></a><a class="code" href="a00276.html#2fdba8e90de6a4d2300222236d46758e">00786</a>     allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+<a name="l00787"></a>00787 
+<a name="l00789"></a><a class="code" href="a00276.html#423e5aa15e0e3309ad86d026fd85f6f6">00789</a>     <span class="keywordtype">void</span> assign(size_type n, const_reference t) {
+<a name="l00790"></a>00790         clear();
+<a name="l00791"></a>00791         internal_resize( n, <span class="keyword">sizeof</span>(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
+<a name="l00792"></a>00792     }
+<a name="l00793"></a>00793 
+<a name="l00795"></a>00795     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00796"></a><a class="code" href="a00276.html#93a06b3112cb804f42f40efb5e7387b4">00796</a>     <span class="keywordtype">void</span> assign(I first, I last) {
+<a name="l00797"></a>00797         clear(); internal_assign_range( first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
+<a name="l00798"></a>00798     }
+<a name="l00799"></a>00799 
+<a name="l00801"></a><a class="code" href="a00276.html#96c9c4bd968ed3edb8dd276854d2dae0">00801</a>     <span class="keywordtype">void</span> swap(<a class="code" href="a00276.html">concurrent_vector</a> &vector) {
+<a name="l00802"></a>00802         <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector ) {
+<a name="l00803"></a>00803             concurrent_vector_base_v3::internal_swap(static_cast<concurrent_vector_base_v3&>(vector));
+<a name="l00804"></a>00804             std::swap(this->my_allocator, vector.my_allocator);
+<a name="l00805"></a>00805         }
+<a name="l00806"></a>00806     }
+<a name="l00807"></a>00807 
+<a name="l00809"></a>00809 
+<a name="l00810"></a><a class="code" href="a00276.html#26f937a359a66b6aae904c3cd9a3c444">00810</a>     <span class="keywordtype">void</span> clear() {
+<a name="l00811"></a>00811         internal_clear(&destroy_array);
+<a name="l00812"></a>00812     }
+<a name="l00813"></a>00813 
+<a name="l00815"></a><a class="code" href="a00276.html#da2444b28bb840d38f60d0030333a5fc">00815</a>     ~<a class="code" href="a00276.html">concurrent_vector</a>() {
+<a name="l00816"></a>00816         segment_t *table = my_segment;
+<a name="l00817"></a>00817         internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+<a name="l00818"></a>00818         <span class="comment">// base class destructor call should be then</span>
+<a name="l00819"></a>00819     }
+<a name="l00820"></a>00820 
+<a name="l00821"></a>00821     <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="l00822"></a>00822 <span class="keyword">private</span>:
+<a name="l00824"></a>00824     <span class="keyword">static</span> <span class="keywordtype">void</span> *internal_allocator(internal::concurrent_vector_base_v3 &vb, size_t k) {
+<a name="l00825"></a>00825         <span class="keywordflow">return</span> static_cast<concurrent_vector<T, A>&>(vb).my_allocator.allocate(k);
+<a name="l00826"></a>00826     }
+<a name="l00828"></a>00828     <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="l00829"></a>00829 
+<a name="l00831"></a>00831     T& internal_subscript( size_type index ) <span class="keyword">const</span>;
+<a name="l00832"></a>00832 
+<a name="l00834"></a>00834     T& internal_subscript_with_exceptions( size_type index ) <span class="keyword">const</span>;
+<a name="l00835"></a>00835 
+<a name="l00837"></a>00837     <span class="keywordtype">void</span> internal_assign_n(size_type n, const_pointer p) {
+<a name="l00838"></a>00838         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="l00839"></a>00839     }
+<a name="l00840"></a>00840 
+<a name="l00842"></a>00842     <span class="keyword">template</span><<span class="keywordtype">bool</span> B> <span class="keyword">class </span>is_integer_tag;
+<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_range(I first, I last, is_integer_tag<true> *) {
+<a name="l00847"></a>00847         internal_assign_n(static_cast<size_type>(first), &static_cast<T&>(last));
+<a name="l00848"></a>00848     }
+<a name="l00850"></a>00850     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00851"></a>00851     <span class="keywordtype">void</span> internal_assign_range(I first, I last, is_integer_tag<false> *) {
+<a name="l00852"></a>00852         internal_assign_iterators(first, last);
+<a name="l00853"></a>00853     }
+<a name="l00855"></a>00855     <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00856"></a>00856     <span class="keywordtype">void</span> internal_assign_iterators(I first, I last);
+<a name="l00857"></a>00857 
+<a name="l00859"></a>00859     <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="l00860"></a>00860 
+<a name="l00862"></a>00862     <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="l00863"></a>00863 
+<a name="l00865"></a>00865     <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="l00866"></a>00866 
+<a name="l00868"></a>00868     <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="l00869"></a>00869 
+<a name="l00871"></a>00871     <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="l00872"></a>00872 
+<a name="l00874"></a>00874     <span class="keyword">class </span>internal_loop_guide : internal::no_copy {
+<a name="l00875"></a>00875     <span class="keyword">public</span>:
+<a name="l00876"></a>00876         <span class="keyword">const</span> pointer array;
+<a name="l00877"></a>00877         <span class="keyword">const</span> size_type n;
+<a name="l00878"></a>00878         size_type i;
+<a name="l00879"></a>00879         internal_loop_guide(size_type ntrials, <span class="keywordtype">void</span> *ptr)
+<a name="l00880"></a>00880             : array(static_cast<pointer>(ptr)), n(ntrials), i(0) {}
+<a name="l00881"></a>00881         <span class="keywordtype">void</span> init() {   <span class="keywordflow">for</span>(; i < n; ++i) <span class="keyword">new</span>( &array[i] ) T(); }
+<a name="l00882"></a>00882         <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="l00883"></a>00883         <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="l00884"></a>00884         <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="l00885"></a>00885         <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="l00886"></a>00886         ~internal_loop_guide() {
+<a name="l00887"></a>00887             <span class="keywordflow">if</span>(i < n) <span class="comment">// if exception raised, do zeroing on the rest of items</span>
+<a name="l00888"></a>00888                 std::memset(array+i, 0, (n-i)*<span class="keyword">sizeof</span>(value_type));
+<a name="l00889"></a>00889         }
+<a name="l00890"></a>00890     };
+<a name="l00891"></a>00891 };
+<a name="l00892"></a>00892 
+<a name="l00893"></a>00893 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+<a name="l00894"></a>00894 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (push)</span>
+<a name="l00895"></a>00895 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (disable: 4701) // potentially uninitialized local variable "old"</span>
+<a name="l00896"></a>00896 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00897"></a>00897 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00898"></a><a class="code" href="a00276.html#03c6f4cf66532bf4cc907ee738a9a186">00898</a> <span class="keywordtype">void</span> <a class="code" href="a00276.html">concurrent_vector<T, A>::shrink_to_fit</a>() {
+<a name="l00899"></a>00899     internal_segments_table old;
+<a name="l00900"></a>00900     __TBB_TRY {
+<a name="l00901"></a>00901         <span class="keywordflow">if</span>( internal_compact( <span class="keyword">sizeof</span>(T), &old, &destroy_array, &copy_array ) )
+<a name="l00902"></a>00902             internal_free_segments( old.table, pointers_per_long_table, old.first_block ); <span class="comment">// free joined and unnecessary segments</span>
+<a name="l00903"></a>00903     } __TBB_CATCH(...) {
+<a name="l00904"></a>00904         <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="l00905"></a>00905             internal_free_segments( old.table, 1, old.first_block );
+<a name="l00906"></a>00906         __TBB_RETHROW();
+<a name="l00907"></a>00907     }
+<a name="l00908"></a>00908 }
+<a name="l00909"></a>00909 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+<a name="l00910"></a>00910 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (pop)</span>
+<a name="l00911"></a>00911 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4701 is back</span>
+<a name="l00912"></a>00912 <span class="preprocessor"></span>
+<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 <span class="keywordtype">void</span> <a class="code" href="a00276.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="l00915"></a>00915     <span class="comment">// Free the arrays</span>
+<a name="l00916"></a>00916     <span class="keywordflow">while</span>( k > first_block ) {
+<a name="l00917"></a>00917         --k;
+<a name="l00918"></a>00918         T* array = static_cast<T*>(table[k]);
+<a name="l00919"></a>00919         table[k] = NULL;
+<a name="l00920"></a>00920         <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
+<a name="l00921"></a>00921             this->my_allocator.deallocate( array, segment_size(k) );
+<a name="l00922"></a>00922     }
+<a name="l00923"></a>00923     T* array = static_cast<T*>(table[0]);
+<a name="l00924"></a>00924     <span class="keywordflow">if</span>( array > internal::vector_allocation_error_flag ) {
+<a name="l00925"></a>00925         __TBB_ASSERT( first_block > 0, NULL );
+<a name="l00926"></a>00926         <span class="keywordflow">while</span>(k > 0) table[--k] = NULL;
+<a name="l00927"></a>00927         this->my_allocator.deallocate( array, segment_size(first_block) );
+<a name="l00928"></a>00928     }
+<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( size_type index )<span class="keyword"> const </span>{
+<a name="l00933"></a>00933     __TBB_ASSERT( index < my_early_size, <span class="stringliteral">"index out of bounds"</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     __TBB_ASSERT( (segment_t*)my_segment != my_storage || k < pointers_per_short_table, <span class="stringliteral">"index is being allocated"</span> );
+<a name="l00937"></a>00937     <span class="comment">// no need in __TBB_load_with_acquire since thread works in own space or gets </span>
+<a name="l00938"></a>00938     T* array = static_cast<T*>( tbb::internal::itt_hide_load_word(my_segment[k].array));
+<a name="l00939"></a>00939     __TBB_ASSERT( array != internal::vector_allocation_error_flag, <span class="stringliteral">"the instance is broken by bad allocation. Use at() instead"</span> );
+<a name="l00940"></a>00940     __TBB_ASSERT( array, <span class="stringliteral">"index is being allocated"</span> );
+<a name="l00941"></a>00941     <span class="keywordflow">return</span> 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>
+<a name="l00945"></a>00945 T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index )<span class="keyword"> const </span>{
+<a name="l00946"></a>00946     <span class="keywordflow">if</span>( index >= my_early_size )
+<a name="l00947"></a>00947         internal::throw_exception(internal::eid_out_of_range); <span class="comment">// throw std::out_of_range</span>
+<a name="l00948"></a>00948     size_type j = index;
+<a name="l00949"></a>00949     segment_index_t k = segment_base_index_of( j );
+<a name="l00950"></a>00950     <span class="keywordflow">if</span>( (segment_t*)my_segment == my_storage && k >= pointers_per_short_table )
+<a name="l00951"></a>00951         internal::throw_exception(internal::eid_segment_range_error); <span class="comment">// throw std::range_error</span>
+<a name="l00952"></a>00952     <span class="keywordtype">void</span> *array = my_segment[k].array; <span class="comment">// no need in __TBB_load_with_acquire</span>
+<a name="l00953"></a>00953     <span class="keywordflow">if</span>( array <= internal::vector_allocation_error_flag ) <span class="comment">// check for correct segment pointer</span>
+<a name="l00954"></a>00954         internal::throw_exception(internal::eid_index_range_error); <span class="comment">// throw std::range_error</span>
+<a name="l00955"></a>00955     <span class="keywordflow">return</span> static_cast<T*>(array)[j];
+<a name="l00956"></a>00956 }
+<a name="l00957"></a>00957 
+<a name="l00958"></a>00958 <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="l00959"></a>00959 <span class="keywordtype">void</span> concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {
+<a name="l00960"></a>00960     __TBB_ASSERT(my_early_size == 0, NULL);
+<a name="l00961"></a>00961     size_type n = std::distance(first, last);
+<a name="l00962"></a>00962     <span class="keywordflow">if</span>( !n ) <span class="keywordflow">return</span>;
+<a name="l00963"></a>00963     internal_reserve(n, <span class="keyword">sizeof</span>(T), <a class="code" href="a00276.html#2c248a017f0576df3e7cd99627836fd6">max_size</a>());
+<a name="l00964"></a>00964     my_early_size = n;
+<a name="l00965"></a>00965     segment_index_t k = 0;
+<a name="l00966"></a>00966     size_type sz = segment_size( my_first_block );
+<a name="l00967"></a>00967     <span class="keywordflow">while</span>( sz < n ) {
+<a name="l00968"></a>00968         internal_loop_guide loop(sz, my_segment[k].array);
+<a name="l00969"></a>00969         loop.iterate(first);
+<a name="l00970"></a>00970         n -= sz;
+<a name="l00971"></a>00971         <span class="keywordflow">if</span>( !k ) k = my_first_block;
+<a name="l00972"></a>00972         <span class="keywordflow">else</span> { ++k; sz <<= 1; }
+<a name="l00973"></a>00973     }
+<a name="l00974"></a>00974     internal_loop_guide loop(n, my_segment[k].array);
+<a name="l00975"></a>00975     loop.iterate(first);
+<a name="l00976"></a>00976 }
+<a name="l00977"></a>00977 
+<a name="l00978"></a>00978 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00979"></a>00979 <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="l00980"></a>00980     internal_loop_guide loop(n, begin); loop.init();
+<a name="l00981"></a>00981 }
+<a name="l00982"></a>00982 
+<a name="l00983"></a>00983 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00984"></a>00984 <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="l00985"></a>00985     internal_loop_guide loop(n, begin); loop.init(src);
+<a name="l00986"></a>00986 }
+<a name="l00987"></a>00987 
+<a name="l00988"></a>00988 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00989"></a>00989 <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="l00990"></a>00990     internal_loop_guide loop(n, dst); loop.copy(src);
+<a name="l00991"></a>00991 }
+<a name="l00992"></a>00992 
+<a name="l00993"></a>00993 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00994"></a>00994 <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="l00995"></a>00995     internal_loop_guide loop(n, dst); loop.assign(src);
+<a name="l00996"></a>00996 }
+<a name="l00997"></a>00997 
+<a name="l00998"></a>00998 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+<a name="l00999"></a>00999 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warning</span>
+<a name="l01000"></a>01000 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l01001"></a>01001 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4189)</span>
+<a name="l01002"></a>01002 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l01003"></a>01003 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l01004"></a>01004 <span class="keywordtype">void</span> concurrent_vector<T, A>::destroy_array( <span class="keywordtype">void</span>* begin, size_type n ) {
+<a name="l01005"></a>01005     T* array = static_cast<T*>(begin);
+<a name="l01006"></a>01006     <span class="keywordflow">for</span>( size_type j=n; j>0; --j )
+<a name="l01007"></a>01007         array[j-1].~T(); <span class="comment">// destructors are supposed to not throw any exceptions</span>
+<a name="l01008"></a>01008 }
+<a name="l01009"></a>01009 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+<a name="l01010"></a>01010 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l01011"></a>01011 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4189 is back</span>
+<a name="l01012"></a>01012 <span class="preprocessor"></span>
+<a name="l01013"></a>01013 <span class="comment">// concurrent_vector's template functions</span>
+<a name="l01014"></a>01014 <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="l01015"></a>01015 <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="l01016"></a>01016     <span class="comment">// Simply:    return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());</span>
+<a name="l01017"></a>01017     <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01018"></a>01018     <span class="keyword">typename</span> concurrent_vector<T, A1>::const_iterator i(a.begin());
+<a name="l01019"></a>01019     <span class="keyword">typename</span> concurrent_vector<T, A2>::const_iterator j(b.begin());
+<a name="l01020"></a>01020     <span class="keywordflow">for</span>(; i != a.end(); ++i, ++j)
+<a name="l01021"></a>01021         <span class="keywordflow">if</span>( !(*i == *j) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01022"></a>01022     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01023"></a>01023 }
+<a name="l01024"></a>01024 
+<a name="l01025"></a>01025 <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="l01026"></a>01026 <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="l01027"></a>01027 {    <span class="keywordflow">return</span> !(a == b); }
+<a name="l01028"></a>01028 
+<a name="l01029"></a>01029 <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="l01030"></a>01030 <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="l01031"></a>01031 {    <span class="keywordflow">return</span> (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }
+<a name="l01032"></a>01032 
+<a name="l01033"></a>01033 <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="l01034"></a>01034 <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="l01035"></a>01035 {    <span class="keywordflow">return</span> b < a; }
+<a name="l01036"></a>01036 
+<a name="l01037"></a>01037 <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="l01038"></a>01038 <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="l01039"></a>01039 {    <span class="keywordflow">return</span> !(b < a); }
+<a name="l01040"></a>01040 
+<a name="l01041"></a>01041 <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="l01042"></a>01042 <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="l01043"></a>01043 {    <span class="keywordflow">return</span> !(a < b); }
+<a name="l01044"></a>01044 
+<a name="l01045"></a>01045 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l01046"></a>01046 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)
+<a name="l01047"></a>01047 {    a.swap( b ); }
+<a name="l01048"></a>01048 
+<a name="l01049"></a>01049 } <span class="comment">// namespace tbb</span>
+<a name="l01050"></a>01050 
+<a name="l01051"></a>01051 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
+<a name="l01052"></a>01052 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l01053"></a>01053 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4267 is back</span>
+<a name="l01054"></a>01054 <span class="preprocessor"></span>
+<a name="l01055"></a>01055 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_vector_H */</span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00489.html b/doc/html/a00489.html
deleted file mode 100644
index 439546f..0000000
--- a/doc/html/a00489.html
+++ /dev/null
@@ -1,81 +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>null_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>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-2011 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_null_mutex_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_null_mutex_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="a00277.html">00029</a> <span class="keyword">class </span><a class="code" href="a00277.html">null_mutex</a> {   
-<a name="l00031"></a>00031     <a class="code" href="a00277.html">null_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00277.html">null_mutex</a>& );   
-<a name="l00032"></a>00032     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00277.html">null_mutex</a>& );   
-<a name="l00033"></a>00033 <span class="keyword">public</span>:   
-<a name="l00035"></a><a class="code" href="a00278.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00278.html">scoped_lock</a> {   
-<a name="l00036"></a>00036     <span class="keyword">public</span>:   
-<a name="l00037"></a>00037         <a class="code" href="a00278.html">scoped_lock</a>() {}
-<a name="l00038"></a>00038         <a class="code" href="a00278.html">scoped_lock</a>( <a class="code" href="a00277.html">null_mutex</a>& ) {}   
-<a name="l00039"></a>00039         ~<a class="code" href="a00278.html">scoped_lock</a>() {}
-<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00277.html">null_mutex</a>& ) {}
-<a name="l00041"></a>00041         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00277.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="a00277.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>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00490.html b/doc/html/a00490.html
deleted file mode 100644
index 883e61a..0000000
--- a/doc/html/a00490.html
+++ /dev/null
@@ -1,83 +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>null_rw_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>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-2011 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_null_rw_mutex_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_null_rw_mutex_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="a00279.html">00029</a> <span class="keyword">class </span><a class="code" href="a00279.html">null_rw_mutex</a> {
-<a name="l00031"></a>00031     <a class="code" href="a00279.html">null_rw_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00279.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="a00279.html">null_rw_mutex</a>& );   
-<a name="l00033"></a>00033 <span class="keyword">public</span>:   
-<a name="l00035"></a><a class="code" href="a00280.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00280.html">scoped_lock</a> {   
-<a name="l00036"></a>00036     <span class="keyword">public</span>:   
-<a name="l00037"></a>00037         <a class="code" href="a00280.html">scoped_lock</a>() {}
-<a name="l00038"></a>00038         <a class="code" href="a00280.html">scoped_lock</a>( <a class="code" href="a00279.html">null_rw_mutex</a>& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
-<a name="l00039"></a>00039         ~<a class="code" href="a00280.html">scoped_lock</a>() {}
-<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00279.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="a00279.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="a00279.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>;   
-<a name="l00051"></a>00051     <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="l00052"></a>00052     <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="l00053"></a>00053 };  
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 }
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_null_rw_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00491.html b/doc/html/a00491.html
deleted file mode 100644
index 2710997..0000000
--- a/doc/html/a00491.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-2011 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="a00281.html">00060</a> <span class="keyword">class </span><a class="code" href="a00281.html">parallel_do_feeder</a>: internal::no_copy
-<a name="l00061"></a>00061 {
-<a name="l00062"></a>00062     <a class="code" href="a00281.html">parallel_do_feeder</a>() {}
-<a name="l00063"></a>00063     <span class="keyword">virtual</span> ~<a class="code" href="a00281.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="a00281.html#40baaf0f6856f4491dd0adf896c93516">00068</a>     <span class="keywordtype">void</span> <a class="code" href="a00281.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> (task::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="a00311.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_TASK_GROUP_CONTEXT</span>
-<a name="l00172"></a>00172 <span class="preprocessor"></span>        parallel_do_feeder_impl(<a class="code" href="a00314.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="a00311.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_TASK_GROUP_CONTEXT
-<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_TASK_GROUP_CONTEXT</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_TASK_GROUP_CONTEXT
-<a name="l00413"></a>00413         , task_group_context& context 
-<a name="l00414"></a>00414 #endif <span class="comment">// __TBB_TASK_GROUP_CONTEXT </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_TASK_GROUP_CONTEXT</span>
-<a name="l00419"></a>00419 <span class="preprocessor"></span>            , context
-<a name="l00420"></a>00420 <span class="preprocessor">#endif // __TBB_TASK_GROUP_CONTEXT </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_TASK_GROUP_CONTEXT
-<a name="l00430"></a>00430         , task_group_context& context 
-<a name="l00431"></a>00431 #endif <span class="comment">// __TBB_TASK_GROUP_CONTEXT</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_TASK_GROUP_CONTEXT</span>
-<a name="l00436"></a>00436 <span class="preprocessor"></span>            , context
-<a name="l00437"></a>00437 <span class="preprocessor">#endif // __TBB_TASK_GROUP_CONTEXT</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="a00395.html#g3383e2703977012b6f384d673410f1f7">00470</a> <span class="keywordtype">void</span> <a class="code" href="a00395.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_TASK_GROUP_CONTEXT</span>
-<a name="l00475"></a>00475 <span class="preprocessor"></span>    <a class="code" href="a00314.html">task_group_context</a> context;
-<a name="l00476"></a>00476 <span class="preprocessor">#endif // __TBB_TASK_GROUP_CONTEXT</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_TASK_GROUP_CONTEXT
-<a name="l00479"></a>00479         , context
-<a name="l00480"></a>00480 #endif <span class="comment">// __TBB_TASK_GROUP_CONTEXT</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_TASK_GROUP_CONTEXT</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="a00395.html#g2617dc9b88b3285a7212599d49f74228">00488</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00395.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <a class="code" href="a00314.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_TASK_GROUP_CONTEXT</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-2011 Intel Corporation.  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/a00496.html b/doc/html/a00496.html
new file mode 100644
index 0000000..1fd5d87
--- /dev/null
+++ b/doc/html/a00496.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<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>
+<!-- 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>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-2012 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_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="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_api.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-2012 Intel Corporation.  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/a00499.html b/doc/html/a00499.html
new file mode 100644
index 0000000..a5f13ac
--- /dev/null
+++ b/doc/html/a00499.html
@@ -0,0 +1,964 @@
+<!DOCTYPE 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>
+<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>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-2012 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_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="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 "tbb_allocator.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include <string.h></span>  <span class="comment">// for memcpy</span>
+<a name="l00030"></a>00030 
+<a name="l00031"></a>00031 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_api.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#else</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span>
+<a name="l00035"></a>00035 <span class="preprocessor">#endif</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>
+<a name="l00037"></a>00037 <span class="keyword">namespace </span>tbb {
+<a name="l00038"></a>00038 
+<a name="l00040"></a><a class="code" href="a00414.html#a8622ae61b7e7737dac26542e181178e">00040</a> <span class="keyword">enum</span> <a class="code" href="a00414.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> { ets_key_per_instance, ets_no_key };
+<a name="l00041"></a>00041 
+<a name="l00042"></a>00042 <span class="keyword">namespace </span>interface6 {
+<a name="l00043"></a>00043  
+<a name="l00045"></a>00045     <span class="keyword">namespace </span>internal { 
+<a name="l00046"></a>00046 
+<a name="l00047"></a>00047         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
+<a name="l00048"></a>00048         <span class="keyword">class </span>ets_base: tbb::internal::no_copy {
+<a name="l00049"></a>00049         <span class="keyword">protected</span>:
+<a name="l00050"></a>00050 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD key_type;
+<a name="l00052"></a>00052 <span class="preprocessor">#else</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_t key_type;
+<a name="l00054"></a>00054 <span class="preprocessor">#endif</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_PROTECTED_NESTED_CLASS_BROKEN</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span>        <span class="keyword">public</span>:
+<a name="l00057"></a>00057 <span class="preprocessor">#endif</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span>            <span class="keyword">struct </span>slot;
+<a name="l00059"></a>00059 
+<a name="l00060"></a>00060             <span class="keyword">struct </span>array {
+<a name="l00061"></a>00061                 array* next;
+<a name="l00062"></a>00062                 size_t lg_size;
+<a name="l00063"></a>00063                 slot& at( size_t k ) {
+<a name="l00064"></a>00064                     <span class="keywordflow">return</span> ((slot*)(<span class="keywordtype">void</span>*)(<span class="keyword">this</span>+1))[k];
+<a name="l00065"></a>00065                 }
+<a name="l00066"></a>00066                 size_t size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (size_t)1<<lg_size;}
+<a name="l00067"></a>00067                 size_t mask()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size()-1;}
+<a name="l00068"></a>00068                 size_t start( size_t h )<span class="keyword"> const </span>{
+<a name="l00069"></a>00069                     <span class="keywordflow">return</span> h>>(8*<span class="keyword">sizeof</span>(size_t)-lg_size);
+<a name="l00070"></a>00070                 }
+<a name="l00071"></a>00071             };
+<a name="l00072"></a>00072             <span class="keyword">struct </span>slot {
+<a name="l00073"></a>00073                 key_type key;
+<a name="l00074"></a>00074                 <span class="keywordtype">void</span>* ptr;
+<a name="l00075"></a>00075                 <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !key;}
+<a name="l00076"></a>00076                 <span class="keywordtype">bool</span> match( key_type k )<span class="keyword"> const </span>{<span class="keywordflow">return</span> key==k;}
+<a name="l00077"></a>00077                 <span class="keywordtype">bool</span> claim( key_type k ) {
+<a name="l00078"></a>00078                     __TBB_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00254.html">tbb::atomic<key_type></a>)==<span class="keyword">sizeof</span>(key_type), NULL);
+<a name="l00079"></a>00079                     <span class="keywordflow">return</span> tbb::internal::punned_cast<tbb::atomic<key_type>*>(&key)->compare_and_swap(k,0)==0;
+<a name="l00080"></a>00080                 }
+<a name="l00081"></a>00081             };
+<a name="l00082"></a>00082 <span class="preprocessor">#if __TBB_PROTECTED_NESTED_CLASS_BROKEN</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>        <span class="keyword">protected</span>:
+<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="keyword">static</span> key_type key_of_current_thread() {
+<a name="l00087"></a>00087                tbb::tbb_thread::id <span class="keywordtype">id</span> = tbb::this_tbb_thread::get_id();
+<a name="l00088"></a>00088                key_type k;
+<a name="l00089"></a>00089                memcpy( &k, &<span class="keywordtype">id</span>, <span class="keyword">sizeof</span>(k) );
+<a name="l00090"></a>00090                <span class="keywordflow">return</span> k;
+<a name="l00091"></a>00091             }
+<a name="l00092"></a>00092 
+<a name="l00094"></a>00094 
+<a name="l00096"></a>00096             atomic<array*> my_root;
+<a name="l00097"></a>00097             atomic<size_t> my_count;
+<a name="l00098"></a>00098             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_local() = 0;
+<a name="l00099"></a>00099             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_array(size_t _size) = 0;  <span class="comment">// _size in bytes</span>
+<a name="l00100"></a>00100             <span class="keyword">virtual</span> <span class="keywordtype">void</span> free_array(<span class="keywordtype">void</span>* ptr, size_t _size) = 0; <span class="comment">// _size in bytes</span>
+<a name="l00101"></a>00101             array* allocate( size_t lg_size ) {
+<a name="l00102"></a>00102                 size_t n = 1<<lg_size;  
+<a name="l00103"></a>00103                 array* a = static_cast<array*>(create_array( <span class="keyword">sizeof</span>(array)+n*<span class="keyword">sizeof</span>(slot) ));
+<a name="l00104"></a>00104                 a->lg_size = lg_size;
+<a name="l00105"></a>00105                 std::memset( a+1, 0, n*<span class="keyword">sizeof</span>(slot) );
+<a name="l00106"></a>00106                 <span class="keywordflow">return</span> a;
+<a name="l00107"></a>00107             }
+<a name="l00108"></a>00108             <span class="keywordtype">void</span> free(array* a) {
+<a name="l00109"></a>00109                 size_t n = 1<<(a->lg_size);  
+<a name="l00110"></a>00110                 free_array( (<span class="keywordtype">void</span> *)a, size_t(<span class="keyword">sizeof</span>(array)+n*<span class="keyword">sizeof</span>(slot)) );
+<a name="l00111"></a>00111             }
+<a name="l00112"></a>00112             <span class="keyword">static</span> size_t hash( key_type k ) {
+<a name="l00113"></a>00113                 <span class="comment">// Multiplicative hashing.  Client should use *upper* bits.</span>
+<a name="l00114"></a>00114                 <span class="comment">// casts required for Mac gcc4.* compiler</span>
+<a name="l00115"></a>00115                 <span class="keywordflow">return</span> uintptr_t(k)*tbb::internal::size_t_select(0x9E3779B9,0x9E3779B97F4A7C15ULL);
+<a name="l00116"></a>00116             } 
+<a name="l00117"></a>00117         
+<a name="l00118"></a>00118             ets_base() {my_root=NULL; my_count=0;}
+<a name="l00119"></a>00119             <span class="keyword">virtual</span> ~ets_base();  <span class="comment">// g++ complains if this is not virtual...</span>
+<a name="l00120"></a>00120             <span class="keywordtype">void</span>* table_lookup( <span class="keywordtype">bool</span>& exists );
+<a name="l00121"></a>00121             <span class="keywordtype">void</span> table_clear();
+<a name="l00122"></a>00122             slot& table_find( key_type k ) {
+<a name="l00123"></a>00123                 size_t h = hash(k);
+<a name="l00124"></a>00124                 array* r = my_root;
+<a name="l00125"></a>00125                 size_t mask = r->mask();
+<a name="l00126"></a>00126                 <span class="keywordflow">for</span>(size_t i = r->start(h);;i=(i+1)&mask) {
+<a name="l00127"></a>00127                     slot& s = r->at(i);
+<a name="l00128"></a>00128                     <span class="keywordflow">if</span>( s.empty() || s.match(k) )
+<a name="l00129"></a>00129                         <span class="keywordflow">return</span> s;
+<a name="l00130"></a>00130                 }
+<a name="l00131"></a>00131             }
+<a name="l00132"></a>00132             <span class="keywordtype">void</span> table_reserve_for_copy( <span class="keyword">const</span> ets_base& other ) {
+<a name="l00133"></a>00133                 __TBB_ASSERT(!my_root,NULL);
+<a name="l00134"></a>00134                 __TBB_ASSERT(!my_count,NULL);
+<a name="l00135"></a>00135                 <span class="keywordflow">if</span>( other.my_root ) {
+<a name="l00136"></a>00136                     array* a = allocate(other.my_root->lg_size);
+<a name="l00137"></a>00137                     a->next = NULL;
+<a name="l00138"></a>00138                     my_root = a;
+<a name="l00139"></a>00139                     my_count = other.my_count;
+<a name="l00140"></a>00140                 }
+<a name="l00141"></a>00141             }
+<a name="l00142"></a>00142         };
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
+<a name="l00145"></a>00145         ets_base<ETS_key_type>::~ets_base() {
+<a name="l00146"></a>00146             __TBB_ASSERT(!my_root, NULL);
+<a name="l00147"></a>00147         }
+<a name="l00148"></a>00148 
+<a name="l00149"></a>00149         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
+<a name="l00150"></a>00150         <span class="keywordtype">void</span> ets_base<ETS_key_type>::table_clear() {
+<a name="l00151"></a>00151             <span class="keywordflow">while</span>( array* r = my_root ) {
+<a name="l00152"></a>00152                 my_root = r->next;
+<a name="l00153"></a>00153                 free(r);
+<a name="l00154"></a>00154             }
+<a name="l00155"></a>00155             my_count = 0;
+<a name="l00156"></a>00156         }
+<a name="l00157"></a>00157                 
+<a name="l00158"></a>00158         <span class="keyword">template</span><ets_key_usage_type ETS_key_type>
+<a name="l00159"></a>00159         <span class="keywordtype">void</span>* ets_base<ETS_key_type>::table_lookup( <span class="keywordtype">bool</span>& exists ) {
+<a name="l00160"></a>00160             <span class="keyword">const</span> key_type k = key_of_current_thread(); 
+<a name="l00161"></a>00161 
+<a name="l00162"></a>00162             __TBB_ASSERT(k!=0,NULL);
+<a name="l00163"></a>00163             <span class="keywordtype">void</span>* found;
+<a name="l00164"></a>00164             size_t h = hash(k);
+<a name="l00165"></a>00165             <span class="keywordflow">for</span>( array* r=my_root; r; r=r->next ) {
+<a name="l00166"></a>00166                 size_t mask=r->mask();
+<a name="l00167"></a>00167                 <span class="keywordflow">for</span>(size_t i = r->start(h); ;i=(i+1)&mask) {
+<a name="l00168"></a>00168                     slot& s = r->at(i);
+<a name="l00169"></a>00169                     <span class="keywordflow">if</span>( s.empty() ) <span class="keywordflow">break</span>;
+<a name="l00170"></a>00170                     <span class="keywordflow">if</span>( s.match(k) ) {
+<a name="l00171"></a>00171                         <span class="keywordflow">if</span>( r==my_root ) {
+<a name="l00172"></a>00172                             <span class="comment">// Success at top level</span>
+<a name="l00173"></a>00173                             exists = <span class="keyword">true</span>;
+<a name="l00174"></a>00174                             <span class="keywordflow">return</span> s.ptr;
+<a name="l00175"></a>00175                         } <span class="keywordflow">else</span> {
+<a name="l00176"></a>00176                             <span class="comment">// Success at some other level.  Need to insert at top level.</span>
+<a name="l00177"></a>00177                             exists = <span class="keyword">true</span>;
+<a name="l00178"></a>00178                             found = s.ptr;
+<a name="l00179"></a>00179                             <span class="keywordflow">goto</span> insert;
+<a name="l00180"></a>00180                         }
+<a name="l00181"></a>00181                     }
+<a name="l00182"></a>00182                 }
+<a name="l00183"></a>00183             }
+<a name="l00184"></a>00184             <span class="comment">// Key does not yet exist</span>
+<a name="l00185"></a>00185             exists = <span class="keyword">false</span>;
+<a name="l00186"></a>00186             found = create_local();
+<a name="l00187"></a>00187             {
+<a name="l00188"></a>00188                 size_t c = ++my_count;
+<a name="l00189"></a>00189                 array* r = my_root;
+<a name="l00190"></a>00190                 <span class="keywordflow">if</span>( !r || c>r->size()/2 ) {
+<a name="l00191"></a>00191                     size_t s = r ? r->lg_size : 2;
+<a name="l00192"></a>00192                     <span class="keywordflow">while</span>( c>size_t(1)<<(s-1) ) ++s;
+<a name="l00193"></a>00193                     array* a = allocate(s);
+<a name="l00194"></a>00194                     <span class="keywordflow">for</span>(;;) {
+<a name="l00195"></a>00195                         a->next = my_root;
+<a name="l00196"></a>00196                         array* new_r = my_root.compare_and_swap(a,r);
+<a name="l00197"></a>00197                         <span class="keywordflow">if</span>( new_r==r ) <span class="keywordflow">break</span>;
+<a name="l00198"></a>00198                         <span class="keywordflow">if</span>( new_r->lg_size>=s ) {
+<a name="l00199"></a>00199                             <span class="comment">// Another thread inserted an equal or  bigger array, so our array is superfluous.</span>
+<a name="l00200"></a>00200                             free(a);
+<a name="l00201"></a>00201                             <span class="keywordflow">break</span>;
+<a name="l00202"></a>00202                         }
+<a name="l00203"></a>00203                         r = new_r;
+<a name="l00204"></a>00204                     }
+<a name="l00205"></a>00205                 }
+<a name="l00206"></a>00206             }
+<a name="l00207"></a>00207         insert:
+<a name="l00208"></a>00208             <span class="comment">// Guaranteed to be room for it, and it is not present, so search for empty slot and grab it.</span>
+<a name="l00209"></a>00209             array* ir = my_root;
+<a name="l00210"></a>00210             size_t mask = ir->mask();
+<a name="l00211"></a>00211             <span class="keywordflow">for</span>(size_t i = ir->start(h);;i=(i+1)&mask) {
+<a name="l00212"></a>00212                 slot& s = ir->at(i);
+<a name="l00213"></a>00213                 <span class="keywordflow">if</span>( s.empty() ) {
+<a name="l00214"></a>00214                     <span class="keywordflow">if</span>( s.claim(k) ) {
+<a name="l00215"></a>00215                         s.ptr = found;
+<a name="l00216"></a>00216                         <span class="keywordflow">return</span> found;
+<a name="l00217"></a>00217                     }
+<a name="l00218"></a>00218                 }
+<a name="l00219"></a>00219             }
+<a name="l00220"></a>00220         }
+<a name="l00221"></a>00221 
+<a name="l00223"></a>00223         <span class="keyword">template</span> <>
+<a name="l00224"></a>00224         <span class="keyword">class </span>ets_base<ets_key_per_instance>: <span class="keyword">protected</span> ets_base<ets_no_key> {
+<a name="l00225"></a>00225             <span class="keyword">typedef</span> ets_base<ets_no_key> super;
+<a name="l00226"></a>00226 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00227"></a>00227 <span class="preprocessor"></span>            <span class="keyword">typedef</span> DWORD tls_key_t;
+<a name="l00228"></a>00228             <span class="keywordtype">void</span> create_key() { my_key = TlsAlloc(); }
+<a name="l00229"></a>00229             <span class="keywordtype">void</span> destroy_key() { TlsFree(my_key); }
+<a name="l00230"></a>00230             <span class="keywordtype">void</span> set_tls(<span class="keywordtype">void</span> * value) { TlsSetValue(my_key, (LPVOID)value); }
+<a name="l00231"></a>00231             <span class="keywordtype">void</span>* get_tls() { <span class="keywordflow">return</span> (<span class="keywordtype">void</span> *)TlsGetValue(my_key); }
+<a name="l00232"></a>00232 <span class="preprocessor">#else</span>
+<a name="l00233"></a>00233 <span class="preprocessor"></span>            <span class="keyword">typedef</span> pthread_key_t tls_key_t;
+<a name="l00234"></a>00234             <span class="keywordtype">void</span> create_key() { pthread_key_create(&my_key, NULL); }
+<a name="l00235"></a>00235             <span class="keywordtype">void</span> destroy_key() { pthread_key_delete(my_key); }
+<a name="l00236"></a>00236             <span class="keywordtype">void</span> set_tls( <span class="keywordtype">void</span> * value )<span class="keyword"> const </span>{ pthread_setspecific(my_key, value); }
+<a name="l00237"></a>00237             <span class="keywordtype">void</span>* get_tls()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> pthread_getspecific(my_key); }
+<a name="l00238"></a>00238 <span class="preprocessor">#endif</span>
+<a name="l00239"></a>00239 <span class="preprocessor"></span>            tls_key_t my_key;
+<a name="l00240"></a>00240             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_local() = 0;
+<a name="l00241"></a>00241             <span class="keyword">virtual</span> <span class="keywordtype">void</span>* create_array(size_t _size) = 0;  <span class="comment">// _size in bytes</span>
+<a name="l00242"></a>00242             <span class="keyword">virtual</span> <span class="keywordtype">void</span> free_array(<span class="keywordtype">void</span>* ptr, size_t _size) = 0; <span class="comment">// size in bytes</span>
+<a name="l00243"></a>00243         <span class="keyword">public</span>:
+<a name="l00244"></a>00244             ets_base() {create_key();}
+<a name="l00245"></a>00245             ~ets_base() {destroy_key();}
+<a name="l00246"></a>00246             <span class="keywordtype">void</span>* table_lookup( <span class="keywordtype">bool</span>& exists ) {
+<a name="l00247"></a>00247                 <span class="keywordtype">void</span>* found = get_tls();
+<a name="l00248"></a>00248                 <span class="keywordflow">if</span>( found ) {
+<a name="l00249"></a>00249                     exists=<span class="keyword">true</span>;
+<a name="l00250"></a>00250                 } <span class="keywordflow">else</span> {
+<a name="l00251"></a>00251                     found = super::table_lookup(exists);
+<a name="l00252"></a>00252                     set_tls(found);
+<a name="l00253"></a>00253                 }
+<a name="l00254"></a>00254                 <span class="keywordflow">return</span> found; 
+<a name="l00255"></a>00255             }
+<a name="l00256"></a>00256             <span class="keywordtype">void</span> table_clear() {
+<a name="l00257"></a>00257                 destroy_key();
+<a name="l00258"></a>00258                 create_key(); 
+<a name="l00259"></a>00259                 super::table_clear();
+<a name="l00260"></a>00260             }
+<a name="l00261"></a>00261         };
+<a name="l00262"></a>00262 
+<a name="l00264"></a>00264         <span class="keyword">template</span>< <span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value >
+<a name="l00265"></a>00265         <span class="keyword">class </span>enumerable_thread_specific_iterator 
+<a name="l00266"></a>00266 #if defined(_WIN64) && defined(_MSC_VER) 
+<a name="l00267"></a>00267             <span class="comment">// Ensure that Microsoft's internal template function _Val_type works correctly.</span>
+<a name="l00268"></a>00268             : public std::iterator<std::random_access_iterator_tag,Value>
+<a name="l00269"></a>00269 #endif <span class="comment">/* defined(_WIN64) && defined(_MSC_VER) */</span>
+<a name="l00270"></a>00270         {
+<a name="l00272"></a>00272         
+<a name="l00273"></a>00273             Container *my_container;
+<a name="l00274"></a>00274             <span class="keyword">typename</span> Container::size_type my_index;
+<a name="l00275"></a>00275             <span class="keyword">mutable</span> Value *my_value;
+<a name="l00276"></a>00276         
+<a name="l00277"></a>00277             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T>
+<a name="l00278"></a>00278             <span class="keyword">friend</span> enumerable_thread_specific_iterator<C,T> operator+( ptrdiff_t offset, 
+<a name="l00279"></a>00279                                                                        <span class="keyword">const</span> enumerable_thread_specific_iterator<C,T>& v );
+<a name="l00280"></a>00280         
+<a name="l00281"></a>00281             <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="l00282"></a>00282             <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="l00283"></a>00283                                     <span class="keyword">const</span> enumerable_thread_specific_iterator<C,U>& j );
+<a name="l00284"></a>00284         
+<a name="l00285"></a>00285             <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="l00286"></a>00286             <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<C,T>& i, 
+<a name="l00287"></a>00287                                    <span class="keyword">const</span> enumerable_thread_specific_iterator<C,U>& j );
+<a name="l00288"></a>00288         
+<a name="l00289"></a>00289             <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="l00290"></a>00290             <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="l00291"></a>00291             
+<a name="l00292"></a>00292             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
+<a name="l00293"></a>00293             <span class="keyword">friend</span> <span class="keyword">class </span>enumerable_thread_specific_iterator;
+<a name="l00294"></a>00294         
+<a name="l00295"></a>00295             <span class="keyword">public</span>:
+<a name="l00296"></a>00296         
+<a name="l00297"></a>00297             enumerable_thread_specific_iterator( <span class="keyword">const</span> Container &container, <span class="keyword">typename</span> Container::size_type index ) : 
+<a name="l00298"></a>00298                 my_container(&const_cast<Container &>(container)), my_index(index), my_value(NULL) {}
+<a name="l00299"></a>00299         
+<a name="l00301"></a>00301             enumerable_thread_specific_iterator() : my_container(NULL), my_index(0), my_value(NULL) {}
+<a name="l00302"></a>00302         
+<a name="l00303"></a>00303             <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00304"></a>00304             enumerable_thread_specific_iterator( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container, U>& other ) :
+<a name="l00305"></a>00305                     my_container( other.my_container ), my_index( other.my_index), my_value( const_cast<Value *>(other.my_value) ) {}
+<a name="l00306"></a>00306         
+<a name="l00307"></a>00307             enumerable_thread_specific_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00308"></a>00308                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator(*my_container, my_index + offset);
+<a name="l00309"></a>00309             }
+<a name="l00310"></a>00310         
+<a name="l00311"></a>00311             enumerable_thread_specific_iterator &operator+=( ptrdiff_t offset ) {
+<a name="l00312"></a>00312                 my_index += offset;
+<a name="l00313"></a>00313                 my_value = NULL;
+<a name="l00314"></a>00314                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00315"></a>00315             }
+<a name="l00316"></a>00316         
+<a name="l00317"></a>00317             enumerable_thread_specific_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
+<a name="l00318"></a>00318                 <span class="keywordflow">return</span> enumerable_thread_specific_iterator( *my_container, my_index-offset );
+<a name="l00319"></a>00319             }
+<a name="l00320"></a>00320         
+<a name="l00321"></a>00321             enumerable_thread_specific_iterator &operator-=( ptrdiff_t offset ) {
+<a name="l00322"></a>00322                 my_index -= offset;
+<a name="l00323"></a>00323                 my_value = NULL;
+<a name="l00324"></a>00324                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00325"></a>00325             }
+<a name="l00326"></a>00326         
+<a name="l00327"></a>00327             Value& operator*()<span class="keyword"> const </span>{
+<a name="l00328"></a>00328                 Value* value = my_value;
+<a name="l00329"></a>00329                 <span class="keywordflow">if</span>( !value ) {
+<a name="l00330"></a>00330                     value = my_value = reinterpret_cast<Value *>(&(*my_container)[my_index].value);
+<a name="l00331"></a>00331                 }
+<a name="l00332"></a>00332                 __TBB_ASSERT( value==reinterpret_cast<Value *>(&(*my_container)[my_index].value), <span class="stringliteral">"corrupt cache"</span> );
+<a name="l00333"></a>00333                 <span class="keywordflow">return</span> *value;
+<a name="l00334"></a>00334             }
+<a name="l00335"></a>00335         
+<a name="l00336"></a>00336             Value& operator[]( ptrdiff_t k )<span class="keyword"> const </span>{
+<a name="l00337"></a>00337                <span class="keywordflow">return</span> (*my_container)[my_index + k].value;
+<a name="l00338"></a>00338             }
+<a name="l00339"></a>00339         
+<a name="l00340"></a>00340             Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+<a name="l00341"></a>00341         
+<a name="l00342"></a>00342             enumerable_thread_specific_iterator& operator++() {
+<a name="l00343"></a>00343                 ++my_index;
+<a name="l00344"></a>00344                 my_value = NULL;
+<a name="l00345"></a>00345                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00346"></a>00346             }
+<a name="l00347"></a>00347         
+<a name="l00348"></a>00348             enumerable_thread_specific_iterator& operator--() {
+<a name="l00349"></a>00349                 --my_index;
+<a name="l00350"></a>00350                 my_value = NULL;
+<a name="l00351"></a>00351                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00352"></a>00352             }
+<a name="l00353"></a>00353         
+<a name="l00355"></a>00355             enumerable_thread_specific_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00356"></a>00356                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
+<a name="l00357"></a>00357                 ++my_index;
+<a name="l00358"></a>00358                 my_value = NULL;
+<a name="l00359"></a>00359                 <span class="keywordflow">return</span> result;
+<a name="l00360"></a>00360             }
+<a name="l00361"></a>00361         
+<a name="l00363"></a>00363             enumerable_thread_specific_iterator operator--(<span class="keywordtype">int</span>) {
+<a name="l00364"></a>00364                 enumerable_thread_specific_iterator result = *<span class="keyword">this</span>;
+<a name="l00365"></a>00365                 --my_index;
+<a name="l00366"></a>00366                 my_value = NULL;
+<a name="l00367"></a>00367                 <span class="keywordflow">return</span> result;
+<a name="l00368"></a>00368             }
+<a name="l00369"></a>00369         
+<a name="l00370"></a>00370             <span class="comment">// STL support</span>
+<a name="l00371"></a>00371             <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00372"></a>00372             <span class="keyword">typedef</span> Value value_type;
+<a name="l00373"></a>00373             <span class="keyword">typedef</span> Value* pointer;
+<a name="l00374"></a>00374             <span class="keyword">typedef</span> Value& reference;
+<a name="l00375"></a>00375             <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
+<a name="l00376"></a>00376         };
+<a name="l00377"></a>00377         
+<a name="l00378"></a>00378         <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T>
+<a name="l00379"></a>00379         enumerable_thread_specific_iterator<Container,T> operator+( ptrdiff_t offset, 
+<a name="l00380"></a>00380                                                                     <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& v ) {
+<a name="l00381"></a>00381             <span class="keywordflow">return</span> enumerable_thread_specific_iterator<Container,T>( v.my_container, v.my_index + offset );
+<a name="l00382"></a>00382         }
+<a name="l00383"></a>00383         
+<a name="l00384"></a>00384         <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="l00385"></a>00385         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00386"></a>00386                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00387"></a>00387             <span class="keywordflow">return</span> i.my_index==j.my_index && i.my_container == j.my_container;
+<a name="l00388"></a>00388         }
+<a name="l00389"></a>00389         
+<a name="l00390"></a>00390         <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="l00391"></a>00391         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00392"></a>00392                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00393"></a>00393             <span class="keywordflow">return</span> !(i==j);
+<a name="l00394"></a>00394         }
+<a name="l00395"></a>00395         
+<a name="l00396"></a>00396         <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="l00397"></a>00397         <span class="keywordtype">bool</span> operator<( const enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00398"></a>00398                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00399"></a>00399             <span class="keywordflow">return</span> i.my_index<j.my_index;
+<a name="l00400"></a>00400         }
+<a name="l00401"></a>00401         
+<a name="l00402"></a>00402         <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="l00403"></a>00403         <span class="keywordtype">bool</span> operator>( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00404"></a>00404                         <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00405"></a>00405             <span class="keywordflow">return</span> j<i;
+<a name="l00406"></a>00406         }
+<a name="l00407"></a>00407         
+<a name="l00408"></a>00408         <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="l00409"></a>00409         <span class="keywordtype">bool</span> operator>=( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00410"></a>00410                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00411"></a>00411             <span class="keywordflow">return</span> !(i<j);
+<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> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00415"></a>00415         <span class="keywordtype">bool</span> operator<=( const enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00416"></a>00416                          <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00417"></a>00417             <span class="keywordflow">return</span> !(j<i);
+<a name="l00418"></a>00418         }
+<a name="l00419"></a>00419         
+<a name="l00420"></a>00420         <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="l00421"></a>00421         ptrdiff_t operator-( <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,T>& i, 
+<a name="l00422"></a>00422                              <span class="keyword">const</span> enumerable_thread_specific_iterator<Container,U>& j ) {
+<a name="l00423"></a>00423             <span class="keywordflow">return</span> i.my_index-j.my_index;
+<a name="l00424"></a>00424         }
+<a name="l00425"></a>00425 
+<a name="l00426"></a>00426     <span class="keyword">template</span><<span class="keyword">typename</span> SegmentedContainer, <span class="keyword">typename</span> Value >
+<a name="l00427"></a>00427         <span class="keyword">class </span>segmented_iterator
+<a name="l00428"></a>00428 #if defined(_WIN64) && defined(_MSC_VER)
+<a name="l00429"></a>00429         : public std::iterator<std::input_iterator_tag, Value>
+<a name="l00430"></a>00430 #endif
+<a name="l00431"></a>00431         {
+<a name="l00432"></a>00432             <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="l00433"></a>00433             <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="l00434"></a>00434 
+<a name="l00435"></a>00435             <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="l00436"></a>00436             <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="l00437"></a>00437             
+<a name="l00438"></a>00438             <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U> 
+<a name="l00439"></a>00439             <span class="keyword">friend</span> <span class="keyword">class </span>segmented_iterator;
+<a name="l00440"></a>00440 
+<a name="l00441"></a>00441             <span class="keyword">public</span>:
+<a name="l00442"></a>00442 
+<a name="l00443"></a>00443                 segmented_iterator() {my_segcont = NULL;}
+<a name="l00444"></a>00444 
+<a name="l00445"></a>00445                 segmented_iterator( <span class="keyword">const</span> SegmentedContainer& _segmented_container ) : 
+<a name="l00446"></a>00446                     my_segcont(const_cast<SegmentedContainer*>(&_segmented_container)),
+<a name="l00447"></a>00447                     outer_iter(my_segcont->end()) { }
+<a name="l00448"></a>00448 
+<a name="l00449"></a>00449                 ~segmented_iterator() {}
+<a name="l00450"></a>00450 
+<a name="l00451"></a>00451                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::iterator outer_iterator;
+<a name="l00452"></a>00452                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::value_type InnerContainer;
+<a name="l00453"></a>00453                 <span class="keyword">typedef</span> <span class="keyword">typename</span> InnerContainer::iterator inner_iterator;
+<a name="l00454"></a>00454 
+<a name="l00455"></a>00455                 <span class="comment">// STL support</span>
+<a name="l00456"></a>00456                 <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00457"></a>00457                 <span class="keyword">typedef</span> Value value_type;
+<a name="l00458"></a>00458                 <span class="keyword">typedef</span> <span class="keyword">typename</span> SegmentedContainer::size_type size_type;
+<a name="l00459"></a>00459                 <span class="keyword">typedef</span> Value* pointer;
+<a name="l00460"></a>00460                 <span class="keyword">typedef</span> Value& reference;
+<a name="l00461"></a>00461                 <span class="keyword">typedef</span> std::input_iterator_tag iterator_category;
+<a name="l00462"></a>00462 
+<a name="l00463"></a>00463                 <span class="comment">// Copy Constructor</span>
+<a name="l00464"></a>00464                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00465"></a>00465                 segmented_iterator(<span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) :
+<a name="l00466"></a>00466                     my_segcont(other.my_segcont),
+<a name="l00467"></a>00467                     outer_iter(other.outer_iter),
+<a name="l00468"></a>00468                     <span class="comment">// can we assign a default-constructed iterator to inner if we're at the end?</span>
+<a name="l00469"></a>00469                     inner_iter(other.inner_iter)
+<a name="l00470"></a>00470                 {}
+<a name="l00471"></a>00471 
+<a name="l00472"></a>00472                 <span class="comment">// assignment</span>
+<a name="l00473"></a>00473                 <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00474"></a>00474                 segmented_iterator& operator=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer, U>& other) {
+<a name="l00475"></a>00475                     <span class="keywordflow">if</span>(<span class="keyword">this</span> != &other) {
+<a name="l00476"></a>00476                         my_segcont = other.my_segcont;
+<a name="l00477"></a>00477                         outer_iter = other.outer_iter;
+<a name="l00478"></a>00478                         <span class="keywordflow">if</span>(outer_iter != my_segcont->end()) inner_iter = other.inner_iter;
+<a name="l00479"></a>00479                     }
+<a name="l00480"></a>00480                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00481"></a>00481                 }
+<a name="l00482"></a>00482 
+<a name="l00483"></a>00483                 <span class="comment">// allow assignment of outer iterator to segmented iterator.  Once it is</span>
+<a name="l00484"></a>00484                 <span class="comment">// assigned, move forward until a non-empty inner container is found or</span>
+<a name="l00485"></a>00485                 <span class="comment">// the end of the outer container is reached.</span>
+<a name="l00486"></a>00486                 segmented_iterator& operator=(<span class="keyword">const</span> outer_iterator& new_outer_iter) {
+<a name="l00487"></a>00487                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00488"></a>00488                     <span class="comment">// check that this iterator points to something inside the segmented container</span>
+<a name="l00489"></a>00489                     <span class="keywordflow">for</span>(outer_iter = new_outer_iter ;outer_iter!=my_segcont->end(); ++outer_iter) {
+<a name="l00490"></a>00490                         <span class="keywordflow">if</span>( !outer_iter->empty() ) {
+<a name="l00491"></a>00491                             inner_iter = outer_iter->begin();
+<a name="l00492"></a>00492                             <span class="keywordflow">break</span>;
+<a name="l00493"></a>00493                         }
+<a name="l00494"></a>00494                     }
+<a name="l00495"></a>00495                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00496"></a>00496                 }
+<a name="l00497"></a>00497 
+<a name="l00498"></a>00498                 <span class="comment">// pre-increment</span>
+<a name="l00499"></a>00499                 segmented_iterator& operator++() {
+<a name="l00500"></a>00500                     advance_me();
+<a name="l00501"></a>00501                     <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00502"></a>00502                 }
+<a name="l00503"></a>00503 
+<a name="l00504"></a>00504                 <span class="comment">// post-increment</span>
+<a name="l00505"></a>00505                 segmented_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00506"></a>00506                     segmented_iterator tmp = *<span class="keyword">this</span>;
+<a name="l00507"></a>00507                     operator++();
+<a name="l00508"></a>00508                     <span class="keywordflow">return</span> tmp;
+<a name="l00509"></a>00509                 }
+<a name="l00510"></a>00510 
+<a name="l00511"></a>00511                 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
+<a name="l00512"></a>00512                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00513"></a>00513                     <span class="keywordflow">return</span> (outer_iter == other_outer &&
+<a name="l00514"></a>00514                             (outer_iter == my_segcont->end() || inner_iter == outer_iter->begin()));
+<a name="l00515"></a>00515                 }
+<a name="l00516"></a>00516 
+<a name="l00517"></a>00517                 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> outer_iterator& other_outer)<span class="keyword"> const </span>{
+<a name="l00518"></a>00518                     <span class="keywordflow">return</span> !operator==(other_outer);
+<a name="l00519"></a>00519 
+<a name="l00520"></a>00520                 }
+<a name="l00521"></a>00521 
+<a name="l00522"></a>00522                 <span class="comment">// (i)* RHS</span>
+<a name="l00523"></a>00523                 reference operator*()<span class="keyword"> const </span>{
+<a name="l00524"></a>00524                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00525"></a>00525                     __TBB_ASSERT(outer_iter != my_segcont->end(), <span class="stringliteral">"Dereferencing a pointer at end of container"</span>);
+<a name="l00526"></a>00526                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// should never happen</span>
+<a name="l00527"></a>00527                     <span class="keywordflow">return</span> *inner_iter;
+<a name="l00528"></a>00528                 }
+<a name="l00529"></a>00529 
+<a name="l00530"></a>00530                 <span class="comment">// i-></span>
+<a name="l00531"></a>00531                 pointer operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &operator*();}
+<a name="l00532"></a>00532 
+<a name="l00533"></a>00533             <span class="keyword">private</span>:
+<a name="l00534"></a>00534                 SegmentedContainer*             my_segcont;
+<a name="l00535"></a>00535                 outer_iterator outer_iter;
+<a name="l00536"></a>00536                 inner_iterator inner_iter;
+<a name="l00537"></a>00537 
+<a name="l00538"></a>00538                 <span class="keywordtype">void</span> advance_me() {
+<a name="l00539"></a>00539                     __TBB_ASSERT(my_segcont != NULL, NULL);
+<a name="l00540"></a>00540                     __TBB_ASSERT(outer_iter != my_segcont->end(), NULL); <span class="comment">// not true if there are no inner containers</span>
+<a name="l00541"></a>00541                     __TBB_ASSERT(inner_iter != outer_iter->end(), NULL); <span class="comment">// not true if the inner containers are all empty.</span>
+<a name="l00542"></a>00542                     ++inner_iter;
+<a name="l00543"></a>00543                     <span class="keywordflow">while</span>(inner_iter == outer_iter->end() && ++outer_iter != my_segcont->end()) {
+<a name="l00544"></a>00544                         inner_iter = outer_iter->begin();
+<a name="l00545"></a>00545                     }
+<a name="l00546"></a>00546                 }
+<a name="l00547"></a>00547         };    <span class="comment">// segmented_iterator</span>
+<a name="l00548"></a>00548 
+<a name="l00549"></a>00549         <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="l00550"></a>00550         <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
+<a name="l00551"></a>00551                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
+<a name="l00552"></a>00552             <span class="keywordflow">if</span>(i.my_segcont != j.my_segcont) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00553"></a>00553             <span class="keywordflow">if</span>(i.my_segcont == NULL) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00554"></a>00554             <span class="keywordflow">if</span>(i.outer_iter != j.outer_iter) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00555"></a>00555             <span class="keywordflow">if</span>(i.outer_iter == i.my_segcont->end()) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00556"></a>00556             <span class="keywordflow">return</span> i.inner_iter == j.inner_iter;
+<a name="l00557"></a>00557         }
+<a name="l00558"></a>00558 
+<a name="l00559"></a>00559         <span class="comment">// !=</span>
+<a name="l00560"></a>00560         <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="l00561"></a>00561         <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> segmented_iterator<SegmentedContainer,T>& i, 
+<a name="l00562"></a>00562                          <span class="keyword">const</span> segmented_iterator<SegmentedContainer,U>& j ) {
+<a name="l00563"></a>00563             <span class="keywordflow">return</span> !(i==j);
+<a name="l00564"></a>00564         }
+<a name="l00565"></a>00565 
+<a name="l00566"></a>00566         <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00567"></a>00567         <span class="keyword">struct </span>destruct_only: tbb::internal::no_copy {
+<a name="l00568"></a>00568             <a class="code" href="a00253.html">tbb::aligned_space<T,1></a> value;
+<a name="l00569"></a>00569             ~destruct_only() {value.begin()[0].~T();}
+<a name="l00570"></a>00570         };
+<a name="l00571"></a>00571 
+<a name="l00572"></a>00572         <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00573"></a>00573         <span class="keyword">struct </span>construct_by_default: tbb::internal::no_assign {
+<a name="l00574"></a>00574             <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>*where) {<span class="keyword">new</span>(where) T();} <span class="comment">// C++ note: the () in T() ensure zero initialization.</span>
+<a name="l00575"></a>00575             construct_by_default( <span class="keywordtype">int</span> ) {}
+<a name="l00576"></a>00576         };
+<a name="l00577"></a>00577 
+<a name="l00578"></a>00578         <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00579"></a>00579         <span class="keyword">struct </span>construct_by_exemplar: tbb::internal::no_assign {
+<a name="l00580"></a>00580             <span class="keyword">const</span> T exemplar;
+<a name="l00581"></a>00581             <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>*where) {<span class="keyword">new</span>(where) T(exemplar);}
+<a name="l00582"></a>00582             construct_by_exemplar( <span class="keyword">const</span> T& t ) : exemplar(t) {}
+<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, <span class="keyword">typename</span> Finit>
+<a name="l00586"></a>00586         <span class="keyword">struct </span>construct_by_finit: tbb::internal::no_assign {
+<a name="l00587"></a>00587             Finit f;
+<a name="l00588"></a>00588             <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) {<span class="keyword">new</span>(where) T(f());}
+<a name="l00589"></a>00589             construct_by_finit( <span class="keyword">const</span> Finit& f_ ) : f(f_) {}
+<a name="l00590"></a>00590         };
+<a name="l00591"></a>00591 
+<a name="l00592"></a>00592         <span class="comment">// storage for initialization function pointer</span>
+<a name="l00593"></a>00593         <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00594"></a>00594         <span class="keyword">class </span>callback_base {
+<a name="l00595"></a>00595         <span class="keyword">public</span>:
+<a name="l00596"></a>00596             <span class="comment">// Clone *this</span>
+<a name="l00597"></a>00597             <span class="keyword">virtual</span> callback_base* clone() = 0;
+<a name="l00598"></a>00598             <span class="comment">// Destruct and free *this</span>
+<a name="l00599"></a>00599             <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroy() = 0;
+<a name="l00600"></a>00600             <span class="comment">// Need virtual destructor to satisfy GCC compiler warning</span>
+<a name="l00601"></a>00601             <span class="keyword">virtual</span> ~callback_base() { }
+<a name="l00602"></a>00602             <span class="comment">// Construct T at where</span>
+<a name="l00603"></a>00603             <span class="keyword">virtual</span> <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) = 0;
+<a name="l00604"></a>00604         };
+<a name="l00605"></a>00605 
+<a name="l00606"></a>00606         <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Constructor>
+<a name="l00607"></a>00607         <span class="keyword">class </span>callback_leaf: <span class="keyword">public</span> callback_base<T>, Constructor {
+<a name="l00608"></a>00608             <span class="keyword">template</span><<span class="keyword">typename</span> X> callback_leaf( <span class="keyword">const</span> X& x ) : Constructor(x) {}
+<a name="l00609"></a>00609 
+<a name="l00610"></a>00610             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00343.html">tbb::tbb_allocator<callback_leaf></a> my_allocator_type;
+<a name="l00611"></a>00611 
+<a name="l00612"></a>00612             <span class="comment">/*override*/</span> callback_base<T>* clone() {
+<a name="l00613"></a>00613                 <span class="keywordtype">void</span>* where = my_allocator_type().allocate(1);
+<a name="l00614"></a>00614                 <span class="keywordflow">return</span> <span class="keyword">new</span>(where) callback_leaf(*<span class="keyword">this</span>);
+<a name="l00615"></a>00615             }
+<a name="l00616"></a>00616 
+<a name="l00617"></a>00617             <span class="comment">/*override*/</span> <span class="keywordtype">void</span> destroy() {
+<a name="l00618"></a>00618                 my_allocator_type().destroy(<span class="keyword">this</span>);
+<a name="l00619"></a>00619                 my_allocator_type().deallocate(<span class="keyword">this</span>,1);
+<a name="l00620"></a>00620             }
+<a name="l00621"></a>00621 
+<a name="l00622"></a>00622             <span class="comment">/*override*/</span> <span class="keywordtype">void</span> construct(<span class="keywordtype">void</span>* where) {
+<a name="l00623"></a>00623                 Constructor::construct(where);
+<a name="l00624"></a>00624             }  
+<a name="l00625"></a>00625         <span class="keyword">public</span>:
+<a name="l00626"></a>00626             <span class="keyword">template</span><<span class="keyword">typename</span> X>
+<a name="l00627"></a>00627             <span class="keyword">static</span> callback_base<T>* make( <span class="keyword">const</span> X& x ) {
+<a name="l00628"></a>00628                 <span class="keywordtype">void</span>* where = my_allocator_type().allocate(1);
+<a name="l00629"></a>00629                 <span class="keywordflow">return</span> <span class="keyword">new</span>(where) callback_leaf(x);
+<a name="l00630"></a>00630             }
+<a name="l00631"></a>00631         };
+<a name="l00632"></a>00632 
+<a name="l00634"></a>00634 
+<a name="l00639"></a>00639         <span class="keyword">template</span><<span class="keyword">typename</span> U, size_t ModularSize>
+<a name="l00640"></a>00640         <span class="keyword">struct </span>ets_element {
+<a name="l00641"></a>00641             <span class="keywordtype">char</span> value[ModularSize==0 ? <span class="keyword">sizeof</span>(U) : <span class="keyword">sizeof</span>(U)+(tbb::internal::NFS_MaxLineSize-ModularSize)];
+<a name="l00642"></a>00642             <span class="keywordtype">void</span> unconstruct() {
+<a name="l00643"></a>00643                 tbb::internal::punned_cast<U*>(&value)->~U();
+<a name="l00644"></a>00644             }
+<a name="l00645"></a>00645         };
+<a name="l00646"></a>00646 
+<a name="l00647"></a>00647     } <span class="comment">// namespace internal</span>
+<a name="l00649"></a>00649 <span class="comment"></span>
+<a name="l00651"></a>00651 
+<a name="l00670"></a>00670     <span class="keyword">template</span> <<span class="keyword">typename</span> T, 
+<a name="l00671"></a>00671               <span class="keyword">typename</span> Allocator=cache_aligned_allocator<T>, 
+<a name="l00672"></a><a class="code" href="a00281.html">00672</a>               <a class="code" href="a00414.html#a8622ae61b7e7737dac26542e181178e">ets_key_usage_type</a> ETS_key_type=ets_no_key > 
+<a name="l00673"></a>00673     <span class="keyword">class </span><a class="code" href="a00281.html">enumerable_thread_specific</a>: internal::ets_base<ETS_key_type> { 
+<a name="l00674"></a>00674 
+<a name="l00675"></a>00675         <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="a00281.html">enumerable_thread_specific</a>;
+<a name="l00676"></a>00676     
+<a name="l00677"></a>00677         <span class="keyword">typedef</span> internal::ets_element<T,sizeof(T)%tbb::internal::NFS_MaxLineSize> padded_element;
+<a name="l00678"></a>00678 
+<a name="l00680"></a>00680         <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00681"></a>00681         <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00259.html">blocked_range</a><I> {
+<a name="l00682"></a>00682         <span class="keyword">public</span>:
+<a name="l00683"></a>00683             <span class="keyword">typedef</span> T value_type;
+<a name="l00684"></a>00684             <span class="keyword">typedef</span> T& reference;
+<a name="l00685"></a>00685             <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+<a name="l00686"></a>00686             <span class="keyword">typedef</span> I iterator;
+<a name="l00687"></a>00687             <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00688"></a>00688             generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : <a class="code" href="a00259.html">blocked_range<I></a>(begin_,end_,grainsize_) {} 
+<a name="l00689"></a>00689             template<typename U>
+<a name="l00690"></a>00690             generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00259.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {} 
+<a name="l00691"></a>00691             generic_range_type( generic_range_type& r, <a class="code" href="a00335.html">split</a> ) : <a class="code" href="a00259.html">blocked_range<I></a>(r,<a class="code" href="a00335.html">split</a>()) {}
+<a name="l00692"></a>00692         };
+<a name="l00693"></a>00693     
+<a name="l00694"></a>00694         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< padded_element >::other padded_allocator_type;
+<a name="l00695"></a>00695         <span class="keyword">typedef</span> <a class="code" href="a00276.html">tbb::concurrent_vector< padded_element, padded_allocator_type ></a> <a class="code" href="a00276.html">internal_collection_type</a>;
+<a name="l00696"></a>00696         
+<a name="l00697"></a>00697         internal::callback_base<T> *my_construct_callback;
+<a name="l00698"></a>00698 
+<a name="l00699"></a>00699         internal_collection_type my_locals;
+<a name="l00700"></a>00700    
+<a name="l00701"></a>00701         <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* create_local() {
+<a name="l00702"></a>00702 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00703"></a>00703 <span class="preprocessor"></span>            <span class="keywordtype">void</span>* lref = &my_locals[my_locals.<a class="code" href="a00276.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element())];
+<a name="l00704"></a>00704 <span class="preprocessor">#else</span>
+<a name="l00705"></a>00705 <span class="preprocessor"></span>            <span class="keywordtype">void</span>* lref = &*my_locals.<a class="code" href="a00276.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element());
+<a name="l00706"></a>00706 <span class="preprocessor">#endif</span>
+<a name="l00707"></a>00707 <span class="preprocessor"></span>            my_construct_callback->construct(lref);
+<a name="l00708"></a>00708             <span class="keywordflow">return</span> lref;
+<a name="l00709"></a>00709         } 
+<a name="l00710"></a>00710 
+<a name="l00711"></a>00711         <span class="keywordtype">void</span> unconstruct_locals() {
+<a name="l00712"></a>00712             <span class="keywordflow">for</span>(<span class="keyword">typename</span> internal_collection_type::iterator cvi = my_locals.<a class="code" href="a00276.html#730b23a251ecb6d37f692fb22f38e029">begin</a>(); cvi != my_locals.<a class="code" href="a00276.html#c0b51160e5a764982ec97a455f94f2c6">end</a>(); ++cvi) {
+<a name="l00713"></a>00713                 cvi->unconstruct();
+<a name="l00714"></a>00714             }
+<a name="l00715"></a>00715         }
+<a name="l00716"></a>00716 
+<a name="l00717"></a>00717         <span class="keyword">typedef</span> <span class="keyword">typename</span> Allocator::template rebind< uintptr_t >::other array_allocator_type;
+<a name="l00718"></a>00718 
+<a name="l00719"></a>00719         <span class="comment">// _size is in bytes</span>
+<a name="l00720"></a>00720         <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* create_array(size_t _size) {
+<a name="l00721"></a>00721             size_t nelements = (_size + <span class="keyword">sizeof</span>(uintptr_t) -1) / <span class="keyword">sizeof</span>(uintptr_t);
+<a name="l00722"></a>00722             <span class="keywordflow">return</span> array_allocator_type().allocate(nelements);
+<a name="l00723"></a>00723         }
+<a name="l00724"></a>00724 
+<a name="l00725"></a>00725         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> free_array( <span class="keywordtype">void</span>* _ptr, size_t _size) {
+<a name="l00726"></a>00726             size_t nelements = (_size + <span class="keyword">sizeof</span>(uintptr_t) -1) / <span class="keyword">sizeof</span>(uintptr_t);
+<a name="l00727"></a>00727             array_allocator_type().deallocate( reinterpret_cast<uintptr_t *>(_ptr),nelements);
+<a name="l00728"></a>00728         }
+<a name="l00729"></a>00729    
+<a name="l00730"></a>00730     <span class="keyword">public</span>:
+<a name="l00731"></a>00731     
+<a name="l00733"></a>00733         <span class="keyword">typedef</span> Allocator allocator_type;
+<a name="l00734"></a>00734         <span class="keyword">typedef</span> T value_type;
+<a name="l00735"></a>00735         <span class="keyword">typedef</span> T& reference;
+<a name="l00736"></a>00736         <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+<a name="l00737"></a>00737         <span class="keyword">typedef</span> T* pointer;
+<a name="l00738"></a>00738         <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
+<a name="l00739"></a>00739         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::size_type size_type;
+<a name="l00740"></a>00740         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal_collection_type::difference_type difference_type;
+<a name="l00741"></a>00741     
+<a name="l00742"></a>00742         <span class="comment">// Iterator types</span>
+<a name="l00743"></a>00743         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::enumerable_thread_specific_iterator< internal_collection_type, value_type > iterator;
+<a name="l00744"></a>00744         <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="l00745"></a>00745 
+<a name="l00746"></a>00746         <span class="comment">// Parallel range types</span>
+<a name="l00747"></a>00747         <span class="keyword">typedef</span> generic_range_type< iterator > range_type;
+<a name="l00748"></a>00748         <span class="keyword">typedef</span> generic_range_type< const_iterator > const_range_type;
+<a name="l00749"></a>00749     
+<a name="l00751"></a>00751         <a class="code" href="a00281.html">enumerable_thread_specific</a>() : 
+<a name="l00752"></a>00752             my_construct_callback( internal::callback_leaf<T,internal::construct_by_default<T> >::make(<span class="comment">/*dummy argument*/</span>0) ) 
+<a name="l00753"></a>00753         {}
+<a name="l00754"></a>00754 
+<a name="l00756"></a><a class="code" href="a00281.html#8d4b456ff9d7b289c73254eccc11db45">00756</a>         <span class="keyword">template</span> <<span class="keyword">typename</span> Finit>
+<a name="l00757"></a>00757         <a class="code" href="a00281.html">enumerable_thread_specific</a>( Finit finit ) : 
+<a name="l00758"></a>00758             my_construct_callback( internal::callback_leaf<T,internal::construct_by_finit<T,Finit> >::make( finit ) ) 
+<a name="l00759"></a>00759         {}
+<a name="l00760"></a>00760     
+<a name="l00762"></a>00762         <a class="code" href="a00281.html">enumerable_thread_specific</a>(<span class="keyword">const</span> T& exemplar) : 
+<a name="l00763"></a>00763             my_construct_callback( internal::callback_leaf<T,internal::construct_by_exemplar<T> >::make( exemplar ) )
+<a name="l00764"></a>00764         {}
+<a name="l00765"></a>00765     
+<a name="l00767"></a>00767         ~<a class="code" href="a00281.html">enumerable_thread_specific</a>() { 
+<a name="l00768"></a>00768             my_construct_callback->destroy();
+<a name="l00769"></a>00769             this->clear();  <span class="comment">// deallocation before the derived class is finished destructing</span>
+<a name="l00770"></a>00770             <span class="comment">// So free(array *) is still accessible</span>
+<a name="l00771"></a>00771         }
+<a name="l00772"></a>00772       
+<a name="l00774"></a>00774         reference local() {
+<a name="l00775"></a>00775             <span class="keywordtype">bool</span> exists;
+<a name="l00776"></a>00776             <span class="keywordflow">return</span> local(exists);
+<a name="l00777"></a>00777         }
+<a name="l00778"></a>00778 
+<a name="l00780"></a>00780         reference local(<span class="keywordtype">bool</span>& exists)  {
+<a name="l00781"></a>00781             <span class="keywordtype">void</span>* ptr = this->table_lookup(exists);
+<a name="l00782"></a>00782             <span class="keywordflow">return</span> *(T*)ptr;
+<a name="l00783"></a>00783         }
+<a name="l00784"></a>00784 
+<a name="l00786"></a>00786         size_type size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00276.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>(); }
+<a name="l00787"></a>00787     
+<a name="l00789"></a>00789         <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_locals.<a class="code" href="a00276.html#c6426cb93cf20d3af40f3c90f1f0481a">empty</a>(); }
+<a name="l00790"></a>00790     
+<a name="l00792"></a>00792         iterator begin() { <span class="keywordflow">return</span> iterator( my_locals, 0 ); }
+<a name="l00794"></a>00794         iterator end() { <span class="keywordflow">return</span> iterator(my_locals, my_locals.<a class="code" href="a00276.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>() ); }
+<a name="l00795"></a>00795     
+<a name="l00797"></a>00797         const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, 0); }
+<a name="l00798"></a>00798     
+<a name="l00800"></a>00800         const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(my_locals, my_locals.<a class="code" href="a00276.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()); }
+<a name="l00801"></a>00801 
+<a name="l00803"></a>00803         range_type range( size_t grainsize=1 ) { <span class="keywordflow">return</span> range_type( begin(), end(), grainsize ); } 
+<a name="l00804"></a>00804         
+<a name="l00806"></a>00806         const_range_type range( size_t grainsize=1 )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize ); }
+<a name="l00807"></a>00807 
+<a name="l00809"></a>00809         <span class="keywordtype">void</span> clear() {
+<a name="l00810"></a>00810             unconstruct_locals();
+<a name="l00811"></a>00811             my_locals.<a class="code" href="a00276.html#26f937a359a66b6aae904c3cd9a3c444">clear</a>();
+<a name="l00812"></a>00812             this->table_clear();
+<a name="l00813"></a>00813             <span class="comment">// callback is not destroyed</span>
+<a name="l00814"></a>00814             <span class="comment">// exemplar is not destroyed</span>
+<a name="l00815"></a>00815         }
+<a name="l00816"></a>00816 
+<a name="l00817"></a>00817     <span class="keyword">private</span>:
+<a name="l00818"></a>00818 
+<a name="l00819"></a>00819         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
+<a name="l00820"></a>00820         <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other);
+<a name="l00821"></a>00821 
+<a name="l00822"></a>00822     <span class="keyword">public</span>:
+<a name="l00823"></a>00823 
+<a name="l00824"></a>00824         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
+<a name="l00825"></a>00825         enumerable_thread_specific( <span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other ) : internal::ets_base<ETS_key_type> ()
+<a name="l00826"></a>00826         {
+<a name="l00827"></a>00827             internal_copy(other);
+<a name="l00828"></a>00828         }
+<a name="l00829"></a>00829 
+<a name="l00830"></a>00830         enumerable_thread_specific( <span class="keyword">const</span> enumerable_thread_specific& other ) : internal::ets_base<ETS_key_type> ()
+<a name="l00831"></a>00831         {
+<a name="l00832"></a>00832             internal_copy(other);
+<a name="l00833"></a>00833         }
+<a name="l00834"></a>00834 
+<a name="l00835"></a>00835     <span class="keyword">private</span>:
+<a name="l00836"></a>00836 
+<a name="l00837"></a>00837         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
+<a name="l00838"></a>00838         enumerable_thread_specific &
+<a name="l00839"></a>00839         internal_assign(<span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other) {
+<a name="l00840"></a>00840             <span class="keywordflow">if</span>(static_cast<void *>( <span class="keyword">this</span> ) != static_cast<const void *>( &other )) {
+<a name="l00841"></a>00841                 this->clear(); 
+<a name="l00842"></a>00842                 my_construct_callback->destroy();
+<a name="l00843"></a>00843                 my_construct_callback = 0;
+<a name="l00844"></a>00844                 internal_copy( other );
+<a name="l00845"></a>00845             }
+<a name="l00846"></a>00846             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00847"></a>00847         }
+<a name="l00848"></a>00848 
+<a name="l00849"></a>00849     <span class="keyword">public</span>:
+<a name="l00850"></a>00850 
+<a name="l00851"></a>00851         <span class="comment">// assignment</span>
+<a name="l00852"></a>00852         enumerable_thread_specific& operator=(<span class="keyword">const</span> enumerable_thread_specific& other) {
+<a name="l00853"></a>00853             <span class="keywordflow">return</span> internal_assign(other);
+<a name="l00854"></a>00854         }
+<a name="l00855"></a>00855 
+<a name="l00856"></a>00856         <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Alloc, ets_key_usage_type Cachetype>
+<a name="l00857"></a>00857         enumerable_thread_specific& operator=(<span class="keyword">const</span> enumerable_thread_specific<U, Alloc, Cachetype>& other)
+<a name="l00858"></a>00858         {
+<a name="l00859"></a>00859             <span class="keywordflow">return</span> internal_assign(other);
+<a name="l00860"></a>00860         }
+<a name="l00861"></a>00861 
+<a name="l00862"></a>00862         <span class="comment">// combine_func_t has signature T(T,T) or T(const T&, const T&)</span>
+<a name="l00863"></a>00863         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
+<a name="l00864"></a>00864         T combine(combine_func_t f_combine) {
+<a name="l00865"></a>00865             <span class="keywordflow">if</span>(begin() == end()) {
+<a name="l00866"></a>00866                 internal::destruct_only<T> location;
+<a name="l00867"></a>00867                 my_construct_callback->construct(location.value.begin());
+<a name="l00868"></a>00868                 <span class="keywordflow">return</span> *location.value.begin();
+<a name="l00869"></a>00869             }
+<a name="l00870"></a>00870             const_iterator ci = begin();
+<a name="l00871"></a>00871             T my_result = *ci;
+<a name="l00872"></a>00872             <span class="keywordflow">while</span>(++ci != end()) 
+<a name="l00873"></a>00873                 my_result = f_combine( my_result, *ci );
+<a name="l00874"></a>00874             <span class="keywordflow">return</span> my_result;
+<a name="l00875"></a>00875         }
+<a name="l00876"></a>00876 
+<a name="l00877"></a>00877         <span class="comment">// combine_func_t has signature void(T) or void(const T&)</span>
+<a name="l00878"></a>00878         <span class="keyword">template</span> <<span class="keyword">typename</span> combine_func_t>
+<a name="l00879"></a>00879         <span class="keywordtype">void</span> combine_each(combine_func_t f_combine) {
+<a name="l00880"></a>00880             <span class="keywordflow">for</span>(const_iterator ci = begin(); ci != end(); ++ci) {
+<a name="l00881"></a>00881                 f_combine( *ci );
+<a name="l00882"></a>00882             }
+<a name="l00883"></a>00883         }
+<a name="l00884"></a>00884 
+<a name="l00885"></a>00885     }; <span class="comment">// enumerable_thread_specific</span>
+<a name="l00886"></a>00886 
+<a name="l00887"></a>00887     <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator, ets_key_usage_type ETS_key_type> 
+<a name="l00888"></a>00888     <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> A2, ets_key_usage_type C2>
+<a name="l00889"></a>00889     <span class="keywordtype">void</span> enumerable_thread_specific<T,Allocator,ETS_key_type>::internal_copy( <span class="keyword">const</span> enumerable_thread_specific<U, A2, C2>& other) {
+<a name="l00890"></a>00890         <span class="comment">// Initialize my_construct_callback first, so that it is valid even if rest of this routine throws an exception.</span>
+<a name="l00891"></a>00891         my_construct_callback = other.my_construct_callback->clone();
+<a name="l00892"></a>00892 
+<a name="l00893"></a>00893         <span class="keyword">typedef</span> internal::ets_base<ets_no_key> base;
+<a name="l00894"></a>00894         __TBB_ASSERT(my_locals.<a class="code" href="a00276.html#715fe313c4a9c22731cc404dd80c9ec9">size</a>()==0,NULL);
+<a name="l00895"></a>00895         this->table_reserve_for_copy( other );
+<a name="l00896"></a>00896         <span class="keywordflow">for</span>( base::array* r=other.my_root; r; r=r->next ) {
+<a name="l00897"></a>00897             <span class="keywordflow">for</span>( size_t i=0; i<r-><a class="code" href="a00259.html#9eaa0b6beff1420f688570bbf6b8c462">size</a>(); ++i ) {
+<a name="l00898"></a>00898                 base::slot& s1 = r->at(i);
+<a name="l00899"></a>00899                 <span class="keywordflow">if</span>( !s1.empty() ) {
+<a name="l00900"></a>00900                     base::slot& s2 = this->table_find(s1.key);
+<a name="l00901"></a>00901                     <span class="keywordflow">if</span>( s2.empty() ) { 
+<a name="l00902"></a>00902 #<span class="keywordflow">if</span> TBB_DEPRECATED
+<a name="l00903"></a>00903                         <span class="keywordtype">void</span>* lref = &my_locals[my_locals.<a class="code" href="a00276.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element())];
+<a name="l00904"></a>00904 <span class="preprocessor">#else</span>
+<a name="l00905"></a>00905 <span class="preprocessor"></span>                        <span class="keywordtype">void</span>* lref = &*my_locals.<a class="code" href="a00276.html#e94e038f915c0268fdf2d3d7f87d81b8">push_back</a>(padded_element());
+<a name="l00906"></a>00906 <span class="preprocessor">#endif</span>
+<a name="l00907"></a>00907 <span class="preprocessor"></span>                        s2.ptr = <span class="keyword">new</span>(lref) T(*(U*)s1.ptr);
+<a name="l00908"></a>00908                         s2.key = s1.key;
+<a name="l00909"></a>00909                     } <span class="keywordflow">else</span> {
+<a name="l00910"></a>00910                         <span class="comment">// Skip the duplicate</span>
+<a name="l00911"></a>00911                     } 
+<a name="l00912"></a>00912                 }
+<a name="l00913"></a>00913             }
+<a name="l00914"></a>00914         }
+<a name="l00915"></a>00915     }
+<a name="l00916"></a>00916 
+<a name="l00917"></a>00917     <span class="keyword">template</span>< <span class="keyword">typename</span> Container >
+<a name="l00918"></a>00918     <span class="keyword">class </span>flattened2d {
+<a name="l00919"></a>00919 
+<a name="l00920"></a>00920         <span class="comment">// This intermediate typedef is to address issues with VC7.1 compilers</span>
+<a name="l00921"></a>00921         <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::value_type conval_type;
+<a name="l00922"></a>00922 
+<a name="l00923"></a>00923     <span class="keyword">public</span>:
+<a name="l00924"></a>00924 
+<a name="l00926"></a>00926         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::size_type size_type;
+<a name="l00927"></a>00927         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::difference_type difference_type;
+<a name="l00928"></a>00928         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::allocator_type allocator_type;
+<a name="l00929"></a>00929         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::value_type value_type;
+<a name="l00930"></a>00930         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::reference reference;
+<a name="l00931"></a>00931         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_reference const_reference;
+<a name="l00932"></a>00932         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::pointer pointer;
+<a name="l00933"></a>00933         <span class="keyword">typedef</span> <span class="keyword">typename</span> conval_type::const_pointer const_pointer;
+<a name="l00934"></a>00934 
+<a name="l00935"></a>00935         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, value_type> iterator;
+<a name="l00936"></a>00936         <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::segmented_iterator<Container, const value_type> const_iterator;
+<a name="l00937"></a>00937 
+<a name="l00938"></a>00938         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="l00939"></a>00939             my_container(const_cast<Container*>(&c)), my_begin(b), my_end(e) { }
+<a name="l00940"></a>00940 
+<a name="l00941"></a>00941         flattened2d( <span class="keyword">const</span> Container &c ) : 
+<a name="l00942"></a>00942             my_container(const_cast<Container*>(&c)), my_begin(c.begin()), my_end(c.end()) { }
+<a name="l00943"></a>00943 
+<a name="l00944"></a>00944         iterator begin() { <span class="keywordflow">return</span> iterator(*my_container) = my_begin; }
+<a name="l00945"></a>00945         iterator end() { <span class="keywordflow">return</span> iterator(*my_container) = my_end; }
+<a name="l00946"></a>00946         const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_begin; }
+<a name="l00947"></a>00947         const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(*my_container) = my_end; }
+<a name="l00948"></a>00948 
+<a name="l00949"></a>00949         size_type size()<span class="keyword"> const </span>{
+<a name="l00950"></a>00950             size_type tot_size = 0;
+<a name="l00951"></a>00951             <span class="keywordflow">for</span>(<span class="keyword">typename</span> Container::const_iterator i = my_begin; i != my_end; ++i) {
+<a name="l00952"></a>00952                 tot_size += i->size();
+<a name="l00953"></a>00953             }
+<a name="l00954"></a>00954             <span class="keywordflow">return</span> tot_size;
+<a name="l00955"></a>00955         }
+<a name="l00956"></a>00956 
+<a name="l00957"></a>00957     <span class="keyword">private</span>:
+<a name="l00958"></a>00958 
+<a name="l00959"></a>00959         Container *my_container;
+<a name="l00960"></a>00960         <span class="keyword">typename</span> Container::const_iterator my_begin;
+<a name="l00961"></a>00961         <span class="keyword">typename</span> Container::const_iterator my_end;
+<a name="l00962"></a>00962 
+<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> Container>
+<a name="l00966"></a>00966     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="l00967"></a>00967         <span class="keywordflow">return</span> flattened2d<Container>(c, b, e);
+<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> Container>
+<a name="l00971"></a>00971     flattened2d<Container> flatten2d(<span class="keyword">const</span> Container &c) {
+<a name="l00972"></a>00972         <span class="keywordflow">return</span> flattened2d<Container>(c);
+<a name="l00973"></a>00973     }
+<a name="l00974"></a>00974 
+<a name="l00975"></a>00975 } <span class="comment">// interface6</span>
+<a name="l00976"></a>00976 
+<a name="l00977"></a>00977 <span class="keyword">namespace </span>internal {
+<a name="l00978"></a>00978 <span class="keyword">using</span> interface6::internal::segmented_iterator;
+<a name="l00979"></a>00979 }
+<a name="l00980"></a>00980 
+<a name="l00981"></a>00981 <span class="keyword">using</span> interface6::enumerable_thread_specific;
+<a name="l00982"></a>00982 <span class="keyword">using</span> interface6::flattened2d;
+<a name="l00983"></a>00983 <span class="keyword">using</span> interface6::flatten2d;
+<a name="l00984"></a>00984 
+<a name="l00985"></a>00985 } <span class="comment">// namespace tbb</span>
+<a name="l00986"></a>00986 
+<a name="l00987"></a>00987 <span class="preprocessor">#endif</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00500.html b/doc/html/a00500.html
deleted file mode 100644
index 3111633..0000000
--- a/doc/html/a00500.html
+++ /dev/null
@@ -1,256 +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_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-2011 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 <new></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "task.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "partitioner.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "blocked_range.h"</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="l00032"></a>00032 <span class="keyword">namespace </span>interface6 {
-<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::task_partition_type my_partition;
-<a name="l00043"></a>00043         <span class="comment">/*override*/</span> task* execute();
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045     <span class="keyword">public</span>:
-<a name="l00047"></a>00047         start_for( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, Partitioner& partitioner ) :
-<a name="l00048"></a>00048             my_range(range),    
-<a name="l00049"></a>00049             my_body(body),
-<a name="l00050"></a>00050             my_partition(partitioner)
-<a name="l00051"></a>00051         {
-<a name="l00052"></a>00052         }
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055         start_for( start_for& parent_, split ) :
-<a name="l00056"></a>00056             my_range(parent_.my_range,split()),
-<a name="l00057"></a>00057             my_body(parent_.my_body),
-<a name="l00058"></a>00058             my_partition(parent_.my_partition, split())
-<a name="l00059"></a>00059         {
-<a name="l00060"></a>00060             my_partition.set_affinity(*<span class="keyword">this</span>);
-<a name="l00061"></a>00061         }
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064         start_for( start_for& parent_, <span class="keyword">const</span> Range& r, depth_t d ) :
-<a name="l00065"></a>00065             my_range(r),
-<a name="l00066"></a>00066             my_body(parent_.my_body),
-<a name="l00067"></a>00067             my_partition(parent_.my_partition,split())
-<a name="l00068"></a>00068         {
-<a name="l00069"></a>00069             my_partition.set_affinity(*<span class="keyword">this</span>);
-<a name="l00070"></a>00070             my_partition.align_depth( d );
-<a name="l00071"></a>00071         }
-<a name="l00073"></a>00073         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
-<a name="l00074"></a>00074             my_partition.note_affinity( <span class="keywordtype">id</span> );
-<a name="l00075"></a>00075         }
-<a name="l00076"></a>00076         <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="l00077"></a>00077             <span class="keywordflow">if</span>( !range.empty() ) {
-<a name="l00078"></a>00078 #<span class="keywordflow">if</span> !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP
-<a name="l00079"></a>00079                 start_for& a = *<span class="keyword">new</span>(<a class="code" href="a00311.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_for(range,body,const_cast<Partitioner&>(partitioner));
-<a name="l00080"></a>00080 <span class="preprocessor">#else</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
-<a name="l00082"></a>00082                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
-<a name="l00083"></a>00083                 task_group_context context;
-<a name="l00084"></a>00084                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
-<a name="l00085"></a>00085 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */</span>
-<a name="l00086"></a>00086                 <a class="code" href="a00311.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
-<a name="l00087"></a>00087             }
-<a name="l00088"></a>00088         }
-<a name="l00089"></a>00089 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00090"></a>00090 <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="l00091"></a>00091             <span class="keywordflow">if</span>( !range.empty() ) {
-<a name="l00092"></a>00092                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
-<a name="l00093"></a>00093                 <a class="code" href="a00311.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
-<a name="l00094"></a>00094             }
-<a name="l00095"></a>00095         }
-<a name="l00096"></a>00096 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00098"></a>00098         flag_task *create_continuation() {
-<a name="l00099"></a>00099             <span class="keywordflow">return</span> <span class="keyword">new</span>( allocate_continuation() ) flag_task();
-<a name="l00100"></a>00100         }
-<a name="l00102"></a>00102         <span class="keywordtype">void</span> run_body( Range &r ) { my_body( r ); }
-<a name="l00103"></a>00103     };
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105     <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="l00106"></a>00106     task* start_for<Range,Body,Partitioner>::execute() {
-<a name="l00107"></a>00107         my_partition.check_being_stolen( *<span class="keyword">this</span> );
-<a name="l00108"></a>00108         my_partition.execute(*<span class="keyword">this</span>, my_range);
-<a name="l00109"></a>00109         <span class="keywordflow">return</span> NULL;
-<a name="l00110"></a>00110     } 
-<a name="l00111"></a>00111 } <span class="comment">// namespace internal</span>
-<a name="l00113"></a>00113 <span class="comment"></span>} <span class="comment">// namespace interfaceX</span>
-<a name="l00114"></a>00114 
-<a name="l00116"></a>00116 <span class="keyword">namespace </span>internal {
-<a name="l00117"></a>00117     <span class="keyword">using</span> interface6::internal::start_for;
-<a name="l00118"></a>00118     
-<a name="l00120"></a>00120     <span class="keyword">template</span><<span class="keyword">typename</span> Function, <span class="keyword">typename</span> Index>
-<a name="l00121"></a>00121     <span class="keyword">class </span>parallel_for_body : internal::no_assign {
-<a name="l00122"></a>00122         <span class="keyword">const</span> Function &my_func;
-<a name="l00123"></a>00123         <span class="keyword">const</span> Index my_begin;
-<a name="l00124"></a>00124         <span class="keyword">const</span> Index my_step; 
-<a name="l00125"></a>00125     <span class="keyword">public</span>:
-<a name="l00126"></a>00126         parallel_for_body( <span class="keyword">const</span> Function& _func, Index& _begin, Index& _step) 
-<a name="l00127"></a>00127             : my_func(_func), my_begin(_begin), my_step(_step) {}
-<a name="l00128"></a>00128         
-<a name="l00129"></a>00129         <span class="keywordtype">void</span> operator()( <a class="code" href="a00233.html">tbb::blocked_range<Index></a>& r )<span class="keyword"> const </span>{
-<a name="l00130"></a>00130             <span class="keywordflow">for</span>( Index i = r.<a class="code" href="a00233.html#18d2258400756ac1446dac7676b18df3">begin</a>(),  k = my_begin + i * my_step; i < r.<a class="code" href="a00233.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>(); i++, k = k + my_step)
-<a name="l00131"></a>00131                 my_func( k );
-<a name="l00132"></a>00132         }
-<a name="l00133"></a>00133     };
-<a name="l00134"></a>00134 } <span class="comment">// namespace internal</span>
-<a name="l00136"></a>00136 <span class="comment"></span>
-<a name="l00137"></a>00137 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
-<a name="l00138"></a>00138 
-<a name="l00149"></a>00149 
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00153"></a><a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">00153</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body ) {
-<a name="l00154"></a>00154     internal::start_for<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());
-<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="a00395.html#g13cac5dd55c7533bccea43a51c33d0e5">00160</a> <span class="keywordtype">void</span> <a class="code" href="a00395.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="a00303.html">simple_partitioner</a>& partitioner ) {
-<a name="l00161"></a>00161     internal::start_for<Range,Body,simple_partitioner>::run(range,body,partitioner);
-<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="a00395.html#ga7ac75d532389b55b9247f3fdb0b00d1">00167</a> <span class="keywordtype">void</span> <a class="code" href="a00395.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="a00231.html">auto_partitioner</a>& partitioner ) {
-<a name="l00168"></a>00168     internal::start_for<Range,Body,auto_partitioner>::run(range,body,partitioner);
-<a name="l00169"></a>00169 }
-<a name="l00170"></a>00170 
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00174"></a><a class="code" href="a00395.html#g9cd1b210ceb1c040f30e390b4a21bde8">00174</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00225.html">affinity_partitioner</a>& partitioner ) {
-<a name="l00175"></a>00175     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);
-<a name="l00176"></a>00176 }
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00180"></a>00180 <span class="preprocessor"></span>
-<a name="l00181"></a>00181 <span class="preprocessor">template<typename Range, typename Body></span>
-<a name="l00182"></a><a class="code" href="a00395.html#g2d317a5e0078cd193125439fed60dfdc">00182</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00395.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="a00303.html">simple_partitioner</a>& partitioner, <a class="code" hr [...]
-<a name="l00183"></a>00183     internal::start_for<Range,Body,simple_partitioner>::run(range, body, partitioner, context);
-<a name="l00184"></a>00184 }
-<a name="l00185"></a>00185 
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00189"></a><a class="code" href="a00395.html#g1c0700e3f85e83a788ff3ede88ebb7e9">00189</a> <span class="keywordtype">void</span> <a class="code" href="a00395.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="a00231.html">auto_partitioner</a>& partitioner, <a class="code" href="a00314.html">task_group_context< [...]
-<a name="l00190"></a>00190     internal::start_for<Range,Body,auto_partitioner>::run(range, body, partitioner, context);
-<a name="l00191"></a>00191 }
-<a name="l00192"></a>00192 
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00196"></a><a class="code" href="a00395.html#g04b4696b67370c01353ff5974c8f1196">00196</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00225.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00314.html">task_group_context</a>& context ) {
-<a name="l00197"></a>00197     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner, context);
-<a name="l00198"></a>00198 }
-<a name="l00199"></a>00199 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 <span class="keyword">namespace </span>strict_ppl {
-<a name="l00203"></a>00203 
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
-<a name="l00207"></a>00207 <span class="keywordtype">void</span> <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f) {
-<a name="l00208"></a>00208     <span class="keywordflow">if</span> (step <= 0 )
-<a name="l00209"></a>00209         internal::throw_exception(internal::eid_nonpositive_step); <span class="comment">// throws std::invalid_argument</span>
-<a name="l00210"></a>00210     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (last > first) {
-<a name="l00211"></a>00211         <span class="comment">// Above "else" avoids "potential divide by zero" warning on some platforms</span>
-<a name="l00212"></a>00212         Index end = (last - first - Index(1)) / step + Index(1);
-<a name="l00213"></a>00213         <a class="code" href="a00233.html">tbb::blocked_range<Index></a> range(static_cast<Index>(0), end);
-<a name="l00214"></a>00214         internal::parallel_for_body<Function, Index> body(f, first, step);
-<a name="l00215"></a>00215         <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a>(range, body, <a class="code" href="a00231.html">tbb::auto_partitioner</a>());
-<a name="l00216"></a>00216     }
-<a name="l00217"></a>00217 }
-<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="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f) {
-<a name="l00221"></a>00221     <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f);
-<a name="l00222"></a>00222 }
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00226"></a>00226 <span class="preprocessor">template <typename Index, typename Function></span>
-<a name="l00227"></a>00227 <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f, <a class="code" href="a00314.html">tbb::task_group_context</a> &context) {
-<a name="l00228"></a>00228     <span class="keywordflow">if</span> (step <= 0 )
-<a name="l00229"></a>00229         internal::throw_exception(internal::eid_nonpositive_step); <span class="comment">// throws std::invalid_argument</span>
-<a name="l00230"></a>00230     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (last > first) {
-<a name="l00231"></a>00231         <span class="comment">// Above "else" avoids "potential divide by zero" warning on some platforms</span>
-<a name="l00232"></a>00232         Index end = (last - first - Index(1)) / step + Index(1);
-<a name="l00233"></a>00233         <a class="code" href="a00233.html">tbb::blocked_range<Index></a> range(static_cast<Index>(0), end);
-<a name="l00234"></a>00234         internal::parallel_for_body<Function, Index> body(f, first, step);
-<a name="l00235"></a>00235         <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a>(range, body, <a class="code" href="a00231.html">tbb::auto_partitioner</a>(), context);
-<a name="l00236"></a>00236     }
-<a name="l00237"></a>00237 }
-<a name="l00239"></a>00239 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
-<a name="l00240"></a>00240 <span class="keywordtype">void</span> <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f, <a class="code" href="a00314.html">tbb::task_group_context</a> &context) {
-<a name="l00241"></a>00241     <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, context);
-<a name="l00242"></a>00242 }
-<a name="l00243"></a>00243 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246 } <span class="comment">// namespace strict_ppl</span>
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248 <span class="keyword">using</span> <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">strict_ppl::parallel_for</a>;
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250 } <span class="comment">// namespace tbb</span>
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 <span class="preprocessor">#if TBB_PREVIEW_SERIAL_SUBSET</span>
-<a name="l00253"></a>00253 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NORMAL_EXECUTION</span>
-<a name="l00254"></a>00254 <span class="preprocessor"></span><span class="preprocessor">#include "../serial/tbb/parallel_for.h"</span>
-<a name="l00255"></a>00255 <span class="preprocessor">#undef __TBB_NORMAL_EXECUTION</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 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_H */</span>
-<a name="l00259"></a>00259 
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00504.html b/doc/html/a00504.html
deleted file mode 100644
index 556b092..0000000
--- a/doc/html/a00504.html
+++ /dev/null
@@ -1,92 +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_for_each.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_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-2011 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_each_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_for_each_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="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         <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(<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>::reference 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="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function>
-<a name="l00052"></a><a class="code" href="a00395.html#gcd40c32f319747e61a8f73fcfc452001">00052</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a>(InputIterator first, InputIterator last, <span class="keyword">const</span> Function& f, <a class="code" href="a00314.html">task_group_context</a> &context) {
-<a name="l00053"></a>00053     internal::parallel_for_each_body<Function, InputIterator> body(f);
-<a name="l00054"></a>00054     <a class="code" href="a00395.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body, context);
-<a name="l00055"></a>00055 }
-<a name="l00056"></a>00056 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<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="a00395.html#gc2d710ca573f0a9bd94379cba3772def">00060</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a>(InputIterator first, InputIterator last, <span class="keyword">const</span> Function& f) {
-<a name="l00061"></a>00061     internal::parallel_for_each_body<Function, InputIterator> body(f);
-<a name="l00062"></a>00062     <a class="code" href="a00395.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="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_each_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00506.html b/doc/html/a00506.html
deleted file mode 100644
index c0f248a..0000000
--- a/doc/html/a00506.html
+++ /dev/null
@@ -1,386 +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_invoke.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_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-2011 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_invoke_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_invoke_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 
-<a name="l00028"></a>00028 <span class="preprocessor">#if !__TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a><a class="code" href="a00314.html">00030</a>     <span class="keyword">struct </span><a class="code" href="a00314.html">task_group_context</a> {};
-<a name="l00031"></a>00031 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00032"></a>00032 
-<a name="l00034"></a>00034 <span class="keyword">namespace </span>internal {
-<a name="l00035"></a>00035     <span class="comment">// Simple task object, executing user method</span>
-<a name="l00036"></a>00036     <span class="keyword">template</span><<span class="keyword">typename</span> function>
-<a name="l00037"></a>00037     <span class="keyword">class </span>function_invoker : <span class="keyword">public</span> <a class="code" href="a00311.html">task</a>{
-<a name="l00038"></a>00038     <span class="keyword">public</span>:
-<a name="l00039"></a>00039         function_invoker(<span class="keyword">const</span> function& _function) : my_function(_function) {}
-<a name="l00040"></a>00040     <span class="keyword">private</span>:
-<a name="l00041"></a>00041         <span class="keyword">const</span> function &my_function;
-<a name="l00042"></a>00042         <span class="comment">/*override*/</span>
-<a name="l00043"></a>00043         task* execute()
-<a name="l00044"></a>00044         {
-<a name="l00045"></a>00045             my_function();
-<a name="l00046"></a>00046             <span class="keywordflow">return</span> NULL;
-<a name="l00047"></a>00047         }
-<a name="l00048"></a>00048     };
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050     <span class="comment">// The class spawns two or three child tasks</span>
-<a name="l00051"></a>00051     <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="l00052"></a>00052     <span class="keyword">class </span>spawner : <span class="keyword">public</span> task {
-<a name="l00053"></a>00053     <span class="keyword">private</span>:
-<a name="l00054"></a>00054         <span class="keyword">const</span> function1& my_func1;
-<a name="l00055"></a>00055         <span class="keyword">const</span> function2& my_func2;
-<a name="l00056"></a>00056         <span class="keyword">const</span> function3& my_func3;
-<a name="l00057"></a>00057         <span class="keywordtype">bool</span> is_recycled;
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059         task* execute (){
-<a name="l00060"></a>00060             <span class="keywordflow">if</span>(is_recycled){
-<a name="l00061"></a>00061                 <span class="keywordflow">return</span> NULL;
-<a name="l00062"></a>00062             }<span class="keywordflow">else</span>{
-<a name="l00063"></a>00063                 __TBB_ASSERT(N==2 || N==3, <span class="stringliteral">"Number of arguments passed to spawner is wrong"</span>);
-<a name="l00064"></a>00064                 set_ref_count(N);
-<a name="l00065"></a>00065                 recycle_as_safe_continuation();
-<a name="l00066"></a>00066                 internal::function_invoker<function2>* invoker2 = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function2>(my_func2);
-<a name="l00067"></a>00067                 __TBB_ASSERT(invoker2, <span class="stringliteral">"Child task allocation failed"</span>);
-<a name="l00068"></a>00068                 spawn(*invoker2);
-<a name="l00069"></a>00069                 size_t n = N; <span class="comment">// To prevent compiler warnings</span>
-<a name="l00070"></a>00070                 <span class="keywordflow">if</span> (n>2) {
-<a name="l00071"></a>00071                     internal::function_invoker<function3>* invoker3 = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function3>(my_func3);
-<a name="l00072"></a>00072                     __TBB_ASSERT(invoker3, <span class="stringliteral">"Child task allocation failed"</span>);
-<a name="l00073"></a>00073                     spawn(*invoker3);
-<a name="l00074"></a>00074                 }
-<a name="l00075"></a>00075                 my_func1();
-<a name="l00076"></a>00076                 is_recycled = <span class="keyword">true</span>;
-<a name="l00077"></a>00077                 <span class="keywordflow">return</span> NULL;
-<a name="l00078"></a>00078             }
-<a name="l00079"></a>00079         } <span class="comment">// execute</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081     <span class="keyword">public</span>:
-<a name="l00082"></a>00082         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="l00083"></a>00083     };
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085     <span class="comment">// Creates and spawns child tasks</span>
-<a name="l00086"></a>00086     <span class="keyword">class </span>parallel_invoke_helper : <span class="keyword">public</span> empty_task {
-<a name="l00087"></a>00087     <span class="keyword">public</span>:
-<a name="l00088"></a>00088         <span class="comment">// Dummy functor class</span>
-<a name="l00089"></a>00089         <span class="keyword">class </span>parallel_invoke_noop {
-<a name="l00090"></a>00090         <span class="keyword">public</span>:
-<a name="l00091"></a>00091             <span class="keywordtype">void</span> operator() ()<span class="keyword"> const </span>{}
-<a name="l00092"></a>00092         };
-<a name="l00093"></a>00093         <span class="comment">// Creates a helper object with user-defined number of children expected</span>
-<a name="l00094"></a>00094         parallel_invoke_helper(<span class="keywordtype">int</span> number_of_children)
-<a name="l00095"></a>00095         {
-<a name="l00096"></a>00096             set_ref_count(number_of_children + 1);
-<a name="l00097"></a>00097         }
-<a name="l00098"></a>00098         <span class="comment">// Adds child task and spawns it</span>
-<a name="l00099"></a>00099         <span class="keyword">template</span> <<span class="keyword">typename</span> function>
-<a name="l00100"></a>00100         <span class="keywordtype">void</span> add_child (<span class="keyword">const</span> function &_func)
-<a name="l00101"></a>00101         {
-<a name="l00102"></a>00102             internal::function_invoker<function>* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function>(_func);
-<a name="l00103"></a>00103             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
-<a name="l00104"></a>00104             spawn(*invoker);
-<a name="l00105"></a>00105         }
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107         <span class="comment">// Adds a task with multiple child tasks and spawns it</span>
-<a name="l00108"></a>00108         <span class="comment">// two arguments</span>
-<a name="l00109"></a>00109         <span class="keyword">template</span> <<span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2>
-<a name="l00110"></a>00110         <span class="keywordtype">void</span> add_children (<span class="keyword">const</span> function1& _func1, <span class="keyword">const</span> function2& _func2)
-<a name="l00111"></a>00111         {
-<a name="l00112"></a>00112             <span class="comment">// The third argument is dummy, it is ignored actually.</span>
-<a name="l00113"></a>00113             parallel_invoke_noop noop;
-<a name="l00114"></a>00114             internal::spawner<2, function1, function2, parallel_invoke_noop>& sub_root = *<span class="keyword">new</span>(allocate_child())internal::spawner<2, function1, function2, parallel_invoke_noop>(_func1, _func2, noop);
-<a name="l00115"></a>00115             spawn(sub_root);
-<a name="l00116"></a>00116         }
-<a name="l00117"></a>00117         <span class="comment">// three arguments</span>
-<a name="l00118"></a>00118         <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="l00119"></a>00119         <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="l00120"></a>00120         {
-<a name="l00121"></a>00121             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="l00122"></a>00122             spawn(sub_root);
-<a name="l00123"></a>00123         }
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125         <span class="comment">// Waits for all child tasks</span>
-<a name="l00126"></a>00126         <span class="keyword">template</span> <<span class="keyword">typename</span> F0>
-<a name="l00127"></a>00127         <span class="keywordtype">void</span> run_and_finish(<span class="keyword">const</span> F0& f0)
-<a name="l00128"></a>00128         {
-<a name="l00129"></a>00129             internal::function_invoker<F0>* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<F0>(f0);
-<a name="l00130"></a>00130             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
-<a name="l00131"></a>00131             spawn_and_wait_for_all(*invoker);
-<a name="l00132"></a>00132         }
-<a name="l00133"></a>00133     };
-<a name="l00134"></a>00134     <span class="comment">// The class destroys root if exception occured as well as in normal case</span>
-<a name="l00135"></a>00135     <span class="keyword">class </span>parallel_invoke_cleaner: internal::no_copy { 
-<a name="l00136"></a>00136     <span class="keyword">public</span>:
-<a name="l00137"></a>00137 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span>        parallel_invoke_cleaner(<span class="keywordtype">int</span> number_of_children, <a class="code" href="a00314.html">tbb::task_group_context</a>& context)
-<a name="l00139"></a>00139             : root(*new(task::allocate_root(context)) internal::parallel_invoke_helper(number_of_children))
-<a name="l00140"></a>00140 #else
-<a name="l00141"></a>00141         parallel_invoke_cleaner(int number_of_children, tbb::task_group_context&)
-<a name="l00142"></a>00142             : root(*new(task::allocate_root()) internal::parallel_invoke_helper(number_of_children))
-<a name="l00143"></a>00143 #endif <span class="comment">/* !__TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00144"></a>00144         {}
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146         ~parallel_invoke_cleaner(){
-<a name="l00147"></a>00147             root.destroy(root);
-<a name="l00148"></a>00148         }
-<a name="l00149"></a>00149         internal::parallel_invoke_helper& root;
-<a name="l00150"></a>00150     };
-<a name="l00151"></a>00151 } <span class="comment">// namespace internal</span>
-<a name="l00153"></a>00153 <span class="comment"></span>
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 
-<a name="l00160"></a>00160 <span class="comment">// parallel_invoke with user-defined context</span>
-<a name="l00161"></a>00161 <span class="comment">// two arguments</span>
-<a name="l00162"></a>00162 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1 >
-<a name="l00163"></a><a class="code" href="a00395.html#gd3e2998f171494f94c2103f4eb924084">00163</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <a class="code" href="a00314.html">tbb::task_group_context</a>& context) {
-<a name="l00164"></a>00164     internal::parallel_invoke_cleaner cleaner(2, context);
-<a name="l00165"></a>00165     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     root.add_child(f1);
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     root.run_and_finish(f0);
-<a name="l00170"></a>00170 }
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 <span class="comment">// three 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 >
-<a name="l00174"></a>00174 <span class="keywordtype">void</span> <a class="code" href="a00395.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="a00314.html">tbb::task_group_context</a>& context) {
-<a name="l00175"></a>00175     internal::parallel_invoke_cleaner cleaner(3, 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(f2);
-<a name="l00179"></a>00179     root.add_child(f1);
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181     root.run_and_finish(f0);
-<a name="l00182"></a>00182 }
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184 <span class="comment">// four arguments</span>
-<a name="l00185"></a>00185 <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="l00186"></a>00186 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00187"></a>00187                      <a class="code" href="a00314.html">tbb::task_group_context</a>& context)
-<a name="l00188"></a>00188 {
-<a name="l00189"></a>00189     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00190"></a>00190     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192     root.add_child(f3);
-<a name="l00193"></a>00193     root.add_child(f2);
-<a name="l00194"></a>00194     root.add_child(f1);
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196     root.run_and_finish(f0);
-<a name="l00197"></a>00197 }
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 <span class="comment">// five arguments</span>
-<a name="l00200"></a>00200 <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="l00201"></a>00201 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00202"></a>00202                      <a class="code" href="a00314.html">tbb::task_group_context</a>& context)
-<a name="l00203"></a>00203 {
-<a name="l00204"></a>00204     internal::parallel_invoke_cleaner cleaner(3, context);
-<a name="l00205"></a>00205     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     root.add_children(f4, f3);
-<a name="l00208"></a>00208     root.add_children(f2, f1);
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210     root.run_and_finish(f0);
-<a name="l00211"></a>00211 }
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 <span class="comment">// six arguments</span>
-<a name="l00214"></a>00214 <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="l00215"></a>00215 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00216"></a>00216                      <a class="code" href="a00314.html">tbb::task_group_context</a>& context)
-<a name="l00217"></a>00217 {
-<a name="l00218"></a>00218     internal::parallel_invoke_cleaner cleaner(3, context);
-<a name="l00219"></a>00219     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221     root.add_children(f5, f4, f3);
-<a name="l00222"></a>00222     root.add_children(f2, f1);
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224     root.run_and_finish(f0);
-<a name="l00225"></a>00225 }
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 <span class="comment">// seven arguments</span>
-<a name="l00228"></a>00228 <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="l00229"></a>00229 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00230"></a>00230                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6,
-<a name="l00231"></a>00231                      <a class="code" href="a00314.html">tbb::task_group_context</a>& context)
-<a name="l00232"></a>00232 {
-<a name="l00233"></a>00233     internal::parallel_invoke_cleaner cleaner(3, context);
-<a name="l00234"></a>00234     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236     root.add_children(f6, f5, f4);
-<a name="l00237"></a>00237     root.add_children(f3, f2, f1);
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239     root.run_and_finish(f0);
-<a name="l00240"></a>00240 }
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 <span class="comment">// eight arguments</span>
-<a name="l00243"></a>00243 <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="l00244"></a>00244          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7>
-<a name="l00245"></a>00245 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00246"></a>00246                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7,
-<a name="l00247"></a>00247                      <a class="code" href="a00314.html">tbb::task_group_context</a>& context)
-<a name="l00248"></a>00248 {
-<a name="l00249"></a>00249     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00250"></a>00250     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252     root.add_children(f7, f6, f5);
-<a name="l00253"></a>00253     root.add_children(f4, f3);
-<a name="l00254"></a>00254     root.add_children(f2, f1);
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256     root.run_and_finish(f0);
-<a name="l00257"></a>00257 }
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 <span class="comment">// nine arguments</span>
-<a name="l00260"></a>00260 <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="l00261"></a>00261          <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="l00262"></a>00262 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00263"></a>00263                      <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="l00264"></a>00264                      <a class="code" href="a00314.html">tbb::task_group_context</a>& context)
-<a name="l00265"></a>00265 {
-<a name="l00266"></a>00266     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00267"></a>00267     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269     root.add_children(f8, f7, f6);
-<a name="l00270"></a>00270     root.add_children(f5, f4, f3);
-<a name="l00271"></a>00271     root.add_children(f2, f1);
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273     root.run_and_finish(f0);
-<a name="l00274"></a>00274 }
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276 <span class="comment">// ten arguments</span>
-<a name="l00277"></a>00277 <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="l00278"></a>00278          <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="l00279"></a>00279 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00280"></a>00280                      <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="l00281"></a>00281                      <a class="code" href="a00314.html">tbb::task_group_context</a>& context)
-<a name="l00282"></a>00282 {
-<a name="l00283"></a>00283     internal::parallel_invoke_cleaner cleaner(4, context);
-<a name="l00284"></a>00284     internal::parallel_invoke_helper& root = cleaner.root;
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286     root.add_children(f9, f8, f7);
-<a name="l00287"></a>00287     root.add_children(f6, f5, f4);
-<a name="l00288"></a>00288     root.add_children(f3, f2, f1);
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290     root.run_and_finish(f0);
-<a name="l00291"></a>00291 }
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293 <span class="comment">// two arguments</span>
-<a name="l00294"></a>00294 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1>
-<a name="l00295"></a>00295 <span class="keywordtype">void</span> <a class="code" href="a00395.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1) {
-<a name="l00296"></a>00296     task_group_context context;
-<a name="l00297"></a>00297     parallel_invoke<F0, F1>(f0, f1, context);
-<a name="l00298"></a>00298 }
-<a name="l00299"></a>00299 <span class="comment">// three 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>
-<a name="l00301"></a>00301 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00302"></a>00302     task_group_context context;
-<a name="l00303"></a>00303     parallel_invoke<F0, F1, F2>(f0, f1, f2, context);
-<a name="l00304"></a>00304 }
-<a name="l00305"></a>00305 <span class="comment">// four 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 >
-<a name="l00307"></a>00307 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00308"></a>00308     task_group_context context;
-<a name="l00309"></a>00309     parallel_invoke<F0, F1, F2, F3>(f0, f1, f2, f3, context);
-<a name="l00310"></a>00310 }
-<a name="l00311"></a>00311 <span class="comment">// five 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>
-<a name="l00313"></a>00313 <span class="keywordtype">void</span> <a class="code" href="a00395.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     task_group_context context;
-<a name="l00315"></a>00315     parallel_invoke<F0, F1, F2, F3, F4>(f0, f1, f2, f3, f4, context);
-<a name="l00316"></a>00316 }
-<a name="l00317"></a>00317 <span class="comment">// six arguments</span>
-<a name="l00318"></a>00318 <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="l00319"></a>00319 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00320"></a>00320     task_group_context context;
-<a name="l00321"></a>00321     parallel_invoke<F0, F1, F2, F3, F4, F5>(f0, f1, f2, f3, f4, f5, context);
-<a name="l00322"></a>00322 }
-<a name="l00323"></a>00323 <span class="comment">// seven arguments</span>
-<a name="l00324"></a>00324 <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="l00325"></a>00325 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00326"></a>00326                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6)
-<a name="l00327"></a>00327 {
-<a name="l00328"></a>00328     task_group_context context;
-<a name="l00329"></a>00329     parallel_invoke<F0, F1, F2, F3, F4, F5, F6>(f0, f1, f2, f3, f4, f5, f6, context);
-<a name="l00330"></a>00330 }
-<a name="l00331"></a>00331 <span class="comment">// eigth arguments</span>
-<a name="l00332"></a>00332 <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="l00333"></a>00333          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7>
-<a name="l00334"></a>00334 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00335"></a>00335                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7)
-<a name="l00336"></a>00336 {
-<a name="l00337"></a>00337     task_group_context context;
-<a name="l00338"></a>00338     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7>(f0, f1, f2, f3, f4, f5, f6, f7, context);
-<a name="l00339"></a>00339 }
-<a name="l00340"></a>00340 <span class="comment">// nine arguments</span>
-<a name="l00341"></a>00341 <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="l00342"></a>00342          <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="l00343"></a>00343 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00344"></a>00344                      <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="l00345"></a>00345 {
-<a name="l00346"></a>00346     task_group_context context;
-<a name="l00347"></a>00347     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8>(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);
-<a name="l00348"></a>00348 }
-<a name="l00349"></a>00349 <span class="comment">// ten arguments</span>
-<a name="l00350"></a>00350 <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="l00351"></a>00351          <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="l00352"></a>00352 <span class="keywordtype">void</span> <a class="code" href="a00395.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="l00353"></a>00353                      <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="l00354"></a>00354 {
-<a name="l00355"></a>00355     task_group_context context;
-<a name="l00356"></a>00356     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="l00357"></a>00357 }
-<a name="l00358"></a>00358 
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361 } <span class="comment">// namespace</span>
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_invoke_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00511.html b/doc/html/a00511.html
new file mode 100644
index 0000000..a918e30
--- /dev/null
+++ b/doc/html/a00511.html
@@ -0,0 +1,1655 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>flow_graph.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>flow_graph.h</h1><a href="a00372.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-2012 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_flow_graph_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_flow_graph_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 "atomic.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "spin_mutex.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "null_mutex.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "null_rw_mutex.h"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "task.h"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "concurrent_vector.h"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "internal/_aggregator_impl.h"</span>
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034 <span class="comment">// use the VC10 or gcc version of tuple if it is available.</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#if TBB_IMPLEMENT_CPP0X && (!defined(_MSC_VER) || _MSC_VER < 1600)</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define TBB_PREVIEW_TUPLE 1</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include "compat/tuple"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#else</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#include <tuple></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#endif</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include<list></span>
+<a name="l00043"></a>00043 <span class="preprocessor">#include<queue></span>
+<a name="l00044"></a>00044 
+<a name="l00055"></a>00055 <span class="keyword">namespace </span>tbb {
+<a name="l00056"></a>00056 <span class="keyword">namespace </span>flow {
+<a name="l00057"></a>00057 
+<a name="l00059"></a>00059 <span class="keyword">enum</span> concurrency { unlimited = 0, serial = 1 };
+<a name="l00060"></a>00060 
+<a name="l00061"></a>00061 <span class="keyword">namespace </span>interface6 {
+<a name="l00062"></a>00062 
+<a name="l00064"></a><a class="code" href="a00277.html">00064</a> <span class="keyword">class </span><a class="code" href="a00277.html">continue_msg</a> {};
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066 <span class="keyword">template</span>< <span class="keyword">typename</span> T > <span class="keyword">class </span><a class="code" href="a00327.html">sender</a>;
+<a name="l00067"></a>00067 <span class="keyword">template</span>< <span class="keyword">typename</span> T > <span class="keyword">class </span><a class="code" href="a00321.html">receiver</a>;
+<a name="l00068"></a>00068 <span class="keyword">class </span><a class="code" href="a00279.html">continue_receiver</a>;
+<a name="l00069"></a>00069 
+<a name="l00071"></a>00071 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l00072"></a><a class="code" href="a00327.html">00072</a> <span class="keyword">class </span><a class="code" href="a00327.html">sender</a> {
+<a name="l00073"></a>00073 <span class="keyword">public</span>:
+<a name="l00075"></a><a class="code" href="a00327.html#127af99916cc085cd9dbc09c53299928">00075</a>     <span class="keyword">typedef</span> T <a class="code" href="a00327.html#127af99916cc085cd9dbc09c53299928">output_type</a>;
+<a name="l00076"></a>00076 
+<a name="l00078"></a><a class="code" href="a00327.html#d690e8a54e358968f0ee4fdf9ee73068">00078</a>     <span class="keyword">typedef</span> <a class="code" href="a00321.html">receiver<T></a> <a class="code" href="a00321.html">successor_type</a>;
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080     <span class="keyword">virtual</span> ~<a class="code" href="a00327.html">sender</a>() {}
+<a name="l00081"></a>00081 
+<a name="l00083"></a>00083     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00327.html#68b8941ad77b9303cf3bcb8cf1f2d28a">register_successor</a>( <a class="code" href="a00327.html#d690e8a54e358968f0ee4fdf9ee73068">successor_type</a> &r ) = 0;
+<a name="l00084"></a>00084 
+<a name="l00086"></a>00086     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00327.html#82f363bfb1738bb8789e167590b10ef9">remove_successor</a>( <a class="code" href="a00327.html#d690e8a54e358968f0ee4fdf9ee73068">successor_type</a> &r ) = 0;
+<a name="l00087"></a>00087 
+<a name="l00089"></a><a class="code" href="a00327.html#922fb56b0aad090b90a98b7d56b76a59">00089</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00327.html#922fb56b0aad090b90a98b7d56b76a59">try_get</a>( T & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00090"></a>00090 
+<a name="l00092"></a><a class="code" href="a00327.html#02c05b472271db1b68a48ea2618fa72f">00092</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00327.html#02c05b472271db1b68a48ea2618fa72f">try_reserve</a>( T & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00093"></a>00093 
+<a name="l00095"></a><a class="code" href="a00327.html#27036b06d6a91e97007e14f400529199">00095</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00327.html#27036b06d6a91e97007e14f400529199">try_release</a>( ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00096"></a>00096 
+<a name="l00098"></a><a class="code" href="a00327.html#7b840f50da117a0d6848707c1857ea2e">00098</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00327.html#7b840f50da117a0d6848707c1857ea2e">try_consume</a>( ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00099"></a>00099 };
+<a name="l00100"></a>00100 
+<a name="l00102"></a>00102 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l00103"></a><a class="code" href="a00321.html">00103</a> <span class="keyword">class </span><a class="code" href="a00321.html">receiver</a> {
+<a name="l00104"></a>00104 <span class="keyword">public</span>:
+<a name="l00106"></a><a class="code" href="a00321.html#0d0524c99313dedea1e04464bbf2f7ef">00106</a>     <span class="keyword">typedef</span> T <a class="code" href="a00277.html">input_type</a>;
+<a name="l00107"></a>00107 
+<a name="l00109"></a><a class="code" href="a00321.html#7fa8cff811e7c1589b805a4bb4c7a74f">00109</a>     <span class="keyword">typedef</span> <a class="code" href="a00327.html">sender<T></a> <a class="code" href="a00327.html">predecessor_type</a>;
+<a name="l00110"></a>00110 
+<a name="l00112"></a><a class="code" href="a00321.html#b00699b235435f7b65b663d5063624a1">00112</a>     <span class="keyword">virtual</span> <a class="code" href="a00321.html#b00699b235435f7b65b663d5063624a1">~receiver</a>() {}
+<a name="l00113"></a>00113 
+<a name="l00115"></a>00115     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00321.html#c6d5d0cb8ebe5771be91933609fe31b8">try_put</a>( <span class="keyword">const</span> T& t ) = 0;
+<a name="l00116"></a>00116 
+<a name="l00118"></a><a class="code" href="a00321.html#30e3316466efe3a713c23062b6e806f3">00118</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00321.html#30e3316466efe3a713c23062b6e806f3">register_predecessor</a>( <a class="code" href="a00327.html">predecessor_type</a> & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00119"></a>00119 
+<a name="l00121"></a><a class="code" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">00121</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>( <a class="code" href="a00327.html">predecessor_type</a> & ) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00122"></a>00122 };
+<a name="l00123"></a>00123 
+<a name="l00125"></a>00125 
+<a name="l00126"></a><a class="code" href="a00279.html">00126</a> <span class="keyword">class </span><a class="code" href="a00279.html">continue_receiver</a> : <span class="keyword">public</span> <a class="code" href="a00321.html">receiver</a>< continue_msg > {
+<a name="l00127"></a>00127 <span class="keyword">public</span>:
+<a name="l00128"></a>00128 
+<a name="l00130"></a><a class="code" href="a00279.html#3c43c166af832d9187035985841e0a7f">00130</a>     <span class="keyword">typedef</span> <a class="code" href="a00277.html">continue_msg</a> <a class="code" href="a00277.html">input_type</a>;
+<a name="l00131"></a>00131 
+<a name="l00133"></a><a class="code" href="a00279.html#f9c58b3e9c46afd2518d0fd8957a5a2f">00133</a>     <span class="keyword">typedef</span> <a class="code" href="a00327.html">sender< continue_msg ></a> <a class="code" href="a00327.html">predecessor_type</a>;
+<a name="l00134"></a>00134 
+<a name="l00136"></a><a class="code" href="a00279.html#177db82d548a1f8471371331890b91a8">00136</a>     <a class="code" href="a00279.html#177db82d548a1f8471371331890b91a8">continue_receiver</a>( <span class="keywordtype">int</span> number_of_predecessors = 0 ) {
+<a name="l00137"></a>00137         my_predecessor_count = my_initial_predecessor_count = number_of_predecessors;
+<a name="l00138"></a>00138         my_current_count = 0;
+<a name="l00139"></a>00139     }
+<a name="l00140"></a>00140 
+<a name="l00142"></a><a class="code" href="a00279.html#a0b292ed7fa6556b2a735f6d1e82dc74">00142</a>     <a class="code" href="a00279.html#177db82d548a1f8471371331890b91a8">continue_receiver</a>( <span class="keyword">const</span> <a class="code" href="a00279.html">continue_receiver</a>& src ) : <a class="code" href="a00321.html">receiver</a><<a class="code" href="a00277.html">continue_msg</a>>() {
+<a name="l00143"></a>00143         my_predecessor_count = my_initial_predecessor_count = src.<a class="code" href="a00279.html#8a0d4c3084fd13902c2d38f31c1dc232">my_initial_predecessor_count</a>;
+<a name="l00144"></a>00144         my_current_count = 0;
+<a name="l00145"></a>00145     }
+<a name="l00146"></a>00146 
+<a name="l00148"></a><a class="code" href="a00279.html#1e14828fa079b9835ff7267df5ee45d7">00148</a>     <span class="keyword">virtual</span> <a class="code" href="a00279.html#1e14828fa079b9835ff7267df5ee45d7">~continue_receiver</a>() { }
+<a name="l00149"></a>00149 
+<a name="l00151"></a><a class="code" href="a00279.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">00151</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00279.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">register_predecessor</a>( <a class="code" href="a00327.html">predecessor_type</a> & ) {
+<a name="l00152"></a>00152         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l00153"></a>00153         ++my_predecessor_count;
+<a name="l00154"></a>00154         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00155"></a>00155     }
+<a name="l00156"></a>00156 
+<a name="l00158"></a>00158 
+<a name="l00161"></a><a class="code" href="a00279.html#cb691b18416d4742265aed84d496ebbd">00161</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00279.html#cb691b18416d4742265aed84d496ebbd">remove_predecessor</a>( <a class="code" href="a00327.html">predecessor_type</a> & ) {
+<a name="l00162"></a>00162         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l00163"></a>00163         --my_predecessor_count;
+<a name="l00164"></a>00164         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00165"></a>00165     }
+<a name="l00166"></a>00166 
+<a name="l00168"></a>00168 
+<a name="l00170"></a><a class="code" href="a00279.html#3969c70fb89c0a982f142ae9eb5facae">00170</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00279.html#3969c70fb89c0a982f142ae9eb5facae">try_put</a>( <span class="keyword">const</span> <a class="code" href="a00277.html">input_type</a> & ) {
+<a name="l00171"></a>00171         {
+<a name="l00172"></a>00172             <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> l(my_mutex);
+<a name="l00173"></a>00173             <span class="keywordflow">if</span> ( ++my_current_count < my_predecessor_count )
+<a name="l00174"></a>00174                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00175"></a>00175             <span class="keywordflow">else</span>
+<a name="l00176"></a>00176                 my_current_count = 0;
+<a name="l00177"></a>00177         }
+<a name="l00178"></a>00178         <a class="code" href="a00279.html#40ca8b7e96c5bc3428b4d1e409725ee5">execute</a>();
+<a name="l00179"></a>00179         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00180"></a>00180     }
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182 <span class="keyword">protected</span>:
+<a name="l00183"></a>00183     <a class="code" href="a00331.html">spin_mutex</a> my_mutex;
+<a name="l00184"></a>00184     <span class="keywordtype">int</span> my_predecessor_count;
+<a name="l00185"></a>00185     <span class="keywordtype">int</span> my_current_count;
+<a name="l00186"></a>00186     <span class="keywordtype">int</span> my_initial_predecessor_count;
+<a name="l00187"></a>00187 
+<a name="l00189"></a>00189 
+<a name="l00191"></a>00191     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00279.html#40ca8b7e96c5bc3428b4d1e409725ee5">execute</a>() = 0;
+<a name="l00192"></a>00192 };
+<a name="l00193"></a>00193 
+<a name="l00194"></a>00194 <span class="preprocessor">#include "internal/_flow_graph_impl.h"</span>
+<a name="l00195"></a>00195 <span class="keyword">using namespace </span>internal::graph_policy_namespace;
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197 <span class="keyword">class </span><a class="code" href="a00288.html">graph</a>;
+<a name="l00198"></a>00198 <span class="keyword">class </span><a class="code" href="a00289.html">graph_node</a>;
+<a name="l00199"></a>00199 
+<a name="l00200"></a>00200 <span class="keyword">template</span> <<span class="keyword">typename</span> GraphContainerType, <span class="keyword">typename</span> GraphNodeType>
+<a name="l00201"></a>00201 <span class="keyword">class </span>graph_iterator {
+<a name="l00202"></a>00202     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00288.html">graph</a>;
+<a name="l00203"></a>00203     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00289.html">graph_node</a>;
+<a name="l00204"></a>00204 <span class="keyword">public</span>:
+<a name="l00205"></a>00205     <span class="keyword">typedef</span> size_t size_type;
+<a name="l00206"></a>00206     <span class="keyword">typedef</span> GraphNodeType value_type;
+<a name="l00207"></a>00207     <span class="keyword">typedef</span> GraphNodeType* pointer;
+<a name="l00208"></a>00208     <span class="keyword">typedef</span> GraphNodeType& reference;
+<a name="l00209"></a>00209     <span class="keyword">typedef</span> <span class="keyword">const</span> GraphNodeType& const_reference;
+<a name="l00210"></a>00210     <span class="keyword">typedef</span> std::forward_iterator_tag iterator_category;
+<a name="l00211"></a>00211 
+<a name="l00213"></a>00213     graph_iterator() : my_graph(NULL), current_node(NULL) {}
+<a name="l00214"></a>00214 
+<a name="l00216"></a>00216     graph_iterator(<span class="keyword">const</span> graph_iterator& other) :
+<a name="l00217"></a>00217         my_graph(other.my_graph), current_node(other.current_node)
+<a name="l00218"></a>00218     {}
+<a name="l00219"></a>00219 
+<a name="l00221"></a>00221     graph_iterator& operator=(<span class="keyword">const</span> graph_iterator& other) {
+<a name="l00222"></a>00222         <span class="keywordflow">if</span> (<span class="keyword">this</span> != &other) {
+<a name="l00223"></a>00223             my_graph = other.my_graph;
+<a name="l00224"></a>00224             current_node = other.current_node;
+<a name="l00225"></a>00225         }
+<a name="l00226"></a>00226         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00227"></a>00227     }
+<a name="l00228"></a>00228 
+<a name="l00230"></a>00230     reference operator*() <span class="keyword">const</span>;
+<a name="l00231"></a>00231 
+<a name="l00233"></a>00233     pointer operator->() <span class="keyword">const</span>;
+<a name="l00234"></a>00234 
+<a name="l00236"></a>00236     <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> graph_iterator& other)<span class="keyword"> const </span>{
+<a name="l00237"></a>00237         <span class="keywordflow">return</span> ((my_graph == other.my_graph) && (current_node == other.current_node));
+<a name="l00238"></a>00238     }
+<a name="l00239"></a>00239 
+<a name="l00241"></a>00241     <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> graph_iterator& other)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !(operator==(other)); }
+<a name="l00242"></a>00242 
+<a name="l00244"></a>00244     graph_iterator& operator++() {
+<a name="l00245"></a>00245         internal_forward();
+<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 
+<a name="l00250"></a>00250     graph_iterator operator++(<span class="keywordtype">int</span>) {
+<a name="l00251"></a>00251         graph_iterator result = *<span class="keyword">this</span>;
+<a name="l00252"></a>00252         operator++();
+<a name="l00253"></a>00253         <span class="keywordflow">return</span> result;
+<a name="l00254"></a>00254     }
+<a name="l00255"></a>00255 
+<a name="l00256"></a>00256 <span class="keyword">private</span>:
+<a name="l00257"></a>00257     <span class="comment">// the graph over which we are iterating</span>
+<a name="l00258"></a>00258     GraphContainerType *my_graph;
+<a name="l00259"></a>00259     <span class="comment">// pointer into my_graph's my_nodes list</span>
+<a name="l00260"></a>00260     pointer current_node;
+<a name="l00261"></a>00261 
+<a name="l00263"></a>00263     graph_iterator(GraphContainerType *g, <span class="keywordtype">bool</span> begin);
+<a name="l00264"></a>00264     <span class="keywordtype">void</span> internal_forward();
+<a name="l00265"></a>00265 };
+<a name="l00266"></a>00266 
+<a name="l00268"></a>00268 
+<a name="l00269"></a><a class="code" href="a00288.html">00269</a> <span class="keyword">class </span><a class="code" href="a00288.html">graph</a> : tbb::internal::no_copy {
+<a name="l00270"></a>00270     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00289.html">graph_node</a>;
+<a name="l00271"></a>00271 
+<a name="l00272"></a>00272     <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l00273"></a>00273     <span class="keyword">class </span>run_task : <span class="keyword">public</span> <a class="code" href="a00337.html">task</a> {
+<a name="l00274"></a>00274     <span class="keyword">public</span>:
+<a name="l00275"></a>00275         run_task( Body& body ) : my_body(body) {}
+<a name="l00276"></a>00276         <a class="code" href="a00337.html">task</a> *execute() {
+<a name="l00277"></a>00277             my_body();
+<a name="l00278"></a>00278             <span class="keywordflow">return</span> NULL;
+<a name="l00279"></a>00279         }
+<a name="l00280"></a>00280     <span class="keyword">private</span>:
+<a name="l00281"></a>00281         Body my_body;
+<a name="l00282"></a>00282     };
+<a name="l00283"></a>00283 
+<a name="l00284"></a>00284     <span class="keyword">template</span>< <span class="keyword">typename</span> Receiver, <span class="keyword">typename</span> Body >
+<a name="l00285"></a>00285     <span class="keyword">class </span>run_and_put_task : <span class="keyword">public</span> <a class="code" href="a00337.html">task</a> {
+<a name="l00286"></a>00286     <span class="keyword">public</span>:
+<a name="l00287"></a>00287         run_and_put_task( Receiver &r, Body& body ) : my_receiver(r), my_body(body) {}
+<a name="l00288"></a>00288         <a class="code" href="a00337.html">task</a> *execute() {
+<a name="l00289"></a>00289             my_receiver.try_put( my_body() );
+<a name="l00290"></a>00290             <span class="keywordflow">return</span> NULL;
+<a name="l00291"></a>00291         }
+<a name="l00292"></a>00292     <span class="keyword">private</span>:
+<a name="l00293"></a>00293         Receiver &my_receiver;
+<a name="l00294"></a>00294         Body my_body;
+<a name="l00295"></a>00295     };
+<a name="l00296"></a>00296 
+<a name="l00297"></a>00297 <span class="keyword">public</span>:
+<a name="l00299"></a><a class="code" href="a00288.html#4ab3d4b5208ece28c4c3ced647e26e12">00299</a>     <span class="keyword">explicit</span> <a class="code" href="a00288.html#4ab3d4b5208ece28c4c3ced647e26e12">graph</a>() : my_nodes(NULL), my_nodes_last(NULL)
+<a name="l00300"></a>00300     {
+<a name="l00301"></a>00301         own_context = <span class="keyword">true</span>;
+<a name="l00302"></a>00302         cancelled = <span class="keyword">false</span>;
+<a name="l00303"></a>00303         caught_exception = <span class="keyword">false</span>;
+<a name="l00304"></a>00304         my_context = <span class="keyword">new</span> <a class="code" href="a00339.html">task_group_context</a>();
+<a name="l00305"></a>00305         my_root_task = ( <span class="keyword">new</span> ( <a class="code" href="a00337.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(*my_context) ) <a class="code" href="a00280.html">empty_task</a> );
+<a name="l00306"></a>00306         my_root_task-><a class="code" href="a00337.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(1);
+<a name="l00307"></a>00307     }
+<a name="l00308"></a>00308 
+<a name="l00310"></a><a class="code" href="a00288.html#104d4f3775f596b43177c29e6b7b7656">00310</a>     <span class="keyword">explicit</span> <a class="code" href="a00288.html#4ab3d4b5208ece28c4c3ced647e26e12">graph</a>(<a class="code" href="a00339.html">task_group_context</a>& use_this_context) :
+<a name="l00311"></a>00311     my_context(&use_this_context), my_nodes(NULL), my_nodes_last(NULL)
+<a name="l00312"></a>00312     {
+<a name="l00313"></a>00313         own_context = <span class="keyword">false</span>;
+<a name="l00314"></a>00314         my_root_task = ( <span class="keyword">new</span> ( <a class="code" href="a00337.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(*my_context) ) <a class="code" href="a00280.html">empty_task</a> );
+<a name="l00315"></a>00315         my_root_task-><a class="code" href="a00337.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(1);
+<a name="l00316"></a>00316     }
+<a name="l00317"></a>00317 
+<a name="l00319"></a>00319 
+<a name="l00320"></a><a class="code" href="a00288.html#8a7d424c0616a1c37a908ead182e2fe5">00320</a>     <a class="code" href="a00288.html#8a7d424c0616a1c37a908ead182e2fe5">~graph</a>() {
+<a name="l00321"></a>00321         <a class="code" href="a00288.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all</a>();
+<a name="l00322"></a>00322         my_root_task-><a class="code" href="a00337.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(0);
+<a name="l00323"></a>00323         <a class="code" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>( *my_root_task );
+<a name="l00324"></a>00324         <span class="keywordflow">if</span> (own_context) <span class="keyword">delete</span> my_context;
+<a name="l00325"></a>00325     }
+<a name="l00326"></a>00326 
+<a name="l00328"></a>00328 
+<a name="l00330"></a><a class="code" href="a00288.html#a993b789d1e488e0c3929135beae560e">00330</a>     <span class="keywordtype">void</span> <a class="code" href="a00288.html#a993b789d1e488e0c3929135beae560e">increment_wait_count</a>() {
+<a name="l00331"></a>00331         <span class="keywordflow">if</span> (my_root_task)
+<a name="l00332"></a>00332             my_root_task-><a class="code" href="a00337.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a>();
+<a name="l00333"></a>00333     }
+<a name="l00334"></a>00334 
+<a name="l00336"></a>00336 
+<a name="l00338"></a><a class="code" href="a00288.html#29b85506870f13a884a21655aec2a65d">00338</a>     <span class="keywordtype">void</span> <a class="code" href="a00288.html#29b85506870f13a884a21655aec2a65d">decrement_wait_count</a>() {
+<a name="l00339"></a>00339         <span class="keywordflow">if</span> (my_root_task)
+<a name="l00340"></a>00340             my_root_task-><a class="code" href="a00337.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a>();
+<a name="l00341"></a>00341     }
+<a name="l00342"></a>00342 
+<a name="l00344"></a>00344 
+<a name="l00346"></a>00346     <span class="keyword">template</span>< <span class="keyword">typename</span> Receiver, <span class="keyword">typename</span> Body >
+<a name="l00347"></a><a class="code" href="a00288.html#50a7938df01b6148ab2c0696835f002e">00347</a>         <span class="keywordtype">void</span> <a class="code" href="a00288.html#50a7938df01b6148ab2c0696835f002e">run</a>( Receiver &r, Body body ) {
+<a name="l00348"></a>00348        <a class="code" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) )
+<a name="l00349"></a>00349            run_and_put_task< Receiver, Body >( r, body ) );
+<a name="l00350"></a>00350     }
+<a name="l00351"></a>00351 
+<a name="l00353"></a>00353 
+<a name="l00355"></a>00355     <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l00356"></a><a class="code" href="a00288.html#c1145b00e063793a7e7bf994d202c7a0">00356</a>     <span class="keywordtype">void</span> <a class="code" href="a00288.html#50a7938df01b6148ab2c0696835f002e">run</a>( Body body ) {
+<a name="l00357"></a>00357        <a class="code" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) )
+<a name="l00358"></a>00358            run_task< Body >( body ) );
+<a name="l00359"></a>00359     }
+<a name="l00360"></a>00360 
+<a name="l00362"></a>00362 
+<a name="l00363"></a><a class="code" href="a00288.html#a66b0020f7514b86d030fa8aea073d37">00363</a>     <span class="keywordtype">void</span> <a class="code" href="a00288.html#a66b0020f7514b86d030fa8aea073d37">wait_for_all</a>() {
+<a name="l00364"></a>00364         cancelled = <span class="keyword">false</span>;
+<a name="l00365"></a>00365         caught_exception = <span class="keyword">false</span>;
+<a name="l00366"></a>00366         <span class="keywordflow">if</span> (my_root_task) {
+<a name="l00367"></a>00367 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
+<a name="l00368"></a>00368 <span class="preprocessor"></span>            <span class="keywordflow">try</span> {
+<a name="l00369"></a>00369 <span class="preprocessor">#endif</span>
+<a name="l00370"></a>00370 <span class="preprocessor"></span>                my_root_task-><a class="code" href="a00337.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a>();
+<a name="l00371"></a>00371                 cancelled = my_context->is_group_execution_cancelled();
+<a name="l00372"></a>00372 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
+<a name="l00373"></a>00373 <span class="preprocessor"></span>            }
+<a name="l00374"></a>00374             <span class="keywordflow">catch</span>(...) {
+<a name="l00375"></a>00375                 my_root_task-><a class="code" href="a00337.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(1);
+<a name="l00376"></a>00376                 my_context->reset();
+<a name="l00377"></a>00377                 caught_exception = <span class="keyword">true</span>;
+<a name="l00378"></a>00378                 cancelled = <span class="keyword">true</span>;
+<a name="l00379"></a>00379                 <span class="keywordflow">throw</span>;
+<a name="l00380"></a>00380             }
+<a name="l00381"></a>00381 <span class="preprocessor">#endif</span>
+<a name="l00382"></a>00382 <span class="preprocessor"></span>            my_root_task-><a class="code" href="a00337.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a>(1);
+<a name="l00383"></a>00383         }
+<a name="l00384"></a>00384     }
+<a name="l00385"></a>00385 
+<a name="l00387"></a><a class="code" href="a00288.html#7f4e3ae90811a5d8b597146b5b586d10">00387</a>     <a class="code" href="a00337.html">task</a> * <a class="code" href="a00288.html#7f4e3ae90811a5d8b597146b5b586d10">root_task</a>() {
+<a name="l00388"></a>00388         <span class="keywordflow">return</span> my_root_task;
+<a name="l00389"></a>00389     }
+<a name="l00390"></a>00390 
+<a name="l00391"></a>00391     <span class="comment">// ITERATORS</span>
+<a name="l00392"></a>00392     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> N>
+<a name="l00393"></a>00393     <span class="keyword">friend</span> <span class="keyword">class </span>graph_iterator;
+<a name="l00394"></a>00394 
+<a name="l00395"></a>00395     <span class="comment">// Graph iterator typedefs</span>
+<a name="l00396"></a>00396     <span class="keyword">typedef</span> graph_iterator<graph,graph_node> iterator;
+<a name="l00397"></a>00397     <span class="keyword">typedef</span> graph_iterator<const graph,const graph_node> const_iterator;
+<a name="l00398"></a>00398 
+<a name="l00399"></a>00399     <span class="comment">// Graph iterator constructors</span>
+<a name="l00401"></a><a class="code" href="a00288.html#b028cb585ec21e5de523d0075d0fa880">00401</a> <span class="comment"></span>    iterator <a class="code" href="a00288.html#b028cb585ec21e5de523d0075d0fa880">begin</a>() { <span class="keywordflow">return</span> iterator(<span class="keyword">this</span>, <span class="keyword">true</span>); }
+<a name="l00403"></a><a class="code" href="a00288.html#a167c62511ddacaa152daa64ab2d6aac">00403</a>     iterator <a class="code" href="a00288.html#a167c62511ddacaa152daa64ab2d6aac">end</a>() { <span class="keywordflow">return</span> iterator(<span class="keyword">this</span>, <span class="keyword">false</span>); }
+<a name="l00405"></a><a class="code" href="a00288.html#f63c3b7d03098b57fc16b71c57b303e5">00405</a>     const_iterator <a class="code" href="a00288.html#b028cb585ec21e5de523d0075d0fa880">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(<span class="keyword">this</span>, <span class="keyword">true</span>); }
+<a name="l00407"></a><a class="code" href="a00288.html#907bd06606818c36f52420fe8d469d35">00407</a>     const_iterator <a class="code" href="a00288.html#a167c62511ddacaa152daa64ab2d6aac">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(<span class="keyword">this</span>, <span class="keyword">false</span>); }
+<a name="l00409"></a><a class="code" href="a00288.html#e183dfc3f89dc8f57c06ba165fb89f66">00409</a>     const_iterator <a class="code" href="a00288.html#e183dfc3f89dc8f57c06ba165fb89f66">cbegin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(<span class="keyword">this</span>, <span class="keyword">true</span>); }
+<a name="l00411"></a><a class="code" href="a00288.html#4866156e6a31d0399b61c6eb82ee81fd">00411</a>     const_iterator <a class="code" href="a00288.html#4866156e6a31d0399b61c6eb82ee81fd">cend</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(<span class="keyword">this</span>, <span class="keyword">false</span>); }
+<a name="l00412"></a>00412 
+<a name="l00414"></a><a class="code" href="a00288.html#227ea140dc2c68f79a4e5a34a8367b58">00414</a>     <span class="keywordtype">bool</span> <a class="code" href="a00288.html#227ea140dc2c68f79a4e5a34a8367b58">is_cancelled</a>() { <span class="keywordflow">return</span> cancelled; }
+<a name="l00415"></a>00415     <span class="keywordtype">bool</span> exception_thrown() { <span class="keywordflow">return</span> caught_exception; }
+<a name="l00416"></a>00416 
+<a name="l00417"></a>00417 <span class="keyword">private</span>:
+<a name="l00418"></a>00418     <a class="code" href="a00337.html">task</a> *my_root_task;
+<a name="l00419"></a>00419     <a class="code" href="a00339.html">task_group_context</a> *my_context;
+<a name="l00420"></a>00420     <span class="keywordtype">bool</span> own_context;
+<a name="l00421"></a>00421     <span class="keywordtype">bool</span> cancelled;
+<a name="l00422"></a>00422     <span class="keywordtype">bool</span> caught_exception;
+<a name="l00423"></a>00423 
+<a name="l00424"></a>00424     <a class="code" href="a00289.html">graph_node</a> *my_nodes, *my_nodes_last;
+<a name="l00425"></a>00425 
+<a name="l00426"></a>00426     <a class="code" href="a00331.html">spin_mutex</a> nodelist_mutex;
+<a name="l00427"></a>00427     <span class="keywordtype">void</span> register_node(<a class="code" href="a00289.html">graph_node</a> *n); 
+<a name="l00428"></a>00428     <span class="keywordtype">void</span> remove_node(<a class="code" href="a00289.html">graph_node</a> *n);
+<a name="l00429"></a>00429 
+<a name="l00430"></a>00430 };
+<a name="l00431"></a>00431 
+<a name="l00432"></a>00432 <span class="keyword">template</span> <<span class="keyword">typename</span> C, <span class="keyword">typename</span> N>
+<a name="l00433"></a>00433 graph_iterator<C,N>::graph_iterator(C *g, <span class="keywordtype">bool</span> begin) : my_graph(g), current_node(NULL)
+<a name="l00434"></a>00434 {
+<a name="l00435"></a>00435     <span class="keywordflow">if</span> (begin) current_node = my_graph->my_nodes;
+<a name="l00436"></a>00436     <span class="comment">//else it is an end iterator by default</span>
+<a name="l00437"></a>00437 }
+<a name="l00438"></a>00438 
+<a name="l00439"></a>00439 <span class="keyword">template</span> <<span class="keyword">typename</span> C, <span class="keyword">typename</span> N>
+<a name="l00440"></a>00440 <span class="keyword">typename</span> graph_iterator<C,N>::reference graph_iterator<C,N>::operator*()<span class="keyword"> const </span>{
+<a name="l00441"></a>00441     __TBB_ASSERT(current_node, <span class="stringliteral">"graph_iterator at end"</span>);
+<a name="l00442"></a>00442     <span class="keywordflow">return</span> *operator->();
+<a name="l00443"></a>00443 }
+<a name="l00444"></a>00444 
+<a name="l00445"></a>00445 <span class="keyword">template</span> <<span class="keyword">typename</span> C, <span class="keyword">typename</span> N>
+<a name="l00446"></a>00446 <span class="keyword">typename</span> graph_iterator<C,N>::pointer graph_iterator<C,N>::operator->()<span class="keyword"> const </span>{ 
+<a name="l00447"></a>00447     <span class="keywordflow">return</span> current_node;
+<a name="l00448"></a>00448 }
+<a name="l00449"></a>00449 
+<a name="l00450"></a>00450 
+<a name="l00451"></a>00451 <span class="keyword">template</span> <<span class="keyword">typename</span> C, <span class="keyword">typename</span> N>
+<a name="l00452"></a>00452 <span class="keywordtype">void</span> graph_iterator<C,N>::internal_forward() {
+<a name="l00453"></a>00453     <span class="keywordflow">if</span> (current_node) current_node = current_node->next;
+<a name="l00454"></a>00454 }
+<a name="l00455"></a>00455 
+<a name="l00457"></a><a class="code" href="a00289.html">00457</a> <span class="keyword">class </span><a class="code" href="a00289.html">graph_node</a> : tbb::internal::no_assign {
+<a name="l00458"></a>00458     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00288.html">graph</a>;
+<a name="l00459"></a>00459     <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> N>
+<a name="l00460"></a>00460     <span class="keyword">friend</span> <span class="keyword">class </span>graph_iterator;
+<a name="l00461"></a>00461 <span class="keyword">protected</span>:
+<a name="l00462"></a>00462     <a class="code" href="a00288.html">graph</a>& my_graph;
+<a name="l00463"></a>00463     <a class="code" href="a00289.html">graph_node</a> *next, *prev;
+<a name="l00464"></a>00464 <span class="keyword">public</span>:
+<a name="l00465"></a>00465     <a class="code" href="a00289.html">graph_node</a>(<a class="code" href="a00288.html">graph</a>& g) : my_graph(g) {
+<a name="l00466"></a>00466         my_graph.<a class="code" href="a00288.html#0eca5c8a44b050262cbab2f985d8ac94">register_node</a>(<span class="keyword">this</span>);
+<a name="l00467"></a>00467     }
+<a name="l00468"></a>00468     <span class="keyword">virtual</span> ~<a class="code" href="a00289.html">graph_node</a>() {
+<a name="l00469"></a>00469         my_graph.<a class="code" href="a00288.html#143cf6eb0c555eb100ed8cbad198a207">remove_node</a>(<span class="keyword">this</span>);
+<a name="l00470"></a>00470     }
+<a name="l00471"></a>00471 };
+<a name="l00472"></a>00472 
+<a name="l00473"></a>00473 <span class="keyword">inline</span> <span class="keywordtype">void</span> graph::register_node(<a class="code" href="a00289.html">graph_node</a> *n) {
+<a name="l00474"></a>00474     n-><a class="code" href="a00289.html#d1ce68896f6d366dcc3fad19f6fd55d1">next</a> = NULL;
+<a name="l00475"></a>00475     {
+<a name="l00476"></a>00476         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(nodelist_mutex);
+<a name="l00477"></a>00477         n-><a class="code" href="a00289.html#28049e438b241b0d6051767bbeacc0b9">prev</a> = my_nodes_last;
+<a name="l00478"></a>00478         <span class="keywordflow">if</span> (my_nodes_last) my_nodes_last-><a class="code" href="a00289.html#d1ce68896f6d366dcc3fad19f6fd55d1">next</a> = n;
+<a name="l00479"></a>00479         my_nodes_last = n;
+<a name="l00480"></a>00480         <span class="keywordflow">if</span> (!my_nodes) my_nodes = n;
+<a name="l00481"></a>00481     }
+<a name="l00482"></a>00482 }
+<a name="l00483"></a>00483 
+<a name="l00484"></a>00484 <span class="keyword">inline</span> <span class="keywordtype">void</span> graph::remove_node(graph_node *n) {
+<a name="l00485"></a>00485     {
+<a name="l00486"></a>00486         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(nodelist_mutex);
+<a name="l00487"></a>00487         __TBB_ASSERT(my_nodes && my_nodes_last, <span class="stringliteral">"graph::remove_node: Error: no registered nodes"</span>);
+<a name="l00488"></a>00488         <span class="keywordflow">if</span> (n->prev) n->prev->next = n->next;
+<a name="l00489"></a>00489         <span class="keywordflow">if</span> (n->next) n->next->prev = n->prev;
+<a name="l00490"></a>00490         <span class="keywordflow">if</span> (my_nodes_last == n) my_nodes_last = n->prev;
+<a name="l00491"></a>00491         <span class="keywordflow">if</span> (my_nodes == n) my_nodes = n->next;
+<a name="l00492"></a>00492     }
+<a name="l00493"></a>00493     n->prev = n->next = NULL;
+<a name="l00494"></a>00494 }
+<a name="l00495"></a>00495 
+<a name="l00496"></a>00496 <span class="preprocessor">#include "internal/_flow_graph_node_impl.h"</span>
+<a name="l00497"></a>00497 
+<a name="l00499"></a>00499 <span class="keyword">template</span> < <span class="keyword">typename</span> Output >
+<a name="l00500"></a><a class="code" href="a00330.html">00500</a> <span class="keyword">class </span><a class="code" href="a00330.html">source_node</a> : <span class="keyword">public</span> <a class="code" href="a00289.html">graph_node</a>, <span class="keyword">public</span> <a class="code" href="a00327.html">sender</a>< Output > {
+<a name="l00501"></a>00501     <span class="keyword">using</span> graph_node::my_graph;
+<a name="l00502"></a>00502 <span class="keyword">public</span>:
+<a name="l00504"></a><a class="code" href="a00330.html#407533487cc3f6032c1072cba19c609c">00504</a>     <span class="keyword">typedef</span> Output <a class="code" href="a00330.html#407533487cc3f6032c1072cba19c609c">output_type</a>;
+<a name="l00505"></a>00505 
+<a name="l00507"></a><a class="code" href="a00330.html#dd7b8fe78f0bec9d6b70cbf1018a69fe">00507</a>     <span class="keyword">typedef</span> <a class="code" href="a00321.html">receiver< Output ></a> <a class="code" href="a00321.html">successor_type</a>;
+<a name="l00508"></a>00508 
+<a name="l00510"></a>00510     <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l00511"></a><a class="code" href="a00330.html#503c3b395c629296bf5cccd96d6388c1">00511</a>     <a class="code" href="a00330.html#503c3b395c629296bf5cccd96d6388c1">source_node</a>( <a class="code" href="a00288.html">graph</a> &g, Body body, <span class="keywordtype">bool</span> is_active = <span class="keyword">true</span> )
+<a name="l00512"></a>00512         : <a class="code" href="a00289.html">graph_node</a>(g), my_root_task(g.root_task()), my_active(is_active), init_my_active(is_active),
+<a name="l00513"></a>00513         my_body( new internal::source_body_leaf< <a class="code" href="a00330.html#407533487cc3f6032c1072cba19c609c">output_type</a>, Body>(body) ),
+<a name="l00514"></a>00514         my_reserved(false), my_has_cached_item(false)
+<a name="l00515"></a>00515     {
+<a name="l00516"></a>00516         my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l00517"></a>00517     }
+<a name="l00518"></a>00518 
+<a name="l00520"></a><a class="code" href="a00330.html#adaac111fbcace95804219a5f2929304">00520</a>     <a class="code" href="a00330.html#503c3b395c629296bf5cccd96d6388c1">source_node</a>( <span class="keyword">const</span> <a class="code" href="a00330.html">source_node</a>& src ) :
+<a name="l00521"></a>00521         <a class="code" href="a00289.html">graph_node</a>(src.my_graph), <a class="code" href="a00327.html">sender</a><Output>(),
+<a name="l00522"></a>00522         my_root_task( src.my_root_task), my_active(src.init_my_active),
+<a name="l00523"></a>00523         init_my_active(src.init_my_active), my_body( src.my_body->clone() ),
+<a name="l00524"></a>00524         my_reserved(false), my_has_cached_item(false)
+<a name="l00525"></a>00525     {
+<a name="l00526"></a>00526         my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l00527"></a>00527     }
+<a name="l00528"></a>00528 
+<a name="l00530"></a><a class="code" href="a00330.html#61700b0865fc17188b0abe26bbde65b6">00530</a>     <a class="code" href="a00330.html#61700b0865fc17188b0abe26bbde65b6">~source_node</a>() { <span class="keyword">delete</span> my_body; }
+<a name="l00531"></a>00531 
+<a name="l00533"></a><a class="code" href="a00330.html#22960d499df9f1569a9d8a544e35afe3">00533</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00330.html#22960d499df9f1569a9d8a544e35afe3">register_successor</a>( <a class="code" href="a00321.html">receiver<output_type></a> &r ) {
+<a name="l00534"></a>00534         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l00535"></a>00535         my_successors.register_successor(r);
+<a name="l00536"></a>00536         <span class="keywordflow">if</span> ( my_active )
+<a name="l00537"></a>00537             spawn_put();
+<a name="l00538"></a>00538         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00539"></a>00539     }
+<a name="l00540"></a>00540 
+<a name="l00542"></a><a class="code" href="a00330.html#222484bf295f39df36415a29e508e5c9">00542</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00330.html#222484bf295f39df36415a29e508e5c9">remove_successor</a>( <a class="code" href="a00321.html">receiver<output_type></a> &r ) {
+<a name="l00543"></a>00543         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l00544"></a>00544         my_successors.remove_successor(r);
+<a name="l00545"></a>00545         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00546"></a>00546     }
+<a name="l00547"></a>00547 
+<a name="l00549"></a><a class="code" href="a00330.html#41073ad4d3510ed5a8b6bda9c0f58636">00549</a>     <span class="comment">/*override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00330.html#41073ad4d3510ed5a8b6bda9c0f58636">try_get</a>( <a class="code" href="a00330.html#407533487cc3f6032c1072cba19c609c">output_type</a> &v ) {
+<a name="l00550"></a>00550         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l00551"></a>00551         <span class="keywordflow">if</span> ( my_reserved )
+<a name="l00552"></a>00552             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00553"></a>00553 
+<a name="l00554"></a>00554         <span class="keywordflow">if</span> ( my_has_cached_item ) {
+<a name="l00555"></a>00555             v = my_cached_item;
+<a name="l00556"></a>00556             my_has_cached_item = <span class="keyword">false</span>;
+<a name="l00557"></a>00557         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (*my_body)(v) == <span class="keyword">false</span> ) {
+<a name="l00558"></a>00558             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00559"></a>00559         }
+<a name="l00560"></a>00560         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00561"></a>00561     }
+<a name="l00562"></a>00562 
+<a name="l00564"></a><a class="code" href="a00330.html#ad459713ff3c1c9ad0f4826daa141f65">00564</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00330.html#ad459713ff3c1c9ad0f4826daa141f65">try_reserve</a>( <a class="code" href="a00330.html#407533487cc3f6032c1072cba19c609c">output_type</a> &v ) {
+<a name="l00565"></a>00565         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l00566"></a>00566         <span class="keywordflow">if</span> ( my_reserved ) {
+<a name="l00567"></a>00567             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00568"></a>00568         }
+<a name="l00569"></a>00569 
+<a name="l00570"></a>00570         <span class="keywordflow">if</span> ( !my_has_cached_item && (*my_body)(my_cached_item) )
+<a name="l00571"></a>00571             my_has_cached_item = <span class="keyword">true</span>;
+<a name="l00572"></a>00572 
+<a name="l00573"></a>00573         <span class="keywordflow">if</span> ( my_has_cached_item ) {
+<a name="l00574"></a>00574             v = my_cached_item;
+<a name="l00575"></a>00575             my_reserved = <span class="keyword">true</span>;
+<a name="l00576"></a>00576             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00577"></a>00577         } <span class="keywordflow">else</span> {
+<a name="l00578"></a>00578             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00579"></a>00579         }
+<a name="l00580"></a>00580     }
+<a name="l00581"></a>00581 
+<a name="l00583"></a>00583 
+<a name="l00584"></a><a class="code" href="a00330.html#494678baf9096835268736b800824460">00584</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00330.html#494678baf9096835268736b800824460">try_release</a>( ) {
+<a name="l00585"></a>00585         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l00586"></a>00586         __TBB_ASSERT( my_reserved && my_has_cached_item, <span class="stringliteral">"releasing non-existent reservation"</span> );
+<a name="l00587"></a>00587         my_reserved = <span class="keyword">false</span>;
+<a name="l00588"></a>00588         <span class="keywordflow">if</span>(!my_successors.empty())
+<a name="l00589"></a>00589             spawn_put();
+<a name="l00590"></a>00590         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00591"></a>00591     }
+<a name="l00592"></a>00592 
+<a name="l00594"></a><a class="code" href="a00330.html#2c7fcc29e2894b29138be3c1edce9bc9">00594</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00330.html#2c7fcc29e2894b29138be3c1edce9bc9">try_consume</a>( ) {
+<a name="l00595"></a>00595         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l00596"></a>00596         __TBB_ASSERT( my_reserved && my_has_cached_item, <span class="stringliteral">"consuming non-existent reservation"</span> );
+<a name="l00597"></a>00597         my_reserved = <span class="keyword">false</span>;
+<a name="l00598"></a>00598         my_has_cached_item = <span class="keyword">false</span>;
+<a name="l00599"></a>00599         <span class="keywordflow">if</span> ( !my_successors.empty() ) {
+<a name="l00600"></a>00600             spawn_put();
+<a name="l00601"></a>00601         }
+<a name="l00602"></a>00602         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00603"></a>00603     }
+<a name="l00604"></a>00604 
+<a name="l00606"></a><a class="code" href="a00330.html#4b647e4a93d08ccdd8d323279e4eaaa6">00606</a>     <span class="keywordtype">void</span> <a class="code" href="a00330.html#4b647e4a93d08ccdd8d323279e4eaaa6">activate</a>() {
+<a name="l00607"></a>00607         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l00608"></a>00608         my_active = <span class="keyword">true</span>;
+<a name="l00609"></a>00609         <span class="keywordflow">if</span> ( !my_successors.empty() )
+<a name="l00610"></a>00610             spawn_put();
+<a name="l00611"></a>00611     }
+<a name="l00612"></a>00612 
+<a name="l00613"></a>00613 <span class="keyword">private</span>:
+<a name="l00614"></a>00614     <a class="code" href="a00337.html">task</a> *my_root_task;
+<a name="l00615"></a>00615     <a class="code" href="a00331.html">spin_mutex</a> my_mutex;
+<a name="l00616"></a>00616     <span class="keywordtype">bool</span> my_active;
+<a name="l00617"></a>00617     <span class="keywordtype">bool</span> init_my_active;
+<a name="l00618"></a>00618     internal::source_body<output_type> *my_body;
+<a name="l00619"></a>00619     internal::broadcast_cache< output_type > my_successors;
+<a name="l00620"></a>00620     <span class="keywordtype">bool</span> my_reserved;
+<a name="l00621"></a>00621     <span class="keywordtype">bool</span> my_has_cached_item;
+<a name="l00622"></a>00622     <a class="code" href="a00330.html#407533487cc3f6032c1072cba19c609c">output_type</a> my_cached_item;
+<a name="l00623"></a>00623 
+<a name="l00624"></a>00624     <span class="keyword">friend</span> <span class="keyword">class </span>internal::source_task< source_node< output_type > >;
+<a name="l00625"></a>00625 
+<a name="l00627"></a>00627     <span class="comment">/* override */</span> <span class="keywordtype">void</span> apply_body( ) {
+<a name="l00628"></a>00628         output_type v;
+<a name="l00629"></a>00629         <span class="keywordflow">if</span> ( <a class="code" href="a00330.html#ad459713ff3c1c9ad0f4826daa141f65">try_reserve</a>(v) == <span class="keyword">false</span> )
+<a name="l00630"></a>00630             <span class="keywordflow">return</span>;
+<a name="l00631"></a>00631 
+<a name="l00632"></a>00632         <span class="keywordflow">if</span> ( my_successors.try_put( v ) )
+<a name="l00633"></a>00633             <a class="code" href="a00330.html#2c7fcc29e2894b29138be3c1edce9bc9">try_consume</a>();
+<a name="l00634"></a>00634         <span class="keywordflow">else</span>
+<a name="l00635"></a>00635             <a class="code" href="a00330.html#494678baf9096835268736b800824460">try_release</a>();
+<a name="l00636"></a>00636     }
+<a name="l00637"></a>00637 
+<a name="l00639"></a>00639     <span class="comment">/* override */</span> <span class="keywordtype">void</span> spawn_put( ) {
+<a name="l00640"></a>00640         <a class="code" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) )
+<a name="l00641"></a>00641            internal::source_task< <a class="code" href="a00330.html">source_node< output_type ></a> >( *<span class="keyword">this</span> ) );
+<a name="l00642"></a>00642     }
+<a name="l00643"></a>00643 };
+<a name="l00644"></a>00644 
+<a name="l00646"></a>00646 <span class="keyword">template</span> < <span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output = continue_msg, graph_buffer_policy = queueing, <span class="keyword">typename</span> Allocator=cache_aligned_allocator<Input> >
+<a name="l00647"></a><a class="code" href="a00286.html">00647</a> <span class="keyword">class </span><a class="code" href="a00286.html">function_node</a> : <span class="keyword">public</span> <a class="code" href="a00289.html">graph_node</a>, <span class="keyword">public</span> internal::function_input<Input,Output,Allocator>, <span class="keyword">public</span> internal::function_output<Output> {
+<a name="l00648"></a>00648     <span class="keyword">using</span> graph_node::my_graph;
+<a name="l00649"></a>00649 <span class="keyword">public</span>:
+<a name="l00650"></a>00650     <span class="keyword">typedef</span> Input input_type;
+<a name="l00651"></a>00651     <span class="keyword">typedef</span> Output output_type;
+<a name="l00652"></a>00652     <span class="keyword">typedef</span> <a class="code" href="a00327.html">sender< input_type ></a> <a class="code" href="a00327.html">predecessor_type</a>;
+<a name="l00653"></a>00653     <span class="keyword">typedef</span> <a class="code" href="a00321.html">receiver< output_type ></a> <a class="code" href="a00321.html">successor_type</a>;
+<a name="l00654"></a>00654     <span class="keyword">typedef</span> internal::function_input<input_type,output_type,Allocator> fInput_type;
+<a name="l00655"></a>00655     <span class="keyword">typedef</span> internal::function_output<output_type> fOutput_type;
+<a name="l00656"></a>00656 
+<a name="l00658"></a>00658     <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l00659"></a><a class="code" href="a00286.html#5c215b40e3daf73d1c6802ecb5aded6c">00659</a>     <a class="code" href="a00286.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a>( <a class="code" href="a00288.html">graph</a> &g, size_t concurrency, Body body ) :
+<a name="l00660"></a>00660         <a class="code" href="a00289.html">graph_node</a>(g), internal::function_input<input_type,output_type,Allocator>(g, concurrency, body)
+<a name="l00661"></a>00661     {}
+<a name="l00662"></a>00662 
+<a name="l00664"></a><a class="code" href="a00286.html#d5132323fd2ac6a00ea0c78beda78723">00664</a>     <a class="code" href="a00286.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a>( <span class="keyword">const</span> <a class="code" href="a00286.html">function_node</a>& src ) :
+<a name="l00665"></a>00665         <a class="code" href="a00289.html">graph_node</a>(src.my_graph), internal::function_input<input_type,output_type,Allocator>( src ),
+<a name="l00666"></a>00666         fOutput_type()
+<a name="l00667"></a>00667     {}
+<a name="l00668"></a>00668 
+<a name="l00669"></a>00669     <span class="keywordtype">bool</span> try_put(<span class="keyword">const</span> input_type &i) { <span class="keywordflow">return</span> fInput_type::try_put(i); }
+<a name="l00670"></a>00670 
+<a name="l00671"></a>00671 <span class="keyword">protected</span>:
+<a name="l00672"></a>00672     <span class="comment">/* override */</span> internal::broadcast_cache<output_type> &successors () { <span class="keywordflow">return</span> fOutput_type::my_successors; }
+<a name="l00673"></a>00673 };
+<a name="l00674"></a>00674 
+<a name="l00676"></a>00676 <span class="keyword">template</span> < <span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output, <span class="keyword">typename</span> Allocator >
+<a name="l00677"></a><a class="code" href="a00287.html">00677</a> <span class="keyword">class </span><a class="code" href="a00286.html">function_node</a><Input,Output,queueing,Allocator> : <span class="keyword">public</span> <a class="code" href="a00289.html">graph_node</a>, <span class="keyword">public</span> internal::function_input<Input,Output,Allocator>, <span class="keyword">public</span> internal::function_output<Output> {
+<a name="l00678"></a>00678     <span class="keyword">using</span> graph_node::my_graph;
+<a name="l00679"></a>00679 <span class="keyword">public</span>:
+<a name="l00680"></a>00680     <span class="keyword">typedef</span> Input input_type;
+<a name="l00681"></a>00681     <span class="keyword">typedef</span> Output output_type;
+<a name="l00682"></a>00682     <span class="keyword">typedef</span> <a class="code" href="a00327.html">sender< input_type ></a> <a class="code" href="a00327.html">predecessor_type</a>;
+<a name="l00683"></a>00683     <span class="keyword">typedef</span> <a class="code" href="a00321.html">receiver< output_type ></a> <a class="code" href="a00321.html">successor_type</a>;
+<a name="l00684"></a>00684     <span class="keyword">typedef</span> internal::function_input<input_type,output_type,Allocator> fInput_type;
+<a name="l00685"></a>00685     <span class="keyword">typedef</span> internal::function_input_queue<input_type, Allocator> queue_type;
+<a name="l00686"></a>00686     <span class="keyword">typedef</span> internal::function_output<output_type> fOutput_type;
+<a name="l00687"></a>00687 
+<a name="l00689"></a>00689     <span class="keyword">template</span>< <span class="keyword">typename</span> Body >
+<a name="l00690"></a><a class="code" href="a00287.html#5b9019c1e6e9b2c41c986a384bd179db">00690</a>     <a class="code" href="a00286.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a>( <a class="code" href="a00288.html">graph</a> &g, size_t concurrency, Body body ) :
+<a name="l00691"></a>00691         <a class="code" href="a00289.html">graph_node</a>(g), fInput_type( g, concurrency, body, new queue_type() )
+<a name="l00692"></a>00692     {}
+<a name="l00693"></a>00693 
+<a name="l00695"></a><a class="code" href="a00287.html#01055081ed477714503820035db3a965">00695</a>     <a class="code" href="a00286.html#5c215b40e3daf73d1c6802ecb5aded6c">function_node</a>( <span class="keyword">const</span> <a class="code" href="a00286.html">function_node</a>& src ) :
+<a name="l00696"></a>00696         <a class="code" href="a00289.html">graph_node</a>(src.my_graph), fInput_type( src, new queue_type() ), fOutput_type()
+<a name="l00697"></a>00697     {}
+<a name="l00698"></a>00698 
+<a name="l00699"></a>00699     <span class="keywordtype">bool</span> try_put(<span class="keyword">const</span> input_type &i) { <span class="keywordflow">return</span> fInput_type::try_put(i); }
+<a name="l00700"></a>00700 
+<a name="l00701"></a>00701 <span class="keyword">protected</span>:
+<a name="l00702"></a>00702     <span class="comment">/* override */</span> internal::broadcast_cache<output_type> &successors () { <span class="keywordflow">return</span> fOutput_type::my_successors; }
+<a name="l00703"></a>00703 };
+<a name="l00704"></a>00704 
+<a name="l00705"></a>00705 <span class="preprocessor">#include "tbb/internal/_flow_graph_types_impl.h"</span>
+<a name="l00706"></a>00706 
+<a name="l00708"></a>00708 <span class="comment">// Output is a tuple of output types.</span>
+<a name="l00709"></a>00709 <span class="keyword">template</span> < <span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output, graph_buffer_policy = queueing, <span class="keyword">typename</span> Allocator=cache_aligned_allocator<Input> >
+<a name="l00710"></a><a class="code" href="a00300.html">00710</a> <span class="keyword">class </span><a class="code" href="a00300.html">multifunction_node</a> :
+<a name="l00711"></a>00711     <span class="keyword">public</span> <a class="code" href="a00289.html">graph_node</a>,
+<a name="l00712"></a>00712     <span class="keyword">public</span> internal::multifunction_input
+<a name="l00713"></a>00713     <
+<a name="l00714"></a>00714         Input,
+<a name="l00715"></a>00715         typename internal::wrap_tuple_elements<
+<a name="l00716"></a>00716             std::tuple_size<Output>::value,  <span class="comment">// #elements in tuple</span>
+<a name="l00717"></a>00717             internal::function_output,  <span class="comment">// wrap this around each element</span>
+<a name="l00718"></a>00718             Output <span class="comment">// the tuple providing the types</span>
+<a name="l00719"></a>00719         >::type,
+<a name="l00720"></a>00720         Allocator
+<a name="l00721"></a>00721     > {
+<a name="l00722"></a>00722     <span class="keyword">using</span> graph_node::my_graph;
+<a name="l00723"></a>00723 <span class="keyword">private</span>:
+<a name="l00724"></a>00724     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<Output>::value;
+<a name="l00725"></a>00725 <span class="keyword">public</span>:
+<a name="l00726"></a>00726     <span class="keyword">typedef</span> Input input_type;
+<a name="l00727"></a>00727     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::wrap_tuple_elements<N,internal::function_output, Output>::type output_ports_type;
+<a name="l00728"></a>00728 <span class="keyword">private</span>:
+<a name="l00729"></a>00729     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::multifunction_input<input_type, output_ports_type, Allocator> base_type;
+<a name="l00730"></a>00730     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::function_input_queue<input_type,Allocator> queue_type;
+<a name="l00731"></a>00731 <span class="keyword">public</span>:
+<a name="l00732"></a>00732     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00733"></a>00733     <a class="code" href="a00300.html">multifunction_node</a>( <a class="code" href="a00288.html">graph</a> &g, size_t concurrency, Body body ) :
+<a name="l00734"></a>00734         <a class="code" href="a00289.html">graph_node</a>(g), base_type(g,concurrency, body)
+<a name="l00735"></a>00735     {}
+<a name="l00736"></a>00736     <a class="code" href="a00300.html">multifunction_node</a>( <span class="keyword">const</span> <a class="code" href="a00300.html">multifunction_node</a> &other) :
+<a name="l00737"></a>00737         <a class="code" href="a00289.html">graph_node</a>(other.<a class="code" href="a00289.html#6f51137fff91095fa3e6a736b71c27cc">my_graph</a>), base_type(other)
+<a name="l00738"></a>00738     {}
+<a name="l00739"></a>00739     <span class="comment">// all the guts are in multifunction_input...</span>
+<a name="l00740"></a>00740 };  <span class="comment">// multifunction_node</span>
+<a name="l00741"></a>00741 
+<a name="l00742"></a>00742 <span class="keyword">template</span> < <span class="keyword">typename</span> Input, <span class="keyword">typename</span> Output, <span class="keyword">typename</span> Allocator >
+<a name="l00743"></a>00743 <span class="keyword">class </span><a class="code" href="a00300.html">multifunction_node</a><Input,Output,queueing,Allocator> : <span class="keyword">public</span> <a class="code" href="a00289.html">graph_node</a>, <span class="keyword">public</span> internal::multifunction_input<Input,
+<a name="l00744"></a>00744     typename internal::wrap_tuple_elements<std::tuple_size<Output>::value, internal::function_output, Output>::type, Allocator> {
+<a name="l00745"></a>00745     <span class="keyword">using</span> graph_node::my_graph;
+<a name="l00746"></a>00746     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<Output>::value;
+<a name="l00747"></a>00747 <span class="keyword">public</span>:
+<a name="l00748"></a>00748     <span class="keyword">typedef</span> Input input_type;
+<a name="l00749"></a>00749     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::wrap_tuple_elements<N, internal::function_output, Output>::type output_ports_type;
+<a name="l00750"></a>00750 <span class="keyword">private</span>:
+<a name="l00751"></a>00751     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::multifunction_input<input_type, output_ports_type, Allocator> base_type;
+<a name="l00752"></a>00752     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::function_input_queue<input_type,Allocator> queue_type;
+<a name="l00753"></a>00753 <span class="keyword">public</span>:
+<a name="l00754"></a>00754     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00755"></a>00755     <a class="code" href="a00300.html">multifunction_node</a>( <a class="code" href="a00288.html">graph</a> &g, size_t concurrency, Body body) :
+<a name="l00756"></a>00756         <a class="code" href="a00289.html">graph_node</a>(g), base_type(g,concurrency, body, new queue_type())
+<a name="l00757"></a>00757     {}
+<a name="l00758"></a>00758     <a class="code" href="a00300.html">multifunction_node</a>( <span class="keyword">const</span> <a class="code" href="a00300.html">multifunction_node</a> &other) :
+<a name="l00759"></a>00759         <a class="code" href="a00289.html">graph_node</a>(other.my_graph), base_type(other, new queue_type())
+<a name="l00760"></a>00760     {}
+<a name="l00761"></a>00761 };  <span class="comment">// multifunction_node</span>
+<a name="l00762"></a>00762 
+<a name="l00764"></a>00764 <span class="comment">//  successors.  The node has unlimited concurrency, so though it is marked as</span>
+<a name="l00765"></a>00765 <span class="comment">//  "rejecting" it does not reject inputs.</span>
+<a name="l00766"></a>00766 <span class="keyword">template</span><<span class="keyword">typename</span> TupleType, <span class="keyword">typename</span> Allocator=cache_aligned_allocator<TupleType> >
+<a name="l00767"></a><a class="code" href="a00336.html">00767</a> <span class="keyword">class </span><a class="code" href="a00336.html">split_node</a> : <span class="keyword">public</span> <a class="code" href="a00300.html">multifunction_node</a><TupleType, TupleType, rejecting, Allocator> {
+<a name="l00768"></a>00768     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<TupleType>::value;
+<a name="l00769"></a>00769     <span class="keyword">typedef</span> <a class="code" href="a00300.html">multifunction_node<TupleType,TupleType,rejecting,Allocator></a> <a class="code" href="a00300.html">base_type</a>;
+<a name="l00770"></a>00770 <span class="keyword">public</span>:
+<a name="l00771"></a>00771     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_type::output_ports_type output_ports_type;
+<a name="l00772"></a>00772 <span class="keyword">private</span>:
+<a name="l00773"></a>00773     <span class="keyword">struct </span>splitting_body {
+<a name="l00774"></a>00774         <span class="keywordtype">void</span> operator()(<span class="keyword">const</span> TupleType& t, output_ports_type &p) {
+<a name="l00775"></a>00775             internal::emit_element<N>::emit_this(t, p);
+<a name="l00776"></a>00776         }
+<a name="l00777"></a>00777     };
+<a name="l00778"></a>00778 <span class="keyword">public</span>:
+<a name="l00779"></a>00779     <span class="keyword">typedef</span> TupleType input_type;
+<a name="l00780"></a>00780     <span class="keyword">typedef</span> Allocator allocator_type;
+<a name="l00781"></a>00781     <a class="code" href="a00336.html">split_node</a>(<a class="code" href="a00288.html">graph</a> &g) : <a class="code" href="a00300.html">base_type</a>(g, unlimited, splitting_body()) {}
+<a name="l00782"></a>00782     <a class="code" href="a00336.html">split_node</a>( <span class="keyword">const</span> <a class="code" href="a00336.html">split_node</a> & other) : <a class="code" href="a00300.html">base_type</a>(other) {}
+<a name="l00783"></a>00783 };
+<a name="l00784"></a>00784 
+<a name="l00786"></a>00786 <span class="keyword">template</span> <<span class="keyword">typename</span> Output>
+<a name="l00787"></a><a class="code" href="a00278.html">00787</a> <span class="keyword">class </span><a class="code" href="a00278.html">continue_node</a> : <span class="keyword">public</span> <a class="code" href="a00289.html">graph_node</a>, <span class="keyword">public</span> internal::continue_input<Output>, <span class="keyword">public</span> internal::function_output<Output> {
+<a name="l00788"></a>00788     <span class="keyword">using</span> graph_node::my_graph;
+<a name="l00789"></a>00789 <span class="keyword">public</span>:
+<a name="l00790"></a>00790     <span class="keyword">typedef</span> <a class="code" href="a00277.html">continue_msg</a> <a class="code" href="a00277.html">input_type</a>;
+<a name="l00791"></a>00791     <span class="keyword">typedef</span> Output output_type;
+<a name="l00792"></a>00792     <span class="keyword">typedef</span> <a class="code" href="a00327.html">sender< input_type ></a> <a class="code" href="a00327.html">predecessor_type</a>;
+<a name="l00793"></a>00793     <span class="keyword">typedef</span> <a class="code" href="a00321.html">receiver< output_type ></a> <a class="code" href="a00321.html">successor_type</a>;
+<a name="l00794"></a>00794     <span class="keyword">typedef</span> internal::function_output<output_type> fOutput_type;
+<a name="l00795"></a>00795 
+<a name="l00797"></a>00797     <span class="keyword">template</span> <<span class="keyword">typename</span> Body >
+<a name="l00798"></a><a class="code" href="a00278.html#2f200db877d2f80c08d09422e8bffd5a">00798</a>     <a class="code" href="a00278.html#2f200db877d2f80c08d09422e8bffd5a">continue_node</a>( <a class="code" href="a00288.html">graph</a> &g, Body body ) :
+<a name="l00799"></a>00799         <a class="code" href="a00289.html">graph_node</a>(g), internal::continue_input<output_type>( g, body )
+<a name="l00800"></a>00800     {}
+<a name="l00801"></a>00801 
+<a name="l00803"></a>00803     <span class="keyword">template</span> <<span class="keyword">typename</span> Body >
+<a name="l00804"></a><a class="code" href="a00278.html#7817aebf22dd125ca04df53ac488d163">00804</a>     <a class="code" href="a00278.html#2f200db877d2f80c08d09422e8bffd5a">continue_node</a>( <a class="code" href="a00288.html">graph</a> &g, <span class="keywordtype">int</span> number_of_predecessors, Body body ) :
+<a name="l00805"></a>00805         <a class="code" href="a00289.html">graph_node</a>(g), internal::continue_input<output_type>( g, number_of_predecessors, body )
+<a name="l00806"></a>00806     {}
+<a name="l00807"></a>00807 
+<a name="l00809"></a><a class="code" href="a00278.html#869562787fcb5c57a90aea120f26d492">00809</a>     <a class="code" href="a00278.html#2f200db877d2f80c08d09422e8bffd5a">continue_node</a>( <span class="keyword">const</span> <a class="code" href="a00278.html">continue_node</a>& src ) :
+<a name="l00810"></a>00810         <a class="code" href="a00289.html">graph_node</a>(src.my_graph), internal::continue_input<output_type>(src),
+<a name="l00811"></a>00811         internal::function_output<Output>()
+<a name="l00812"></a>00812     {}
+<a name="l00813"></a>00813 
+<a name="l00814"></a>00814     <span class="keywordtype">bool</span> try_put(<span class="keyword">const</span> input_type &i) { <span class="keywordflow">return</span> internal::continue_input<Output>::try_put(i); }
+<a name="l00815"></a>00815 
+<a name="l00816"></a>00816 <span class="keyword">protected</span>:
+<a name="l00817"></a>00817     <span class="comment">/* override */</span> internal::broadcast_cache<output_type> &successors () { <span class="keywordflow">return</span> fOutput_type::my_successors; }
+<a name="l00818"></a>00818 };
+<a name="l00819"></a>00819 
+<a name="l00820"></a>00820 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l00821"></a>00821 <span class="keyword">class </span>overwrite_node : <span class="keyword">public</span> graph_node, <span class="keyword">public</span> receiver<T>, <span class="keyword">public</span> sender<T> {
+<a name="l00822"></a>00822     <span class="keyword">using</span> graph_node::my_graph;
+<a name="l00823"></a>00823 <span class="keyword">public</span>:
+<a name="l00824"></a>00824     <span class="keyword">typedef</span> T input_type;
+<a name="l00825"></a>00825     <span class="keyword">typedef</span> T output_type;
+<a name="l00826"></a>00826     <span class="keyword">typedef</span> sender< input_type > predecessor_type;
+<a name="l00827"></a>00827     <span class="keyword">typedef</span> receiver< output_type > successor_type;
+<a name="l00828"></a>00828 
+<a name="l00829"></a>00829     overwrite_node(graph &g) : graph_node(g), my_buffer_is_valid(false) {
+<a name="l00830"></a>00830         my_successors.set_owner( <span class="keyword">this</span> );
+<a name="l00831"></a>00831     }
+<a name="l00832"></a>00832 
+<a name="l00833"></a>00833     <span class="comment">// Copy constructor; doesn't take anything from src; default won't work</span>
+<a name="l00834"></a>00834     overwrite_node( <span class="keyword">const</span> overwrite_node& src ) :
+<a name="l00835"></a>00835         graph_node(src.my_graph), receiver<T>(), sender<T>(), my_buffer_is_valid(false)
+<a name="l00836"></a>00836     {
+<a name="l00837"></a>00837         my_successors.set_owner( <span class="keyword">this</span> );
+<a name="l00838"></a>00838     }
+<a name="l00839"></a>00839 
+<a name="l00840"></a>00840     ~overwrite_node() {}
+<a name="l00841"></a>00841 
+<a name="l00842"></a>00842     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00327.html#68b8941ad77b9303cf3bcb8cf1f2d28a">register_successor</a>( successor_type &s ) {
+<a name="l00843"></a>00843         spin_mutex::scoped_lock l( my_mutex );
+<a name="l00844"></a>00844         <span class="keywordflow">if</span> ( my_buffer_is_valid ) {
+<a name="l00845"></a>00845             <span class="comment">// We have a valid value that must be forwarded immediately.</span>
+<a name="l00846"></a>00846             <span class="keywordflow">if</span> ( s.try_put( my_buffer ) || !s.register_predecessor( *<span class="keyword">this</span>  ) ) {
+<a name="l00847"></a>00847                 <span class="comment">// We add the successor: it accepted our put or it rejected it but won't let use become a predecessor</span>
+<a name="l00848"></a>00848                 my_successors.register_successor( s );
+<a name="l00849"></a>00849                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00850"></a>00850             } <span class="keywordflow">else</span> {
+<a name="l00851"></a>00851                 <span class="comment">// We don't add the successor: it rejected our put and we became its predecessor instead</span>
+<a name="l00852"></a>00852                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00853"></a>00853             }
+<a name="l00854"></a>00854         } <span class="keywordflow">else</span> {
+<a name="l00855"></a>00855             <span class="comment">// No valid value yet, just add as successor</span>
+<a name="l00856"></a>00856             my_successors.register_successor( s );
+<a name="l00857"></a>00857             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00858"></a>00858         }
+<a name="l00859"></a>00859     }
+<a name="l00860"></a>00860 
+<a name="l00861"></a>00861     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00327.html#82f363bfb1738bb8789e167590b10ef9">remove_successor</a>( successor_type &s ) {
+<a name="l00862"></a>00862         spin_mutex::scoped_lock l( my_mutex );
+<a name="l00863"></a>00863         my_successors.remove_successor(s);
+<a name="l00864"></a>00864         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00865"></a>00865     }
+<a name="l00866"></a>00866 
+<a name="l00867"></a>00867     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> try_put( <span class="keyword">const</span> T &v ) {
+<a name="l00868"></a>00868         spin_mutex::scoped_lock l( my_mutex );
+<a name="l00869"></a>00869         my_buffer = v;
+<a name="l00870"></a>00870         my_buffer_is_valid = <span class="keyword">true</span>;
+<a name="l00871"></a>00871         my_successors.try_put(v);
+<a name="l00872"></a>00872         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00873"></a>00873     }
+<a name="l00874"></a>00874 
+<a name="l00875"></a>00875     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> try_get( T &v ) {
+<a name="l00876"></a>00876         spin_mutex::scoped_lock l( my_mutex );
+<a name="l00877"></a>00877         <span class="keywordflow">if</span> ( my_buffer_is_valid ) {
+<a name="l00878"></a>00878             v = my_buffer;
+<a name="l00879"></a>00879             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00880"></a>00880         } <span class="keywordflow">else</span> {
+<a name="l00881"></a>00881             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00882"></a>00882         }
+<a name="l00883"></a>00883     }
+<a name="l00884"></a>00884 
+<a name="l00885"></a>00885     <span class="keywordtype">bool</span> is_valid() {
+<a name="l00886"></a>00886        spin_mutex::scoped_lock l( my_mutex );
+<a name="l00887"></a>00887        <span class="keywordflow">return</span> my_buffer_is_valid;
+<a name="l00888"></a>00888     }
+<a name="l00889"></a>00889 
+<a name="l00890"></a>00890     <span class="keywordtype">void</span> clear() {
+<a name="l00891"></a>00891        spin_mutex::scoped_lock l( my_mutex );
+<a name="l00892"></a>00892        my_buffer_is_valid = <span class="keyword">false</span>;
+<a name="l00893"></a>00893     }
+<a name="l00894"></a>00894 
+<a name="l00895"></a>00895 <span class="keyword">protected</span>:
+<a name="l00896"></a>00896     spin_mutex my_mutex;
+<a name="l00897"></a>00897     internal::broadcast_cache< T, null_rw_mutex > my_successors;
+<a name="l00898"></a>00898     T my_buffer;
+<a name="l00899"></a>00899     <span class="keywordtype">bool</span> my_buffer_is_valid;
+<a name="l00900"></a>00900 };
+<a name="l00901"></a>00901 
+<a name="l00902"></a>00902 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l00903"></a>00903 <span class="keyword">class </span>write_once_node : <span class="keyword">public</span> overwrite_node<T> {
+<a name="l00904"></a>00904 <span class="keyword">public</span>:
+<a name="l00905"></a>00905     <span class="keyword">typedef</span> T input_type;
+<a name="l00906"></a>00906     <span class="keyword">typedef</span> T output_type;
+<a name="l00907"></a>00907     <span class="keyword">typedef</span> sender< input_type > predecessor_type;
+<a name="l00908"></a>00908     <span class="keyword">typedef</span> receiver< output_type > successor_type;
+<a name="l00909"></a>00909 
+<a name="l00911"></a>00911     write_once_node(graph& g) : overwrite_node<T>(g) {}
+<a name="l00912"></a>00912 
+<a name="l00914"></a>00914     write_once_node( <span class="keyword">const</span> write_once_node& src ) : overwrite_node<T>(src) {}
+<a name="l00915"></a>00915 
+<a name="l00916"></a>00916     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> try_put( <span class="keyword">const</span> T &v ) {
+<a name="l00917"></a>00917         spin_mutex::scoped_lock l( this->my_mutex );
+<a name="l00918"></a>00918         <span class="keywordflow">if</span> ( this->my_buffer_is_valid ) {
+<a name="l00919"></a>00919             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00920"></a>00920         } <span class="keywordflow">else</span> {
+<a name="l00921"></a>00921             this->my_buffer = v;
+<a name="l00922"></a>00922             this->my_buffer_is_valid = <span class="keyword">true</span>;
+<a name="l00923"></a>00923             this->my_successors.try_put(v);
+<a name="l00924"></a>00924             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00925"></a>00925         }
+<a name="l00926"></a>00926     }
+<a name="l00927"></a>00927 };
+<a name="l00928"></a>00928 
+<a name="l00930"></a>00930 <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00931"></a><a class="code" href="a00262.html">00931</a> <span class="keyword">class </span><a class="code" href="a00262.html">broadcast_node</a> : <span class="keyword">public</span> <a class="code" href="a00289.html">graph_node</a>, <span class="keyword">public</span> <a class="code" href="a00321.html">receiver</a><T>, <span class="keyword">public</span> <a class="code" href="a00327.html">sender</a><T> {
+<a name="l00932"></a>00932     <span class="keyword">using</span> graph_node::my_graph;
+<a name="l00933"></a>00933     internal::broadcast_cache<T> my_successors;
+<a name="l00934"></a>00934 <span class="keyword">public</span>:
+<a name="l00935"></a><a class="code" href="a00262.html#43c775d80e98cc601de69764983319f9">00935</a>     <span class="keyword">typedef</span> T <a class="code" href="a00262.html#43c775d80e98cc601de69764983319f9">input_type</a>;
+<a name="l00936"></a><a class="code" href="a00262.html#8fd8d3075823e08b879be46c1215ab0f">00936</a>     <span class="keyword">typedef</span> T output_type;
+<a name="l00937"></a><a class="code" href="a00262.html#0e2ad9a121cb286aa0d0142fef33c646">00937</a>     <span class="keyword">typedef</span> <a class="code" href="a00327.html">sender< input_type ></a> <a class="code" href="a00327.html">predecessor_type</a>;
+<a name="l00938"></a><a class="code" href="a00262.html#cc6a0eb1c4ee65465770628d8366f055">00938</a>     <span class="keyword">typedef</span> <a class="code" href="a00321.html">receiver< output_type ></a> <a class="code" href="a00321.html">successor_type</a>;
+<a name="l00939"></a>00939 
+<a name="l00940"></a>00940     <a class="code" href="a00262.html">broadcast_node</a>(<a class="code" href="a00288.html">graph</a>& g) : <a class="code" href="a00289.html">graph_node</a>(g) {
+<a name="l00941"></a>00941         my_successors.set_owner( <span class="keyword">this</span> );
+<a name="l00942"></a>00942     }
+<a name="l00943"></a>00943 
+<a name="l00944"></a>00944     <span class="comment">// Copy constructor</span>
+<a name="l00945"></a>00945     <a class="code" href="a00262.html">broadcast_node</a>( <span class="keyword">const</span> <a class="code" href="a00262.html">broadcast_node</a>& src ) :
+<a name="l00946"></a>00946         <a class="code" href="a00289.html">graph_node</a>(src.my_graph), <a class="code" href="a00321.html">receiver</a><T>(), <a class="code" href="a00327.html">sender</a><T>()
+<a name="l00947"></a>00947     {
+<a name="l00948"></a>00948         my_successors.set_owner( <span class="keyword">this</span> );
+<a name="l00949"></a>00949     }
+<a name="l00950"></a>00950 
+<a name="l00952"></a><a class="code" href="a00262.html#fd0324c9ddb51fe6f95b3d015d338941">00952</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00262.html#fd0324c9ddb51fe6f95b3d015d338941">register_successor</a>( <a class="code" href="a00321.html">receiver<T></a> &r ) {
+<a name="l00953"></a>00953         my_successors.register_successor( r );
+<a name="l00954"></a>00954         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00955"></a>00955     }
+<a name="l00956"></a>00956 
+<a name="l00958"></a><a class="code" href="a00262.html#366efcc046ec08a104281109801ae629">00958</a>     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="a00262.html#366efcc046ec08a104281109801ae629">remove_successor</a>( <a class="code" href="a00321.html">receiver<T></a> &r ) {
+<a name="l00959"></a>00959         my_successors.remove_successor( r );
+<a name="l00960"></a>00960         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00961"></a>00961     }
+<a name="l00962"></a>00962 
+<a name="l00963"></a><a class="code" href="a00262.html#29eb768c10b377880bbf83d31ee49acf">00963</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00262.html#29eb768c10b377880bbf83d31ee49acf">try_put</a>( <span class="keyword">const</span> T &t ) {
+<a name="l00964"></a>00964         my_successors.try_put(t);
+<a name="l00965"></a>00965         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00966"></a>00966     }
+<a name="l00967"></a>00967 };
+<a name="l00968"></a>00968 
+<a name="l00969"></a>00969 <span class="preprocessor">#include "internal/_flow_graph_item_buffer_impl.h"</span>
+<a name="l00970"></a>00970 
+<a name="l00972"></a>00972 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> A=cache_aligned_allocator<T> >
+<a name="l00973"></a><a class="code" href="a00263.html">00973</a> <span class="keyword">class </span><a class="code" href="a00263.html">buffer_node</a> : <span class="keyword">public</span> <a class="code" href="a00289.html">graph_node</a>, <span class="keyword">public</span> reservable_item_buffer<T, A>, <span class="keyword">public</span> <a class="code" href="a00321.html">receiver</a><T>, <span class="keyword">public</span> <a class="code" href="a00327.html">sender</a><T> {
+<a name="l00974"></a>00974     <span class="keyword">using</span> graph_node::my_graph;
+<a name="l00975"></a>00975 <span class="keyword">public</span>:
+<a name="l00976"></a><a class="code" href="a00263.html#334efb81b56a2f2b3ae08a16e8d65620">00976</a>     <span class="keyword">typedef</span> T <a class="code" href="a00263.html#334efb81b56a2f2b3ae08a16e8d65620">input_type</a>;
+<a name="l00977"></a><a class="code" href="a00263.html#089520db81f6a1551dc94c01efbdd7be">00977</a>     <span class="keyword">typedef</span> T output_type;
+<a name="l00978"></a><a class="code" href="a00263.html#5fb0ad03a822ca0fc34ad5d56a4093a2">00978</a>     <span class="keyword">typedef</span> <a class="code" href="a00327.html">sender< input_type ></a> <a class="code" href="a00327.html">predecessor_type</a>;
+<a name="l00979"></a><a class="code" href="a00263.html#66f7eda69b75e08f50726e50a11429cd">00979</a>     <span class="keyword">typedef</span> <a class="code" href="a00321.html">receiver< output_type ></a> <a class="code" href="a00321.html">successor_type</a>;
+<a name="l00980"></a>00980     <span class="keyword">typedef</span> <a class="code" href="a00263.html">buffer_node<T, A></a> <a class="code" href="a00263.html">my_class</a>;
+<a name="l00981"></a>00981 <span class="keyword">protected</span>:
+<a name="l00982"></a>00982     <span class="keyword">typedef</span> size_t size_type;
+<a name="l00983"></a>00983     internal::round_robin_cache< T, null_rw_mutex > my_successors;
+<a name="l00984"></a>00984 
+<a name="l00985"></a>00985     <a class="code" href="a00337.html">task</a> *my_parent;
+<a name="l00986"></a>00986 
+<a name="l00987"></a>00987     <span class="keyword">friend</span> <span class="keyword">class </span>internal::forward_task< buffer_node< T, A > >;
+<a name="l00988"></a>00988 
+<a name="l00989"></a>00989     <span class="keyword">enum</span> op_type {reg_succ, rem_succ, req_item, res_item, rel_res, con_res, put_item, try_fwd};
+<a name="l00990"></a>00990     <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
+<a name="l00991"></a>00991 
+<a name="l00992"></a>00992     <span class="comment">// implements the aggregator_operation concept</span>
+<a name="l00993"></a>00993     <span class="keyword">class </span>buffer_operation : <span class="keyword">public</span> internal::aggregated_operation< buffer_operation > {
+<a name="l00994"></a>00994     <span class="keyword">public</span>:
+<a name="l00995"></a>00995         <span class="keywordtype">char</span> type;
+<a name="l00996"></a>00996         T *elem;
+<a name="l00997"></a>00997         <a class="code" href="a00263.html#66f7eda69b75e08f50726e50a11429cd">successor_type</a> *r;
+<a name="l00998"></a>00998         buffer_operation(<span class="keyword">const</span> T& e, op_type t) :
+<a name="l00999"></a>00999             type(char(t)), elem(const_cast<T*>(&e)), r(NULL) {}
+<a name="l01000"></a>01000         buffer_operation(op_type t) : type(char(t)), r(NULL) {}
+<a name="l01001"></a>01001     };
+<a name="l01002"></a>01002 
+<a name="l01003"></a>01003     <span class="keywordtype">bool</span> forwarder_busy;
+<a name="l01004"></a>01004     <span class="keyword">typedef</span> internal::aggregating_functor<my_class, buffer_operation> my_handler;
+<a name="l01005"></a>01005     <span class="keyword">friend</span> <span class="keyword">class </span>internal::aggregating_functor<my_class, buffer_operation>;
+<a name="l01006"></a>01006     internal::aggregator< my_handler, buffer_operation> my_aggregator;
+<a name="l01007"></a>01007 
+<a name="l01008"></a>01008     <span class="keyword">virtual</span> <span class="keywordtype">void</span> handle_operations(buffer_operation *op_list) {
+<a name="l01009"></a>01009         buffer_operation *tmp;
+<a name="l01010"></a>01010         <span class="keywordtype">bool</span> try_forwarding=<span class="keyword">false</span>;
+<a name="l01011"></a>01011         <span class="keywordflow">while</span> (op_list) {
+<a name="l01012"></a>01012             tmp = op_list;
+<a name="l01013"></a>01013             op_list = op_list->next;
+<a name="l01014"></a>01014             <span class="keywordflow">switch</span> (tmp->type) {
+<a name="l01015"></a>01015             <span class="keywordflow">case</span> reg_succ: <a class="code" href="a00263.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01016"></a>01016             <span class="keywordflow">case</span> rem_succ: <a class="code" href="a00263.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(tmp); <span class="keywordflow">break</span>;
+<a name="l01017"></a>01017             <span class="keywordflow">case</span> req_item: internal_pop(tmp); <span class="keywordflow">break</span>;
+<a name="l01018"></a>01018             <span class="keywordflow">case</span> res_item: internal_reserve(tmp); <span class="keywordflow">break</span>;
+<a name="l01019"></a>01019             <span class="keywordflow">case</span> rel_res:  internal_release(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01020"></a>01020             <span class="keywordflow">case</span> con_res:  internal_consume(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01021"></a>01021             <span class="keywordflow">case</span> put_item: internal_push(tmp);  try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01022"></a>01022             <span class="keywordflow">case</span> try_fwd:  <a class="code" href="a00263.html#dcbffbae514f4d95205b0845785c0a91">internal_forward</a>(tmp); <span class="keywordflow">break</span>;
+<a name="l01023"></a>01023             }
+<a name="l01024"></a>01024         }
+<a name="l01025"></a>01025         <span class="keywordflow">if</span> (try_forwarding && !forwarder_busy) {
+<a name="l01026"></a>01026             forwarder_busy = <span class="keyword">true</span>;
+<a name="l01027"></a>01027             <a class="code" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>(*<span class="keyword">new</span>(task::allocate_additional_child_of(*my_parent)) internal::forward_task< buffer_node<input_type, A> >(*<span class="keyword">this</span>));
+<a name="l01028"></a>01028         }
+<a name="l01029"></a>01029     }
+<a name="l01030"></a>01030 
+<a name="l01032"></a><a class="code" href="a00263.html#2648324ce0a38b40132b8502ef250e3a">01032</a>     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00263.html#2648324ce0a38b40132b8502ef250e3a">forward</a>() {
+<a name="l01033"></a>01033         buffer_operation op_data(try_fwd);
+<a name="l01034"></a>01034         <span class="keywordflow">do</span> {
+<a name="l01035"></a>01035             op_data.status = WAIT;
+<a name="l01036"></a>01036             my_aggregator.execute(&op_data);
+<a name="l01037"></a>01037         } <span class="keywordflow">while</span> (op_data.status == SUCCEEDED);
+<a name="l01038"></a>01038     }
+<a name="l01039"></a>01039 
+<a name="l01041"></a><a class="code" href="a00263.html#df21388252b8963e839dca29d2c67ea5">01041</a>     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00263.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(buffer_operation *op) {
+<a name="l01042"></a>01042         my_successors.register_successor(*(op->r));
+<a name="l01043"></a>01043         __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01044"></a>01044     }
+<a name="l01045"></a>01045 
+<a name="l01047"></a><a class="code" href="a00263.html#6b6cf76dff80fd679251da93351c1291">01047</a>     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00263.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(buffer_operation *op) {
+<a name="l01048"></a>01048         my_successors.remove_successor(*(op->r));
+<a name="l01049"></a>01049         __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01050"></a>01050     }
+<a name="l01051"></a>01051 
+<a name="l01053"></a><a class="code" href="a00263.html#dcbffbae514f4d95205b0845785c0a91">01053</a>     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00263.html#dcbffbae514f4d95205b0845785c0a91">internal_forward</a>(buffer_operation *op) {
+<a name="l01054"></a>01054         T i_copy;
+<a name="l01055"></a>01055         <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; <span class="comment">// flagged when a successor accepts</span>
+<a name="l01056"></a>01056         size_type counter = my_successors.size();
+<a name="l01057"></a>01057         <span class="comment">// Try forwarding, giving each successor a chance</span>
+<a name="l01058"></a>01058         <span class="keywordflow">while</span> (counter>0 && !this->buffer_empty() && this->item_valid(this->my_tail-1)) {
+<a name="l01059"></a>01059             this->fetch_back(i_copy);
+<a name="l01060"></a>01060             <span class="keywordflow">if</span>( my_successors.try_put(i_copy) ) {
+<a name="l01061"></a>01061                 this->invalidate_back();
+<a name="l01062"></a>01062                 --(this->my_tail);
+<a name="l01063"></a>01063                 success = <span class="keyword">true</span>; <span class="comment">// found an accepting successor</span>
+<a name="l01064"></a>01064             }
+<a name="l01065"></a>01065             --counter;
+<a name="l01066"></a>01066         }
+<a name="l01067"></a>01067         <span class="keywordflow">if</span> (success && !counter)
+<a name="l01068"></a>01068             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01069"></a>01069         <span class="keywordflow">else</span> {
+<a name="l01070"></a>01070             __TBB_store_with_release(op->status, FAILED);
+<a name="l01071"></a>01071             forwarder_busy = <span class="keyword">false</span>;
+<a name="l01072"></a>01072         }
+<a name="l01073"></a>01073     }
+<a name="l01074"></a>01074 
+<a name="l01075"></a>01075     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_push(buffer_operation *op) {
+<a name="l01076"></a>01076         this->push_back(*(op->elem));
+<a name="l01077"></a>01077         __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01078"></a>01078     }
+<a name="l01079"></a>01079 
+<a name="l01080"></a>01080     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_pop(buffer_operation *op) {
+<a name="l01081"></a>01081         <span class="keywordflow">if</span>(this->pop_back(*(op->elem))) {
+<a name="l01082"></a>01082             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01083"></a>01083         }
+<a name="l01084"></a>01084         <span class="keywordflow">else</span> {
+<a name="l01085"></a>01085             __TBB_store_with_release(op->status, FAILED);
+<a name="l01086"></a>01086         }
+<a name="l01087"></a>01087     }
+<a name="l01088"></a>01088 
+<a name="l01089"></a>01089     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_reserve(buffer_operation *op) {
+<a name="l01090"></a>01090         <span class="keywordflow">if</span>(this->reserve_front(*(op->elem))) {
+<a name="l01091"></a>01091             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01092"></a>01092         }
+<a name="l01093"></a>01093         <span class="keywordflow">else</span> {
+<a name="l01094"></a>01094             __TBB_store_with_release(op->status, FAILED);
+<a name="l01095"></a>01095         }
+<a name="l01096"></a>01096     }
+<a name="l01097"></a>01097 
+<a name="l01098"></a>01098     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_consume(buffer_operation *op) {
+<a name="l01099"></a>01099         this->consume_front();
+<a name="l01100"></a>01100         __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01101"></a>01101     }
+<a name="l01102"></a>01102 
+<a name="l01103"></a>01103     <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_release(buffer_operation *op) {
+<a name="l01104"></a>01104         this->release_front();
+<a name="l01105"></a>01105         __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01106"></a>01106     }
+<a name="l01107"></a>01107 
+<a name="l01108"></a>01108 <span class="keyword">public</span>:
+<a name="l01110"></a><a class="code" href="a00263.html#5fe4b79f780586ff66e002ce32a5c60d">01110</a>     <a class="code" href="a00263.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>( <a class="code" href="a00288.html">graph</a> &g ) : <a class="code" href="a00289.html">graph_node</a>(g), reservable_item_buffer<T>(),
+<a name="l01111"></a>01111         my_parent( g.root_task() ), forwarder_busy(false) {
+<a name="l01112"></a>01112         my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l01113"></a>01113         my_aggregator.initialize_handler(my_handler(<span class="keyword">this</span>));
+<a name="l01114"></a>01114     }
+<a name="l01115"></a>01115 
+<a name="l01117"></a><a class="code" href="a00263.html#03ad7b85a8341437f584af06ad050cdc">01117</a>     <a class="code" href="a00263.html#5fe4b79f780586ff66e002ce32a5c60d">buffer_node</a>( <span class="keyword">const</span> buffer_node& src ) : <a class="code" href="a00289.html">graph_node</a>(src.my_graph),
+<a name="l01118"></a>01118         reservable_item_buffer<T>(), <a class="code" href="a00321.html">receiver</a><T>(), <a class="code" href="a00327.html">sender</a><T>(),
+<a name="l01119"></a>01119         my_parent( src.my_parent ) {
+<a name="l01120"></a>01120         forwarder_busy = <span class="keyword">false</span>;
+<a name="l01121"></a>01121         my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l01122"></a>01122         my_aggregator.initialize_handler(my_handler(<span class="keyword">this</span>));
+<a name="l01123"></a>01123     }
+<a name="l01124"></a>01124 
+<a name="l01125"></a>01125     <span class="keyword">virtual</span> ~buffer_node() {}
+<a name="l01126"></a>01126 
+<a name="l01127"></a>01127     <span class="comment">//</span>
+<a name="l01128"></a>01128     <span class="comment">// message sender implementation</span>
+<a name="l01129"></a>01129     <span class="comment">//</span>
+<a name="l01130"></a>01130 
+<a name="l01132"></a>01132 
+<a name="l01133"></a><a class="code" href="a00263.html#f8bf4944ede4fc106423d67715beb695">01133</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00263.html#f8bf4944ede4fc106423d67715beb695">register_successor</a>( <a class="code" href="a00321.html">receiver<output_type></a> &r ) {
+<a name="l01134"></a>01134         buffer_operation op_data(reg_succ);
+<a name="l01135"></a>01135         op_data.r = &r;
+<a name="l01136"></a>01136         my_aggregator.execute(&op_data);
+<a name="l01137"></a>01137         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01138"></a>01138     }
+<a name="l01139"></a>01139 
+<a name="l01141"></a>01141 
+<a name="l01143"></a><a class="code" href="a00263.html#2074da0e39b9477c32897d6e5786196f">01143</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00263.html#2074da0e39b9477c32897d6e5786196f">remove_successor</a>( <a class="code" href="a00321.html">receiver<output_type></a> &r ) {
+<a name="l01144"></a>01144         r.<a class="code" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(*<span class="keyword">this</span>);
+<a name="l01145"></a>01145         buffer_operation op_data(rem_succ);
+<a name="l01146"></a>01146         op_data.r = &r;
+<a name="l01147"></a>01147         my_aggregator.execute(&op_data);
+<a name="l01148"></a>01148         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01149"></a>01149     }
+<a name="l01150"></a>01150 
+<a name="l01152"></a>01152 
+<a name="l01154"></a><a class="code" href="a00263.html#aeb8aec46ca99ca022356a792c46735e">01154</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00263.html#aeb8aec46ca99ca022356a792c46735e">try_get</a>( T &v ) {
+<a name="l01155"></a>01155         buffer_operation op_data(req_item);
+<a name="l01156"></a>01156         op_data.elem = &v;
+<a name="l01157"></a>01157         my_aggregator.execute(&op_data);
+<a name="l01158"></a>01158         <span class="keywordflow">return</span> (op_data.status==SUCCEEDED);
+<a name="l01159"></a>01159     }
+<a name="l01160"></a>01160 
+<a name="l01162"></a>01162 
+<a name="l01164"></a><a class="code" href="a00263.html#1cc889bb6c38bcb81757d0ebbc3a5e64">01164</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00263.html#1cc889bb6c38bcb81757d0ebbc3a5e64">try_reserve</a>( T &v ) {
+<a name="l01165"></a>01165         buffer_operation op_data(res_item);
+<a name="l01166"></a>01166         op_data.elem = &v;
+<a name="l01167"></a>01167         my_aggregator.execute(&op_data);
+<a name="l01168"></a>01168         <span class="keywordflow">return</span> (op_data.status==SUCCEEDED);
+<a name="l01169"></a>01169     }
+<a name="l01170"></a>01170 
+<a name="l01172"></a>01172 
+<a name="l01173"></a><a class="code" href="a00263.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">01173</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00263.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">try_release</a>() {
+<a name="l01174"></a>01174         buffer_operation op_data(rel_res);
+<a name="l01175"></a>01175         my_aggregator.execute(&op_data);
+<a name="l01176"></a>01176         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01177"></a>01177     }
+<a name="l01178"></a>01178 
+<a name="l01180"></a>01180 
+<a name="l01181"></a><a class="code" href="a00263.html#8ef07c434eb763d947a7b4e80c086a49">01181</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00263.html#8ef07c434eb763d947a7b4e80c086a49">try_consume</a>() {
+<a name="l01182"></a>01182         buffer_operation op_data(con_res);
+<a name="l01183"></a>01183         my_aggregator.execute(&op_data);
+<a name="l01184"></a>01184         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01185"></a>01185     }
+<a name="l01186"></a>01186 
+<a name="l01188"></a>01188 
+<a name="l01189"></a><a class="code" href="a00263.html#2b02fe332e704bbe14f297802298b63a">01189</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00263.html#2b02fe332e704bbe14f297802298b63a">try_put</a>(<span class="keyword">const</span> T &t) {
+<a name="l01190"></a>01190         buffer_operation op_data(t, put_item);
+<a name="l01191"></a>01191         my_aggregator.execute(&op_data);
+<a name="l01192"></a>01192         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01193"></a>01193     }
+<a name="l01194"></a>01194 };
+<a name="l01195"></a>01195 
+<a name="l01197"></a>01197 <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> A=cache_aligned_allocator<T> >
+<a name="l01198"></a><a class="code" href="a00313.html">01198</a> <span class="keyword">class </span><a class="code" href="a00313.html">queue_node</a> : <span class="keyword">public</span> buffer_node<T, A> {
+<a name="l01199"></a>01199 <span class="keyword">protected</span>:
+<a name="l01200"></a>01200     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00263.html">buffer_node<T, A>::size_type</a> size_type;
+<a name="l01201"></a>01201     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00263.html">buffer_node<T, A>::buffer_operation</a> queue_operation;
+<a name="l01202"></a>01202 
+<a name="l01203"></a>01203     <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
+<a name="l01204"></a>01204 
+<a name="l01206"></a><a class="code" href="a00313.html#eadcbbb81f9a9d223afabe0f40e77ecb">01206</a>     <span class="comment">/* override */</span> <span class="keywordtype">void</span> <a class="code" href="a00313.html#eadcbbb81f9a9d223afabe0f40e77ecb">internal_forward</a>(queue_operation *op) {
+<a name="l01207"></a>01207         T i_copy;
+<a name="l01208"></a>01208         <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; <span class="comment">// flagged when a successor accepts</span>
+<a name="l01209"></a>01209         size_type counter = this->my_successors.size();
+<a name="l01210"></a>01210         <span class="keywordflow">if</span> (this->my_reserved || !this->item_valid(this->my_head)) {
+<a name="l01211"></a>01211             __TBB_store_with_release(op->status, FAILED);
+<a name="l01212"></a>01212             this->forwarder_busy = <span class="keyword">false</span>;
+<a name="l01213"></a>01213             <span class="keywordflow">return</span>;
+<a name="l01214"></a>01214         }
+<a name="l01215"></a>01215         <span class="comment">// Keep trying to send items while there is at least one accepting successor</span>
+<a name="l01216"></a>01216         <span class="keywordflow">while</span> (counter>0 && this->item_valid(this->my_head)) {
+<a name="l01217"></a>01217             this->fetch_front(i_copy);
+<a name="l01218"></a>01218             <span class="keywordflow">if</span>(this->my_successors.try_put(i_copy)) {
+<a name="l01219"></a>01219                  this->invalidate_front();
+<a name="l01220"></a>01220                  ++(this->my_head);
+<a name="l01221"></a>01221                 success = <span class="keyword">true</span>; <span class="comment">// found an accepting successor</span>
+<a name="l01222"></a>01222             }
+<a name="l01223"></a>01223             --counter;
+<a name="l01224"></a>01224         }
+<a name="l01225"></a>01225         <span class="keywordflow">if</span> (success && !counter)
+<a name="l01226"></a>01226             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01227"></a>01227         <span class="keywordflow">else</span> {
+<a name="l01228"></a>01228             __TBB_store_with_release(op->status, FAILED);
+<a name="l01229"></a>01229             this->forwarder_busy = <span class="keyword">false</span>;
+<a name="l01230"></a>01230         }
+<a name="l01231"></a>01231     }
+<a name="l01232"></a>01232 
+<a name="l01233"></a>01233     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_pop(queue_operation *op) {
+<a name="l01234"></a>01234         <span class="keywordflow">if</span> ( this->my_reserved || !this->item_valid(this->my_head)){
+<a name="l01235"></a>01235             __TBB_store_with_release(op->status, FAILED);
+<a name="l01236"></a>01236         }
+<a name="l01237"></a>01237         <span class="keywordflow">else</span> {
+<a name="l01238"></a>01238             this->pop_front(*(op->elem));
+<a name="l01239"></a>01239             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01240"></a>01240         }
+<a name="l01241"></a>01241     }
+<a name="l01242"></a>01242     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_reserve(queue_operation *op) {
+<a name="l01243"></a>01243         <span class="keywordflow">if</span> (this->my_reserved || !this->item_valid(this->my_head)) {
+<a name="l01244"></a>01244             __TBB_store_with_release(op->status, FAILED);
+<a name="l01245"></a>01245         }
+<a name="l01246"></a>01246         <span class="keywordflow">else</span> {
+<a name="l01247"></a>01247             this->my_reserved = <span class="keyword">true</span>;
+<a name="l01248"></a>01248             this->fetch_front(*(op->elem));
+<a name="l01249"></a>01249             this->invalidate_front();
+<a name="l01250"></a>01250             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01251"></a>01251         }
+<a name="l01252"></a>01252     }
+<a name="l01253"></a>01253     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_consume(queue_operation *op) {
+<a name="l01254"></a>01254         this->consume_front();
+<a name="l01255"></a>01255         __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01256"></a>01256     }
+<a name="l01257"></a>01257 
+<a name="l01258"></a>01258 <span class="keyword">public</span>:
+<a name="l01259"></a><a class="code" href="a00313.html#1e71030845210b6c4c7380eb9e11a2ac">01259</a>     <span class="keyword">typedef</span> T <a class="code" href="a00313.html#1e71030845210b6c4c7380eb9e11a2ac">input_type</a>;
+<a name="l01260"></a><a class="code" href="a00313.html#25b5a53ab1f9a342644fa3759bc0b1ad">01260</a>     <span class="keyword">typedef</span> T output_type;
+<a name="l01261"></a><a class="code" href="a00313.html#5e2fdd33c45d44549dee9c1638e19898">01261</a>     <span class="keyword">typedef</span> <a class="code" href="a00327.html">sender< input_type ></a> <a class="code" href="a00327.html">predecessor_type</a>;
+<a name="l01262"></a><a class="code" href="a00313.html#f35076a19f256f9e7a61bed77ca1ccc5">01262</a>     <span class="keyword">typedef</span> <a class="code" href="a00321.html">receiver< output_type ></a> <a class="code" href="a00321.html">successor_type</a>;
+<a name="l01263"></a>01263 
+<a name="l01265"></a><a class="code" href="a00313.html#c716593a92448b0f429d1f3a38e67996">01265</a>     <a class="code" href="a00313.html#c716593a92448b0f429d1f3a38e67996">queue_node</a>( <a class="code" href="a00288.html">graph</a> &g ) : buffer_node<T, A>(g) {}
+<a name="l01266"></a>01266 
+<a name="l01268"></a><a class="code" href="a00313.html#0226762d9ebba28311b7b1518d948ab1">01268</a>     <a class="code" href="a00313.html#c716593a92448b0f429d1f3a38e67996">queue_node</a>( <span class="keyword">const</span> <a class="code" href="a00313.html">queue_node</a>& src) : buffer_node<T, A>(src) {}
+<a name="l01269"></a>01269 };
+<a name="l01270"></a>01270 
+<a name="l01272"></a>01272 <span class="keyword">template</span>< <span class="keyword">typename</span> T, <span class="keyword">typename</span> A=cache_aligned_allocator<T> >
+<a name="l01273"></a><a class="code" href="a00328.html">01273</a> <span class="keyword">class </span><a class="code" href="a00328.html">sequencer_node</a> : <span class="keyword">public</span> <a class="code" href="a00313.html">queue_node</a><T, A> {
+<a name="l01274"></a>01274     internal::function_body< T, size_t > *my_sequencer;
+<a name="l01275"></a>01275 <span class="keyword">public</span>:
+<a name="l01276"></a><a class="code" href="a00328.html#af629f26832ff4e476e240637a78bc0c">01276</a>     <span class="keyword">typedef</span> T <a class="code" href="a00328.html#af629f26832ff4e476e240637a78bc0c">input_type</a>;
+<a name="l01277"></a><a class="code" href="a00328.html#ca026eaef70e35791c407323199031a7">01277</a>     <span class="keyword">typedef</span> T output_type;
+<a name="l01278"></a><a class="code" href="a00328.html#8127e36811832563fe1e9bc3ba391f79">01278</a>     <span class="keyword">typedef</span> <a class="code" href="a00327.html">sender< input_type ></a> <a class="code" href="a00327.html">predecessor_type</a>;
+<a name="l01279"></a><a class="code" href="a00328.html#795f3ee75f133b9d3b159172fc4a197f">01279</a>     <span class="keyword">typedef</span> <a class="code" href="a00321.html">receiver< output_type ></a> <a class="code" href="a00321.html">successor_type</a>;
+<a name="l01280"></a>01280 
+<a name="l01282"></a>01282     <span class="keyword">template</span>< <span class="keyword">typename</span> Sequencer >
+<a name="l01283"></a><a class="code" href="a00328.html#7e71cbdf78f989091bc162b89bee7e66">01283</a>     <a class="code" href="a00328.html#7e71cbdf78f989091bc162b89bee7e66">sequencer_node</a>( <a class="code" href="a00288.html">graph</a> &g, <span class="keyword">const</span> Sequencer& s ) : <a class="code" href="a00313.html">queue_node</a><T, A>(g),
+<a name="l01284"></a>01284         my_sequencer(new internal::function_body_leaf< T, size_t, Sequencer>(s) ) {}
+<a name="l01285"></a>01285 
+<a name="l01287"></a><a class="code" href="a00328.html#b38e7a070552960384bcc1d91af13a5c">01287</a>     <a class="code" href="a00328.html#7e71cbdf78f989091bc162b89bee7e66">sequencer_node</a>( <span class="keyword">const</span> <a class="code" href="a00328.html">sequencer_node</a>& src ) : <a class="code" href="a00313.html">queue_node</a><T, A>(src),
+<a name="l01288"></a>01288         my_sequencer( src.my_sequencer->clone() ) {}
+<a name="l01289"></a>01289 
+<a name="l01291"></a><a class="code" href="a00328.html#93d3d8f6a72b3e1387047282116ed6ee">01291</a>     <a class="code" href="a00328.html#93d3d8f6a72b3e1387047282116ed6ee">~sequencer_node</a>() { <span class="keyword">delete</span> my_sequencer; }
+<a name="l01292"></a>01292 <span class="keyword">protected</span>:
+<a name="l01293"></a>01293     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00263.html">buffer_node<T, A>::size_type</a> size_type;
+<a name="l01294"></a>01294     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00263.html">buffer_node<T, A>::buffer_operation</a> sequencer_operation;
+<a name="l01295"></a>01295 
+<a name="l01296"></a>01296     <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
+<a name="l01297"></a>01297 
+<a name="l01298"></a>01298 <span class="keyword">private</span>:
+<a name="l01299"></a>01299     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_push(sequencer_operation *op) {
+<a name="l01300"></a>01300         size_type tag = (*my_sequencer)(*(op->elem));
+<a name="l01301"></a>01301 
+<a name="l01302"></a>01302         this->my_tail = (tag+1 > this->my_tail) ? tag+1 : this->my_tail;
+<a name="l01303"></a>01303 
+<a name="l01304"></a>01304         <span class="keywordflow">if</span>(this->size() > this->capacity())
+<a name="l01305"></a>01305             this->grow_my_array(this->size());  <span class="comment">// tail already has 1 added to it</span>
+<a name="l01306"></a>01306         this->item(tag) = std::make_pair( *(op->elem), <span class="keyword">true</span> );
+<a name="l01307"></a>01307         __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01308"></a>01308     }
+<a name="l01309"></a>01309 };
+<a name="l01310"></a>01310 
+<a name="l01312"></a>01312 <span class="keyword">template</span>< <span class="keyword">typename</span> T, <span class="keyword">typename</span> Compare = std::less<T>, <span class="keyword">typename</span> A=cache_aligned_allocator<T> >
+<a name="l01313"></a><a class="code" href="a00312.html">01313</a> <span class="keyword">class </span><a class="code" href="a00312.html">priority_queue_node</a> : <span class="keyword">public</span> buffer_node<T, A> {
+<a name="l01314"></a>01314 <span class="keyword">public</span>:
+<a name="l01315"></a><a class="code" href="a00312.html#b2829b518979874ad3d2a939e14ae7bd">01315</a>     <span class="keyword">typedef</span> T <a class="code" href="a00312.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a>;
+<a name="l01316"></a><a class="code" href="a00312.html#2cb099b590246b6bc93cc15e78c6ee5c">01316</a>     <span class="keyword">typedef</span> T output_type;
+<a name="l01317"></a><a class="code" href="a00312.html#fdea783bf9d5a4c98e794ac7e0f84ccf">01317</a>     <span class="keyword">typedef</span> <a class="code" href="a00327.html">sender< input_type ></a> <a class="code" href="a00327.html">predecessor_type</a>;
+<a name="l01318"></a><a class="code" href="a00312.html#09ab5064ca8192e68c03da47603e68eb">01318</a>     <span class="keyword">typedef</span> <a class="code" href="a00321.html">receiver< output_type ></a> <a class="code" href="a00321.html">successor_type</a>;
+<a name="l01319"></a>01319 
+<a name="l01321"></a><a class="code" href="a00312.html#497ec2612615249bf5a294eb1b7b93b3">01321</a>     <a class="code" href="a00312.html#497ec2612615249bf5a294eb1b7b93b3">priority_queue_node</a>( <a class="code" href="a00288.html">graph</a> &g ) : buffer_node<T, A>(g), mark(0) {}
+<a name="l01322"></a>01322 
+<a name="l01324"></a><a class="code" href="a00312.html#17a4f66e23d54100b64805405e905d62">01324</a>     <a class="code" href="a00312.html#497ec2612615249bf5a294eb1b7b93b3">priority_queue_node</a>( <span class="keyword">const</span> <a class="code" href="a00312.html">priority_queue_node</a> &src ) : buffer_node<T, A>(src), mark(0) {}
+<a name="l01325"></a>01325 
+<a name="l01326"></a>01326 <span class="keyword">protected</span>:
+<a name="l01327"></a>01327     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00263.html">buffer_node<T, A>::size_type</a> size_type;
+<a name="l01328"></a>01328     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00263.html">buffer_node<T, A>::item_type</a> item_type;
+<a name="l01329"></a>01329     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00263.html">buffer_node<T, A>::buffer_operation</a> prio_operation;
+<a name="l01330"></a>01330 
+<a name="l01331"></a>01331     <span class="keyword">enum</span> op_stat {WAIT=0, SUCCEEDED, FAILED};
+<a name="l01332"></a>01332 
+<a name="l01333"></a>01333     <span class="comment">/* override */</span> <span class="keywordtype">void</span> handle_operations(prio_operation *op_list) {
+<a name="l01334"></a>01334         prio_operation *tmp <span class="comment">/*, *pop_list*/</span> ;
+<a name="l01335"></a>01335         <span class="keywordtype">bool</span> try_forwarding=<span class="keyword">false</span>;
+<a name="l01336"></a>01336         <span class="keywordflow">while</span> (op_list) {
+<a name="l01337"></a>01337             tmp = op_list;
+<a name="l01338"></a>01338             op_list = op_list->next;
+<a name="l01339"></a>01339             <span class="keywordflow">switch</span> (tmp->type) {
+<a name="l01340"></a>01340             <span class="keywordflow">case</span> <a class="code" href="a00263.html">buffer_node<T, A>::reg_succ</a>: this-><a class="code" href="a00263.html#df21388252b8963e839dca29d2c67ea5">internal_reg_succ</a>(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01341"></a>01341             <span class="keywordflow">case</span> <a class="code" href="a00263.html">buffer_node<T, A>::rem_succ</a>: this-><a class="code" href="a00263.html#6b6cf76dff80fd679251da93351c1291">internal_rem_succ</a>(tmp); <span class="keywordflow">break</span>;
+<a name="l01342"></a>01342             <span class="keywordflow">case</span> <a class="code" href="a00263.html">buffer_node<T, A>::put_item</a>: internal_push(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01343"></a>01343             <span class="keywordflow">case</span> <a class="code" href="a00263.html">buffer_node<T, A>::try_fwd</a>: <a class="code" href="a00312.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">internal_forward</a>(tmp); <span class="keywordflow">break</span>;
+<a name="l01344"></a>01344             <span class="keywordflow">case</span> <a class="code" href="a00263.html">buffer_node<T, A>::rel_res</a>: internal_release(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01345"></a>01345             <span class="keywordflow">case</span> <a class="code" href="a00263.html">buffer_node<T, A>::con_res</a>: internal_consume(tmp); try_forwarding = <span class="keyword">true</span>; <span class="keywordflow">break</span>;
+<a name="l01346"></a>01346             <span class="keywordflow">case</span> <a class="code" href="a00263.html">buffer_node<T, A>::req_item</a>: internal_pop(tmp); <span class="keywordflow">break</span>;
+<a name="l01347"></a>01347             <span class="keywordflow">case</span> <a class="code" href="a00263.html">buffer_node<T, A>::res_item</a>: internal_reserve(tmp); <span class="keywordflow">break</span>;
+<a name="l01348"></a>01348             }
+<a name="l01349"></a>01349         }
+<a name="l01350"></a>01350         <span class="comment">// process pops!  for now, no special pop processing</span>
+<a name="l01351"></a>01351         <span class="keywordflow">if</span> (mark<this->my_tail) heapify();
+<a name="l01352"></a>01352         <span class="keywordflow">if</span> (try_forwarding && !this->forwarder_busy) {
+<a name="l01353"></a>01353             this->forwarder_busy = <span class="keyword">true</span>;
+<a name="l01354"></a>01354             <a class="code" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>(*<span class="keyword">new</span>(task::allocate_additional_child_of(*(this->my_parent))) internal::forward_task< buffer_node<input_type, A> >(*<span class="keyword">this</span>));
+<a name="l01355"></a>01355         }
+<a name="l01356"></a>01356     }
+<a name="l01357"></a>01357 
+<a name="l01359"></a><a class="code" href="a00312.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">01359</a>     <span class="comment">/* override */</span> <span class="keywordtype">void</span> <a class="code" href="a00312.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">internal_forward</a>(prio_operation *op) {
+<a name="l01360"></a>01360         T i_copy;
+<a name="l01361"></a>01361         <span class="keywordtype">bool</span> success = <span class="keyword">false</span>; <span class="comment">// flagged when a successor accepts</span>
+<a name="l01362"></a>01362         size_type counter = this->my_successors.size();
+<a name="l01363"></a>01363 
+<a name="l01364"></a>01364         <span class="keywordflow">if</span> (this->my_reserved || this->my_tail == 0) {
+<a name="l01365"></a>01365             __TBB_store_with_release(op->status, FAILED);
+<a name="l01366"></a>01366             this->forwarder_busy = <span class="keyword">false</span>;
+<a name="l01367"></a>01367             <span class="keywordflow">return</span>;
+<a name="l01368"></a>01368         }
+<a name="l01369"></a>01369         <span class="comment">// Keep trying to send while there exists an accepting successor</span>
+<a name="l01370"></a>01370         <span class="keywordflow">while</span> (counter>0 && this->my_tail > 0) {
+<a name="l01371"></a>01371             i_copy = this->my_array[0].first;
+<a name="l01372"></a>01372             <span class="keywordtype">bool</span> msg = this->my_successors.try_put(i_copy);
+<a name="l01373"></a>01373             <span class="keywordflow">if</span> ( msg == <span class="keyword">true</span> ) {
+<a name="l01374"></a>01374                  <span class="keywordflow">if</span> (mark == this->my_tail) --mark;
+<a name="l01375"></a>01375                 --(this->my_tail);
+<a name="l01376"></a>01376                 this->my_array[0].first=this->my_array[this->my_tail].first;
+<a name="l01377"></a>01377                 <span class="keywordflow">if</span> (this->my_tail > 1) <span class="comment">// don't reheap for heap of size 1</span>
+<a name="l01378"></a>01378                     reheap();
+<a name="l01379"></a>01379                 success = <span class="keyword">true</span>; <span class="comment">// found an accepting successor</span>
+<a name="l01380"></a>01380             }
+<a name="l01381"></a>01381             --counter;
+<a name="l01382"></a>01382         }
+<a name="l01383"></a>01383         <span class="keywordflow">if</span> (success && !counter)
+<a name="l01384"></a>01384             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01385"></a>01385         <span class="keywordflow">else</span> {
+<a name="l01386"></a>01386             __TBB_store_with_release(op->status, FAILED);
+<a name="l01387"></a>01387             this->forwarder_busy = <span class="keyword">false</span>;
+<a name="l01388"></a>01388         }
+<a name="l01389"></a>01389     }
+<a name="l01390"></a>01390 
+<a name="l01391"></a>01391     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_push(prio_operation *op) {
+<a name="l01392"></a>01392         <span class="keywordflow">if</span> ( this->my_tail >= this->my_array_size )
+<a name="l01393"></a>01393             this->grow_my_array( this->my_tail + 1 );
+<a name="l01394"></a>01394         this->my_array[this->my_tail] = std::make_pair( *(op->elem), <span class="keyword">true</span> );
+<a name="l01395"></a>01395         ++(this->my_tail);
+<a name="l01396"></a>01396         __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01397"></a>01397     }
+<a name="l01398"></a>01398     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_pop(prio_operation *op) {
+<a name="l01399"></a>01399         <span class="keywordflow">if</span> ( this->my_reserved == <span class="keyword">true</span> || this->my_tail == 0 ) {
+<a name="l01400"></a>01400             __TBB_store_with_release(op->status, FAILED);
+<a name="l01401"></a>01401         }
+<a name="l01402"></a>01402         <span class="keywordflow">else</span> {
+<a name="l01403"></a>01403             <span class="keywordflow">if</span> (mark<this->my_tail &&
+<a name="l01404"></a>01404                 compare(this->my_array[0].first,
+<a name="l01405"></a>01405                         this->my_array[this->my_tail-1].first)) {
+<a name="l01406"></a>01406                 <span class="comment">// there are newly pushed elems; last one higher than top</span>
+<a name="l01407"></a>01407                 <span class="comment">// copy the data</span>
+<a name="l01408"></a>01408                 *(op->elem) = this->my_array[this->my_tail-1].first;
+<a name="l01409"></a>01409                 --(this->my_tail);
+<a name="l01410"></a>01410                 __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01411"></a>01411             }
+<a name="l01412"></a>01412             <span class="keywordflow">else</span> { <span class="comment">// extract and push the last element down heap</span>
+<a name="l01413"></a>01413                 *(op->elem) = this->my_array[0].first; <span class="comment">// copy the data</span>
+<a name="l01414"></a>01414                 if (mark == this->my_tail) --mark;
+<a name="l01415"></a>01415                 --(this->my_tail);
+<a name="l01416"></a>01416                 __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01417"></a>01417                 this->my_array[0].first=this->my_array[this->my_tail].first;
+<a name="l01418"></a>01418                 <span class="keywordflow">if</span> (this->my_tail > 1) <span class="comment">// don't reheap for heap of size 1</span>
+<a name="l01419"></a>01419                     reheap();
+<a name="l01420"></a>01420             }
+<a name="l01421"></a>01421         }
+<a name="l01422"></a>01422     }
+<a name="l01423"></a>01423     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_reserve(prio_operation *op) {
+<a name="l01424"></a>01424         <span class="keywordflow">if</span> (this->my_reserved == <span class="keyword">true</span> || this->my_tail == 0) {
+<a name="l01425"></a>01425             __TBB_store_with_release(op->status, FAILED);
+<a name="l01426"></a>01426         }
+<a name="l01427"></a>01427         <span class="keywordflow">else</span> {
+<a name="l01428"></a>01428             this->my_reserved = <span class="keyword">true</span>;
+<a name="l01429"></a>01429             *(op->elem) = reserved_item = this->my_array[0].first;
+<a name="l01430"></a>01430             if (mark == this->my_tail) --mark;
+<a name="l01431"></a>01431             --(this->my_tail);
+<a name="l01432"></a>01432             __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01433"></a>01433             this->my_array[0].first = this->my_array[this->my_tail].first;
+<a name="l01434"></a>01434             <span class="keywordflow">if</span> (this->my_tail > 1) <span class="comment">// don't reheap for heap of size 1</span>
+<a name="l01435"></a>01435                 reheap();
+<a name="l01436"></a>01436         }
+<a name="l01437"></a>01437     }
+<a name="l01438"></a>01438     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_consume(prio_operation *op) {
+<a name="l01439"></a>01439         this->my_reserved = <span class="keyword">false</span>;
+<a name="l01440"></a>01440         __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01441"></a>01441     }
+<a name="l01442"></a>01442     <span class="comment">/* override */</span> <span class="keywordtype">void</span> internal_release(prio_operation *op) {
+<a name="l01443"></a>01443         <span class="keywordflow">if</span> (this->my_tail >= this->my_array_size)
+<a name="l01444"></a>01444             this->grow_my_array( this->my_tail + 1 );
+<a name="l01445"></a>01445         this->my_array[this->my_tail] = std::make_pair(reserved_item, <span class="keyword">true</span>);
+<a name="l01446"></a>01446         ++(this->my_tail);
+<a name="l01447"></a>01447         this->my_reserved = <span class="keyword">false</span>;
+<a name="l01448"></a>01448         __TBB_store_with_release(op->status, SUCCEEDED);
+<a name="l01449"></a>01449         heapify();
+<a name="l01450"></a>01450     }
+<a name="l01451"></a>01451 <span class="keyword">private</span>:
+<a name="l01452"></a>01452     Compare compare;
+<a name="l01453"></a>01453     size_type mark;
+<a name="l01454"></a>01454     <a class="code" href="a00312.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a> reserved_item;
+<a name="l01455"></a>01455 
+<a name="l01456"></a>01456     <span class="keywordtype">void</span> heapify() {
+<a name="l01457"></a>01457         <span class="keywordflow">if</span> (!mark) mark = 1;
+<a name="l01458"></a>01458         <span class="keywordflow">for</span> (; mark<this->my_tail; ++mark) { <span class="comment">// for each unheaped element</span>
+<a name="l01459"></a>01459             size_type cur_pos = mark;
+<a name="l01460"></a>01460             <a class="code" href="a00312.html#b2829b518979874ad3d2a939e14ae7bd">input_type</a> to_place = this->my_array[mark].first;
+<a name="l01461"></a>01461             <span class="keywordflow">do</span> { <span class="comment">// push to_place up the heap</span>
+<a name="l01462"></a>01462                 size_type parent = (cur_pos-1)>>1;
+<a name="l01463"></a>01463                 <span class="keywordflow">if</span> (!compare(this->my_array[parent].first, to_place))
+<a name="l01464"></a>01464                     <span class="keywordflow">break</span>;
+<a name="l01465"></a>01465                 this->my_array[cur_pos].first = this->my_array[parent].first;
+<a name="l01466"></a>01466                 cur_pos = parent;
+<a name="l01467"></a>01467             } <span class="keywordflow">while</span>( cur_pos );
+<a name="l01468"></a>01468             this->my_array[cur_pos].first = to_place;
+<a name="l01469"></a>01469         }
+<a name="l01470"></a>01470     }
+<a name="l01471"></a>01471 
+<a name="l01472"></a>01472     <span class="keywordtype">void</span> reheap() {
+<a name="l01473"></a>01473         size_type cur_pos=0, child=1;
+<a name="l01474"></a>01474         <span class="keywordflow">while</span> (child < mark) {
+<a name="l01475"></a>01475             size_type target = child;
+<a name="l01476"></a>01476             <span class="keywordflow">if</span> (child+1<mark &&
+<a name="l01477"></a>01477                 compare(this->my_array[child].first,
+<a name="l01478"></a>01478                         this->my_array[child+1].first))
+<a name="l01479"></a>01479                 ++target;
+<a name="l01480"></a>01480             <span class="comment">// target now has the higher priority child</span>
+<a name="l01481"></a>01481             <span class="keywordflow">if</span> (compare(this->my_array[target].first,
+<a name="l01482"></a>01482                         this->my_array[this->my_tail].first))
+<a name="l01483"></a>01483                 <span class="keywordflow">break</span>;
+<a name="l01484"></a>01484             this->my_array[cur_pos].first = this->my_array[target].first;
+<a name="l01485"></a>01485             cur_pos = target;
+<a name="l01486"></a>01486             child = (cur_pos<<1)+1;
+<a name="l01487"></a>01487         }
+<a name="l01488"></a>01488         this->my_array[cur_pos].first = this->my_array[this->my_tail].first;
+<a name="l01489"></a>01489     }
+<a name="l01490"></a>01490 };
+<a name="l01491"></a>01491 
+<a name="l01493"></a>01493 
+<a name="l01496"></a>01496 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l01497"></a><a class="code" href="a00292.html">01497</a> <span class="keyword">class </span><a class="code" href="a00292.html">limiter_node</a> : <span class="keyword">public</span> <a class="code" href="a00289.html">graph_node</a>, <span class="keyword">public</span> <a class="code" href="a00321.html">receiver</a>< T >, <span class="keyword">public</span> <a class="code" href="a00327.html">sender</a>< T > {
+<a name="l01498"></a>01498     <span class="keyword">using</span> graph_node::my_graph;
+<a name="l01499"></a>01499 <span class="keyword">public</span>:
+<a name="l01500"></a><a class="code" href="a00292.html#035196d3c9240ef041f528ebcde8baa7">01500</a>     <span class="keyword">typedef</span> T <a class="code" href="a00292.html#035196d3c9240ef041f528ebcde8baa7">input_type</a>;
+<a name="l01501"></a><a class="code" href="a00292.html#6e67fc480147c0b88a483b85db6457b0">01501</a>     <span class="keyword">typedef</span> T output_type;
+<a name="l01502"></a><a class="code" href="a00292.html#f89fcf44f38eb33f965ee5362d3e68e9">01502</a>     <span class="keyword">typedef</span> <a class="code" href="a00327.html">sender< input_type ></a> <a class="code" href="a00327.html">predecessor_type</a>;
+<a name="l01503"></a><a class="code" href="a00292.html#e8945e4dd6ea759ff9e4735da13f12ef">01503</a>     <span class="keyword">typedef</span> <a class="code" href="a00321.html">receiver< output_type ></a> <a class="code" href="a00321.html">successor_type</a>;
+<a name="l01504"></a>01504 
+<a name="l01505"></a>01505 <span class="keyword">private</span>:
+<a name="l01506"></a>01506     <a class="code" href="a00337.html">task</a> *my_root_task;
+<a name="l01507"></a>01507     size_t my_threshold;
+<a name="l01508"></a>01508     size_t my_count;
+<a name="l01509"></a>01509     internal::predecessor_cache< T > my_predecessors;
+<a name="l01510"></a>01510     <a class="code" href="a00331.html">spin_mutex</a> my_mutex;
+<a name="l01511"></a>01511     internal::broadcast_cache< T > my_successors;
+<a name="l01512"></a>01512     <span class="keywordtype">int</span> init_decrement_predecessors;
+<a name="l01513"></a>01513 
+<a name="l01514"></a>01514     <span class="keyword">friend</span> <span class="keyword">class </span>internal::forward_task< limiter_node<T> >;
+<a name="l01515"></a>01515 
+<a name="l01516"></a>01516     <span class="comment">// Let decrementer call decrement_counter()</span>
+<a name="l01517"></a>01517     <span class="keyword">friend</span> <span class="keyword">class </span>internal::decrementer< limiter_node<T> >;
+<a name="l01518"></a>01518 
+<a name="l01519"></a>01519     <span class="keywordtype">void</span> decrement_counter() {
+<a name="l01520"></a>01520         <a class="code" href="a00292.html#035196d3c9240ef041f528ebcde8baa7">input_type</a> v;
+<a name="l01521"></a>01521 
+<a name="l01522"></a>01522         <span class="comment">// If we can't get / put an item immediately then drop the count</span>
+<a name="l01523"></a>01523         <span class="keywordflow">if</span> ( my_predecessors.get_item( v ) == <span class="keyword">false</span>
+<a name="l01524"></a>01524              || my_successors.try_put(v) == false ) {
+<a name="l01525"></a>01525             <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01526"></a>01526             --my_count;
+<a name="l01527"></a>01527             <span class="keywordflow">if</span> ( !my_predecessors.empty() )
+<a name="l01528"></a>01528                 <a class="code" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) )
+<a name="l01529"></a>01529                             internal::forward_task< <a class="code" href="a00292.html">limiter_node<T></a> >( *<span class="keyword">this</span> ) );
+<a name="l01530"></a>01530         }
+<a name="l01531"></a>01531     }
+<a name="l01532"></a>01532 
+<a name="l01533"></a>01533     <span class="keywordtype">void</span> forward() {
+<a name="l01534"></a>01534         {
+<a name="l01535"></a>01535             <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01536"></a>01536             <span class="keywordflow">if</span> ( my_count < my_threshold )
+<a name="l01537"></a>01537                 ++my_count;
+<a name="l01538"></a>01538             <span class="keywordflow">else</span>
+<a name="l01539"></a>01539                 <span class="keywordflow">return</span>;
+<a name="l01540"></a>01540         }
+<a name="l01541"></a>01541         decrement_counter();
+<a name="l01542"></a>01542     }
+<a name="l01543"></a>01543 
+<a name="l01544"></a>01544 <span class="keyword">public</span>:
+<a name="l01546"></a><a class="code" href="a00292.html#a3344b2461966631b6ee34b79fb105c7">01546</a>     internal::decrementer< limiter_node<T> > <a class="code" href="a00292.html#a3344b2461966631b6ee34b79fb105c7">decrement</a>;
+<a name="l01547"></a>01547 
+<a name="l01549"></a><a class="code" href="a00292.html#831b06576f46fe2bf3ed0f86b793c1b2">01549</a>     <a class="code" href="a00292.html#831b06576f46fe2bf3ed0f86b793c1b2">limiter_node</a>(<a class="code" href="a00288.html">graph</a> &g, size_t threshold, <span class="keywordtype">int</span> num_decrement_predecessors=0) :
+<a name="l01550"></a>01550         <a class="code" href="a00289.html">graph_node</a>(g), my_root_task(g.root_task()), my_threshold(threshold), my_count(0),
+<a name="l01551"></a>01551         init_decrement_predecessors(num_decrement_predecessors),
+<a name="l01552"></a>01552         <a class="code" href="a00292.html#a3344b2461966631b6ee34b79fb105c7">decrement</a>(num_decrement_predecessors)
+<a name="l01553"></a>01553     {
+<a name="l01554"></a>01554         my_predecessors.set_owner(<span class="keyword">this</span>);
+<a name="l01555"></a>01555         my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l01556"></a>01556         <a class="code" href="a00292.html#a3344b2461966631b6ee34b79fb105c7">decrement</a>.set_owner(<span class="keyword">this</span>);
+<a name="l01557"></a>01557     }
+<a name="l01558"></a>01558 
+<a name="l01560"></a><a class="code" href="a00292.html#83d3ab884543b070ee5b345a87f241fa">01560</a>     <a class="code" href="a00292.html#831b06576f46fe2bf3ed0f86b793c1b2">limiter_node</a>( <span class="keyword">const</span> limiter_node& src ) :
+<a name="l01561"></a>01561         <a class="code" href="a00289.html">graph_node</a>(src.my_graph), <a class="code" href="a00321.html">receiver</a><T>(), <a class="code" href="a00327.html">sender</a><T>(),
+<a name="l01562"></a>01562         my_root_task(src.my_root_task), my_threshold(src.my_threshold), my_count(0),
+<a name="l01563"></a>01563         init_decrement_predecessors(src.init_decrement_predecessors),
+<a name="l01564"></a>01564         <a class="code" href="a00292.html#a3344b2461966631b6ee34b79fb105c7">decrement</a>(src.init_decrement_predecessors)
+<a name="l01565"></a>01565     {
+<a name="l01566"></a>01566         my_predecessors.set_owner(<span class="keyword">this</span>);
+<a name="l01567"></a>01567         my_successors.set_owner(<span class="keyword">this</span>);
+<a name="l01568"></a>01568         <a class="code" href="a00292.html#a3344b2461966631b6ee34b79fb105c7">decrement</a>.set_owner(<span class="keyword">this</span>);
+<a name="l01569"></a>01569     }
+<a name="l01570"></a>01570 
+<a name="l01572"></a><a class="code" href="a00292.html#c76561d8d871b4769876988a4de12a9b">01572</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00292.html#c76561d8d871b4769876988a4de12a9b">register_successor</a>( <a class="code" href="a00321.html">receiver<output_type></a> &r ) {
+<a name="l01573"></a>01573         my_successors.register_successor(r);
+<a name="l01574"></a>01574         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01575"></a>01575     }
+<a name="l01576"></a>01576 
+<a name="l01578"></a>01578 
+<a name="l01579"></a><a class="code" href="a00292.html#275e328063c121b3e506ccef2a825d28">01579</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00292.html#275e328063c121b3e506ccef2a825d28">remove_successor</a>( <a class="code" href="a00321.html">receiver<output_type></a> &r ) {
+<a name="l01580"></a>01580         r.<a class="code" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">remove_predecessor</a>(*<span class="keyword">this</span>);
+<a name="l01581"></a>01581         my_successors.remove_successor(r);
+<a name="l01582"></a>01582         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01583"></a>01583     }
+<a name="l01584"></a>01584 
+<a name="l01586"></a><a class="code" href="a00292.html#55a02d458a4d8ffa6accd7a70605da2f">01586</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00292.html#55a02d458a4d8ffa6accd7a70605da2f">try_put</a>( <span class="keyword">const</span> T &t ) {
+<a name="l01587"></a>01587         {
+<a name="l01588"></a>01588             <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01589"></a>01589             <span class="keywordflow">if</span> ( my_count >= my_threshold )
+<a name="l01590"></a>01590                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01591"></a>01591             <span class="keywordflow">else</span>
+<a name="l01592"></a>01592                 ++my_count;
+<a name="l01593"></a>01593         }
+<a name="l01594"></a>01594 
+<a name="l01595"></a>01595         <span class="keywordtype">bool</span> msg = my_successors.try_put(t);
+<a name="l01596"></a>01596 
+<a name="l01597"></a>01597         <span class="keywordflow">if</span> ( msg != <span class="keyword">true</span> ) {
+<a name="l01598"></a>01598             <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01599"></a>01599             --my_count;
+<a name="l01600"></a>01600             <span class="keywordflow">if</span> ( !my_predecessors.empty() )
+<a name="l01601"></a>01601                 <a class="code" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) )
+<a name="l01602"></a>01602                             internal::forward_task< <a class="code" href="a00292.html">limiter_node<T></a> >( *<span class="keyword">this</span> ) );
+<a name="l01603"></a>01603         }
+<a name="l01604"></a>01604 
+<a name="l01605"></a>01605         <span class="keywordflow">return</span> msg;
+<a name="l01606"></a>01606     }
+<a name="l01607"></a>01607 
+<a name="l01609"></a><a class="code" href="a00292.html#de70a0e88ce7655d8c14b6af57f7496f">01609</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00292.html#de70a0e88ce7655d8c14b6af57f7496f">register_predecessor</a>( <a class="code" href="a00327.html">predecessor_type</a> &src ) {
+<a name="l01610"></a>01610         <a class="code" href="a00332.html">spin_mutex::scoped_lock</a> lock(my_mutex);
+<a name="l01611"></a>01611         my_predecessors.add( src );
+<a name="l01612"></a>01612         <span class="keywordflow">if</span> ( my_count < my_threshold && !my_successors.empty() )
+<a name="l01613"></a>01613             <a class="code" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">task::enqueue</a>( * <span class="keyword">new</span> ( task::allocate_additional_child_of( *my_root_task ) )
+<a name="l01614"></a>01614                            internal::forward_task< <a class="code" href="a00292.html">limiter_node<T></a> >( *<span class="keyword">this</span> ) );
+<a name="l01615"></a>01615         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01616"></a>01616     }
+<a name="l01617"></a>01617 
+<a name="l01619"></a><a class="code" href="a00292.html#c530e7b469454e2340460795f2da3317">01619</a>     <span class="comment">/* override */</span> <span class="keywordtype">bool</span> <a class="code" href="a00292.html#c530e7b469454e2340460795f2da3317">remove_predecessor</a>( <a class="code" href="a00327.html">predecessor_type</a> &src ) {
+<a name="l01620"></a>01620         my_predecessors.remove( src );
+<a name="l01621"></a>01621         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01622"></a>01622     }
+<a name="l01623"></a>01623 };
+<a name="l01624"></a>01624 
+<a name="l01625"></a>01625 <span class="preprocessor">#include "internal/_flow_graph_join_impl.h"</span>
+<a name="l01626"></a>01626 
+<a name="l01627"></a>01627 <span class="keyword">using</span> internal::reserving_port;
+<a name="l01628"></a>01628 <span class="keyword">using</span> internal::queueing_port;
+<a name="l01629"></a>01629 <span class="keyword">using</span> internal::tag_matching_port;
+<a name="l01630"></a>01630 <span class="keyword">using</span> internal::input_port;
+<a name="l01631"></a>01631 <span class="keyword">using</span> internal::tag_value;
+<a name="l01632"></a>01632 <span class="keyword">using</span> internal::NO_TAG;
+<a name="l01633"></a>01633 
+<a name="l01634"></a>01634 <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple, graph_buffer_policy JP=queueing> <span class="keyword">class </span>join_node;
+<a name="l01635"></a>01635 
+<a name="l01636"></a>01636 <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l01637"></a>01637 <span class="keyword">class </span>join_node<OutputTuple,reserving>: <span class="keyword">public</span> internal::unfolded_join_node<std::tuple_size<OutputTuple>::value, reserving_port, OutputTuple, reserving> {
+<a name="l01638"></a>01638 <span class="keyword">private</span>:
+<a name="l01639"></a>01639     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<OutputTuple>::value;
+<a name="l01640"></a>01640     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::unfolded_join_node<N, reserving_port, OutputTuple, reserving> unfolded_type;
+<a name="l01641"></a>01641 <span class="keyword">public</span>:
+<a name="l01642"></a>01642     <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l01643"></a>01643     <span class="keyword">typedef</span> <span class="keyword">typename</span> unfolded_type::input_ports_type input_ports_type;
+<a name="l01644"></a>01644     join_node(<a class="code" href="a00288.html">graph</a> &g) : unfolded_type(g) { }
+<a name="l01645"></a>01645     join_node(<span class="keyword">const</span> join_node &other) : unfolded_type(other) {}
+<a name="l01646"></a>01646 };
+<a name="l01647"></a>01647 
+<a name="l01648"></a>01648 <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l01649"></a>01649 <span class="keyword">class </span>join_node<OutputTuple,queueing>: <span class="keyword">public</span> internal::unfolded_join_node<std::tuple_size<OutputTuple>::value, queueing_port, OutputTuple, queueing> {
+<a name="l01650"></a>01650 <span class="keyword">private</span>:
+<a name="l01651"></a>01651     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<OutputTuple>::value;
+<a name="l01652"></a>01652     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::unfolded_join_node<N, queueing_port, OutputTuple, queueing> unfolded_type;
+<a name="l01653"></a>01653 <span class="keyword">public</span>:
+<a name="l01654"></a>01654     <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l01655"></a>01655     <span class="keyword">typedef</span> <span class="keyword">typename</span> unfolded_type::input_ports_type input_ports_type;
+<a name="l01656"></a>01656     join_node(graph &g) : unfolded_type(g) { }
+<a name="l01657"></a>01657     join_node(<span class="keyword">const</span> join_node &other) : unfolded_type(other) {}
+<a name="l01658"></a>01658 };
+<a name="l01659"></a>01659 
+<a name="l01660"></a>01660 <span class="comment">// template for tag_matching join_node</span>
+<a name="l01661"></a>01661 <span class="keyword">template</span><<span class="keyword">typename</span> OutputTuple>
+<a name="l01662"></a>01662 <span class="keyword">class </span>join_node<OutputTuple, tag_matching> : <span class="keyword">public</span> internal::unfolded_join_node<std::tuple_size<OutputTuple>::value,
+<a name="l01663"></a>01663       tag_matching_port, OutputTuple, tag_matching> {
+<a name="l01664"></a>01664 <span class="keyword">private</span>:
+<a name="l01665"></a>01665     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<OutputTuple>::value;
+<a name="l01666"></a>01666     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::unfolded_join_node<N, tag_matching_port, OutputTuple, tag_matching> unfolded_type;
+<a name="l01667"></a>01667 <span class="keyword">public</span>:
+<a name="l01668"></a>01668     <span class="keyword">typedef</span> OutputTuple output_type;
+<a name="l01669"></a>01669     <span class="keyword">typedef</span> <span class="keyword">typename</span> unfolded_type::input_ports_type input_ports_type;
+<a name="l01670"></a>01670     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1>
+<a name="l01671"></a>01671     join_node(graph &g, B0 b0, B1 b1) : unfolded_type(g, b0, b1) { }
+<a name="l01672"></a>01672     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2>
+<a name="l01673"></a>01673     join_node(graph &g, B0 b0, B1 b1, B2 b2) : unfolded_type(g, b0, b1, b2) { }
+<a name="l01674"></a>01674     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3>
+<a name="l01675"></a>01675     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3) : unfolded_type(g, b0, b1, b2, b3) { }
+<a name="l01676"></a>01676     <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4>
+<a name="l01677"></a>01677     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) : unfolded_type(g, b0, b1, b2, b3, b4) { }
+<a name="l01678"></a>01678 <span class="preprocessor">#if __TBB_VARIADIC_MAX >= 6</span>
+<a name="l01679"></a>01679 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4, <span class="keyword">typename</span> B5>
+<a name="l01680"></a>01680     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5) : unfolded_type(g, b0, b1, b2, b3, b4, b5) { }
+<a name="l01681"></a>01681 <span class="preprocessor">#endif</span>
+<a name="l01682"></a>01682 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_VARIADIC_MAX >= 7</span>
+<a name="l01683"></a>01683 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4, <span class="keyword">typename</span> B5, <span class="keyword">typename</span> B6>
+<a name="l01684"></a>01684     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6) { }
+<a name="l01685"></a>01685 <span class="preprocessor">#endif</span>
+<a name="l01686"></a>01686 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_VARIADIC_MAX >= 8</span>
+<a name="l01687"></a>01687 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4, <span class="keyword">typename</span> B5, <span class="keyword">typename</span> B6, <span class="keyword">typename</span> B7>
+<a name="l01688"></a>01688     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6, B7 b7) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7) { }
+<a name="l01689"></a>01689 <span class="preprocessor">#endif</span>
+<a name="l01690"></a>01690 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_VARIADIC_MAX >= 9</span>
+<a name="l01691"></a>01691 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4, <span class="keyword">typename</span> B5, <span class="keyword">typename</span> B6, <span class="keyword">typename</span> B7, <span class="keyword">typename</span> B8>
+<a name="l01692"></a>01692     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6, B7 b7, B8 b8) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8) { }
+<a name="l01693"></a>01693 <span class="preprocessor">#endif</span>
+<a name="l01694"></a>01694 <span class="preprocessor"></span><span class="preprocessor">#if __TBB_VARIADIC_MAX >= 10</span>
+<a name="l01695"></a>01695 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> B0, <span class="keyword">typename</span> B1, <span class="keyword">typename</span> B2, <span class="keyword">typename</span> B3, <span class="keyword">typename</span> B4, <span class="keyword">typename</span> B5, <span class="keyword">typename</span> B6, <span class="keyword">typename</span> B7, <span class="keyword">typename</span> B8, <span cl [...]
+<a name="l01696"></a>01696     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6, B7 b7, B8 b8, B9 b9) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9) { }
+<a name="l01697"></a>01697 <span class="preprocessor">#endif</span>
+<a name="l01698"></a>01698 <span class="preprocessor"></span>    join_node(<span class="keyword">const</span> join_node &other) : unfolded_type(other) {}
+<a name="l01699"></a>01699 };
+<a name="l01700"></a>01700 
+<a name="l01701"></a>01701 <span class="preprocessor">#if TBB_PREVIEW_GRAPH_NODES</span>
+<a name="l01702"></a>01702 <span class="preprocessor"></span><span class="comment">// or node</span>
+<a name="l01703"></a>01703 <span class="preprocessor">#include "internal/_flow_graph_or_impl.h"</span>
+<a name="l01704"></a>01704 
+<a name="l01705"></a>01705 <span class="keyword">template</span><<span class="keyword">typename</span> InputTuple>
+<a name="l01706"></a>01706 <span class="keyword">class </span>or_node : <span class="keyword">public</span> internal::unfolded_or_node<InputTuple> {
+<a name="l01707"></a>01707 <span class="keyword">private</span>:
+<a name="l01708"></a>01708     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = std::tuple_size<InputTuple>::value;
+<a name="l01709"></a>01709 <span class="keyword">public</span>:
+<a name="l01710"></a>01710     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::or_output_type<InputTuple>::type output_type;
+<a name="l01711"></a>01711     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::unfolded_or_node<InputTuple> unfolded_type;
+<a name="l01712"></a>01712     or_node(graph& g) : unfolded_type(g) { }
+<a name="l01713"></a>01713     <span class="comment">// Copy constructor</span>
+<a name="l01714"></a>01714     or_node( <span class="keyword">const</span> or_node& other ) : unfolded_type(other) { }
+<a name="l01715"></a>01715 };
+<a name="l01716"></a>01716 <span class="preprocessor">#endif  // TBB_PREVIEW_GRAPH_NODES</span>
+<a name="l01717"></a>01717 <span class="preprocessor"></span>
+<a name="l01719"></a>01719 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l01720"></a>01720 <span class="keyword">inline</span> <span class="keywordtype">void</span> make_edge( sender<T> &p, receiver<T> &s ) {
+<a name="l01721"></a>01721     p.register_successor( s );
+<a name="l01722"></a>01722 }
+<a name="l01723"></a>01723 
+<a name="l01725"></a>01725 <span class="keyword">template</span>< <span class="keyword">typename</span> T >
+<a name="l01726"></a>01726 <span class="keyword">inline</span> <span class="keywordtype">void</span> remove_edge( sender<T> &p, receiver<T> &s ) {
+<a name="l01727"></a>01727     p.remove_successor( s );
+<a name="l01728"></a>01728 }
+<a name="l01729"></a>01729 
+<a name="l01731"></a>01731 <span class="keyword">template</span>< <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Node >
+<a name="l01732"></a>01732 Body copy_body( Node &n ) {
+<a name="l01733"></a>01733     <span class="keywordflow">return</span> n.template copy_function_object<Body>();
+<a name="l01734"></a>01734 }
+<a name="l01735"></a>01735 
+<a name="l01736"></a>01736 } <span class="comment">// interface6</span>
+<a name="l01737"></a>01737 
+<a name="l01738"></a>01738     <span class="keyword">using</span> interface6::graph;
+<a name="l01739"></a>01739     <span class="keyword">using</span> interface6::graph_node;
+<a name="l01740"></a>01740     <span class="keyword">using</span> interface6::continue_msg;
+<a name="l01741"></a>01741     <span class="keyword">using</span> interface6::sender;
+<a name="l01742"></a>01742     <span class="keyword">using</span> interface6::receiver;
+<a name="l01743"></a>01743     <span class="keyword">using</span> interface6::continue_receiver;
+<a name="l01744"></a>01744 
+<a name="l01745"></a>01745     <span class="keyword">using</span> interface6::source_node;
+<a name="l01746"></a>01746     <span class="keyword">using</span> interface6::function_node;
+<a name="l01747"></a>01747     <span class="keyword">using</span> interface6::multifunction_node;
+<a name="l01748"></a>01748     <span class="keyword">using</span> interface6::split_node;
+<a name="l01749"></a>01749     <span class="keyword">using</span> interface6::internal::output_port;
+<a name="l01750"></a>01750 <span class="preprocessor">#if TBB_PREVIEW_GRAPH_NODES</span>
+<a name="l01751"></a>01751 <span class="preprocessor"></span>    <span class="keyword">using</span> interface6::or_node;
+<a name="l01752"></a>01752 <span class="preprocessor">#endif</span>
+<a name="l01753"></a>01753 <span class="preprocessor"></span>    <span class="keyword">using</span> interface6::continue_node;
+<a name="l01754"></a>01754     <span class="keyword">using</span> interface6::overwrite_node;
+<a name="l01755"></a>01755     <span class="keyword">using</span> interface6::write_once_node;
+<a name="l01756"></a>01756     <span class="keyword">using</span> interface6::broadcast_node;
+<a name="l01757"></a>01757     <span class="keyword">using</span> interface6::buffer_node;
+<a name="l01758"></a>01758     <span class="keyword">using</span> interface6::queue_node;
+<a name="l01759"></a>01759     <span class="keyword">using</span> interface6::sequencer_node;
+<a name="l01760"></a>01760     <span class="keyword">using</span> interface6::priority_queue_node;
+<a name="l01761"></a>01761     <span class="keyword">using</span> interface6::limiter_node;
+<a name="l01762"></a>01762     <span class="keyword">using namespace </span>interface6::internal::graph_policy_namespace;
+<a name="l01763"></a>01763     <span class="keyword">using</span> interface6::join_node;
+<a name="l01764"></a>01764     <span class="keyword">using</span> interface6::input_port;
+<a name="l01765"></a>01765     <span class="keyword">using</span> interface6::copy_body; 
+<a name="l01766"></a>01766     <span class="keyword">using</span> interface6::make_edge; 
+<a name="l01767"></a>01767     <span class="keyword">using</span> interface6::remove_edge; 
+<a name="l01768"></a>01768     <span class="keyword">using</span> interface6::internal::NO_TAG;
+<a name="l01769"></a>01769     <span class="keyword">using</span> interface6::internal::tag_value;
+<a name="l01770"></a>01770 
+<a name="l01771"></a>01771 } <span class="comment">// flow</span>
+<a name="l01772"></a>01772 } <span class="comment">// tbb</span>
+<a name="l01773"></a>01773 
+<a name="l01774"></a>01774 <span class="preprocessor">#endif // __TBB_flow_graph_H</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00512.html b/doc/html/a00512.html
deleted file mode 100644
index ea4e0bb..0000000
--- a/doc/html/a00512.html
+++ /dev/null
@@ -1,473 +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-2011 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 <new></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "task.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "partitioner.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "tbb_profiling.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="l00032"></a>00032 <span class="keyword">namespace </span>interface6 {
-<a name="l00034"></a>00034 <span class="keyword">namespace </span>internal {
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036     <span class="keyword">using namespace </span>tbb::internal;
-<a name="l00037"></a>00037 
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040     <span class="keyword">typedef</span> <span class="keywordtype">char</span> reduction_context;
-<a name="l00041"></a>00041 
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00045"></a>00045     <span class="keyword">class </span>finish_reduce: <span class="keyword">public</span> flag_task {
-<a name="l00047"></a>00047         <span class="keywordtype">bool</span> has_right_zombie;
-<a name="l00048"></a>00048         <span class="keyword">const</span> reduction_context my_context;
-<a name="l00049"></a>00049         Body* my_body;
-<a name="l00050"></a>00050         aligned_space<Body,1> zombie_space;
-<a name="l00051"></a>00051         finish_reduce( reduction_context context_ ) : 
-<a name="l00052"></a>00052             has_right_zombie(false), <span class="comment">// TODO: substitute by flag_task::child_stolen?</span>
-<a name="l00053"></a>00053             my_context(context_),
-<a name="l00054"></a>00054             my_body(NULL)
-<a name="l00055"></a>00055         {
-<a name="l00056"></a>00056         }
-<a name="l00057"></a>00057         task* execute() {
-<a name="l00058"></a>00058             <span class="keywordflow">if</span>( has_right_zombie ) {
-<a name="l00059"></a>00059                 <span class="comment">// Right child was stolen.</span>
-<a name="l00060"></a>00060                 Body* s = zombie_space.begin();
-<a name="l00061"></a>00061                 my_body->join( *s );
-<a name="l00062"></a>00062                 s->~Body();
-<a name="l00063"></a>00063             }
-<a name="l00064"></a>00064             <span class="keywordflow">if</span>( my_context==1 )  <span class="comment">// left child</span>
-<a name="l00065"></a>00065                 itt_store_word_with_release( static_cast<finish_reduce*>(parent())->my_body, my_body );
-<a name="l00066"></a>00066             <span class="keywordflow">return</span> NULL;
-<a name="l00067"></a>00067         }
-<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">typename</span> Partitioner>
-<a name="l00069"></a>00069         <span class="keyword">friend</span> <span class="keyword">class </span>start_reduce;
-<a name="l00070"></a>00070     };
-<a name="l00071"></a>00071 
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074     <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="l00075"></a>00075     <span class="keyword">class </span>start_reduce: <span class="keyword">public</span> task {
-<a name="l00076"></a>00076         <span class="keyword">typedef</span> finish_reduce<Body> finish_type;
-<a name="l00077"></a>00077         Body* my_body;
-<a name="l00078"></a>00078         Range my_range;
-<a name="l00079"></a>00079         <span class="keyword">typename</span> Partitioner::task_partition_type my_partition;
-<a name="l00080"></a>00080         reduction_context my_context; <span class="comment">// TODO: factor out into start_reduce_base</span>
-<a name="l00081"></a>00081         <span class="comment">/*override*/</span> task* execute();
-<a name="l00082"></a>00082         <span class="keyword">template</span><<span class="keyword">typename</span> Body_>
-<a name="l00083"></a>00083         <span class="keyword">friend</span> <span class="keyword">class </span>finish_reduce;
-<a name="l00084"></a>00084     
-<a name="l00085"></a>00085 <span class="keyword">public</span>:
-<a name="l00087"></a>00087         start_reduce( <span class="keyword">const</span> Range& range, Body* body, Partitioner& partitioner ) :
-<a name="l00088"></a>00088             my_body(body),
-<a name="l00089"></a>00089             my_range(range),
-<a name="l00090"></a>00090             my_partition(partitioner),
-<a name="l00091"></a>00091             my_context(0)
-<a name="l00092"></a>00092         {
-<a name="l00093"></a>00093         }
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096         start_reduce( start_reduce& parent_, split ) :
-<a name="l00097"></a>00097             my_body(parent_.my_body),
-<a name="l00098"></a>00098             my_range(parent_.my_range,split()),
-<a name="l00099"></a>00099             my_partition(parent_.my_partition,split()),
-<a name="l00100"></a>00100             my_context(2)
-<a name="l00101"></a>00101         {
-<a name="l00102"></a>00102             my_partition.set_affinity(*<span class="keyword">this</span>);
-<a name="l00103"></a>00103             parent_.my_context = 1;
-<a name="l00104"></a>00104         }
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107         start_reduce( start_reduce& parent_, <span class="keyword">const</span> Range& r, depth_t d ) :
-<a name="l00108"></a>00108             my_body(parent_.my_body),
-<a name="l00109"></a>00109             my_range(r),
-<a name="l00110"></a>00110             my_partition(parent_.my_partition,split()),
-<a name="l00111"></a>00111             my_context(2) <span class="comment">// right leaf mark</span>
-<a name="l00112"></a>00112         {
-<a name="l00113"></a>00113             my_partition.set_affinity(*<span class="keyword">this</span>);
-<a name="l00114"></a>00114             my_partition.align_depth( d );
-<a name="l00115"></a>00115             parent_.my_context = 1; <span class="comment">// left leaf mark</span>
-<a name="l00116"></a>00116         }
-<a name="l00118"></a>00118         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
-<a name="l00119"></a>00119             my_partition.note_affinity( <span class="keywordtype">id</span> );
-<a name="l00120"></a>00120         }
-<a name="l00121"></a>00121         <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, Partitioner& partitioner ) {
-<a name="l00122"></a>00122             <span class="keywordflow">if</span>( !range.empty() ) {
-<a name="l00123"></a>00123 #<span class="keywordflow">if</span> !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP
-<a name="l00124"></a>00124                 <a class="code" href="a00311.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(<a class="code" href="a00311.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_reduce(range,&body,partitioner) );
-<a name="l00125"></a>00125 <span class="preprocessor">#else</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
-<a name="l00127"></a>00127                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
-<a name="l00128"></a>00128                 task_group_context context;
-<a name="l00129"></a>00129                 <a class="code" href="a00311.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
-<a name="l00130"></a>00130 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */</span>
-<a name="l00131"></a>00131             }
-<a name="l00132"></a>00132         }
-<a name="l00133"></a>00133 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00134"></a>00134 <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="l00135"></a>00135             <span class="keywordflow">if</span>( !range.empty() ) 
-<a name="l00136"></a>00136                 <a class="code" href="a00311.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         }
-<a name="l00138"></a>00138 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00140"></a>00140         finish_type *create_continuation() {
-<a name="l00141"></a>00141             <span class="keywordflow">return</span> <span class="keyword">new</span>( allocate_continuation() ) finish_type(my_context);
-<a name="l00142"></a>00142         }
-<a name="l00144"></a>00144         <span class="keywordtype">void</span> run_body( Range &r ) { (*my_body)( r ); }
-<a name="l00145"></a>00145     };
-<a name="l00146"></a>00146     <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="l00147"></a>00147     task* start_reduce<Range,Body,Partitioner>::execute() {
-<a name="l00148"></a>00148         my_partition.check_being_stolen( *<span class="keyword">this</span> );
-<a name="l00149"></a>00149         <span class="keywordflow">if</span>( my_context==2 ) { <span class="comment">// right child</span>
-<a name="l00150"></a>00150             finish_type* parent_ptr = static_cast<finish_type*>(parent());
-<a name="l00151"></a>00151             <span class="keywordflow">if</span>( !itt_load_word_with_acquire(parent_ptr->my_body) ) { <span class="comment">// TODO: replace by is_stolen_task() or by parent_ptr->ref_count() == 2???</span>
-<a name="l00152"></a>00152                 my_body = <span class="keyword">new</span>( parent_ptr->zombie_space.begin() ) Body(*my_body,split());
-<a name="l00153"></a>00153                 parent_ptr->has_right_zombie = <span class="keyword">true</span>;
-<a name="l00154"></a>00154             }
-<a name="l00155"></a>00155         } <span class="keywordflow">else</span> __TBB_ASSERT(my_context==0,0);<span class="comment">// because left leaf spawns right leafs without recycling</span>
-<a name="l00156"></a>00156         my_partition.execute(*<span class="keyword">this</span>, my_range);
-<a name="l00157"></a>00157         <span class="keywordflow">if</span>( my_context==1 ) {
-<a name="l00158"></a>00158             finish_type* parent_ptr = static_cast<finish_type*>(parent());
-<a name="l00159"></a>00159             __TBB_ASSERT(my_body!=parent_ptr->zombie_space.begin(),0);
-<a name="l00160"></a>00160             itt_store_word_with_release(parent_ptr->my_body, my_body );
-<a name="l00161"></a>00161         }
-<a name="l00162"></a>00162         <span class="keywordflow">return</span> NULL;
-<a name="l00163"></a>00163     }
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 <span class="preprocessor">#if TBB_PREVIEW_DETERMINISTIC_REDUCE</span>
-<a name="l00167"></a>00167 <span class="preprocessor"></span>
-<a name="l00168"></a>00168 <span class="preprocessor">    template<typename Body></span>
-<a name="l00169"></a>00169 <span class="preprocessor"></span>    <span class="keyword">class </span>finish_deterministic_reduce: <span class="keyword">public</span> task {
-<a name="l00170"></a>00170         Body &my_left_body;
-<a name="l00171"></a>00171         Body my_right_body;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173         finish_deterministic_reduce( Body &body ) :
-<a name="l00174"></a>00174             my_left_body( body ),
-<a name="l00175"></a>00175             my_right_body( body, split() )
-<a name="l00176"></a>00176         {
-<a name="l00177"></a>00177         }
-<a name="l00178"></a>00178         task* execute() {
-<a name="l00179"></a>00179             my_left_body.join( my_right_body );
-<a name="l00180"></a>00180             <span class="keywordflow">return</span> NULL;
-<a name="l00181"></a>00181         }
-<a name="l00182"></a>00182         <span class="keyword">template</span><<span class="keyword">typename</span> Range,<span class="keyword">typename</span> Body_>
-<a name="l00183"></a>00183         <span class="keyword">friend</span> <span class="keyword">class </span>start_deterministic_reduce;
-<a name="l00184"></a>00184     };
-<a name="l00185"></a>00185 
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00189"></a>00189     <span class="keyword">class </span>start_deterministic_reduce: <span class="keyword">public</span> task {
-<a name="l00190"></a>00190         <span class="keyword">typedef</span> finish_deterministic_reduce<Body> finish_type;
-<a name="l00191"></a>00191         Body &my_body;
-<a name="l00192"></a>00192         Range my_range;
-<a name="l00193"></a>00193         <span class="comment">/*override*/</span> task* execute();
-<a name="l00194"></a>00194 
-<a name="l00196"></a>00196         start_deterministic_reduce( <span class="keyword">const</span> Range& range, Body& body ) :
-<a name="l00197"></a>00197             my_body( body ),
-<a name="l00198"></a>00198             my_range( range )
-<a name="l00199"></a>00199         {
-<a name="l00200"></a>00200         }
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203         start_deterministic_reduce( start_deterministic_reduce& parent_, finish_type& c ) :
-<a name="l00204"></a>00204             my_body( c.my_right_body ),
-<a name="l00205"></a>00205             my_range( parent_.my_range, split() )
-<a name="l00206"></a>00206         {
-<a name="l00207"></a>00207         }
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209 <span class="keyword">public</span>:
-<a name="l00210"></a>00210         <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body ) {
-<a name="l00211"></a>00211             <span class="keywordflow">if</span>( !range.empty() ) {
-<a name="l00212"></a>00212 #<span class="keywordflow">if</span> !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP
-<a name="l00213"></a>00213                 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root()) start_deterministic_reduce(range,&body) );
-<a name="l00214"></a>00214 <span class="preprocessor">#else</span>
-<a name="l00215"></a>00215 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
-<a name="l00216"></a>00216                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
-<a name="l00217"></a>00217                 task_group_context context;
-<a name="l00218"></a>00218                 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) start_deterministic_reduce(range,body) );
-<a name="l00219"></a>00219 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */</span>
-<a name="l00220"></a>00220             }
-<a name="l00221"></a>00221         }
-<a name="l00222"></a>00222 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00223"></a>00223 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, task_group_context& context ) {
-<a name="l00224"></a>00224             <span class="keywordflow">if</span>( !range.empty() ) 
-<a name="l00225"></a>00225                 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) start_deterministic_reduce(range,body) );
-<a name="l00226"></a>00226         }
-<a name="l00227"></a>00227 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00228"></a>00228     };
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00231"></a>00231     task* start_deterministic_reduce<Range,Body>::execute() {
-<a name="l00232"></a>00232         <span class="keywordflow">if</span>( !my_range.is_divisible() ) {
-<a name="l00233"></a>00233             my_body( my_range );
-<a name="l00234"></a>00234             <span class="keywordflow">return</span> NULL;
-<a name="l00235"></a>00235         } <span class="keywordflow">else</span> {
-<a name="l00236"></a>00236             finish_type& c = *<span class="keyword">new</span>( allocate_continuation() ) finish_type( my_body );
-<a name="l00237"></a>00237             recycle_as_child_of(c);
-<a name="l00238"></a>00238             c.set_ref_count(2);
-<a name="l00239"></a>00239             start_deterministic_reduce& b = *<span class="keyword">new</span>( c.allocate_child() ) start_deterministic_reduce( *<span class="keyword">this</span>, c );
-<a name="l00240"></a>00240             task::spawn(b);
-<a name="l00241"></a>00241             <span class="keywordflow">return</span> <span class="keyword">this</span>;
-<a name="l00242"></a>00242         }
-<a name="l00243"></a>00243     }
-<a name="l00244"></a>00244 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_DETERMINISTIC_REDUCE */</span>
-<a name="l00245"></a>00245 } <span class="comment">// namespace internal</span>
-<a name="l00247"></a>00247 <span class="comment"></span>} <span class="comment">//namespace interfaceX</span>
-<a name="l00248"></a>00248 
-<a name="l00250"></a>00250 <span class="keyword">namespace </span>internal {
-<a name="l00251"></a>00251     <span class="keyword">using</span> interface6::internal::start_reduce;
-<a name="l00252"></a>00252 <span class="preprocessor">#if TBB_PREVIEW_DETERMINISTIC_REDUCE</span>
-<a name="l00253"></a>00253 <span class="preprocessor"></span>    <span class="keyword">using</span> interface6::internal::start_deterministic_reduce;
-<a name="l00254"></a>00254 <span class="preprocessor">#endif</span>
-<a name="l00256"></a>00256 <span class="preprocessor"></span>
-<a name="l00260"></a>00260 <span class="preprocessor">    template<typename Range, typename Value, typename RealBody, typename Reduction></span>
-<a name="l00261"></a>00261 <span class="preprocessor"></span>    <span class="keyword">class </span>lambda_reduce_body {
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 <span class="comment">//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced</span>
-<a name="l00264"></a>00264 <span class="comment">//       (might require some performance measurements)</span>
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266         <span class="keyword">const</span> Value&     identity_element;
-<a name="l00267"></a>00267         <span class="keyword">const</span> RealBody&  my_real_body;
-<a name="l00268"></a>00268         <span class="keyword">const</span> Reduction& my_reduction;
-<a name="l00269"></a>00269         Value            my_value;
-<a name="l00270"></a>00270         lambda_reduce_body& operator= ( <span class="keyword">const</span> lambda_reduce_body& other );
-<a name="l00271"></a>00271     <span class="keyword">public</span>:
-<a name="l00272"></a>00272         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="l00273"></a>00273             : identity_element(identity)
-<a name="l00274"></a>00274             , my_real_body(body)
-<a name="l00275"></a>00275             , my_reduction(reduction)
-<a name="l00276"></a>00276             , my_value(identity)
-<a name="l00277"></a>00277         { }
-<a name="l00278"></a>00278         lambda_reduce_body( <span class="keyword">const</span> lambda_reduce_body& other )
-<a name="l00279"></a>00279             : identity_element(other.identity_element)
-<a name="l00280"></a>00280             , my_real_body(other.my_real_body)
-<a name="l00281"></a>00281             , my_reduction(other.my_reduction)
-<a name="l00282"></a>00282             , my_value(other.my_value)
-<a name="l00283"></a>00283         { }
-<a name="l00284"></a>00284         lambda_reduce_body( lambda_reduce_body& other, <a class="code" href="a00309.html">tbb::split</a> )
-<a name="l00285"></a>00285             : identity_element(other.identity_element)
-<a name="l00286"></a>00286             , my_real_body(other.my_real_body)
-<a name="l00287"></a>00287             , my_reduction(other.my_reduction)
-<a name="l00288"></a>00288             , my_value(other.identity_element)
-<a name="l00289"></a>00289         { }
-<a name="l00290"></a>00290         <span class="keywordtype">void</span> operator()(Range& range) {
-<a name="l00291"></a>00291             my_value = my_real_body(range, const_cast<const Value&>(my_value));
-<a name="l00292"></a>00292         }
-<a name="l00293"></a>00293         <span class="keywordtype">void</span> join( lambda_reduce_body& rhs ) {
-<a name="l00294"></a>00294             my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.my_value));
-<a name="l00295"></a>00295         }
-<a name="l00296"></a>00296         Value result()<span class="keyword"> const </span>{
-<a name="l00297"></a>00297             <span class="keywordflow">return</span> my_value;
-<a name="l00298"></a>00298         }
-<a name="l00299"></a>00299     };
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 } <span class="comment">// namespace internal</span>
-<a name="l00303"></a>00303 <span class="comment"></span>
-<a name="l00304"></a>00304 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
-<a name="l00305"></a>00305 
-<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="a00395.html#g1b3d59c5eb62683c5754db6970392fa3">00328</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body ) {
-<a name="l00329"></a>00329     internal::start_reduce<Range,Body, const __TBB_DEFAULT_PARTITIONER>::run( range, body, __TBB_DEFAULT_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="a00395.html#gec1b7c03f9da909bef5db12e3d41bed3">00335</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00303.html">simple_partitioner</a>& partitioner ) {
-<a name="l00336"></a>00336     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner );
-<a name="l00337"></a>00337 }
-<a name="l00338"></a>00338 
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00342"></a><a class="code" href="a00395.html#g18a19157e6245992fc00ca0adeb7dd37">00342</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00231.html">auto_partitioner</a>& partitioner ) {
-<a name="l00343"></a>00343     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner );
-<a name="l00344"></a>00344 }
-<a name="l00345"></a>00345 
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00349"></a><a class="code" href="a00395.html#gc61e73fcc36c92d79a217fc355ff4a6b">00349</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00225.html">affinity_partitioner</a>& partitioner ) {
-<a name="l00350"></a>00350     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner );
-<a name="l00351"></a>00351 }
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00355"></a>00355 <span class="preprocessor"></span>
-<a name="l00356"></a>00356 <span class="preprocessor">template<typename Range, typename Body></span>
-<a name="l00357"></a><a class="code" href="a00395.html#g45cb00c42a18e334bbde8b7535afe460">00357</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00395.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00303.html">simple_partitioner</a>& partitioner, <a class="code" href="a00314.html">task_group_cont [...]
-<a name="l00358"></a>00358     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner, context );
-<a name="l00359"></a>00359 }
-<a name="l00360"></a>00360 
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00364"></a><a class="code" href="a00395.html#g1c1ea1d7c61b3c225e92c70d669a53a5">00364</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00231.html">auto_partitioner</a>& partitioner, <a class="code" href="a00314.html">task_group_context</a>& context ) {
-<a name="l00365"></a>00365     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner, context );
-<a name="l00366"></a>00366 }
-<a name="l00367"></a>00367 
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00371"></a><a class="code" href="a00395.html#gd9ac3a3811060314695f33b703c6e11b">00371</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00225.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00314.html">task_group_context</a>& context ) {
-<a name="l00372"></a>00372     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner, context );
-<a name="l00373"></a>00373 }
-<a name="l00374"></a>00374 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00375"></a>00375 
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381 <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="l00382"></a><a class="code" href="a00395.html#gc9412e09fb01fcad8c018ea9cffb28ef">00382</a> Value <a class="code" href="a00395.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="l00383"></a>00383     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00384"></a>00384     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> __TBB_DEFAULT_PARTITIONER>
-<a name="l00385"></a>00385                           ::run(range, body, __TBB_DEFAULT_PARTITIONER() );
-<a name="l00386"></a>00386     <span class="keywordflow">return</span> body.result();
-<a name="l00387"></a>00387 }
-<a name="l00388"></a>00388 
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391 <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="l00392"></a><a class="code" href="a00395.html#gaddffeec0e892ac3d6fc7fc2053e1eca">00392</a> Value <a class="code" href="a00395.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="l00393"></a>00393                        <span class="keyword">const</span> <a class="code" href="a00303.html">simple_partitioner</a>& partitioner ) {
-<a name="l00394"></a>00394     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00395"></a>00395     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00303.html">simple_partitioner</a>>
-<a name="l00396"></a>00396                           ::run(range, body, partitioner );
-<a name="l00397"></a>00397     <span class="keywordflow">return</span> body.result();
-<a name="l00398"></a>00398 }
-<a name="l00399"></a>00399 
-<a name="l00401"></a>00401 
-<a name="l00402"></a>00402 <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="l00403"></a><a class="code" href="a00395.html#gb175401f0729e40dd2c5860a17c14385">00403</a> Value <a class="code" href="a00395.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="l00404"></a>00404                        <span class="keyword">const</span> <a class="code" href="a00231.html">auto_partitioner</a>& partitioner ) {
-<a name="l00405"></a>00405     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00406"></a>00406     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00231.html">auto_partitioner</a>>
-<a name="l00407"></a>00407                           ::run( range, body, partitioner );
-<a name="l00408"></a>00408     <span class="keywordflow">return</span> body.result();
-<a name="l00409"></a>00409 }
-<a name="l00410"></a>00410 
-<a name="l00412"></a>00412 
-<a name="l00413"></a>00413 <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="l00414"></a><a class="code" href="a00395.html#gb7f1f1828ae2b330ce05b8513a495154">00414</a> Value <a class="code" href="a00395.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="l00415"></a>00415                        <a class="code" href="a00225.html">affinity_partitioner</a>& partitioner ) {
-<a name="l00416"></a>00416     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00417"></a>00417     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00225.html">affinity_partitioner</a>>
-<a name="l00418"></a>00418                                         ::run( range, body, partitioner );
-<a name="l00419"></a>00419     <span class="keywordflow">return</span> body.result();
-<a name="l00420"></a>00420 }
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00424"></a>00424 <span class="preprocessor"></span>
-<a name="l00425"></a>00425 <span class="preprocessor">template<typename Range, typename Value, typename RealBody, typename Reduction></span>
-<a name="l00426"></a><a class="code" href="a00395.html#gfbc0cc2026d87f11a96bcd62788f5bb5">00426</a> <span class="preprocessor"></span>Value <a class="code" href="a00395.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="l00427"></a>00427                        <span class="keyword">const</span> <a class="code" href="a00303.html">simple_partitioner</a>& partitioner, <a class="code" href="a00314.html">task_group_context</a>& context ) {
-<a name="l00428"></a>00428     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00429"></a>00429     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00303.html">simple_partitioner</a>>
-<a name="l00430"></a>00430                           ::run( range, body, partitioner, context );
-<a name="l00431"></a>00431     <span class="keywordflow">return</span> body.result();
-<a name="l00432"></a>00432 }
-<a name="l00433"></a>00433 
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436 <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="l00437"></a><a class="code" href="a00395.html#g630c90a399937d9d4ae70ff883186dfd">00437</a> Value <a class="code" href="a00395.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="l00438"></a>00438                        <span class="keyword">const</span> <a class="code" href="a00231.html">auto_partitioner</a>& partitioner, <a class="code" href="a00314.html">task_group_context</a>& context ) {
-<a name="l00439"></a>00439     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00440"></a>00440     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00231.html">auto_partitioner</a>>
-<a name="l00441"></a>00441                           ::run( range, body, partitioner, context );
-<a name="l00442"></a>00442     <span class="keywordflow">return</span> body.result();
-<a name="l00443"></a>00443 }
-<a name="l00444"></a>00444 
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447 <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="l00448"></a><a class="code" href="a00395.html#g496bd7eadb3b97495ccb5655ef90319e">00448</a> Value <a class="code" href="a00395.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="l00449"></a>00449                        <a class="code" href="a00225.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00314.html">task_group_context</a>& context ) {
-<a name="l00450"></a>00450     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00451"></a>00451     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00225.html">affinity_partitioner</a>>
-<a name="l00452"></a>00452                                         ::run( range, body, partitioner, context );
-<a name="l00453"></a>00453     <span class="keywordflow">return</span> body.result();
-<a name="l00454"></a>00454 }
-<a name="l00455"></a>00455 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457 <span class="preprocessor">#if TBB_PREVIEW_DETERMINISTIC_REDUCE</span>
-<a name="l00459"></a>00459 <span class="preprocessor"></span>
-<a name="l00460"></a>00460 <span class="preprocessor">template<typename Range, typename Body></span>
-<a name="l00461"></a><a class="code" href="a00395.html#g873006cc80868b5b4604822bf100ddeb">00461</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00395.html#g873006cc80868b5b4604822bf100ddeb">parallel_deterministic_reduce</a>( <span class="keyword">const</span> Range& range, Body& body ) {
-<a name="l00462"></a>00462     internal::start_deterministic_reduce<Range,Body>::run( range, body );
-<a name="l00463"></a>00463 }
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00467"></a>00467 <span class="preprocessor"></span>
-<a name="l00468"></a>00468 <span class="preprocessor">template<typename Range, typename Body></span>
-<a name="l00469"></a><a class="code" href="a00395.html#gfd08c56b3a98d4437dadc5365326928a">00469</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00395.html#g873006cc80868b5b4604822bf100ddeb">parallel_deterministic_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00314.html">task_group_context</a>& context ) {
-<a name="l00470"></a>00470     internal::start_deterministic_reduce<Range,Body>::run( range, body, context );
-<a name="l00471"></a>00471 }
-<a name="l00472"></a>00472 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00473"></a>00473 
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479 <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="l00480"></a><a class="code" href="a00395.html#g3edb17bb1967c291d227556e0e47e507">00480</a> Value <a class="code" href="a00395.html#g873006cc80868b5b4604822bf100ddeb">parallel_deterministic_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="l00481"></a>00481     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00482"></a>00482     internal::start_deterministic_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction> >
-<a name="l00483"></a>00483                           ::run(range, body);
-<a name="l00484"></a>00484     <span class="keywordflow">return</span> body.result();
-<a name="l00485"></a>00485 }
-<a name="l00486"></a>00486 
-<a name="l00487"></a>00487 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00489"></a>00489 <span class="preprocessor"></span>
-<a name="l00490"></a>00490 <span class="preprocessor">template<typename Range, typename Value, typename RealBody, typename Reduction></span>
-<a name="l00491"></a><a class="code" href="a00395.html#g0a66bc67567b2d01d709b59b9bddf84a">00491</a> <span class="preprocessor"></span>Value <a class="code" href="a00395.html#g873006cc80868b5b4604822bf100ddeb">parallel_deterministic_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="l00492"></a>00492                        <a class="code" href="a00314.html">task_group_context</a>& context ) {
-<a name="l00493"></a>00493     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
-<a name="l00494"></a>00494     internal::start_deterministic_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction> >
-<a name="l00495"></a>00495                           ::run( range, body, context );
-<a name="l00496"></a>00496     <span class="keywordflow">return</span> body.result();
-<a name="l00497"></a>00497 }
-<a name="l00498"></a>00498 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00499"></a>00499 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_DETERMINISTIC_REDUCE */</span>
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501 
-<a name="l00502"></a>00502 } <span class="comment">// namespace tbb</span>
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_reduce_H */</span>
-<a name="l00505"></a>00505 
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00518.html b/doc/html/a00518.html
deleted file mode 100644
index b3be504..0000000
--- a/doc/html/a00518.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-2011 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="a00285.html">00033</a> <span class="keyword">struct </span><a class="code" href="a00285.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="a00258.html">00039</a> <span class="keyword">struct </span><a class="code" href="a00258.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="a00311.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="a00227.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="a00309.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="a00311.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="a00311.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="a00311.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="a00311.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="a00311.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="a00395.html#ged143f31dd3d96ded02ab3db915b91c7">00321</a> <span class="keywordtype">void</span> <a class="code" href="a00395.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="a00395.html#gc9fac8870b2e6365fb337014404529df">00328</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00303.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="a00395.html#g62fde400a37bbca1a2fddc8e3d22f556">00335</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00231.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-2011 Intel Corporation.  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/a00523.html b/doc/html/a00523.html
deleted file mode 100644
index 2d5cf5b..0000000
--- a/doc/html/a00523.html
+++ /dev/null
@@ -1,229 +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-2011 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="l00106"></a>00106 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span>
-<a name="l00109"></a>00109 <span class="preprocessor">template<typename RandomAccessIterator, typename Compare></span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="keyword">class </span>quick_sort_pretest_body : internal::no_assign {
-<a name="l00111"></a>00111     <span class="keyword">const</span> Compare &comp;
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 <span class="keyword">public</span>:
-<a name="l00114"></a>00114     quick_sort_pretest_body(<span class="keyword">const</span> Compare &_comp) : comp(_comp) {}
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> blocked_range<RandomAccessIterator>& range )<span class="keyword"> const </span>{
-<a name="l00117"></a>00117         task &my_task = <a class="code" href="a00311.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>();
-<a name="l00118"></a>00118         RandomAccessIterator my_end = range.end();
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120         <span class="keywordtype">int</span> i = 0;
-<a name="l00121"></a>00121         <span class="keywordflow">for</span> (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {
-<a name="l00122"></a>00122             <span class="keywordflow">if</span> ( i%64 == 0 && my_task.is_cancelled() ) <span class="keywordflow">break</span>;
-<a name="l00123"></a>00123           
-<a name="l00124"></a>00124             <span class="comment">// The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1</span>
-<a name="l00125"></a>00125             <span class="keywordflow">if</span> ( comp( *(k), *(k-1) ) ) {
-<a name="l00126"></a>00126                 my_task.cancel_group_execution();
-<a name="l00127"></a>00127                 <span class="keywordflow">break</span>;
-<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="l00133"></a>00133 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<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> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00138"></a>00138 <span class="keyword">struct </span>quick_sort_body {
-<a name="l00139"></a>00139     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> quick_sort_range<RandomAccessIterator,Compare>& range )<span class="keyword"> const </span>{
-<a name="l00140"></a>00140         <span class="comment">//SerialQuickSort( range.begin, range.size, range.comp );</span>
-<a name="l00141"></a>00141         std::sort( range.begin, range.begin + range.size, range.comp );
-<a name="l00142"></a>00142     }
-<a name="l00143"></a>00143 };
-<a name="l00144"></a>00144 
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00148"></a>00148 <span class="keywordtype">void</span> parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp ) {
-<a name="l00149"></a>00149 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00150"></a>00150 <span class="preprocessor"></span>    task_group_context my_context;
-<a name="l00151"></a>00151     <span class="keyword">const</span> <span class="keywordtype">int</span> serial_cutoff = 9;
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153     __TBB_ASSERT( begin + serial_cutoff < end, <span class="stringliteral">"min_parallel_size is smaller than serial cutoff?"</span> );
-<a name="l00154"></a>00154     RandomAccessIterator k;
-<a name="l00155"></a>00155     <span class="keywordflow">for</span> ( k = begin ; k != begin + serial_cutoff; ++k ) {
-<a name="l00156"></a>00156         <span class="keywordflow">if</span> ( comp( *(k+1), *k ) ) {
-<a name="l00157"></a>00157             <span class="keywordflow">goto</span> do_parallel_quick_sort;
-<a name="l00158"></a>00158         }
-<a name="l00159"></a>00159     }
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( blocked_range<RandomAccessIterator>(k+1, end),
-<a name="l00162"></a>00162                   quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),
-<a name="l00163"></a>00163                   auto_partitioner(),
-<a name="l00164"></a>00164                   my_context);
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     <span class="keywordflow">if</span> (my_context.is_group_execution_cancelled())
-<a name="l00167"></a>00167 do_parallel_quick_sort:
-<a name="l00168"></a>00168 #endif <span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00169"></a>00169         <a class="code" href="a00395.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), 
-<a name="l00170"></a>00170                       quick_sort_body<RandomAccessIterator,Compare>(),
-<a name="l00171"></a>00171                       auto_partitioner() );
-<a name="l00172"></a>00172 }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174 } <span class="comment">// namespace internal</span>
-<a name="l00176"></a>00176 <span class="comment"></span>
-<a name="l00187"></a>00187 
-<a name="l00189"></a>00189 
-<a name="l00192"></a>00192 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00193"></a><a class="code" href="a00395.html#g49edcf9447cd91a9527a3f8e8512b7aa">00193</a> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp) { 
-<a name="l00194"></a>00194     <span class="keyword">const</span> <span class="keywordtype">int</span> min_parallel_size = 500; 
-<a name="l00195"></a>00195     <span class="keywordflow">if</span>( end > begin ) {
-<a name="l00196"></a>00196         <span class="keywordflow">if</span> (end - begin < min_parallel_size) { 
-<a name="l00197"></a>00197             std::sort(begin, end, comp);
-<a name="l00198"></a>00198         } <span class="keywordflow">else</span> {
-<a name="l00199"></a>00199             internal::parallel_quick_sort(begin, end, comp);
-<a name="l00200"></a>00200         }
-<a name="l00201"></a>00201     }
-<a name="l00202"></a>00202 }
-<a name="l00203"></a>00203 
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator>
-<a name="l00207"></a><a class="code" href="a00395.html#g16c3eb77d0e530834c51ce3857f01012">00207</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end ) { 
-<a name="l00208"></a>00208     <a class="code" href="a00395.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< <span class="keyword">typename</span> std::iterator_traits<RandomAccessIterator>::value_type >() );
-<a name="l00209"></a>00209 }
-<a name="l00210"></a>00210 
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00214"></a><a class="code" href="a00395.html#gc7576f82fdedc8a701a6c17ad9415926">00214</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00395.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( T * begin, T * end ) {
-<a name="l00215"></a>00215     <a class="code" href="a00395.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< T >() );
-<a name="l00216"></a>00216 }   
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 } <span class="comment">// namespace tbb</span>
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222 <span class="preprocessor">#endif</span>
-<a name="l00223"></a>00223 <span class="preprocessor"></span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00524.html b/doc/html/a00524.html
new file mode 100644
index 0000000..f47438a
--- /dev/null
+++ b/doc/html/a00524.html
@@ -0,0 +1,269 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>memory_pool.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>memory_pool.h</h1><a href="a00373.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-2012 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_memory_pool_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_memory_pool_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#if !TBB_PREVIEW_MEMORY_POOL</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#error Set TBB_PREVIEW_MEMORY_POOL to include memory_pool.h</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="l00029"></a>00029 <span class="preprocessor">#include "<a class="code" href="a00392.html">scalable_allocator.h</a>"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "tbb_machine.h"</span> <span class="comment">// TODO: avoid linkage with libtbb on IA-64</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include <new></span> <span class="comment">// std::bad_alloc</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#if __TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_CPP11_STD_FORWARD_BROKEN</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#include <utility></span> <span class="comment">// std::forward</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#endif</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>
+<a name="l00037"></a>00037 <span class="preprocessor">#if __TBB_EXTRA_DEBUG</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define __TBBMALLOC_ASSERT ASSERT</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define __TBBMALLOC_ASSERT(a,b) ((void)0)</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>
+<a name="l00043"></a>00043 <span class="keyword">namespace </span>tbb {
+<a name="l00044"></a>00044 <span class="keyword">namespace </span>interface6 {
+<a name="l00046"></a>00046 <span class="keyword">namespace </span>internal {
+<a name="l00047"></a>00047 
+<a name="l00049"></a>00049 <span class="keyword">class </span>pool_base : tbb::internal::no_copy {
+<a name="l00050"></a>00050     <span class="comment">// Pool interface is separate from standard allocator classes because it has</span>
+<a name="l00051"></a>00051     <span class="comment">// to maintain internal state, no copy or assignment. Move and swap are possible.</span>
+<a name="l00052"></a>00052 <span class="keyword">public</span>:
+<a name="l00054"></a>00054     <span class="keywordtype">void</span> recycle() { rml::pool_reset(my_pool); }
+<a name="l00055"></a>00055 
+<a name="l00057"></a>00057     <span class="keywordtype">void</span> *malloc(size_t size) { <span class="keywordflow">return</span> rml::pool_malloc(my_pool, size); }
+<a name="l00058"></a>00058 
+<a name="l00060"></a>00060     <span class="keywordtype">void</span> free(<span class="keywordtype">void</span>* ptr) { rml::pool_free(my_pool, ptr); }
+<a name="l00061"></a>00061 
+<a name="l00063"></a>00063     <span class="comment">// Enables some low-level optimization possibilities</span>
+<a name="l00064"></a>00064     <span class="keywordtype">void</span> *realloc(<span class="keywordtype">void</span>* ptr, size_t size) {
+<a name="l00065"></a>00065         <span class="keywordflow">return</span> rml::pool_realloc(my_pool, ptr, size);
+<a name="l00066"></a>00066     }
+<a name="l00067"></a>00067 
+<a name="l00068"></a>00068 <span class="keyword">protected</span>:
+<a name="l00070"></a>00070     <span class="keywordtype">void</span> destroy() { rml::pool_destroy(my_pool); }
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072     rml::MemoryPool *my_pool;
+<a name="l00073"></a>00073 };
+<a name="l00074"></a>00074 
+<a name="l00075"></a>00075 } <span class="comment">// namespace internal</span>
+<a name="l00077"></a>00077 <span class="comment"></span>
+<a name="l00078"></a>00078 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
+<a name="l00080"></a>00080 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>
+<a name="l00085"></a>00085 
+<a name="l00086"></a>00086 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> P = <span class="keywordtype">int</span>ernal::pool_base>
+<a name="l00087"></a><a class="code" href="a00296.html">00087</a> <span class="keyword">class </span><a class="code" href="a00296.html">memory_pool_allocator</a> {
+<a name="l00088"></a>00088 <span class="keyword">protected</span>:
+<a name="l00089"></a>00089     <span class="keyword">typedef</span> P pool_type;
+<a name="l00090"></a>00090     pool_type *my_pool;
+<a name="l00091"></a>00091     <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
+<a name="l00092"></a>00092     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00296.html">memory_pool_allocator</a>;
+<a name="l00093"></a>00093     <span class="keyword">template</span><<span class="keyword">typename</span> V, <span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
+<a name="l00094"></a>00094     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<V,R></a>& a, <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<U,R></a>& b);
+<a name="l00095"></a>00095     <span class="keyword">template</span><<span class="keyword">typename</span> V, <span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
+<a name="l00096"></a>00096     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<V,R></a>& a, <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<U,R></a>& b);
+<a name="l00097"></a>00097 <span class="keyword">public</span>:
+<a name="l00098"></a>00098     <span class="keyword">typedef</span> <span class="keyword">typename</span> tbb::internal::allocator_type<T>::value_type value_type;
+<a name="l00099"></a>00099     <span class="keyword">typedef</span> value_type* pointer;
+<a name="l00100"></a>00100     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
+<a name="l00101"></a>00101     <span class="keyword">typedef</span> value_type& reference;
+<a name="l00102"></a>00102     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference;
+<a name="l00103"></a>00103     <span class="keyword">typedef</span> size_t size_type;
+<a name="l00104"></a>00104     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00105"></a>00105     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
+<a name="l00106"></a>00106         <span class="keyword">typedef</span> <a class="code" href="a00296.html">memory_pool_allocator<U, P></a> other;
+<a name="l00107"></a>00107     };
+<a name="l00108"></a>00108 
+<a name="l00109"></a>00109     <a class="code" href="a00296.html">memory_pool_allocator</a>(pool_type &pool) <span class="keywordflow">throw</span>() : my_pool(&pool) {}
+<a name="l00110"></a>00110     <a class="code" href="a00296.html">memory_pool_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator</a>& src) <span class="keywordflow">throw</span>() : my_pool(src.<a class="code" href="a00296.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>) {}
+<a name="l00111"></a>00111     <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00112"></a>00112     <a class="code" href="a00296.html">memory_pool_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<U,P></a>& src) <span class="keywordflow">throw</span>() : my_pool(src.<a class="code" href="a00296.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>) {}
+<a name="l00113"></a>00113 
+<a name="l00114"></a>00114     pointer address(reference x)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &x; }
+<a name="l00115"></a>00115     const_pointer address(const_reference x)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &x; }
+<a name="l00116"></a>00116     
+<a name="l00118"></a><a class="code" href="a00296.html#365bd64d284c80d85bb2149a12681526">00118</a>     pointer <a class="code" href="a00296.html#365bd64d284c80d85bb2149a12681526">allocate</a>( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> = 0) {
+<a name="l00119"></a>00119         <span class="keywordflow">return</span> static_cast<pointer>( my_pool->malloc( n*<span class="keyword">sizeof</span>(value_type) ) );
+<a name="l00120"></a>00120     }
+<a name="l00122"></a><a class="code" href="a00296.html#4e24a03de38638af07548383024c54ab">00122</a>     <span class="keywordtype">void</span> <a class="code" href="a00296.html#4e24a03de38638af07548383024c54ab">deallocate</a>( pointer p, size_type ) {
+<a name="l00123"></a>00123         my_pool->free(p);
+<a name="l00124"></a>00124     }
+<a name="l00126"></a><a class="code" href="a00296.html#beebdb6144df8ba219fadfad4de866ea">00126</a>     size_type <a class="code" href="a00296.html#beebdb6144df8ba219fadfad4de866ea">max_size</a>() const throw() {
+<a name="l00127"></a>00127         size_type max = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (value_type);
+<a name="l00128"></a>00128         <span class="keywordflow">return</span> (max > 0 ? max : 1);
+<a name="l00129"></a>00129     }
+<a name="l00131"></a>00131 <span class="preprocessor">#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00132"></a>00132 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span>... Args>
+<a name="l00133"></a><a class="code" href="a00296.html#3491a81e0597c1696a163e7c8fa8706a">00133</a>     <span class="keywordtype">void</span> <a class="code" href="a00296.html#3491a81e0597c1696a163e7c8fa8706a">construct</a>(pointer p, Args&&... args)
+<a name="l00134"></a>00134  <span class="preprocessor">#if __TBB_CPP11_STD_FORWARD_BROKEN</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span>        { ::new((<span class="keywordtype">void</span> *)p) T((args)...); }
+<a name="l00136"></a>00136 <span class="preprocessor"> #else</span>
+<a name="l00137"></a>00137 <span class="preprocessor"></span>        { ::new((<span class="keywordtype">void</span> *)p) T(std::forward<Args>(args)...); }
+<a name="l00138"></a>00138  <span class="preprocessor">#endif</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">#else // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span>    <span class="keywordtype">void</span> <a class="code" href="a00296.html#3491a81e0597c1696a163e7c8fa8706a">construct</a>( pointer p, <span class="keyword">const</span> value_type& value ) { ::new((<span class="keywordtype">void</span>*)(p)) value_type(value); }
+<a name="l00141"></a>00141 <span class="preprocessor">#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span>
+<a name="l00144"></a>00144     <span class="keywordtype">void</span> destroy( pointer p ) { p->~value_type(); }
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146 };
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00149"></a>00149 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span>
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154 <span class="keyword">template</span><<span class="keyword">typename</span> P> 
+<a name="l00155"></a><a class="code" href="a00297.html">00155</a> <span class="keyword">class </span><a class="code" href="a00296.html">memory_pool_allocator</a><void, P> {
+<a name="l00156"></a>00156 <span class="keyword">public</span>:
+<a name="l00157"></a>00157     <span class="keyword">typedef</span> P pool_type;
+<a name="l00158"></a>00158     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
+<a name="l00159"></a>00159     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
+<a name="l00160"></a>00160     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
+<a name="l00161"></a>00161     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
+<a name="l00162"></a>00162         <span class="keyword">typedef</span> <a class="code" href="a00296.html">memory_pool_allocator<U, P></a> other;
+<a name="l00163"></a>00163     };
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165     <a class="code" href="a00296.html">memory_pool_allocator</a>( pool_type &pool) <span class="keywordflow">throw</span>() : my_pool(&pool) {}
+<a name="l00166"></a>00166     <a class="code" href="a00296.html">memory_pool_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator</a>& src) <span class="keywordflow">throw</span>() : my_pool(src.<a class="code" href="a00296.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>) {}
+<a name="l00167"></a>00167     <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00168"></a>00168     <a class="code" href="a00296.html">memory_pool_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<U,P></a>& src) <span class="keywordflow">throw</span>() : my_pool(src.<a class="code" href="a00296.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>) {}
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170 <span class="keyword">protected</span>:
+<a name="l00171"></a>00171     pool_type *my_pool;
+<a name="l00172"></a>00172     <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
+<a name="l00173"></a>00173     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00296.html">memory_pool_allocator</a>;
+<a name="l00174"></a>00174     <span class="keyword">template</span><<span class="keyword">typename</span> V, <span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
+<a name="l00175"></a>00175     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<V,R></a>& a, <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<U,R></a>& b);
+<a name="l00176"></a>00176     <span class="keyword">template</span><<span class="keyword">typename</span> V, <span class="keyword">typename</span> U, <span class="keyword">typename</span> R>
+<a name="l00177"></a>00177     <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<V,R></a>& a, <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<U,R></a>& b);
+<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> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> P>
+<a name="l00181"></a>00181 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<T,P></a>& a, <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<U,P></a>& b) {<span class="keywordflow">return</span> a.<a class="code" href="a00296.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>==b.<a class="code" href="a [...]
+<a name="l00182"></a>00182 
+<a name="l00183"></a>00183 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> P>
+<a name="l00184"></a>00184 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<T,P></a>& a, <span class="keyword">const</span> <a class="code" href="a00296.html">memory_pool_allocator<U,P></a>& b) {<span class="keywordflow">return</span> a.<a class="code" href="a00296.html#9f22e947018eb99cde5f44ee3d339499">my_pool</a>!=b.<a class="code" href="a [...]
+<a name="l00185"></a>00185 
+<a name="l00186"></a>00186 
+<a name="l00188"></a>00188 <span class="keyword">template</span> <<span class="keyword">typename</span> Alloc>
+<a name="l00189"></a><a class="code" href="a00295.html">00189</a> <span class="keyword">class </span><a class="code" href="a00295.html">memory_pool</a> : <span class="keyword">public</span> internal::pool_base {
+<a name="l00190"></a>00190     Alloc my_alloc; <span class="comment">// TODO: base-class optimization</span>
+<a name="l00191"></a>00191     <span class="keyword">static</span> <span class="keywordtype">void</span> *allocate_request(intptr_t pool_id, size_t & bytes);
+<a name="l00192"></a>00192     <span class="keyword">static</span> <span class="keywordtype">int</span> deallocate_request(intptr_t pool_id, <span class="keywordtype">void</span>*, size_t raw_bytes);
+<a name="l00193"></a>00193 
+<a name="l00194"></a>00194 <span class="keyword">public</span>:
+<a name="l00196"></a>00196     <a class="code" href="a00295.html">memory_pool</a>(<span class="keyword">const</span> Alloc &src = Alloc());
+<a name="l00197"></a>00197 
+<a name="l00199"></a><a class="code" href="a00295.html#fdad7c4ed08332ec384491a71b721957">00199</a>     ~<a class="code" href="a00295.html">memory_pool</a>() { destroy(); } <span class="comment">// call the callbacks first and destroy my_alloc latter</span>
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201 };
+<a name="l00202"></a>00202 
+<a name="l00203"></a>00203 <span class="keyword">class </span>fixed_pool : <span class="keyword">public</span> internal::pool_base {
+<a name="l00204"></a>00204     <span class="keywordtype">void</span> *my_buffer;
+<a name="l00205"></a>00205     size_t my_size;
+<a name="l00206"></a>00206     <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> *allocate_request(intptr_t pool_id, size_t & bytes);
+<a name="l00207"></a>00207 
+<a name="l00208"></a>00208 <span class="keyword">public</span>:
+<a name="l00210"></a>00210     <span class="keyword">inline</span> fixed_pool(<span class="keywordtype">void</span> *buf, size_t size);
+<a name="l00212"></a>00212     ~fixed_pool() { destroy(); }
+<a name="l00213"></a>00213 };
+<a name="l00214"></a>00214 
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217 <span class="keyword">template</span> <<span class="keyword">typename</span> Alloc>
+<a name="l00218"></a><a class="code" href="a00295.html#2822528265718a4c779591fc37c02ca8">00218</a> <a class="code" href="a00295.html">memory_pool<Alloc>::memory_pool</a>(<span class="keyword">const</span> Alloc &src) : my_alloc(src) {
+<a name="l00219"></a>00219     rml::MemPoolPolicy args(allocate_request, deallocate_request,
+<a name="l00220"></a>00220                             <span class="keyword">sizeof</span>(<span class="keyword">typename</span> Alloc::value_type));
+<a name="l00221"></a>00221     rml::MemPoolError res = rml::pool_create_v1(intptr_t(<span class="keyword">this</span>), &args, &my_pool);
+<a name="l00222"></a>00222     <span class="keywordflow">if</span>( res!=rml::POOL_OK ) __TBB_THROW(std::bad_alloc());
+<a name="l00223"></a>00223 }
+<a name="l00224"></a>00224 <span class="keyword">template</span> <<span class="keyword">typename</span> Alloc>
+<a name="l00225"></a>00225 <span class="keywordtype">void</span> *<a class="code" href="a00295.html">memory_pool<Alloc>::allocate_request</a>(intptr_t pool_id, size_t & bytes) {
+<a name="l00226"></a>00226     <a class="code" href="a00295.html">memory_pool<Alloc></a> &<span class="keyword">self</span> = *reinterpret_cast<memory_pool<Alloc>*>(pool_id);
+<a name="l00227"></a>00227     <span class="keyword">const</span> size_t unit_size = <span class="keyword">sizeof</span>(<span class="keyword">typename</span> Alloc::value_type);
+<a name="l00228"></a>00228     __TBBMALLOC_ASSERT( 0 == bytes%unit_size, NULL);
+<a name="l00229"></a>00229     <span class="keywordtype">void</span> *ptr;
+<a name="l00230"></a>00230     __TBB_TRY { ptr = <span class="keyword">self</span>.my_alloc.allocate( bytes/unit_size ); }
+<a name="l00231"></a>00231     __TBB_CATCH(...) { <span class="keywordflow">return</span> 0; }
+<a name="l00232"></a>00232     <span class="keywordflow">return</span> ptr;
+<a name="l00233"></a>00233 }
+<a name="l00234"></a>00234 <span class="keyword">template</span> <<span class="keyword">typename</span> Alloc>
+<a name="l00235"></a>00235 <span class="keywordtype">int</span> memory_pool<Alloc>::deallocate_request(intptr_t pool_id, <span class="keywordtype">void</span>* raw_ptr, size_t raw_bytes) {
+<a name="l00236"></a>00236     memory_pool<Alloc> &<span class="keyword">self</span> = *reinterpret_cast<memory_pool<Alloc>*>(pool_id);
+<a name="l00237"></a>00237     <span class="keyword">const</span> size_t unit_size = <span class="keyword">sizeof</span>(<span class="keyword">typename</span> Alloc::value_type);
+<a name="l00238"></a>00238     __TBBMALLOC_ASSERT( 0 == raw_bytes%unit_size, NULL);
+<a name="l00239"></a>00239     <span class="keyword">self</span>.my_alloc.deallocate( static_cast<typename Alloc::value_type*>(raw_ptr), raw_bytes/unit_size );
+<a name="l00240"></a>00240     <span class="keywordflow">return</span> 0;
+<a name="l00241"></a>00241 }
+<a name="l00242"></a>00242 <span class="keyword">inline</span> fixed_pool::fixed_pool(<span class="keywordtype">void</span> *buf, size_t size) : my_buffer(buf), my_size(size) {
+<a name="l00243"></a>00243     rml::MemPoolPolicy args(allocate_request, 0, size, <span class="comment">/*fixedPool=*/</span><span class="keyword">true</span>);
+<a name="l00244"></a>00244     rml::MemPoolError res = rml::pool_create_v1(intptr_t(<span class="keyword">this</span>), &args, &my_pool);
+<a name="l00245"></a>00245     <span class="keywordflow">if</span>( res!=rml::POOL_OK ) __TBB_THROW(std::bad_alloc());
+<a name="l00246"></a>00246 }
+<a name="l00247"></a>00247 <span class="keyword">inline</span> <span class="keywordtype">void</span> *fixed_pool::allocate_request(intptr_t pool_id, size_t & bytes) {
+<a name="l00248"></a>00248     fixed_pool &<span class="keyword">self</span> = *reinterpret_cast<fixed_pool*>(pool_id);
+<a name="l00249"></a>00249     <span class="keywordflow">if</span>( !__TBB_CompareAndSwapW(&<span class="keyword">self</span>.my_size, 0, (bytes=<span class="keyword">self</span>.my_size)) )
+<a name="l00250"></a>00250         <span class="keywordflow">return</span> 0; <span class="comment">// all the memory was given already</span>
+<a name="l00251"></a>00251     <span class="keywordflow">return</span> <span class="keyword">self</span>.my_buffer;
+<a name="l00252"></a>00252 }
+<a name="l00253"></a>00253 
+<a name="l00254"></a>00254 } <span class="comment">//namespace interface6</span>
+<a name="l00255"></a>00255 <span class="keyword">using</span> interface6::memory_pool_allocator;
+<a name="l00256"></a>00256 <span class="keyword">using</span> interface6::memory_pool;
+<a name="l00257"></a>00257 <span class="keyword">using</span> interface6::fixed_pool;
+<a name="l00258"></a>00258 } <span class="comment">//namespace tbb</span>
+<a name="l00259"></a>00259 
+<a name="l00260"></a>00260 <span class="preprocessor">#undef __TBBMALLOC_ASSERT</span>
+<a name="l00261"></a>00261 <span class="preprocessor"></span><span class="preprocessor">#endif// __TBB_memory_pool_H</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00527.html b/doc/html/a00527.html
deleted file mode 100644
index c55ab0f..0000000
--- a/doc/html/a00527.html
+++ /dev/null
@@ -1,196 +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_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>
-<!-- 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_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-2011 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_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="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="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="a00282.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="a00282.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="a00282.html">00129</a> <span class="keyword">class </span><a class="code" href="a00282.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="a00282.html#36e26ba3880c7bcf804a97ba0cbe133f">00132</a>     <a class="code" href="a00282.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>() : my_body(NULL), my_barrier(NULL) {}
-<a name="l00133"></a>00133 
-<a name="l00135"></a><a class="code" href="a00282.html#6fcfc973cc56b79c6d0fbb8a31be7e84">00135</a>     <a class="code" href="a00282.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="a00311.html#dfaacf92685e5f86393bf657b2853bf8">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="a00282.html#fa297e53d3af2a101e712bc200233e9c">00143</a>     <span class="keyword">typedef</span> <span class="keyword">typename</span> Body::argument_type <a class="code" href="a00282.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="a00282.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="a00282.html#e131c560057a58229992b61eb8dba4c6">add</a>( <span class="keyword">const</span> <a class="code" href="a00282.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="a00254.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="a00282.html#b32a0a6e5e09ebb7fad3e6652c19afe5">00163</a> <span class="keywordtype">void</span> <a class="code" href="a00282.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="a00254.html">empty_task</a>& barrier = *<span class="keyword">new</span>( <a class="code" href="a00311.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>() ) <a class="code" href="a00254.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="a00311.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="a00311.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>() ) while_task<Stream,Body>( stream, body, barrier );
-<a name="l00170"></a>00170     my_barrier-><a class="code" href="a00311.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(w);
-<a name="l00171"></a>00171     my_barrier-><a class="code" href="a00311.html#dfaacf92685e5f86393bf657b2853bf8">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="a00282.html#e131c560057a58229992b61eb8dba4c6">00177</a> <span class="keywordtype">void</span> <a class="code" href="a00282.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>( task::allocate_additional_child_of(*my_barrier) ) iteration_type(item,*my_body);
-<a name="l00181"></a>00181     <a class="code" href="a00311.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().spawn( 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-2011 Intel Corporation.  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/a00531.html b/doc/html/a00531.html
index a62ae53..b2f9e79 100644
--- a/doc/html/a00531.html
+++ b/doc/html/a00531.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>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>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-2011 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-2012 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,459 +39,199 @@
 <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_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">#ifndef __TBB_INITIAL_CHUNKS</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_INITIAL_CHUNKS 2</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_RANGE_POOL_CAPACITY</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_RANGE_POOL_CAPACITY 8</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_INIT_DEPTH</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_INIT_DEPTH 5</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "task.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warnings </span>
-<a name="l00040"></a>00040 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4244)</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 <span class="keyword">namespace </span>tbb {
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="keyword">class </span>auto_partitioner;
-<a name="l00047"></a>00047 <span class="keyword">class </span>simple_partitioner;
-<a name="l00048"></a>00048 <span class="keyword">class </span>affinity_partitioner;
-<a name="l00049"></a>00049 <span class="keyword">namespace </span>interface6 {
-<a name="l00050"></a>00050     <span class="keyword">namespace </span>internal {
-<a name="l00051"></a>00051         <span class="keyword">class </span>affinity_partition_type;
-<a name="l00052"></a>00052     }
-<a name="l00053"></a>00053 }
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="keyword">namespace </span>internal {
-<a name="l00056"></a>00056 size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();
-<a name="l00057"></a>00057 
-<a name="l00059"></a><a class="code" href="a00226.html">00059</a> <span class="keyword">class </span><a class="code" href="a00226.html">affinity_partitioner_base_v3</a>: no_copy {
-<a name="l00060"></a>00060     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00225.html">tbb::affinity_partitioner</a>;
-<a name="l00061"></a>00061     <span class="keyword">friend</span> <span class="keyword">class </span>tbb::interface6::internal::affinity_partition_type;
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064     affinity_id* my_array;
-<a name="l00066"></a>00066     size_t my_size;
-<a name="l00068"></a>00068     <a class="code" href="a00226.html">affinity_partitioner_base_v3</a>() : my_array(NULL), my_size(0) {}
-<a name="l00070"></a>00070     ~<a class="code" href="a00226.html">affinity_partitioner_base_v3</a>() {resize(0);}
+<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 "machine/windows_api.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">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="preprocessor">#include <new></span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="keyword">namespace </span>tbb {
+<a name="l00036"></a>00036 
+<a name="l00038"></a>00038 
+<a name="l00040"></a><a class="code" href="a00301.html">00040</a> <span class="keyword">class </span><a class="code" href="a00301.html">mutex</a> {
+<a name="l00041"></a>00041 <span class="keyword">public</span>:
+<a name="l00043"></a><a class="code" href="a00301.html#05313cb77d4f85213103d4dab74ed454">00043</a>     <a class="code" href="a00301.html#05313cb77d4f85213103d4dab74ed454">mutex</a>() {
+<a name="l00044"></a>00044 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span>    internal_construct();
+<a name="l00046"></a>00046 <span class="preprocessor">#else</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>        InitializeCriticalSection(&impl);
+<a name="l00049"></a>00049 <span class="preprocessor">  #else</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>        <span class="keywordtype">int</span> error_code = pthread_mutex_init(&impl,NULL);
+<a name="l00051"></a>00051         <span class="keywordflow">if</span>( error_code )
+<a name="l00052"></a>00052             tbb::internal::handle_perror(error_code,<span class="stringliteral">"mutex: pthread_mutex_init failed"</span>);
+<a name="l00053"></a>00053 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
+<a name="l00054"></a>00054 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00055"></a>00055     };
+<a name="l00056"></a>00056 
+<a name="l00057"></a>00057     ~<a class="code" href="a00301.html">mutex</a>() {
+<a name="l00058"></a>00058 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span>        internal_destroy();
+<a name="l00060"></a>00060 <span class="preprocessor">#else</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>        DeleteCriticalSection(&impl);
+<a name="l00063"></a>00063 <span class="preprocessor">  #else</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span>        pthread_mutex_destroy(&impl); 
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00067"></a>00067 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00068"></a>00068     };
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070     <span class="keyword">class </span>scoped_lock;
+<a name="l00071"></a>00071     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
 <a name="l00072"></a>00072 
-<a name="l00073"></a>00073     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD resize( <span class="keywordtype">unsigned</span> factor );
-<a name="l00074"></a>00074 };
-<a name="l00075"></a>00075 
-<a name="l00077"></a><a class="code" href="a00283.html">00077</a> <span class="keyword">class </span><a class="code" href="a00283.html">partition_type_base</a> {
-<a name="l00078"></a>00078 <span class="keyword">public</span>:
-<a name="l00079"></a>00079     <span class="keywordtype">void</span> set_affinity( <a class="code" href="a00311.html">task</a> & ) {}
-<a name="l00080"></a>00080     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00311.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> ) {}
-<a name="l00081"></a>00081     <a class="code" href="a00311.html">task</a>* continue_after_execute_range() {<span class="keywordflow">return</span> NULL;}
-<a name="l00082"></a>00082     <span class="keywordtype">bool</span> decide_whether_to_delay() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-<a name="l00083"></a>00083     <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span>, <a class="code" href="a00311.html">task</a>& b ) {
-<a name="l00084"></a>00084         task::spawn(b);
-<a name="l00085"></a>00085     }
-<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> <span class="keyword">class </span>start_scan;
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 } <span class="comment">// namespace internal</span>
-<a name="l00092"></a>00092 <span class="comment"></span>
-<a name="l00093"></a>00093 <span class="keyword">namespace </span>serial {
-<a name="l00094"></a>00094 <span class="keyword">namespace </span>interface6 {
-<a name="l00095"></a>00095 <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="l00096"></a>00096 }
-<a name="l00097"></a>00097 }
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 <span class="keyword">namespace </span>interface6 {
-<a name="l00101"></a>00101 <span class="keyword">namespace </span>internal {
-<a name="l00102"></a>00102 <span class="keyword">using namespace </span>tbb::internal;
-<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">class </span>start_for;
-<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">class </span>start_reduce;
-<a name="l00105"></a>00105 
-<a name="l00107"></a>00107 <span class="keyword">class </span>flag_task: <span class="keyword">public</span> task {
-<a name="l00108"></a>00108 <span class="keyword">public</span>:
-<a name="l00109"></a>00109     <a class="code" href="a00228.html">tbb::atomic<bool></a> child_stolen;
-<a name="l00110"></a>00110     flag_task() { child_stolen = <span class="keyword">false</span>; }
-<a name="l00111"></a>00111     task* execute() { <span class="keywordflow">return</span> NULL; }
-<a name="l00112"></a>00112 };
+<a name="l00074"></a>00074 
+<a name="l00076"></a><a class="code" href="a00302.html">00076</a>     <span class="keyword">class </span><a class="code" href="a00302.html">scoped_lock</a> : internal::no_copy {
+<a name="l00077"></a>00077     <span class="keyword">public</span>:
+<a name="l00079"></a><a class="code" href="a00302.html#1d403ae51b484df5d86d85ae38f11e6e">00079</a>         <a class="code" href="a00302.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>() : my_mutex(NULL) {};
+<a name="l00080"></a>00080 
+<a name="l00082"></a><a class="code" href="a00302.html#605a6b9af0f8cdabdf81825e0de99600">00082</a>         <a class="code" href="a00302.html#1d403ae51b484df5d86d85ae38f11e6e">scoped_lock</a>( <a class="code" href="a00301.html">mutex</a>& <a class="code" href="a00301.html">mutex</a> ) {
+<a name="l00083"></a>00083             <a class="code" href="a00302.html#862e022841cdc522e4296a5533b22efd">acquire</a>( mutex );
+<a name="l00084"></a>00084         }
+<a name="l00085"></a>00085 
+<a name="l00087"></a><a class="code" href="a00302.html#0ebbbecaf4311e9df7362cb76ceaa368">00087</a>         <a class="code" href="a00302.html#0ebbbecaf4311e9df7362cb76ceaa368">~scoped_lock</a>() {
+<a name="l00088"></a>00088             <span class="keywordflow">if</span>( my_mutex ) 
+<a name="l00089"></a>00089                 <a class="code" href="a00302.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>();
+<a name="l00090"></a>00090         }
+<a name="l00091"></a>00091 
+<a name="l00093"></a><a class="code" href="a00302.html#862e022841cdc522e4296a5533b22efd">00093</a>         <span class="keywordtype">void</span> <a class="code" href="a00302.html#862e022841cdc522e4296a5533b22efd">acquire</a>( <a class="code" href="a00301.html">mutex</a>& <a class="code" href="a00301.html">mutex</a> ) {
+<a name="l00094"></a>00094 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00095"></a>00095 <span class="preprocessor"></span>            internal_acquire(mutex);
+<a name="l00096"></a>00096 <span class="preprocessor">#else</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span>            mutex.<a class="code" href="a00301.html#4470e61c24c129a0299ca6c17240adbb">lock</a>();
+<a name="l00098"></a>00098             my_mutex = &mutex;
+<a name="l00099"></a>00099 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00100"></a>00100         }
+<a name="l00101"></a>00101 
+<a name="l00103"></a><a class="code" href="a00302.html#591e0c49b82bcedffcbe0923f1b915ec">00103</a>         <span class="keywordtype">bool</span> <a class="code" href="a00302.html#591e0c49b82bcedffcbe0923f1b915ec">try_acquire</a>( <a class="code" href="a00301.html">mutex</a>& <a class="code" href="a00301.html">mutex</a> ) {
+<a name="l00104"></a>00104 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire (mutex);
+<a name="l00106"></a>00106 <span class="preprocessor">#else</span>
+<a name="l00107"></a>00107 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00301.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>();
+<a name="l00108"></a>00108             <span class="keywordflow">if</span>( result )
+<a name="l00109"></a>00109                 my_mutex = &mutex;
+<a name="l00110"></a>00110             <span class="keywordflow">return</span> result;
+<a name="l00111"></a>00111 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00112"></a>00112         }
 <a name="l00113"></a>00113 
-<a name="l00115"></a>00115 <span class="keyword">class </span>signal_task: <span class="keyword">public</span> task {
-<a name="l00116"></a>00116 <span class="keyword">public</span>:
-<a name="l00117"></a>00117     task* execute() {
-<a name="l00118"></a>00118         <span class="keywordflow">if</span>( is_stolen_task() ) {
-<a name="l00119"></a>00119             static_cast<flag_task*>(parent())->child_stolen = <span class="keyword">true</span>;
-<a name="l00120"></a>00120         }
-<a name="l00121"></a>00121         <span class="keywordflow">return</span> NULL;
-<a name="l00122"></a>00122     }
-<a name="l00123"></a>00123 };
-<a name="l00124"></a>00124 
-<a name="l00128"></a>00128 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> depth_t;
-<a name="l00129"></a>00129 
-<a name="l00131"></a>00131 <span class="keyword">template</span> <<span class="keyword">typename</span> T, depth_t MaxCapacity>
-<a name="l00132"></a>00132 <span class="keyword">class </span>range_vector {
-<a name="l00133"></a>00133     depth_t my_head;
-<a name="l00134"></a>00134     depth_t my_tail;
-<a name="l00135"></a>00135     depth_t my_size;
-<a name="l00136"></a>00136     depth_t my_depth[MaxCapacity]; <span class="comment">// relative depths of stored ranges</span>
-<a name="l00137"></a>00137     <a class="code" href="a00227.html">tbb::aligned_space<T, MaxCapacity></a> my_pool;
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 <span class="keyword">public</span>:
-<a name="l00141"></a>00141     range_vector(<span class="keyword">const</span> T& elem) : my_head(0), my_tail(0), my_size(1) {
-<a name="l00142"></a>00142         my_depth[0] = 0;
-<a name="l00143"></a>00143         <span class="keyword">new</span>( my_pool.begin() ) T(elem);<span class="comment">//TODO: std::move?</span>
-<a name="l00144"></a>00144     }
-<a name="l00145"></a>00145     ~range_vector() {
-<a name="l00146"></a>00146         <span class="keywordflow">while</span>( !empty() ) pop_back();
-<a name="l00147"></a>00147     }
-<a name="l00148"></a>00148     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size == 0; }
-<a name="l00149"></a>00149     depth_t size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size; }
-<a name="l00152"></a>00152     <span class="keywordtype">void</span> split_to_fill(depth_t max_depth) {
-<a name="l00153"></a>00153         <span class="keywordflow">while</span>( my_size < MaxCapacity && my_depth[my_head] < max_depth
-<a name="l00154"></a>00154           && my_pool.begin()[my_head].is_divisible() ) {
-<a name="l00155"></a>00155             depth_t prev = my_head;
-<a name="l00156"></a>00156             my_head = (my_head + 1) % MaxCapacity;
-<a name="l00157"></a>00157             <span class="keyword">new</span>(my_pool.begin()+my_head) T(my_pool.begin()[prev]); <span class="comment">// copy TODO: std::move?</span>
-<a name="l00158"></a>00158             my_pool.begin()[prev].~T(); <span class="comment">// instead of assignment</span>
-<a name="l00159"></a>00159             <span class="keyword">new</span>(my_pool.begin()+prev) T(my_pool.begin()[my_head], split()); <span class="comment">// do 'inverse' split</span>
-<a name="l00160"></a>00160             my_depth[my_head] = ++my_depth[prev];
-<a name="l00161"></a>00161             my_size++;
-<a name="l00162"></a>00162         }
-<a name="l00163"></a>00163     }
-<a name="l00164"></a>00164     <span class="keywordtype">void</span> pop_back() {
-<a name="l00165"></a>00165         __TBB_ASSERT(my_size > 0, <span class="stringliteral">"range_vector::pop_back() with empty size"</span>);
-<a name="l00166"></a>00166         my_pool.begin()[my_head].~T();
-<a name="l00167"></a>00167         my_size--;
-<a name="l00168"></a>00168         my_head = (my_head + MaxCapacity - 1) % MaxCapacity;
-<a name="l00169"></a>00169     }
-<a name="l00170"></a>00170     <span class="keywordtype">void</span> pop_front() {
-<a name="l00171"></a>00171         __TBB_ASSERT(my_size > 0, <span class="stringliteral">"range_vector::pop_front() with empty size"</span>);
-<a name="l00172"></a>00172         my_pool.begin()[my_tail].~T();
-<a name="l00173"></a>00173         my_size--;
-<a name="l00174"></a>00174         my_tail = (my_tail + 1) % MaxCapacity;
-<a name="l00175"></a>00175     }
-<a name="l00176"></a>00176     T& back() {
-<a name="l00177"></a>00177         __TBB_ASSERT(my_size > 0, <span class="stringliteral">"range_vector::back() with empty size"</span>);
-<a name="l00178"></a>00178         <span class="keywordflow">return</span> my_pool.begin()[my_head];
-<a name="l00179"></a>00179     }
-<a name="l00180"></a>00180     T& front() {
-<a name="l00181"></a>00181         __TBB_ASSERT(my_size > 0, <span class="stringliteral">"range_vector::front() with empty size"</span>);
-<a name="l00182"></a>00182         <span class="keywordflow">return</span> my_pool.begin()[my_tail];
-<a name="l00183"></a>00183     }
-<a name="l00185"></a>00185     depth_t front_depth() {
-<a name="l00186"></a>00186         __TBB_ASSERT(my_size > 0, <span class="stringliteral">"range_vector::front_depth() with empty size"</span>);
-<a name="l00187"></a>00187         <span class="keywordflow">return</span> my_depth[my_tail];
-<a name="l00188"></a>00188     }
-<a name="l00189"></a>00189 };
-<a name="l00190"></a>00190 
-<a name="l00192"></a>00192 <span class="keyword">template</span> <<span class="keyword">typename</span> Partition>
-<a name="l00193"></a>00193 <span class="keyword">struct </span>partition_type_base {
-<a name="l00194"></a>00194     <span class="comment">// decision makers</span>
-<a name="l00195"></a>00195     <span class="keywordtype">void</span> set_affinity( task & ) {}
-<a name="l00196"></a>00196     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00311.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> ) {}
-<a name="l00197"></a>00197     <span class="keywordtype">bool</span> check_being_stolen(task &) { <span class="keywordflow">return</span> <span class="keyword">false</span>; } <span class="comment">// part of old should_execute_range()</span>
-<a name="l00198"></a>00198     <span class="keywordtype">bool</span> check_for_demand(task &) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
-<a name="l00199"></a>00199     <span class="keywordtype">bool</span> divisions_left() { <span class="keywordflow">return</span> <span class="keyword">true</span>; } <span class="comment">// part of old should_execute_range()</span>
-<a name="l00200"></a>00200     <span class="keywordtype">bool</span> should_create_trap() { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
-<a name="l00201"></a>00201     depth_t max_depth() { <span class="keywordflow">return</span> 0; }
-<a name="l00202"></a>00202     <span class="keywordtype">void</span> align_depth(depth_t) { }
-<a name="l00203"></a>00203     <span class="comment">// common function blocks</span>
-<a name="l00204"></a>00204     Partition& derived() { <span class="keywordflow">return</span> *static_cast<Partition*>(<span class="keyword">this</span>); }
-<a name="l00205"></a>00205     <span class="keyword">template</span><<span class="keyword">typename</span> StartType>
-<a name="l00206"></a>00206     flag_task* split_work(StartType &start) {
-<a name="l00207"></a>00207         flag_task* parent_ptr = start.create_continuation(); <span class="comment">// the type here is to express expectation</span>
-<a name="l00208"></a>00208         start.set_parent(parent_ptr);
-<a name="l00209"></a>00209         parent_ptr->set_ref_count(2);
-<a name="l00210"></a>00210         StartType& right_work = *<span class="keyword">new</span>( parent_ptr->allocate_child() ) StartType(start, split());
-<a name="l00211"></a>00211         start.spawn(right_work);
-<a name="l00212"></a>00212         <span class="keywordflow">return</span> parent_ptr;
-<a name="l00213"></a>00213     }
-<a name="l00214"></a>00214     <span class="keyword">template</span><<span class="keyword">typename</span> StartType, <span class="keyword">typename</span> Range>
-<a name="l00215"></a>00215     <span class="keywordtype">void</span> execute(StartType &start, Range &range) {
-<a name="l00216"></a>00216         <span class="comment">// The algorithm in a few words ([]-denotes calls to decision mathods of partitioner):</span>
-<a name="l00217"></a>00217         <span class="comment">// [If this task is stolen, adjust depth and divisions if necessary, set flag].</span>
-<a name="l00218"></a>00218         <span class="comment">// If range is divisible {</span>
-<a name="l00219"></a>00219         <span class="comment">//    Spread the work while [initial divisions left];</span>
-<a name="l00220"></a>00220         <span class="comment">//    Create trap task [if necessary];</span>
-<a name="l00221"></a>00221         <span class="comment">// }</span>
-<a name="l00222"></a>00222         <span class="comment">// If not divisible or [max depth is reached], execute, else do the range pool part</span>
-<a name="l00223"></a>00223         task* parent_ptr = start.parent();
-<a name="l00224"></a>00224         <span class="keywordflow">if</span>( range.is_divisible() ) {
-<a name="l00225"></a>00225             <span class="keywordflow">if</span>( derived().divisions_left() )
-<a name="l00226"></a>00226                 <span class="keywordflow">do</span> parent_ptr = split_work(start); <span class="comment">// split until divisions_left()</span>
-<a name="l00227"></a>00227                 <span class="keywordflow">while</span>( range.is_divisible() && derived().divisions_left() );
-<a name="l00228"></a>00228             <span class="keywordflow">if</span>( derived().should_create_trap() ) { <span class="comment">// only for range pool</span>
-<a name="l00229"></a>00229                 <span class="keywordflow">if</span>( parent_ptr->ref_count() > 1 ) { <span class="comment">// create new parent if necessary</span>
-<a name="l00230"></a>00230                     parent_ptr = start.create_continuation();
-<a name="l00231"></a>00231                     start.set_parent(parent_ptr);
-<a name="l00232"></a>00232                 } <span class="keywordflow">else</span> __TBB_ASSERT(parent_ptr->ref_count() == 1, NULL);
-<a name="l00233"></a>00233                 parent_ptr->set_ref_count(2); <span class="comment">// safe because parent has only one reference</span>
-<a name="l00234"></a>00234                 signal_task& right_signal = *<span class="keyword">new</span>( parent_ptr->allocate_child() ) signal_task();
-<a name="l00235"></a>00235                 start.spawn(right_signal); <span class="comment">// pure signal is to avoid deep recursion in the end</span>
-<a name="l00236"></a>00236             }
-<a name="l00237"></a>00237         }
-<a name="l00238"></a>00238         <span class="keywordflow">if</span>( !range.is_divisible() || !derived().max_depth() )
-<a name="l00239"></a>00239             start.run_body( range ); <span class="comment">// simple partitioner goes always here</span>
-<a name="l00240"></a>00240         <span class="keywordflow">else</span> { <span class="comment">// do range pool</span>
-<a name="l00241"></a>00241             internal::range_vector<Range, Partition::range_pool_size> range_pool(range);
-<a name="l00242"></a>00242             <span class="keywordflow">do</span> {
-<a name="l00243"></a>00243                 range_pool.split_to_fill(derived().max_depth()); <span class="comment">// fill range pool</span>
-<a name="l00244"></a>00244                 <span class="keywordflow">if</span>( derived().check_for_demand( start ) ) {
-<a name="l00245"></a>00245                     <span class="keywordflow">if</span>( range_pool.size() > 1 ) {
-<a name="l00246"></a>00246                         parent_ptr = start.create_continuation();
-<a name="l00247"></a>00247                         start.set_parent(parent_ptr);
-<a name="l00248"></a>00248                         parent_ptr->set_ref_count(2);
-<a name="l00249"></a>00249                         StartType& right_work = *<span class="keyword">new</span>( parent_ptr->allocate_child() ) StartType(start, range_pool.front(), range_pool.front_depth());
-<a name="l00250"></a>00250                         start.spawn(right_work);
-<a name="l00251"></a>00251                         range_pool.pop_front();
-<a name="l00252"></a>00252                         <span class="keywordflow">continue</span>;
-<a name="l00253"></a>00253                     }
-<a name="l00254"></a>00254                     <span class="keywordflow">if</span>( range_pool.back().is_divisible() ) <span class="comment">// was not enough depth to fork a task</span>
-<a name="l00255"></a>00255                         <span class="keywordflow">continue</span>; <span class="comment">// note: check_for_demand() should guarantee increasing max_depth() next time</span>
-<a name="l00256"></a>00256                 }
-<a name="l00257"></a>00257                 start.run_body( range_pool.back() );
-<a name="l00258"></a>00258                 range_pool.pop_back();  
-<a name="l00259"></a>00259             } <span class="keywordflow">while</span>( !range_pool.empty() && !start.is_cancelled() );
-<a name="l00260"></a>00260         }
-<a name="l00261"></a>00261     }
-<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> Partition>
-<a name="l00266"></a>00266 <span class="keyword">struct </span>auto_partition_type_base : partition_type_base<Partition> {
-<a name="l00267"></a>00267     size_t my_divisor;
-<a name="l00268"></a>00268     depth_t my_max_depth;
-<a name="l00269"></a>00269     auto_partition_type_base() : my_max_depth(__TBB_INIT_DEPTH) {
-<a name="l00270"></a>00270         my_divisor = tbb::internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4;
-<a name="l00271"></a>00271         __TBB_ASSERT(my_divisor, <span class="stringliteral">"initial value of get_initial_auto_partitioner_divisor() is not valid"</span>);
-<a name="l00272"></a>00272     }
-<a name="l00273"></a>00273     auto_partition_type_base(auto_partition_type_base &src, split) {
-<a name="l00274"></a>00274         my_max_depth = src.my_max_depth;
-<a name="l00275"></a>00275 <span class="preprocessor">#if __TBB_INITIAL_TASK_IMBALANCE</span>
-<a name="l00276"></a>00276 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( src.my_divisor <= 1 ) my_divisor = 0;
-<a name="l00277"></a>00277         <span class="keywordflow">else</span> my_divisor = src.my_divisor = (src.my_divisor+1u) / 2u;
-<a name="l00278"></a>00278 <span class="preprocessor">#else</span>
-<a name="l00279"></a>00279 <span class="preprocessor"></span>        my_divisor = src.my_divisor / 2u;
-<a name="l00280"></a>00280         src.my_divisor = src.my_divisor - my_divisor; <span class="comment">// TODO: check the effect separately</span>
-<a name="l00281"></a>00281         <span class="keywordflow">if</span>(my_divisor) src.my_max_depth += static_cast<depth_t>(__TBB_Log2(src.my_divisor/my_divisor));
-<a name="l00282"></a>00282 <span class="preprocessor">#endif</span>
-<a name="l00283"></a>00283 <span class="preprocessor"></span>    }
-<a name="l00284"></a>00284     <span class="keywordtype">bool</span> check_being_stolen( task &t) { <span class="comment">// part of old should_execute_range()</span>
-<a name="l00285"></a>00285         <span class="keywordflow">if</span>( !my_divisor ) {
-<a name="l00286"></a>00286             my_divisor = 1; <span class="comment">// todo: replace by on-stack flag (partition_state's member)?</span>
-<a name="l00287"></a>00287             <span class="keywordflow">if</span>( t.is_stolen_task() ) {
-<a name="l00288"></a>00288 #<span class="keywordflow">if</span> TBB_USE_EXCEPTIONS
-<a name="l00289"></a>00289                 <span class="comment">// RTTI is available, check whether the cast is valid</span>
-<a name="l00290"></a>00290                 __TBB_ASSERT(dynamic_cast<flag_task*>(t.parent()), 0);
-<a name="l00291"></a>00291                 <span class="comment">// correctess of the cast rely on avoiding the root task for which:</span>
-<a name="l00292"></a>00292                 <span class="comment">// - initial value of my_divisor != 0 (protected by separate assertion)</span>
-<a name="l00293"></a>00293                 <span class="comment">// - is_stolen_task() always return false for the root task.</span>
-<a name="l00294"></a>00294 <span class="preprocessor">#endif</span>
-<a name="l00295"></a>00295 <span class="preprocessor"></span>                static_cast<flag_task*>(t.parent())->child_stolen = <span class="keyword">true</span>;
-<a name="l00296"></a>00296                 my_max_depth++;
-<a name="l00297"></a>00297                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00298"></a>00298             }
-<a name="l00299"></a>00299         }
-<a name="l00300"></a>00300         <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00301"></a>00301     }
-<a name="l00302"></a>00302     <span class="keywordtype">bool</span> divisions_left() { <span class="comment">// part of old should_execute_range()</span>
-<a name="l00303"></a>00303         <span class="keywordflow">if</span>( my_divisor > 1 ) <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00304"></a>00304         <span class="keywordflow">if</span>( my_divisor && my_max_depth > 1 ) { <span class="comment">// can split the task and once more internally. TODO: on-stack flag instead</span>
-<a name="l00305"></a>00305             <span class="comment">// keep same fragmentation while splitting for the local task pool</span>
-<a name="l00306"></a>00306             my_max_depth--;
-<a name="l00307"></a>00307             my_divisor = 0;
-<a name="l00308"></a>00308             <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00309"></a>00309         } <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00310"></a>00310     }
-<a name="l00311"></a>00311     <span class="keywordtype">bool</span> should_create_trap() {
-<a name="l00312"></a>00312         <span class="keywordflow">return</span> my_divisor > 0;
-<a name="l00313"></a>00313     }
-<a name="l00314"></a>00314     <span class="keywordtype">bool</span> check_for_demand(task &t) {
-<a name="l00315"></a>00315         <span class="keywordflow">if</span>( static_cast<flag_task*>(t.parent())->child_stolen ) {
-<a name="l00316"></a>00316             my_max_depth++;
-<a name="l00317"></a>00317             <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00318"></a>00318         } <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00319"></a>00319     }
-<a name="l00320"></a>00320     <span class="keywordtype">void</span> align_depth(depth_t base) {
-<a name="l00321"></a>00321         __TBB_ASSERT(base <= my_max_depth, 0);
-<a name="l00322"></a>00322         my_max_depth -= base;
-<a name="l00323"></a>00323     }
-<a name="l00324"></a>00324     depth_t max_depth() { <span class="keywordflow">return</span> my_max_depth; }
-<a name="l00325"></a>00325 };
-<a name="l00326"></a>00326 
-<a name="l00328"></a>00328 <span class="keyword">class </span>affinity_partition_type : <span class="keyword">public</span> auto_partition_type_base<affinity_partition_type> {
-<a name="l00329"></a>00329     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> factor_power = 4;
-<a name="l00330"></a>00330     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> factor = 1<<factor_power;
-<a name="l00331"></a>00331     <span class="keywordtype">bool</span> my_delay;
-<a name="l00332"></a>00332     <span class="keywordtype">unsigned</span> map_begin, map_end, map_mid;
-<a name="l00333"></a>00333     tbb::internal::affinity_id* my_array;
-<a name="l00334"></a>00334     <span class="keywordtype">void</span> set_mid() {
-<a name="l00335"></a>00335         <span class="keywordtype">unsigned</span> d = (map_end - map_begin)/2; <span class="comment">// we could add 1 but it is rather for LIFO affinity</span>
-<a name="l00336"></a>00336         <span class="keywordflow">if</span>( d > factor )
-<a name="l00337"></a>00337             d &= 0u-factor;
-<a name="l00338"></a>00338         map_mid = map_end - d;
-<a name="l00339"></a>00339     }
-<a name="l00340"></a>00340 <span class="keyword">public</span>:
-<a name="l00341"></a>00341     affinity_partition_type( <a class="code" href="a00226.html">tbb::internal::affinity_partitioner_base_v3</a>& ap ) {
-<a name="l00342"></a>00342         __TBB_ASSERT( (factor&(factor-1))==0, <span class="stringliteral">"factor must be power of two"</span> ); 
-<a name="l00343"></a>00343         ap.<a class="code" href="a00226.html#d9122ca5725982c602da44dae0acc603">resize</a>(factor);
-<a name="l00344"></a>00344         my_array = ap.<a class="code" href="a00226.html#8681a00f14b6ad375d63b104c24bef17">my_array</a>;
-<a name="l00345"></a>00345         map_begin = 0;
-<a name="l00346"></a>00346         map_end = unsigned(ap.<a class="code" href="a00226.html#8562953693788ae691865453b1ff3a5d">my_size</a>);
-<a name="l00347"></a>00347         set_mid();
-<a name="l00348"></a>00348         my_delay = <span class="keyword">true</span>;
-<a name="l00349"></a>00349         my_divisor /= __TBB_INITIAL_CHUNKS; <span class="comment">// let excatly P tasks to be distributed across workers</span>
-<a name="l00350"></a>00350         my_max_depth = factor_power+1; <span class="comment">// the first factor_power ranges will be spawned, and >=1 ranges should left</span>
-<a name="l00351"></a>00351         __TBB_ASSERT( my_max_depth < __TBB_RANGE_POOL_CAPACITY, 0 );
-<a name="l00352"></a>00352     }
-<a name="l00353"></a>00353     affinity_partition_type(affinity_partition_type& p, split)
-<a name="l00354"></a>00354         : auto_partition_type_base<affinity_partition_type>(p, split()), my_array(p.my_array) {
-<a name="l00355"></a>00355         __TBB_ASSERT( p.map_end-p.map_begin<factor || (p.map_end-p.map_begin)%factor==0, NULL );
-<a name="l00356"></a>00356         map_end = p.map_end;
-<a name="l00357"></a>00357         map_begin = p.map_end = p.map_mid;
-<a name="l00358"></a>00358         set_mid(); p.set_mid();
-<a name="l00359"></a>00359         my_delay = p.my_delay;
-<a name="l00360"></a>00360     }
-<a name="l00361"></a>00361     <span class="keywordtype">void</span> set_affinity( task &t ) {
-<a name="l00362"></a>00362         <span class="keywordflow">if</span>( map_begin<map_end )
-<a name="l00363"></a>00363             t.set_affinity( my_array[map_begin] );
-<a name="l00364"></a>00364     }
-<a name="l00365"></a>00365     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00311.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> <span class="keywordtype">id</span> ) {
-<a name="l00366"></a>00366         <span class="keywordflow">if</span>( map_begin<map_end ) 
-<a name="l00367"></a>00367             my_array[map_begin] = id;
-<a name="l00368"></a>00368     }
-<a name="l00369"></a>00369     <span class="keywordtype">bool</span> check_for_demand( task &t ) {
-<a name="l00370"></a>00370         <span class="keywordflow">if</span>( !my_delay ) {
-<a name="l00371"></a>00371             <span class="keywordflow">if</span>( map_mid<map_end ) {
-<a name="l00372"></a>00372                 __TBB_ASSERT(my_max_depth>__TBB_Log2(map_end-map_mid), 0);
-<a name="l00373"></a>00373                 <span class="keywordflow">return</span> <span class="keyword">true</span>;<span class="comment">// do not do my_max_depth++ here, but be sure my_max_depth is big enough</span>
-<a name="l00374"></a>00374             }
-<a name="l00375"></a>00375             <span class="keywordflow">if</span>( static_cast<flag_task*>(t.parent())->child_stolen ) {
-<a name="l00376"></a>00376                 my_max_depth++;
-<a name="l00377"></a>00377                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00378"></a>00378             }
-<a name="l00379"></a>00379         } <span class="keywordflow">else</span> my_delay = <span class="keyword">false</span>;
-<a name="l00380"></a>00380         <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00381"></a>00381     }
-<a name="l00382"></a>00382     <span class="keywordtype">bool</span> divisions_left() { <span class="comment">// part of old should_execute_range()</span>
-<a name="l00383"></a>00383         <span class="keywordflow">return</span> my_divisor > 1;
-<a name="l00384"></a>00384     }
-<a name="l00385"></a>00385     <span class="keywordtype">bool</span> should_create_trap() {
-<a name="l00386"></a>00386         <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// TODO: rethink for the stage after memorizing level</span>
-<a name="l00387"></a>00387     }
-<a name="l00388"></a>00388     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> range_pool_size = __TBB_RANGE_POOL_CAPACITY;
-<a name="l00389"></a>00389 };
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391 <span class="keyword">class </span>auto_partition_type: <span class="keyword">public</span> auto_partition_type_base<auto_partition_type> {
-<a name="l00392"></a>00392 <span class="keyword">public</span>:
-<a name="l00393"></a>00393     auto_partition_type( <span class="keyword">const</span> auto_partitioner& ) {}
-<a name="l00394"></a>00394     auto_partition_type( auto_partition_type& src, split)
-<a name="l00395"></a>00395       : auto_partition_type_base<auto_partition_type>(src, split()) {}
-<a name="l00396"></a>00396     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> range_pool_size = __TBB_RANGE_POOL_CAPACITY;
-<a name="l00397"></a>00397 };
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399 <span class="keyword">class </span>simple_partition_type: <span class="keyword">public</span> partition_type_base<simple_partition_type> {
-<a name="l00400"></a>00400 <span class="keyword">public</span>:
-<a name="l00401"></a>00401     simple_partition_type( <span class="keyword">const</span> simple_partitioner& ) {}
-<a name="l00402"></a>00402     simple_partition_type( <span class="keyword">const</span> simple_partition_type&, split ) {}
-<a name="l00404"></a>00404     <span class="keyword">template</span><<span class="keyword">typename</span> StartType, <span class="keyword">typename</span> Range>
-<a name="l00405"></a>00405     <span class="keywordtype">void</span> execute(StartType &start, Range &range) {
-<a name="l00406"></a>00406         <span class="keywordflow">while</span>( range.is_divisible() )
-<a name="l00407"></a>00407             split_work( start );
-<a name="l00408"></a>00408         start.run_body( range );
-<a name="l00409"></a>00409     }
-<a name="l00410"></a>00410     <span class="comment">//static const unsigned range_pool_size = 1; - not necessary because execute() is overridden</span>
-<a name="l00411"></a>00411 };
-<a name="l00412"></a>00412 
-<a name="l00414"></a>00414 <span class="keyword">class </span>old_auto_partition_type: <span class="keyword">public</span> tbb::internal::partition_type_base {
-<a name="l00415"></a>00415     size_t num_chunks;
-<a name="l00416"></a>00416     <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
-<a name="l00417"></a>00417 <span class="keyword">public</span>:
-<a name="l00418"></a>00418     <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> task &t) {
-<a name="l00419"></a>00419         <span class="keywordflow">if</span>( num_chunks<VICTIM_CHUNKS && t.is_stolen_task() )
-<a name="l00420"></a>00420             num_chunks = VICTIM_CHUNKS;
-<a name="l00421"></a>00421         <span class="keywordflow">return</span> num_chunks==1;
-<a name="l00422"></a>00422     }
-<a name="l00423"></a>00423     old_auto_partition_type( <span class="keyword">const</span> auto_partitioner& )
-<a name="l00424"></a>00424       : num_chunks(internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4) {}
-<a name="l00425"></a>00425     old_auto_partition_type( <span class="keyword">const</span> affinity_partitioner& )
-<a name="l00426"></a>00426       : num_chunks(internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4) {}
-<a name="l00427"></a>00427     old_auto_partition_type( old_auto_partition_type& pt, split ) {
-<a name="l00428"></a>00428         num_chunks = pt.num_chunks = (pt.num_chunks+1u) / 2u;
-<a name="l00429"></a>00429     }
-<a name="l00430"></a>00430 };
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432 } <span class="comment">// namespace interfaceX::internal</span>
-<a name="l00434"></a>00434 <span class="comment"></span>} <span class="comment">// namespace interfaceX</span>
-<a name="l00435"></a>00435 
-<a name="l00437"></a>00437 
-<a name="l00439"></a><a class="code" href="a00303.html">00439</a> <span class="keyword">class </span><a class="code" href="a00303.html">simple_partitioner</a> {
-<a name="l00440"></a>00440 <span class="keyword">public</span>:
-<a name="l00441"></a>00441     <a class="code" href="a00303.html">simple_partitioner</a>() {}
-<a name="l00442"></a>00442 <span class="keyword">private</span>:
-<a name="l00443"></a>00443     <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>serial::interface6::start_for;
-<a name="l00444"></a>00444     <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>interface6::internal::start_for;
-<a name="l00445"></a>00445     <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>interface6::internal::start_reduce;
-<a name="l00446"></a>00446     <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="l00447"></a>00447     <span class="comment">// backward compatibility</span>
-<a name="l00448"></a>00448     <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
-<a name="l00449"></a>00449     <span class="keyword">public</span>:
-<a name="l00450"></a>00450         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00311.html">task</a>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-<a name="l00451"></a>00451         partition_type( <span class="keyword">const</span> <a class="code" href="a00303.html">simple_partitioner</a>& ) {}
-<a name="l00452"></a>00452         partition_type( <span class="keyword">const</span> partition_type&, <a class="code" href="a00309.html">split</a> ) {}
-<a name="l00453"></a>00453     };
-<a name="l00454"></a>00454     <span class="comment">// new implementation just extends existing interface</span>
-<a name="l00455"></a>00455     <span class="keyword">typedef</span> interface6::internal::simple_partition_type task_partition_type;
-<a name="l00456"></a>00456 };
-<a name="l00457"></a>00457 
-<a name="l00459"></a>00459 
-<a name="l00462"></a><a class="code" href="a00231.html">00462</a> <span class="keyword">class </span><a class="code" href="a00231.html">auto_partitioner</a> {
-<a name="l00463"></a>00463 <span class="keyword">public</span>:
-<a name="l00464"></a>00464     <a class="code" href="a00231.html">auto_partitioner</a>() {}
-<a name="l00465"></a>00465 
-<a name="l00466"></a>00466 <span class="keyword">private</span>:
-<a name="l00467"></a>00467     <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>serial::interface6::start_for;
-<a name="l00468"></a>00468     <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>interface6::internal::start_for;
-<a name="l00469"></a>00469     <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>interface6::internal::start_reduce;
-<a name="l00470"></a>00470     <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="l00471"></a>00471     <span class="comment">// backward compatibility</span>
-<a name="l00472"></a>00472     <span class="keyword">typedef</span> interface6::internal::old_auto_partition_type partition_type;
-<a name="l00473"></a>00473     <span class="comment">// new implementation just extends existing interface</span>
-<a name="l00474"></a>00474     <span class="keyword">typedef</span> interface6::internal::auto_partition_type task_partition_type;
-<a name="l00475"></a>00475 };
-<a name="l00476"></a>00476 
-<a name="l00478"></a><a class="code" href="a00225.html">00478</a> <span class="keyword">class </span><a class="code" href="a00225.html">affinity_partitioner</a>: internal::affinity_partitioner_base_v3 {
-<a name="l00479"></a>00479 <span class="keyword">public</span>:
-<a name="l00480"></a>00480     <a class="code" href="a00225.html">affinity_partitioner</a>() {}
-<a name="l00481"></a>00481 
-<a name="l00482"></a>00482 <span class="keyword">private</span>:
-<a name="l00483"></a>00483     <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>serial::interface6::start_for;
-<a name="l00484"></a>00484     <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>interface6::internal::start_for;
-<a name="l00485"></a>00485     <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>interface6::internal::start_reduce;
-<a name="l00486"></a>00486     <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="l00487"></a>00487     <span class="comment">// backward compatibility - for parallel_scan only</span>
-<a name="l00488"></a>00488     <span class="keyword">typedef</span> interface6::internal::old_auto_partition_type partition_type;
-<a name="l00489"></a>00489     <span class="comment">// new implementation just extends existing interface</span>
-<a name="l00490"></a>00490     <span class="keyword">typedef</span> interface6::internal::affinity_partition_type task_partition_type;
-<a name="l00491"></a>00491 };
-<a name="l00492"></a>00492 
-<a name="l00493"></a>00493 } <span class="comment">// namespace tbb</span>
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</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 // warning 4244 is back</span>
-<a name="l00498"></a>00498 <span class="preprocessor"></span><span class="preprocessor">#undef __TBB_INITIAL_CHUNKS</span>
-<a name="l00499"></a>00499 <span class="preprocessor"></span><span class="preprocessor">#undef __TBB_RANGE_POOL_CAPACITY</span>
-<a name="l00500"></a>00500 <span class="preprocessor"></span><span class="preprocessor">#undef __TBB_INIT_DEPTH</span>
-<a name="l00501"></a>00501 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_partitioner_H */</span>
+<a name="l00115"></a><a class="code" href="a00302.html#0d51d18cd99df3b2e93bf07378d0992c">00115</a>         <span class="keywordtype">void</span> <a class="code" href="a00302.html#0d51d18cd99df3b2e93bf07378d0992c">release</a>() {
+<a name="l00116"></a>00116 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span>            internal_release ();
+<a name="l00118"></a>00118 <span class="preprocessor">#else</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span>            my_mutex-><a class="code" href="a00301.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>();
+<a name="l00120"></a>00120             my_mutex = NULL;
+<a name="l00121"></a>00121 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00122"></a>00122         }
+<a name="l00123"></a>00123 
+<a name="l00124"></a>00124     <span class="keyword">private</span>:
+<a name="l00126"></a>00126         <a class="code" href="a00301.html">mutex</a>* my_mutex;
+<a name="l00127"></a>00127 
+<a name="l00129"></a>00129         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00301.html">mutex</a>& m );
+<a name="l00130"></a>00130 
+<a name="l00132"></a>00132         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00301.html">mutex</a>& m );
+<a name="l00133"></a>00133 
+<a name="l00135"></a>00135         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
+<a name="l00136"></a>00136 
+<a name="l00137"></a>00137         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00301.html">mutex</a>;
+<a name="l00138"></a>00138     };
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140     <span class="comment">// Mutex traits</span>
+<a name="l00141"></a>00141     <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="l00142"></a>00142     <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="l00143"></a>00143     <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="l00144"></a>00144 
+<a name="l00145"></a>00145     <span class="comment">// ISO C++0x compatibility methods</span>
+<a name="l00146"></a>00146 
+<a name="l00148"></a><a class="code" href="a00301.html#4470e61c24c129a0299ca6c17240adbb">00148</a>     <span class="keywordtype">void</span> <a class="code" href="a00301.html#4470e61c24c129a0299ca6c17240adbb">lock</a>() {
+<a name="l00149"></a>00149 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span>        <a class="code" href="a00253.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00151"></a>00151         <span class="keyword">new</span>(tmp.<a class="code" href="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00302.html">scoped_lock</a>(*<span class="keyword">this</span>);
+<a name="l00152"></a>00152 <span class="preprocessor">#else</span>
+<a name="l00153"></a>00153 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00154"></a>00154 <span class="preprocessor"></span>        EnterCriticalSection(&impl);
+<a name="l00155"></a>00155 <span class="preprocessor">  #else</span>
+<a name="l00156"></a>00156 <span class="preprocessor"></span>        pthread_mutex_lock(&impl);
+<a name="l00157"></a>00157 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00158"></a>00158 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00159"></a>00159     }
+<a name="l00160"></a>00160 
+<a name="l00162"></a>00162 
+<a name="l00163"></a><a class="code" href="a00301.html#4331652c79dea1c1131bd59ab161b234">00163</a>     <span class="keywordtype">bool</span> <a class="code" href="a00301.html#4331652c79dea1c1131bd59ab161b234">try_lock</a>() {
+<a name="l00164"></a>00164 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00165"></a>00165 <span class="preprocessor"></span>        <a class="code" href="a00253.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00166"></a>00166         <a class="code" href="a00302.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00167"></a>00167         s.<a class="code" href="a00302.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = NULL;
+<a name="l00168"></a>00168         <span class="keywordflow">return</span> s.<a class="code" href="a00302.html#e86ffb41a026694b16637f78aa337874">internal_try_acquire</a>(*<span class="keyword">this</span>);
+<a name="l00169"></a>00169 <span class="preprocessor">#else</span>
+<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00171"></a>00171 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&impl)!=0;
+<a name="l00172"></a>00172 <span class="preprocessor">  #else</span>
+<a name="l00173"></a>00173 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&impl)==0;
+<a name="l00174"></a>00174 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00175"></a>00175 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00176"></a>00176     }
+<a name="l00177"></a>00177 
+<a name="l00179"></a><a class="code" href="a00301.html#5fc9ef443ae75d966695546be399cc6b">00179</a>     <span class="keywordtype">void</span> <a class="code" href="a00301.html#5fc9ef443ae75d966695546be399cc6b">unlock</a>() {
+<a name="l00180"></a>00180 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span>        <a class="code" href="a00253.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00182"></a>00182         <a class="code" href="a00302.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00183"></a>00183         s.<a class="code" href="a00302.html#be42c8fe11cce1af4fe1e9eaab717567">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00184"></a>00184         s.<a class="code" href="a00302.html#448b7e9042afcdc455ea3f929ac4c594">internal_release</a>();
+<a name="l00185"></a>00185 <span class="preprocessor">#else</span>
+<a name="l00186"></a>00186 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00187"></a>00187 <span class="preprocessor"></span>        LeaveCriticalSection(&impl);
+<a name="l00188"></a>00188 <span class="preprocessor">  #else</span>
+<a name="l00189"></a>00189 <span class="preprocessor"></span>        pthread_mutex_unlock(&impl);
+<a name="l00190"></a>00190 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00191"></a>00191 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00192"></a>00192     }
+<a name="l00193"></a>00193 
+<a name="l00195"></a>00195 <span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00196"></a><a class="code" href="a00301.html#9f1ec84d5815263ceae853f06ddb4cac">00196</a> <span class="preprocessor"></span>    <span class="keyword">typedef</span> LPCRITICAL_SECTION <a class="code" href="a00301.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a>;
+<a name="l00197"></a>00197 <span class="preprocessor">  #else</span>
+<a name="l00198"></a>00198 <span class="preprocessor"></span>    <span class="keyword">typedef</span> pthread_mutex_t* <a class="code" href="a00301.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a>;
+<a name="l00199"></a>00199 <span class="preprocessor">  #endif</span>
+<a name="l00200"></a>00200 <span class="preprocessor"></span>    <a class="code" href="a00301.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a> native_handle() { <span class="keywordflow">return</span> (<a class="code" href="a00301.html#9f1ec84d5815263ceae853f06ddb4cac">native_handle_type</a>) &impl; }
+<a name="l00201"></a>00201 
+<a name="l00202"></a>00202     <span class="keyword">enum</span> state_t {
+<a name="l00203"></a>00203         INITIALIZED=0x1234,
+<a name="l00204"></a>00204         DESTROYED=0x789A,
+<a name="l00205"></a>00205         HELD=0x56CD
+<a name="l00206"></a>00206     };
+<a name="l00207"></a>00207 <span class="keyword">private</span>:
+<a name="l00208"></a>00208 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00209"></a>00209 <span class="preprocessor"></span>    CRITICAL_SECTION impl;    
+<a name="l00210"></a>00210     <span class="keyword">enum</span> state_t state;
+<a name="l00211"></a>00211 <span class="preprocessor">#else</span>
+<a name="l00212"></a>00212 <span class="preprocessor"></span>    pthread_mutex_t impl;
+<a name="l00213"></a>00213 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00214"></a>00214 
+<a name="l00216"></a>00216     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00217"></a>00217 
+<a name="l00219"></a>00219     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
+<a name="l00220"></a>00220 
+<a name="l00221"></a>00221 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00222"></a>00222 <span class="preprocessor"></span><span class="keyword">public</span>:
+<a name="l00224"></a><a class="code" href="a00301.html#795649a185b0d6af6dc81c5f378616dd">00224</a>     <span class="keywordtype">void</span> <a class="code" href="a00301.html#795649a185b0d6af6dc81c5f378616dd">set_state</a>( state_t to ) { state = to; }
+<a name="l00225"></a>00225 <span class="preprocessor">#endif</span>
+<a name="l00226"></a>00226 <span class="preprocessor"></span>};
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228 __TBB_DEFINE_PROFILING_SET_NAME(mutex)
+<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_mutex_H */</span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00533.html b/doc/html/a00533.html
new file mode 100644
index 0000000..1743080
--- /dev/null
+++ b/doc/html/a00533.html
@@ -0,0 +1,81 @@
+<!DOCTYPE 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>
+<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>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-2012 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_null_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_null_mutex_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="a00303.html">00029</a> <span class="keyword">class </span><a class="code" href="a00303.html">null_mutex</a> {   
+<a name="l00031"></a>00031     <a class="code" href="a00303.html">null_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00303.html">null_mutex</a>& );   
+<a name="l00032"></a>00032     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00303.html">null_mutex</a>& );   
+<a name="l00033"></a>00033 <span class="keyword">public</span>:   
+<a name="l00035"></a><a class="code" href="a00304.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00304.html">scoped_lock</a> {   
+<a name="l00036"></a>00036     <span class="keyword">public</span>:   
+<a name="l00037"></a>00037         <a class="code" href="a00304.html">scoped_lock</a>() {}
+<a name="l00038"></a>00038         <a class="code" href="a00304.html">scoped_lock</a>( <a class="code" href="a00303.html">null_mutex</a>& ) {}   
+<a name="l00039"></a>00039         ~<a class="code" href="a00304.html">scoped_lock</a>() {}
+<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00303.html">null_mutex</a>& ) {}
+<a name="l00041"></a>00041         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00303.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="a00303.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>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00534.html b/doc/html/a00534.html
new file mode 100644
index 0000000..9981ca0
--- /dev/null
+++ b/doc/html/a00534.html
@@ -0,0 +1,83 @@
+<!DOCTYPE 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_rw_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>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-2012 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_null_rw_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_null_rw_mutex_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="a00305.html">00029</a> <span class="keyword">class </span><a class="code" href="a00305.html">null_rw_mutex</a> {
+<a name="l00031"></a>00031     <a class="code" href="a00305.html">null_rw_mutex</a>( <span class="keyword">const</span> <a class="code" href="a00305.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="a00305.html">null_rw_mutex</a>& );   
+<a name="l00033"></a>00033 <span class="keyword">public</span>:   
+<a name="l00035"></a><a class="code" href="a00306.html">00035</a>     <span class="keyword">class </span><a class="code" href="a00306.html">scoped_lock</a> {   
+<a name="l00036"></a>00036     <span class="keyword">public</span>:   
+<a name="l00037"></a>00037         <a class="code" href="a00306.html">scoped_lock</a>() {}
+<a name="l00038"></a>00038         <a class="code" href="a00306.html">scoped_lock</a>( <a class="code" href="a00305.html">null_rw_mutex</a>& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
+<a name="l00039"></a>00039         ~<a class="code" href="a00306.html">scoped_lock</a>() {}
+<a name="l00040"></a>00040         <span class="keywordtype">void</span> acquire( <a class="code" href="a00305.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="a00305.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="a00305.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>;   
+<a name="l00051"></a>00051     <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="l00052"></a>00052     <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="l00053"></a>00053 };  
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055 }
+<a name="l00056"></a>00056 
+<a name="l00057"></a>00057 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_null_rw_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00535.html b/doc/html/a00535.html
new file mode 100644
index 0000000..f1a33ff
--- /dev/null
+++ b/doc/html/a00535.html
@@ -0,0 +1,480 @@
+<!DOCTYPE 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-2012 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="a00307.html">00060</a> <span class="keyword">class </span><a class="code" href="a00307.html">parallel_do_feeder</a>: internal::no_copy
+<a name="l00061"></a>00061 {
+<a name="l00062"></a>00062     <a class="code" href="a00307.html">parallel_do_feeder</a>() {}
+<a name="l00063"></a>00063     <span class="keyword">virtual</span> ~<a class="code" href="a00307.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="a00307.html#40baaf0f6856f4491dd0adf896c93516">00068</a>     <span class="keywordtype">void</span> <a class="code" href="a00307.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> (task::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="a00337.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_TASK_GROUP_CONTEXT</span>
+<a name="l00172"></a>00172 <span class="preprocessor"></span>        parallel_do_feeder_impl(<a class="code" href="a00339.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="a00337.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_TASK_GROUP_CONTEXT
+<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_TASK_GROUP_CONTEXT</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_TASK_GROUP_CONTEXT
+<a name="l00413"></a>00413         , task_group_context& context 
+<a name="l00414"></a>00414 #endif <span class="comment">// __TBB_TASK_GROUP_CONTEXT </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_TASK_GROUP_CONTEXT</span>
+<a name="l00419"></a>00419 <span class="preprocessor"></span>            , context
+<a name="l00420"></a>00420 <span class="preprocessor">#endif // __TBB_TASK_GROUP_CONTEXT </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_TASK_GROUP_CONTEXT
+<a name="l00430"></a>00430         , task_group_context& context 
+<a name="l00431"></a>00431 #endif <span class="comment">// __TBB_TASK_GROUP_CONTEXT</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_TASK_GROUP_CONTEXT</span>
+<a name="l00436"></a>00436 <span class="preprocessor"></span>            , context
+<a name="l00437"></a>00437 <span class="preprocessor">#endif // __TBB_TASK_GROUP_CONTEXT</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="a00426.html#g3383e2703977012b6f384d673410f1f7">00470</a> <span class="keywordtype">void</span> <a class="code" href="a00426.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_TASK_GROUP_CONTEXT</span>
+<a name="l00475"></a>00475 <span class="preprocessor"></span>    <a class="code" href="a00339.html">task_group_context</a> context;
+<a name="l00476"></a>00476 <span class="preprocessor">#endif // __TBB_TASK_GROUP_CONTEXT</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_TASK_GROUP_CONTEXT
+<a name="l00479"></a>00479         , context
+<a name="l00480"></a>00480 #endif <span class="comment">// __TBB_TASK_GROUP_CONTEXT</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_TASK_GROUP_CONTEXT</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="a00426.html#g2617dc9b88b3285a7212599d49f74228">00488</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00426.html#g3383e2703977012b6f384d673410f1f7">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <a class="code" href="a00339.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_TASK_GROUP_CONTEXT</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-2012 Intel Corporation.  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/a00543.html b/doc/html/a00543.html
deleted file mode 100644
index 3d01e0f..0000000
--- a/doc/html/a00543.html
+++ /dev/null
@@ -1,585 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>pipeline.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<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>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-2011 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_pipeline_H </span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_pipeline_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 "tbb_allocator.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <cstddef></span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="keyword">namespace </span>tbb {
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="keyword">class </span>pipeline;
-<a name="l00032"></a>00032 <span class="keyword">class </span>filter;
-<a name="l00033"></a>00033 
-<a name="l00035"></a>00035 <span class="keyword">namespace </span>internal {
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">// The argument for PIPELINE_VERSION should be an integer between 2 and 9</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#define __TBB_PIPELINE_VERSION(x) (unsigned char)(x-2)<<1</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Token;
-<a name="l00041"></a>00041 <span class="keyword">typedef</span> <span class="keywordtype">long</span> tokendiff_t;
-<a name="l00042"></a>00042 <span class="keyword">class </span>stage_task;
-<a name="l00043"></a>00043 <span class="keyword">class </span>input_buffer;
-<a name="l00044"></a>00044 <span class="keyword">class </span>pipeline_root_task;
-<a name="l00045"></a>00045 <span class="keyword">class </span>pipeline_cleaner;
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 } <span class="comment">// namespace internal</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">namespace </span>interface6 {
-<a name="l00050"></a>00050     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U> <span class="keyword">class </span>filter_t;
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052     <span class="keyword">namespace </span>internal {
-<a name="l00053"></a>00053         <span class="keyword">class </span>pipeline_proxy;
-<a name="l00054"></a>00054     }
-<a name="l00055"></a>00055 }
-<a name="l00056"></a>00056 
-<a name="l00058"></a>00058 
-<a name="l00060"></a>00060 
-<a name="l00061"></a><a class="code" href="a00256.html">00061</a> <span class="keyword">class </span><a class="code" href="a00256.html">filter</a>: internal::no_copy {
-<a name="l00062"></a>00062 <span class="keyword">private</span>:
-<a name="l00064"></a>00064     <span class="keyword">static</span> <a class="code" href="a00256.html">filter</a>* not_in_pipeline() {<span class="keywordflow">return</span> reinterpret_cast<filter*>(intptr_t(-1));}
-<a name="l00065"></a>00065 <span class="keyword">protected</span>:    
-<a name="l00067"></a><a class="code" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">00067</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a> = 0x1; 
-<a name="l00068"></a>00068 
-<a name="l00070"></a>00070 
-<a name="l00072"></a><a class="code" href="a00256.html#2e5eb65f95d8050186278077e433c5b1">00072</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00256.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a> = 0x1<<4;  
-<a name="l00073"></a>00073 
-<a name="l00075"></a><a class="code" href="a00256.html#dd6a6e7210efc9bcaf2c5e08767d92b5">00075</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00256.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a> = 0x1<<5;  
-<a name="l00076"></a>00076 
-<a name="l00078"></a><a class="code" href="a00256.html#bdd02a434a6e7499dd1e8f43aae96793">00078</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00256.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a> = 0x1<<6;
-<a name="l00079"></a>00079 
-<a name="l00081"></a><a class="code" href="a00256.html#f17200974c33be21f42a5f00893de028">00081</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00256.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a> =
-<a name="l00082"></a>00082 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span>            0x0;
-<a name="l00084"></a>00084 <span class="preprocessor">#else</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span>            0x1<<7;
-<a name="l00086"></a>00086 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088     <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="l00089"></a>00089     <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="l00090"></a>00090 <span class="keyword">public</span>:
-<a name="l00091"></a>00091     <span class="keyword">enum</span> mode {
-<a name="l00093"></a>00093         parallel = current_version | <a class="code" href="a00256.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a>, 
-<a name="l00095"></a>00095         serial_in_order = current_version | <a class="code" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a>,
-<a name="l00097"></a>00097         serial_out_of_order = current_version | <a class="code" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a> | <a class="code" href="a00256.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a>,
-<a name="l00099"></a>00099         serial = serial_in_order
-<a name="l00100"></a>00100     };
-<a name="l00101"></a>00101 <span class="keyword">protected</span>:
-<a name="l00102"></a>00102     <a class="code" href="a00256.html">filter</a>( <span class="keywordtype">bool</span> is_serial_ ) : 
-<a name="l00103"></a>00103         next_filter_in_pipeline(not_in_pipeline()),
-<a name="l00104"></a>00104         my_input_buffer(NULL),
-<a name="l00105"></a>00105         my_filter_mode(static_cast<unsigned char>((is_serial_ ? serial : parallel) | <a class="code" href="a00256.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a>)),
-<a name="l00106"></a>00106         prev_filter_in_pipeline(not_in_pipeline()),
-<a name="l00107"></a>00107         my_pipeline(NULL),
-<a name="l00108"></a>00108         next_segment(NULL)
-<a name="l00109"></a>00109     {}
-<a name="l00110"></a>00110     
-<a name="l00111"></a>00111     filter( mode filter_mode ) :
-<a name="l00112"></a>00112         next_filter_in_pipeline(not_in_pipeline()),
-<a name="l00113"></a>00113         my_input_buffer(NULL),
-<a name="l00114"></a>00114         my_filter_mode(static_cast<unsigned char>(filter_mode | <a class="code" href="a00256.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a>)),
-<a name="l00115"></a>00115         prev_filter_in_pipeline(not_in_pipeline()),
-<a name="l00116"></a>00116         my_pipeline(NULL),
-<a name="l00117"></a>00117         next_segment(NULL)
-<a name="l00118"></a>00118     {}
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120     <span class="comment">// signal end-of-input for concrete_filters</span>
-<a name="l00121"></a>00121     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD set_end_of_input();
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 <span class="keyword">public</span>:
-<a name="l00125"></a><a class="code" href="a00256.html#fcfec27656a69ff2072802ac001e936f">00125</a>     <span class="keywordtype">bool</span> <a class="code" href="a00256.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>()<span class="keyword"> const </span>{
-<a name="l00126"></a>00126         <span class="keywordflow">return</span> bool( my_filter_mode & <a class="code" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a> );
-<a name="l00127"></a>00127     }  
-<a name="l00128"></a>00128     
-<a name="l00130"></a><a class="code" href="a00256.html#cd53206c4795ef2df5df26b795caf692">00130</a>     <span class="keywordtype">bool</span> <a class="code" href="a00256.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>()<span class="keyword"> const </span>{
-<a name="l00131"></a>00131         <span class="keywordflow">return</span> (my_filter_mode & (<a class="code" href="a00256.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a>|<a class="code" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a>))==<a class="code" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a>;
-<a name="l00132"></a>00132     }
-<a name="l00133"></a>00133 
-<a name="l00135"></a><a class="code" href="a00256.html#15c29cae5d237e6d63dbfe5c94af89d5">00135</a>     <span class="keywordtype">bool</span> <a class="code" href="a00256.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>()<span class="keyword"> const </span>{
-<a name="l00136"></a>00136         <span class="keywordflow">return</span> ( my_filter_mode & <a class="code" href="a00256.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a> )==filter_is_bound;
-<a name="l00137"></a>00137     }
-<a name="l00138"></a>00138 
-<a name="l00140"></a><a class="code" href="a00256.html#8ec4dfe053e94a2349d56781ddea8477">00140</a>     <span class="keywordtype">bool</span> <a class="code" href="a00256.html#8ec4dfe053e94a2349d56781ddea8477">object_may_be_null</a>() { 
-<a name="l00141"></a>00141         <span class="keywordflow">return</span> ( my_filter_mode & <a class="code" href="a00256.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a> ) == filter_may_emit_null;
-<a name="l00142"></a>00142     }
-<a name="l00143"></a>00143 
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="keyword">virtual</span> <span class="keywordtype">void</span>* <a class="code" href="a00256.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>( <span class="keywordtype">void</span>* item ) = 0;
-<a name="l00147"></a>00147 
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00256.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>();
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00154"></a>00154 <span class="preprocessor"></span>
-<a name="l00156"></a><a class="code" href="a00256.html#56275eb889c77c4807967133e21401bd">00156</a> <span class="preprocessor">    virtual void finalize( void* </span><span class="comment">/*item*/</span> ) {};
-<a name="l00157"></a>00157 <span class="preprocessor">#endif</span>
-<a name="l00158"></a>00158 <span class="preprocessor"></span>
-<a name="l00159"></a>00159 <span class="keyword">private</span>:
-<a name="l00161"></a>00161     <a class="code" href="a00256.html">filter</a>* next_filter_in_pipeline;
-<a name="l00162"></a>00162 
-<a name="l00164"></a>00164     <span class="comment">//  (pipeline has not yet reached end_of_input or this filter has not yet</span>
-<a name="l00165"></a>00165     <span class="comment">//  seen the last token produced by input_filter)</span>
-<a name="l00166"></a>00166     <span class="keywordtype">bool</span> has_more_work();
-<a name="l00167"></a>00167 
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170     internal::input_buffer* my_input_buffer;
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
-<a name="l00173"></a>00173     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
-<a name="l00174"></a>00174     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00284.html">pipeline</a>;
-<a name="l00175"></a>00175     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00322.html">thread_bound_filter</a>;
-<a name="l00176"></a>00176 
-<a name="l00178"></a>00178     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> my_filter_mode;
-<a name="l00179"></a>00179 
-<a name="l00181"></a>00181     <a class="code" href="a00256.html">filter</a>* prev_filter_in_pipeline;
-<a name="l00182"></a>00182 
-<a name="l00184"></a>00184     <a class="code" href="a00284.html">pipeline</a>* my_pipeline;
-<a name="l00185"></a>00185 
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188     <a class="code" href="a00256.html">filter</a>* next_segment;
-<a name="l00189"></a>00189 };
-<a name="l00190"></a>00190 
-<a name="l00192"></a>00192 
-<a name="l00193"></a><a class="code" href="a00322.html">00193</a> <span class="keyword">class </span><a class="code" href="a00322.html">thread_bound_filter</a>: <span class="keyword">public</span> <a class="code" href="a00256.html">filter</a> {
-<a name="l00194"></a>00194 <span class="keyword">public</span>:
-<a name="l00195"></a>00195     <span class="keyword">enum</span> result_type {
-<a name="l00196"></a>00196         <span class="comment">// item was processed</span>
-<a name="l00197"></a>00197         success,
-<a name="l00198"></a>00198         <span class="comment">// item is currently not available</span>
-<a name="l00199"></a>00199         item_not_available,
-<a name="l00200"></a>00200         <span class="comment">// there are no more items to process</span>
-<a name="l00201"></a>00201         end_of_stream
-<a name="l00202"></a>00202     };
-<a name="l00203"></a>00203 <span class="keyword">protected</span>:
-<a name="l00204"></a>00204     <a class="code" href="a00322.html">thread_bound_filter</a>(mode filter_mode): 
-<a name="l00205"></a>00205          <a class="code" href="a00256.html">filter</a>(static_cast<mode>(filter_mode | <a class="code" href="a00256.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter::filter_is_bound</a>))
-<a name="l00206"></a>00206     {}
-<a name="l00207"></a>00207 <span class="keyword">public</span>:
-<a name="l00209"></a>00209 
-<a name="l00214"></a>00214     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00322.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>(); 
-<a name="l00215"></a>00215 
-<a name="l00217"></a>00217 
-<a name="l00221"></a>00221     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00322.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>();
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 <span class="keyword">private</span>:
-<a name="l00225"></a>00225     result_type internal_process_item(<span class="keywordtype">bool</span> is_blocking);
-<a name="l00226"></a>00226 };
-<a name="l00227"></a>00227 
-<a name="l00229"></a>00229 
-<a name="l00230"></a><a class="code" href="a00284.html">00230</a> <span class="keyword">class </span><a class="code" href="a00284.html">pipeline</a> {
-<a name="l00231"></a>00231 <span class="keyword">public</span>:
-<a name="l00233"></a>00233     __TBB_EXPORTED_METHOD <a class="code" href="a00284.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>();
-<a name="l00234"></a>00234 
-<a name="l00237"></a>00237     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00284.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>();
-<a name="l00238"></a>00238 
-<a name="l00240"></a>00240     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00284.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>( <a class="code" href="a00256.html">filter</a>& filter_ );
-<a name="l00241"></a>00241 
-<a name="l00243"></a>00243     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00284.html#f627616049b3fe36801f37ee40403ef8">run</a>( size_t max_number_of_live_tokens );
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00247"></a>00247 <span class="preprocessor">    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context& context );</span>
-<a name="l00248"></a>00248 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00249"></a>00249 <span class="preprocessor"></span>
-<a name="l00251"></a>00251     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00284.html#2c84aef5b834b555ee220b176e25931e">clear</a>();
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253 <span class="keyword">private</span>:
-<a name="l00254"></a>00254     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
-<a name="l00255"></a>00255     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
-<a name="l00256"></a>00256     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00256.html">filter</a>;
-<a name="l00257"></a>00257     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00322.html">thread_bound_filter</a>;
-<a name="l00258"></a>00258     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_cleaner;
-<a name="l00259"></a>00259     <span class="keyword">friend</span> <span class="keyword">class </span>tbb::interface6::internal::pipeline_proxy;
-<a name="l00260"></a>00260 
-<a name="l00262"></a>00262     <a class="code" href="a00256.html">filter</a>* filter_list;
-<a name="l00263"></a>00263 
-<a name="l00265"></a>00265     <a class="code" href="a00256.html">filter</a>* filter_end;
-<a name="l00266"></a>00266 
-<a name="l00268"></a>00268     <a class="code" href="a00311.html">task</a>* end_counter;
-<a name="l00269"></a>00269 
-<a name="l00271"></a>00271     <a class="code" href="a00228.html">atomic<internal::Token></a> input_tokens;
-<a name="l00272"></a>00272 
-<a name="l00274"></a>00274     <a class="code" href="a00228.html">atomic<internal::Token></a> token_counter;
-<a name="l00275"></a>00275 
-<a name="l00277"></a>00277     <span class="keywordtype">bool</span> end_of_input;
-<a name="l00278"></a>00278 
-<a name="l00280"></a>00280     <span class="keywordtype">bool</span> has_thread_bound_filters;
-<a name="l00281"></a>00281 
-<a name="l00283"></a>00283     <span class="keywordtype">void</span> remove_filter( <a class="code" href="a00256.html">filter</a>& filter_ );
-<a name="l00284"></a>00284 
-<a name="l00286"></a>00286     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD inject_token( <a class="code" href="a00311.html">task</a>& <span class="keyword">self</span> );
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00290"></a>00290 <span class="preprocessor">    void clear_filters();</span>
-<a name="l00291"></a>00291 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00292"></a>00292 <span class="preprocessor"></span>};
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00295"></a>00295 <span class="comment">// Support for lambda-friendly parallel_pipeline interface</span>
-<a name="l00296"></a>00296 <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 <span class="keyword">namespace </span>interface6 {
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300 <span class="keyword">namespace </span>internal {
-<a name="l00301"></a>00301     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> Body> <span class="keyword">class </span>concrete_filter;
-<a name="l00302"></a>00302 }
-<a name="l00303"></a>00303 
-<a name="l00305"></a><a class="code" href="a00259.html">00305</a> <span class="keyword">class </span><a class="code" href="a00259.html">flow_control</a> {
-<a name="l00306"></a>00306     <span class="keywordtype">bool</span> is_pipeline_stopped;
-<a name="l00307"></a>00307     <a class="code" href="a00259.html">flow_control</a>() { is_pipeline_stopped = <span class="keyword">false</span>; }
-<a name="l00308"></a>00308     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> Body> <span class="keyword">friend</span> <span class="keyword">class </span>internal::concrete_filter;
-<a name="l00309"></a>00309 <span class="keyword">public</span>:
-<a name="l00310"></a>00310     <span class="keywordtype">void</span> stop() { is_pipeline_stopped = <span class="keyword">true</span>; }
-<a name="l00311"></a>00311 };
-<a name="l00312"></a>00312 
-<a name="l00314"></a>00314 <span class="keyword">namespace </span>internal {
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>is_large_object { <span class="keyword">enum</span> { r = <span class="keyword">sizeof</span>(T) > <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *) }; };
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keywordtype">bool</span>> <span class="keyword">class </span>token_helper;
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320 <span class="comment">// large object helper (uses tbb_allocator)</span>
-<a name="l00321"></a>00321 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00322"></a>00322 <span class="keyword">class </span>token_helper<T, true> {
-<a name="l00323"></a>00323     <span class="keyword">public</span>:
-<a name="l00324"></a>00324     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00317.html">tbb::tbb_allocator<T></a> allocator;
-<a name="l00325"></a>00325     <span class="keyword">typedef</span> T* pointer;
-<a name="l00326"></a>00326     <span class="keyword">typedef</span> T value_type;
-<a name="l00327"></a>00327     <span class="keyword">static</span> pointer create_token(<span class="keyword">const</span> value_type & source) {
-<a name="l00328"></a>00328         pointer output_t = allocator().allocate(1);
-<a name="l00329"></a>00329         <span class="keywordflow">return</span> <span class="keyword">new</span> (output_t) T(source);
-<a name="l00330"></a>00330     }
-<a name="l00331"></a>00331     <span class="keyword">static</span> value_type & token(pointer & t) { <span class="keywordflow">return</span> *t;}
-<a name="l00332"></a>00332     <span class="keyword">static</span> <span class="keywordtype">void</span> * cast_to_void_ptr(pointer ref) { <span class="keywordflow">return</span> (<span class="keywordtype">void</span> *) ref; }
-<a name="l00333"></a>00333     <span class="keyword">static</span> pointer cast_from_void_ptr(<span class="keywordtype">void</span> * ref) { <span class="keywordflow">return</span> (pointer)ref; }
-<a name="l00334"></a>00334     <span class="keyword">static</span> <span class="keywordtype">void</span> destroy_token(pointer token) {
-<a name="l00335"></a>00335         allocator().destroy(token);
-<a name="l00336"></a>00336         allocator().deallocate(token,1);
-<a name="l00337"></a>00337     }
-<a name="l00338"></a>00338 };
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 <span class="comment">// pointer specialization</span>
-<a name="l00341"></a>00341 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00342"></a>00342 <span class="keyword">class </span>token_helper<T*, <span class="keyword">false</span> > {
-<a name="l00343"></a>00343     <span class="keyword">public</span>:
-<a name="l00344"></a>00344     <span class="keyword">typedef</span> T* pointer;
-<a name="l00345"></a>00345     <span class="keyword">typedef</span> T* value_type;
-<a name="l00346"></a>00346     <span class="keyword">static</span> pointer create_token(<span class="keyword">const</span> value_type & source) { <span class="keywordflow">return</span> source; }
-<a name="l00347"></a>00347     <span class="keyword">static</span> value_type & token(pointer & t) { <span class="keywordflow">return</span> t;}
-<a name="l00348"></a>00348     <span class="keyword">static</span> <span class="keywordtype">void</span> * cast_to_void_ptr(pointer ref) { <span class="keywordflow">return</span> (<span class="keywordtype">void</span> *)ref; }
-<a name="l00349"></a>00349     <span class="keyword">static</span> pointer cast_from_void_ptr(<span class="keywordtype">void</span> * ref) { <span class="keywordflow">return</span> (pointer)ref; }
-<a name="l00350"></a>00350     <span class="keyword">static</span> <span class="keywordtype">void</span> destroy_token( pointer <span class="comment">/*token*/</span>) {}
-<a name="l00351"></a>00351 };
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353 <span class="comment">// small object specialization (converts void* to the correct type, passes objects directly.)</span>
-<a name="l00354"></a>00354 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00355"></a>00355 <span class="keyword">class </span>token_helper<T, false> {
-<a name="l00356"></a>00356     <span class="keyword">typedef</span> <span class="keyword">union </span>{
-<a name="l00357"></a>00357         T actual_value;
-<a name="l00358"></a>00358         <span class="keywordtype">void</span> * void_overlay;
-<a name="l00359"></a>00359     } type_to_void_ptr_map;
-<a name="l00360"></a>00360     <span class="keyword">public</span>:
-<a name="l00361"></a>00361     <span class="keyword">typedef</span> T pointer;  <span class="comment">// not really a pointer in this case.</span>
-<a name="l00362"></a>00362     <span class="keyword">typedef</span> T value_type;
-<a name="l00363"></a>00363     <span class="keyword">static</span> pointer create_token(<span class="keyword">const</span> value_type & source) {
-<a name="l00364"></a>00364         <span class="keywordflow">return</span> source; }
-<a name="l00365"></a>00365     <span class="keyword">static</span> value_type & token(pointer & t) { <span class="keywordflow">return</span> t;}
-<a name="l00366"></a>00366     <span class="keyword">static</span> <span class="keywordtype">void</span> * cast_to_void_ptr(pointer ref) { 
-<a name="l00367"></a>00367         type_to_void_ptr_map mymap; 
-<a name="l00368"></a>00368         mymap.void_overlay = NULL;
-<a name="l00369"></a>00369         mymap.actual_value = ref; 
-<a name="l00370"></a>00370         <span class="keywordflow">return</span> mymap.void_overlay; 
-<a name="l00371"></a>00371     }
-<a name="l00372"></a>00372     <span class="keyword">static</span> pointer cast_from_void_ptr(<span class="keywordtype">void</span> * ref) { 
-<a name="l00373"></a>00373         type_to_void_ptr_map mymap;
-<a name="l00374"></a>00374         mymap.void_overlay = ref;
-<a name="l00375"></a>00375         <span class="keywordflow">return</span> mymap.actual_value;
-<a name="l00376"></a>00376     }
-<a name="l00377"></a>00377     <span class="keyword">static</span> <span class="keywordtype">void</span> destroy_token( pointer <span class="comment">/*token*/</span>) {}
-<a name="l00378"></a>00378 };
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> Body>
-<a name="l00381"></a>00381 <span class="keyword">class </span>concrete_filter: <span class="keyword">public</span> tbb::filter {
-<a name="l00382"></a>00382     <span class="keyword">const</span> Body& my_body;
-<a name="l00383"></a>00383     <span class="keyword">typedef</span> token_helper<T,is_large_object<T>::r > t_helper;
-<a name="l00384"></a>00384     <span class="keyword">typedef</span> <span class="keyword">typename</span> t_helper::pointer t_pointer;
-<a name="l00385"></a>00385     <span class="keyword">typedef</span> token_helper<U,is_large_object<U>::r > u_helper;
-<a name="l00386"></a>00386     <span class="keyword">typedef</span> <span class="keyword">typename</span> u_helper::pointer u_pointer;
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>* input) {
-<a name="l00389"></a>00389         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
-<a name="l00390"></a>00390         u_pointer output_u = u_helper::create_token(my_body(t_helper::token(temp_input)));
-<a name="l00391"></a>00391         t_helper::destroy_token(temp_input);
-<a name="l00392"></a>00392         <span class="keywordflow">return</span> u_helper::cast_to_void_ptr(output_u);
-<a name="l00393"></a>00393     }
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395 <span class="keyword">public</span>:
-<a name="l00396"></a>00396     concrete_filter(tbb::filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
-<a name="l00397"></a>00397 };
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399 <span class="comment">// input </span>
-<a name="l00400"></a>00400 <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Body>
-<a name="l00401"></a>00401 <span class="keyword">class </span>concrete_filter<void,U,Body>: <span class="keyword">public</span> filter {
-<a name="l00402"></a>00402     <span class="keyword">const</span> Body& my_body;
-<a name="l00403"></a>00403     <span class="keyword">typedef</span> token_helper<U, is_large_object<U>::r > u_helper;
-<a name="l00404"></a>00404     <span class="keyword">typedef</span> <span class="keyword">typename</span> u_helper::pointer u_pointer;
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406     <span class="comment">/*override*/</span><span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>*) {
-<a name="l00407"></a>00407         flow_control control;
-<a name="l00408"></a>00408         u_pointer output_u = u_helper::create_token(my_body(control));
-<a name="l00409"></a>00409         <span class="keywordflow">if</span>(control.is_pipeline_stopped) {
-<a name="l00410"></a>00410             u_helper::destroy_token(output_u);
-<a name="l00411"></a>00411             set_end_of_input();
-<a name="l00412"></a>00412             <span class="keywordflow">return</span> NULL;
-<a name="l00413"></a>00413         }
-<a name="l00414"></a>00414         <span class="keywordflow">return</span> u_helper::cast_to_void_ptr(output_u);
-<a name="l00415"></a>00415     }
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417 <span class="keyword">public</span>:
-<a name="l00418"></a>00418     concrete_filter(tbb::filter::mode filter_mode, <span class="keyword">const</span> Body& body) : 
-<a name="l00419"></a>00419         filter(static_cast<tbb::filter::mode>(filter_mode | filter_may_emit_null)),
-<a name="l00420"></a>00420         my_body(body)
-<a name="l00421"></a>00421     {}
-<a name="l00422"></a>00422 };
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Body>
-<a name="l00425"></a>00425 <span class="keyword">class </span>concrete_filter<T,void,Body>: <span class="keyword">public</span> filter {
-<a name="l00426"></a>00426     <span class="keyword">const</span> Body& my_body;
-<a name="l00427"></a>00427     <span class="keyword">typedef</span> token_helper<T, is_large_object<T>::r > t_helper;
-<a name="l00428"></a>00428     <span class="keyword">typedef</span> <span class="keyword">typename</span> t_helper::pointer t_pointer;
-<a name="l00429"></a>00429    
-<a name="l00430"></a>00430     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>* input) {
-<a name="l00431"></a>00431         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
-<a name="l00432"></a>00432         my_body(t_helper::token(temp_input));
-<a name="l00433"></a>00433         t_helper::destroy_token(temp_input);
-<a name="l00434"></a>00434         <span class="keywordflow">return</span> NULL;
-<a name="l00435"></a>00435     }
-<a name="l00436"></a>00436 <span class="keyword">public</span>:
-<a name="l00437"></a>00437     concrete_filter(tbb::filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
-<a name="l00438"></a>00438 };
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00441"></a>00441 <span class="keyword">class </span>concrete_filter<void,void,Body>: <span class="keyword">public</span> filter {
-<a name="l00442"></a>00442     <span class="keyword">const</span> Body& my_body;
-<a name="l00443"></a>00443     
-<a name="l00445"></a>00445     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>*) {
-<a name="l00446"></a>00446         flow_control control;
-<a name="l00447"></a>00447         my_body(control);
-<a name="l00448"></a>00448         <span class="keywordtype">void</span>* output = control.is_pipeline_stopped ? NULL : (<span class="keywordtype">void</span>*)(intptr_t)-1; 
-<a name="l00449"></a>00449         <span class="keywordflow">return</span> output;
-<a name="l00450"></a>00450     }
-<a name="l00451"></a>00451 <span class="keyword">public</span>:
-<a name="l00452"></a>00452     concrete_filter(filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
-<a name="l00453"></a>00453 };
-<a name="l00454"></a>00454 
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457 <span class="keyword">class </span>pipeline_proxy {
-<a name="l00458"></a>00458     <a class="code" href="a00284.html">tbb::pipeline</a> my_pipe;
-<a name="l00459"></a>00459 <span class="keyword">public</span>:
-<a name="l00460"></a>00460     pipeline_proxy( <span class="keyword">const</span> filter_t<void,void>& filter_chain );
-<a name="l00461"></a>00461     ~pipeline_proxy() {
-<a name="l00462"></a>00462         <span class="keywordflow">while</span>( filter* f = my_pipe.filter_list ) 
-<a name="l00463"></a>00463             <span class="keyword">delete</span> f; <span class="comment">// filter destructor removes it from the pipeline</span>
-<a name="l00464"></a>00464     }
-<a name="l00465"></a>00465     <a class="code" href="a00284.html">tbb::pipeline</a>* operator->() { <span class="keywordflow">return</span> &my_pipe; }
-<a name="l00466"></a>00466 };
-<a name="l00467"></a>00467 
-<a name="l00469"></a>00469 
-<a name="l00470"></a>00470 <span class="keyword">class </span>filter_node: tbb::internal::no_copy {
-<a name="l00472"></a>00472     <a class="code" href="a00228.html">tbb::atomic<intptr_t></a> ref_count;
-<a name="l00473"></a>00473 <span class="keyword">protected</span>:
-<a name="l00474"></a>00474     filter_node() {
-<a name="l00475"></a>00475         ref_count = 0;
-<a name="l00476"></a>00476 <span class="preprocessor">#ifdef __TBB_TEST_FILTER_NODE_COUNT</span>
-<a name="l00477"></a>00477 <span class="preprocessor"></span>        ++(__TBB_TEST_FILTER_NODE_COUNT);
-<a name="l00478"></a>00478 <span class="preprocessor">#endif</span>
-<a name="l00479"></a>00479 <span class="preprocessor"></span>    }
-<a name="l00480"></a>00480 <span class="keyword">public</span>:
-<a name="l00482"></a>00482     <span class="keyword">virtual</span> <span class="keywordtype">void</span> add_to( pipeline& ) = 0;
-<a name="l00484"></a>00484     <span class="keywordtype">void</span> add_ref() {++ref_count;}
-<a name="l00486"></a>00486     <span class="keywordtype">void</span> remove_ref() {
-<a name="l00487"></a>00487         __TBB_ASSERT(ref_count>0,<span class="stringliteral">"ref_count underflow"</span>);
-<a name="l00488"></a>00488         <span class="keywordflow">if</span>( --ref_count==0 ) 
-<a name="l00489"></a>00489             <span class="keyword">delete</span> <span class="keyword">this</span>;
-<a name="l00490"></a>00490     }
-<a name="l00491"></a>00491     <span class="keyword">virtual</span> ~filter_node() {
-<a name="l00492"></a>00492 <span class="preprocessor">#ifdef __TBB_TEST_FILTER_NODE_COUNT</span>
-<a name="l00493"></a>00493 <span class="preprocessor"></span>        --(__TBB_TEST_FILTER_NODE_COUNT);
-<a name="l00494"></a>00494 <span class="preprocessor">#endif</span>
-<a name="l00495"></a>00495 <span class="preprocessor"></span>    }
-<a name="l00496"></a>00496 };
-<a name="l00497"></a>00497 
-<a name="l00499"></a>00499 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> Body>
-<a name="l00500"></a>00500 <span class="keyword">class </span>filter_node_leaf: <span class="keyword">public</span> filter_node  {
-<a name="l00501"></a>00501     <span class="keyword">const</span> tbb::filter::mode mode;
-<a name="l00502"></a>00502     <span class="keyword">const</span> Body body;
-<a name="l00503"></a>00503     <span class="comment">/*override*/</span><span class="keywordtype">void</span> add_to( pipeline& p ) {
-<a name="l00504"></a>00504         concrete_filter<T,U,Body>* f = <span class="keyword">new</span> concrete_filter<T,U,Body>(mode,body);
-<a name="l00505"></a>00505         p.add_filter( *f );
-<a name="l00506"></a>00506     }
-<a name="l00507"></a>00507 <span class="keyword">public</span>:
-<a name="l00508"></a>00508     filter_node_leaf( tbb::filter::mode m, <span class="keyword">const</span> Body& b ) : mode(m), body(b) {}
-<a name="l00509"></a>00509 };
-<a name="l00510"></a>00510 
-<a name="l00512"></a>00512 <span class="keyword">class </span>filter_node_join: <span class="keyword">public</span> filter_node {
-<a name="l00513"></a>00513     <span class="keyword">friend</span> <span class="keyword">class </span>filter_node; <span class="comment">// to suppress GCC 3.2 warnings</span>
-<a name="l00514"></a>00514     filter_node& left;
-<a name="l00515"></a>00515     filter_node& right;
-<a name="l00516"></a>00516     <span class="comment">/*override*/</span>~filter_node_join() {
-<a name="l00517"></a>00517        left.remove_ref();
-<a name="l00518"></a>00518        right.remove_ref();
-<a name="l00519"></a>00519     }
-<a name="l00520"></a>00520     <span class="comment">/*override*/</span><span class="keywordtype">void</span> add_to( pipeline& p ) {
-<a name="l00521"></a>00521         left.add_to(p);
-<a name="l00522"></a>00522         right.add_to(p);
-<a name="l00523"></a>00523     }
-<a name="l00524"></a>00524 <span class="keyword">public</span>:
-<a name="l00525"></a>00525     filter_node_join( filter_node& x, filter_node& y ) : left(x), right(y) {
-<a name="l00526"></a>00526        left.add_ref();
-<a name="l00527"></a>00527        right.add_ref();
-<a name="l00528"></a>00528     }
-<a name="l00529"></a>00529 };
-<a name="l00530"></a>00530 
-<a name="l00531"></a>00531 } <span class="comment">// namespace internal</span>
-<a name="l00533"></a>00533 <span class="comment"></span>
-<a name="l00535"></a>00535 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> Body>
-<a name="l00536"></a><a class="code" href="a00257.html#85c2892eff1fddcd06e28911e75838bd">00536</a> <a class="code" href="a00257.html">filter_t<T,U></a> make_filter(tbb::filter::mode mode, <span class="keyword">const</span> Body& body) {
-<a name="l00537"></a>00537     <span class="keywordflow">return</span> <span class="keyword">new</span> internal::filter_node_leaf<T,U,Body>(mode, body);
-<a name="l00538"></a>00538 }
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> V, <span class="keyword">typename</span> U>
-<a name="l00541"></a>00541 <a class="code" href="a00257.html">filter_t<T,U></a> operator& (<span class="keyword">const</span> <a class="code" href="a00257.html">filter_t<T,V></a>& left, <span class="keyword">const</span> <a class="code" href="a00257.html">filter_t<V,U></a>& right) {
-<a name="l00542"></a>00542     __TBB_ASSERT(left.<a class="code" href="a00257.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>,<span class="stringliteral">"cannot use default-constructed filter_t as left argument of '&'"</span>);
-<a name="l00543"></a>00543     __TBB_ASSERT(right.<a class="code" href="a00257.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>,<span class="stringliteral">"cannot use default-constructed filter_t as right argument of '&'"</span>);
-<a name="l00544"></a>00544     <span class="keywordflow">return</span> <span class="keyword">new</span> internal::filter_node_join(*left.<a class="code" href="a00257.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>,*right.<a class="code" href="a00257.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>);
-<a name="l00545"></a>00545 }
-<a name="l00546"></a>00546 
-<a name="l00548"></a>00548 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00549"></a><a class="code" href="a00257.html">00549</a> <span class="keyword">class </span><a class="code" href="a00257.html">filter_t</a> {
-<a name="l00550"></a>00550     <span class="keyword">typedef</span> internal::filter_node filter_node;
-<a name="l00551"></a>00551     filter_node* root;
-<a name="l00552"></a>00552     <a class="code" href="a00257.html">filter_t</a>( filter_node* root_ ) : root(root_) {
-<a name="l00553"></a>00553         root->add_ref();
-<a name="l00554"></a>00554     }
-<a name="l00555"></a>00555     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_proxy;
-<a name="l00556"></a>00556     <span class="keyword">template</span><<span class="keyword">typename</span> T_, <span class="keyword">typename</span> U_, <span class="keyword">typename</span> Body>
-<a name="l00557"></a>00557     <span class="keyword">friend</span> <a class="code" href="a00257.html">filter_t<T_,U_></a> <a class="code" href="a00257.html#85c2892eff1fddcd06e28911e75838bd">make_filter</a>(tbb::filter::mode, <span class="keyword">const</span> Body& );
-<a name="l00558"></a>00558     <span class="keyword">template</span><<span class="keyword">typename</span> T_, <span class="keyword">typename</span> V_, <span class="keyword">typename</span> U_>
-<a name="l00559"></a>00559     <span class="keyword">friend</span> <a class="code" href="a00257.html">filter_t<T_,U_></a> operator& (<span class="keyword">const</span> <a class="code" href="a00257.html">filter_t<T_,V_></a>& , <span class="keyword">const</span> <a class="code" href="a00257.html">filter_t<V_,U_></a>& );
-<a name="l00560"></a>00560 <span class="keyword">public</span>:
-<a name="l00561"></a>00561     <a class="code" href="a00257.html">filter_t</a>() : root(NULL) {}
-<a name="l00562"></a>00562     <a class="code" href="a00257.html">filter_t</a>( <span class="keyword">const</span> <a class="code" href="a00257.html">filter_t<T,U></a>& rhs ) : root(rhs.<a class="code" href="a00257.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>) {
-<a name="l00563"></a>00563         <span class="keywordflow">if</span>( root ) root->add_ref();
-<a name="l00564"></a>00564     }
-<a name="l00565"></a>00565     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00566"></a>00566     <a class="code" href="a00257.html">filter_t</a>( tbb::filter::mode mode, <span class="keyword">const</span> Body& body ) :
-<a name="l00567"></a>00567         root( <span class="keyword">new</span> internal::filter_node_leaf<T,U,Body>(mode, body) ) {
-<a name="l00568"></a>00568         root->add_ref();
-<a name="l00569"></a>00569     }
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00257.html">filter_t<T,U></a>& rhs ) {
-<a name="l00572"></a>00572         <span class="comment">// Order of operations below carefully chosen so that reference counts remain correct</span>
-<a name="l00573"></a>00573         <span class="comment">// in unlikely event that remove_ref throws exception.</span>
-<a name="l00574"></a>00574         filter_node* old = root;
-<a name="l00575"></a>00575         root = rhs.<a class="code" href="a00257.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>; 
-<a name="l00576"></a>00576         <span class="keywordflow">if</span>( root ) root->add_ref();
-<a name="l00577"></a>00577         <span class="keywordflow">if</span>( old ) old->remove_ref();
-<a name="l00578"></a>00578     }
-<a name="l00579"></a>00579     ~<a class="code" href="a00257.html">filter_t</a>() {
-<a name="l00580"></a>00580         <span class="keywordflow">if</span>( root ) root->remove_ref();
-<a name="l00581"></a>00581     }
-<a name="l00582"></a>00582     <span class="keywordtype">void</span> clear() {
-<a name="l00583"></a>00583         <span class="comment">// Like operator= with filter_t() on right side.</span>
-<a name="l00584"></a>00584         <span class="keywordflow">if</span>( root ) {
-<a name="l00585"></a>00585             filter_node* old = root;
-<a name="l00586"></a>00586             root = NULL;
-<a name="l00587"></a>00587             old->remove_ref();
-<a name="l00588"></a>00588         }
-<a name="l00589"></a>00589     }
-<a name="l00590"></a>00590 };
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592 <span class="keyword">inline</span> internal::pipeline_proxy::pipeline_proxy( <span class="keyword">const</span> <a class="code" href="a00257.html">filter_t<void,void></a>& filter_chain ) : my_pipe() {
-<a name="l00593"></a>00593     __TBB_ASSERT( filter_chain.<a class="code" href="a00257.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>, <span class="stringliteral">"cannot apply parallel_pipeline to default-constructed filter_t"</span>  );
-<a name="l00594"></a>00594     filter_chain.<a class="code" href="a00257.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>->add_to(my_pipe);
-<a name="l00595"></a>00595 }
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597 <span class="keyword">inline</span> <span class="keywordtype">void</span> parallel_pipeline(size_t max_number_of_live_tokens, <span class="keyword">const</span> <a class="code" href="a00257.html">filter_t<void,void></a>& filter_chain
-<a name="l00598"></a>00598 #<span class="keywordflow">if</span> __TBB_TASK_GROUP_CONTEXT
-<a name="l00599"></a>00599     , <a class="code" href="a00314.html">tbb::task_group_context</a>& context
-<a name="l00600"></a>00600 #endif
-<a name="l00601"></a>00601     ) {
-<a name="l00602"></a>00602     internal::pipeline_proxy pipe(filter_chain);
-<a name="l00603"></a>00603     <span class="comment">// tbb::pipeline::run() is called via the proxy</span>
-<a name="l00604"></a>00604     pipe->run(max_number_of_live_tokens
-<a name="l00605"></a>00605 #<span class="keywordflow">if</span> __TBB_TASK_GROUP_CONTEXT
-<a name="l00606"></a>00606               , context
-<a name="l00607"></a>00607 #endif
-<a name="l00608"></a>00608     );
-<a name="l00609"></a>00609 }
-<a name="l00610"></a>00610 
-<a name="l00611"></a>00611 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00612"></a>00612 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> parallel_pipeline(size_t max_number_of_live_tokens, <span class="keyword">const</span> filter_t<void,void>& filter_chain) {
-<a name="l00613"></a>00613     <a class="code" href="a00314.html">tbb::task_group_context</a> context;
-<a name="l00614"></a>00614     parallel_pipeline(max_number_of_live_tokens, filter_chain, context);
-<a name="l00615"></a>00615 }
-<a name="l00616"></a>00616 <span class="preprocessor">#endif // __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00617"></a>00617 <span class="preprocessor"></span>
-<a name="l00618"></a>00618 } <span class="comment">// interface6</span>
-<a name="l00619"></a>00619 
-<a name="l00620"></a>00620 <span class="keyword">using</span> interface6::flow_control;
-<a name="l00621"></a>00621 <span class="keyword">using</span> interface6::filter_t;
-<a name="l00622"></a>00622 <span class="keyword">using</span> interface6::make_filter;
-<a name="l00623"></a>00623 <span class="keyword">using</span> interface6::parallel_pipeline;
-<a name="l00624"></a>00624 
-<a name="l00625"></a>00625 } <span class="comment">// tbb</span>
-<a name="l00626"></a>00626 
-<a name="l00627"></a>00627 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_pipeline_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00544.html b/doc/html/a00544.html
new file mode 100644
index 0000000..4e3d497
--- /dev/null
+++ b/doc/html/a00544.html
@@ -0,0 +1,256 @@
+<!DOCTYPE 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-2012 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 <new></span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "task.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "blocked_range.h"</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="l00032"></a>00032 <span class="keyword">namespace </span>interface6 {
+<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::task_partition_type my_partition;
+<a name="l00043"></a>00043         <span class="comment">/*override*/</span> task* execute();
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045     <span class="keyword">public</span>:
+<a name="l00047"></a>00047         start_for( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, Partitioner& partitioner ) :
+<a name="l00048"></a>00048             my_range(range),    
+<a name="l00049"></a>00049             my_body(body),
+<a name="l00050"></a>00050             my_partition(partitioner)
+<a name="l00051"></a>00051         {
+<a name="l00052"></a>00052         }
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055         start_for( start_for& parent_, split ) :
+<a name="l00056"></a>00056             my_range(parent_.my_range,split()),
+<a name="l00057"></a>00057             my_body(parent_.my_body),
+<a name="l00058"></a>00058             my_partition(parent_.my_partition, split())
+<a name="l00059"></a>00059         {
+<a name="l00060"></a>00060             my_partition.set_affinity(*<span class="keyword">this</span>);
+<a name="l00061"></a>00061         }
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064         start_for( start_for& parent_, <span class="keyword">const</span> Range& r, depth_t d ) :
+<a name="l00065"></a>00065             my_range(r),
+<a name="l00066"></a>00066             my_body(parent_.my_body),
+<a name="l00067"></a>00067             my_partition(parent_.my_partition,split())
+<a name="l00068"></a>00068         {
+<a name="l00069"></a>00069             my_partition.set_affinity(*<span class="keyword">this</span>);
+<a name="l00070"></a>00070             my_partition.align_depth( d );
+<a name="l00071"></a>00071         }
+<a name="l00073"></a>00073         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
+<a name="l00074"></a>00074             my_partition.note_affinity( <span class="keywordtype">id</span> );
+<a name="l00075"></a>00075         }
+<a name="l00076"></a>00076         <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="l00077"></a>00077             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00078"></a>00078 #<span class="keywordflow">if</span> !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP
+<a name="l00079"></a>00079                 start_for& a = *<span class="keyword">new</span>(<a class="code" href="a00337.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_for(range,body,const_cast<Partitioner&>(partitioner));
+<a name="l00080"></a>00080 <span class="preprocessor">#else</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
+<a name="l00082"></a>00082                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
+<a name="l00083"></a>00083                 task_group_context context;
+<a name="l00084"></a>00084                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
+<a name="l00085"></a>00085 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */</span>
+<a name="l00086"></a>00086                 <a class="code" href="a00337.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
+<a name="l00087"></a>00087             }
+<a name="l00088"></a>00088         }
+<a name="l00089"></a>00089 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00090"></a>00090 <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="l00091"></a>00091             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00092"></a>00092                 start_for& a = *<span class="keyword">new</span>(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
+<a name="l00093"></a>00093                 <a class="code" href="a00337.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>(a);
+<a name="l00094"></a>00094             }
+<a name="l00095"></a>00095         }
+<a name="l00096"></a>00096 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00098"></a>00098         flag_task *create_continuation() {
+<a name="l00099"></a>00099             <span class="keywordflow">return</span> <span class="keyword">new</span>( allocate_continuation() ) flag_task();
+<a name="l00100"></a>00100         }
+<a name="l00102"></a>00102         <span class="keywordtype">void</span> run_body( Range &r ) { my_body( r ); }
+<a name="l00103"></a>00103     };
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105     <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="l00106"></a>00106     task* start_for<Range,Body,Partitioner>::execute() {
+<a name="l00107"></a>00107         my_partition.check_being_stolen( *<span class="keyword">this</span> );
+<a name="l00108"></a>00108         my_partition.execute(*<span class="keyword">this</span>, my_range);
+<a name="l00109"></a>00109         <span class="keywordflow">return</span> NULL;
+<a name="l00110"></a>00110     } 
+<a name="l00111"></a>00111 } <span class="comment">// namespace internal</span>
+<a name="l00113"></a>00113 <span class="comment"></span>} <span class="comment">// namespace interfaceX</span>
+<a name="l00114"></a>00114 
+<a name="l00116"></a>00116 <span class="keyword">namespace </span>internal {
+<a name="l00117"></a>00117     <span class="keyword">using</span> interface6::internal::start_for;
+<a name="l00118"></a>00118     
+<a name="l00120"></a>00120     <span class="keyword">template</span><<span class="keyword">typename</span> Function, <span class="keyword">typename</span> Index>
+<a name="l00121"></a>00121     <span class="keyword">class </span>parallel_for_body : internal::no_assign {
+<a name="l00122"></a>00122         <span class="keyword">const</span> Function &my_func;
+<a name="l00123"></a>00123         <span class="keyword">const</span> Index my_begin;
+<a name="l00124"></a>00124         <span class="keyword">const</span> Index my_step; 
+<a name="l00125"></a>00125     <span class="keyword">public</span>:
+<a name="l00126"></a>00126         parallel_for_body( <span class="keyword">const</span> Function& _func, Index& _begin, Index& _step) 
+<a name="l00127"></a>00127             : my_func(_func), my_begin(_begin), my_step(_step) {}
+<a name="l00128"></a>00128         
+<a name="l00129"></a>00129         <span class="keywordtype">void</span> operator()( <a class="code" href="a00259.html">tbb::blocked_range<Index></a>& r )<span class="keyword"> const </span>{
+<a name="l00130"></a>00130             <span class="keywordflow">for</span>( Index i = r.<a class="code" href="a00259.html#18d2258400756ac1446dac7676b18df3">begin</a>(),  k = my_begin + i * my_step; i < r.<a class="code" href="a00259.html#8b929d93ddc13f148b11bceef3a3bdf8">end</a>(); i++, k = k + my_step)
+<a name="l00131"></a>00131                 my_func( k );
+<a name="l00132"></a>00132         }
+<a name="l00133"></a>00133     };
+<a name="l00134"></a>00134 } <span class="comment">// namespace internal</span>
+<a name="l00136"></a>00136 <span class="comment"></span>
+<a name="l00137"></a>00137 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
+<a name="l00138"></a>00138 
+<a name="l00149"></a>00149 
+<a name="l00151"></a>00151 
+<a name="l00152"></a>00152 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00153"></a><a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">00153</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body ) {
+<a name="l00154"></a>00154     internal::start_for<Range,Body,__TBB_DEFAULT_PARTITIONER>::run(range,body,__TBB_DEFAULT_PARTITIONER());
+<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="a00426.html#g13cac5dd55c7533bccea43a51c33d0e5">00160</a> <span class="keywordtype">void</span> <a class="code" href="a00426.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="a00329.html">simple_partitioner</a>& partitioner ) {
+<a name="l00161"></a>00161     internal::start_for<Range,Body,simple_partitioner>::run(range,body,partitioner);
+<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="a00426.html#ga7ac75d532389b55b9247f3fdb0b00d1">00167</a> <span class="keywordtype">void</span> <a class="code" href="a00426.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="a00257.html">auto_partitioner</a>& partitioner ) {
+<a name="l00168"></a>00168     internal::start_for<Range,Body,auto_partitioner>::run(range,body,partitioner);
+<a name="l00169"></a>00169 }
+<a name="l00170"></a>00170 
+<a name="l00172"></a>00172 
+<a name="l00173"></a>00173 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00174"></a><a class="code" href="a00426.html#g9cd1b210ceb1c040f30e390b4a21bde8">00174</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00249.html">affinity_partitioner</a>& partitioner ) {
+<a name="l00175"></a>00175     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);
+<a name="l00176"></a>00176 }
+<a name="l00177"></a>00177 
+<a name="l00178"></a>00178 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00180"></a>00180 <span class="preprocessor"></span>
+<a name="l00181"></a>00181 <span class="preprocessor">template<typename Range, typename Body></span>
+<a name="l00182"></a><a class="code" href="a00426.html#g2d317a5e0078cd193125439fed60dfdc">00182</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00426.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="a00329.html">simple_partitioner</a>& partitioner, <a class="code" hr [...]
+<a name="l00183"></a>00183     internal::start_for<Range,Body,simple_partitioner>::run(range, body, partitioner, context);
+<a name="l00184"></a>00184 }
+<a name="l00185"></a>00185 
+<a name="l00187"></a>00187 
+<a name="l00188"></a>00188 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00189"></a><a class="code" href="a00426.html#g1c0700e3f85e83a788ff3ede88ebb7e9">00189</a> <span class="keywordtype">void</span> <a class="code" href="a00426.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="a00257.html">auto_partitioner</a>& partitioner, <a class="code" href="a00339.html">task_group_context< [...]
+<a name="l00190"></a>00190     internal::start_for<Range,Body,auto_partitioner>::run(range, body, partitioner, context);
+<a name="l00191"></a>00191 }
+<a name="l00192"></a>00192 
+<a name="l00194"></a>00194 
+<a name="l00195"></a>00195 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00196"></a><a class="code" href="a00426.html#g04b4696b67370c01353ff5974c8f1196">00196</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <a class="code" href="a00249.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00339.html">task_group_context</a>& context ) {
+<a name="l00197"></a>00197     internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner, context);
+<a name="l00198"></a>00198 }
+<a name="l00199"></a>00199 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201 
+<a name="l00202"></a>00202 <span class="keyword">namespace </span>strict_ppl {
+<a name="l00203"></a>00203 
+<a name="l00205"></a>00205 
+<a name="l00206"></a>00206 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
+<a name="l00207"></a>00207 <span class="keywordtype">void</span> <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f) {
+<a name="l00208"></a>00208     <span class="keywordflow">if</span> (step <= 0 )
+<a name="l00209"></a>00209         internal::throw_exception(internal::eid_nonpositive_step); <span class="comment">// throws std::invalid_argument</span>
+<a name="l00210"></a>00210     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (last > first) {
+<a name="l00211"></a>00211         <span class="comment">// Above "else" avoids "potential divide by zero" warning on some platforms</span>
+<a name="l00212"></a>00212         Index end = (last - first - Index(1)) / step + Index(1);
+<a name="l00213"></a>00213         <a class="code" href="a00259.html">tbb::blocked_range<Index></a> range(static_cast<Index>(0), end);
+<a name="l00214"></a>00214         internal::parallel_for_body<Function, Index> body(f, first, step);
+<a name="l00215"></a>00215         <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a>(range, body, <a class="code" href="a00257.html">tbb::auto_partitioner</a>());
+<a name="l00216"></a>00216     }
+<a name="l00217"></a>00217 }
+<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="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f) {
+<a name="l00221"></a>00221     <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f);
+<a name="l00222"></a>00222 }
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00226"></a>00226 <span class="preprocessor">template <typename Index, typename Function></span>
+<a name="l00227"></a>00227 <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, Index step, <span class="keyword">const</span> Function& f, <a class="code" href="a00339.html">tbb::task_group_context</a> &context) {
+<a name="l00228"></a>00228     <span class="keywordflow">if</span> (step <= 0 )
+<a name="l00229"></a>00229         internal::throw_exception(internal::eid_nonpositive_step); <span class="comment">// throws std::invalid_argument</span>
+<a name="l00230"></a>00230     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (last > first) {
+<a name="l00231"></a>00231         <span class="comment">// Above "else" avoids "potential divide by zero" warning on some platforms</span>
+<a name="l00232"></a>00232         Index end = (last - first - Index(1)) / step + Index(1);
+<a name="l00233"></a>00233         <a class="code" href="a00259.html">tbb::blocked_range<Index></a> range(static_cast<Index>(0), end);
+<a name="l00234"></a>00234         internal::parallel_for_body<Function, Index> body(f, first, step);
+<a name="l00235"></a>00235         <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">tbb::parallel_for</a>(range, body, <a class="code" href="a00257.html">tbb::auto_partitioner</a>(), context);
+<a name="l00236"></a>00236     }
+<a name="l00237"></a>00237 }
+<a name="l00239"></a>00239 <span class="keyword">template</span> <<span class="keyword">typename</span> Index, <span class="keyword">typename</span> Function>
+<a name="l00240"></a>00240 <span class="keywordtype">void</span> <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(Index first, Index last, <span class="keyword">const</span> Function& f, <a class="code" href="a00339.html">tbb::task_group_context</a> &context) {
+<a name="l00241"></a>00241     <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>(first, last, static_cast<Index>(1), f, context);
+<a name="l00242"></a>00242 }
+<a name="l00243"></a>00243 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00244"></a>00244 
+<a name="l00245"></a>00245 
+<a name="l00246"></a>00246 } <span class="comment">// namespace strict_ppl</span>
+<a name="l00247"></a>00247 
+<a name="l00248"></a>00248 <span class="keyword">using</span> <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">strict_ppl::parallel_for</a>;
+<a name="l00249"></a>00249 
+<a name="l00250"></a>00250 } <span class="comment">// namespace tbb</span>
+<a name="l00251"></a>00251 
+<a name="l00252"></a>00252 <span class="preprocessor">#if TBB_PREVIEW_SERIAL_SUBSET</span>
+<a name="l00253"></a>00253 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NORMAL_EXECUTION</span>
+<a name="l00254"></a>00254 <span class="preprocessor"></span><span class="preprocessor">#include "../serial/tbb/parallel_for.h"</span>
+<a name="l00255"></a>00255 <span class="preprocessor">#undef __TBB_NORMAL_EXECUTION</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 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_H */</span>
+<a name="l00259"></a>00259 
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00548.html b/doc/html/a00548.html
new file mode 100644
index 0000000..d89d71a
--- /dev/null
+++ b/doc/html/a00548.html
@@ -0,0 +1,92 @@
+<!DOCTYPE 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>
+<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_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-2012 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_each_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_for_each_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="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         <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(<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>::reference 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="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> InputIterator, <span class="keyword">typename</span> Function>
+<a name="l00052"></a><a class="code" href="a00426.html#gcd40c32f319747e61a8f73fcfc452001">00052</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a>(InputIterator first, InputIterator last, <span class="keyword">const</span> Function& f, <a class="code" href="a00339.html">task_group_context</a> &context) {
+<a name="l00053"></a>00053     internal::parallel_for_each_body<Function, InputIterator> body(f);
+<a name="l00054"></a>00054     <a class="code" href="a00426.html#g3383e2703977012b6f384d673410f1f7">tbb::parallel_do</a> (first, last, body, context);
+<a name="l00055"></a>00055 }
+<a name="l00056"></a>00056 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<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="a00426.html#gc2d710ca573f0a9bd94379cba3772def">00060</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#gcd40c32f319747e61a8f73fcfc452001">parallel_for_each</a>(InputIterator first, InputIterator last, <span class="keyword">const</span> Function& f) {
+<a name="l00061"></a>00061     internal::parallel_for_each_body<Function, InputIterator> body(f);
+<a name="l00062"></a>00062     <a class="code" href="a00426.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="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_for_each_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00550.html b/doc/html/a00550.html
new file mode 100644
index 0000000..e4c96d7
--- /dev/null
+++ b/doc/html/a00550.html
@@ -0,0 +1,386 @@
+<!DOCTYPE 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_invoke.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_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-2012 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_invoke_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_invoke_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 
+<a name="l00028"></a>00028 <span class="preprocessor">#if !__TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00030"></a><a class="code" href="a00339.html">00030</a>     <span class="keyword">struct </span><a class="code" href="a00339.html">task_group_context</a> {};
+<a name="l00031"></a>00031 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00032"></a>00032 
+<a name="l00034"></a>00034 <span class="keyword">namespace </span>internal {
+<a name="l00035"></a>00035     <span class="comment">// Simple task object, executing user method</span>
+<a name="l00036"></a>00036     <span class="keyword">template</span><<span class="keyword">typename</span> function>
+<a name="l00037"></a>00037     <span class="keyword">class </span>function_invoker : <span class="keyword">public</span> <a class="code" href="a00337.html">task</a>{
+<a name="l00038"></a>00038     <span class="keyword">public</span>:
+<a name="l00039"></a>00039         function_invoker(<span class="keyword">const</span> function& _function) : my_function(_function) {}
+<a name="l00040"></a>00040     <span class="keyword">private</span>:
+<a name="l00041"></a>00041         <span class="keyword">const</span> function &my_function;
+<a name="l00042"></a>00042         <span class="comment">/*override*/</span>
+<a name="l00043"></a>00043         task* execute()
+<a name="l00044"></a>00044         {
+<a name="l00045"></a>00045             my_function();
+<a name="l00046"></a>00046             <span class="keywordflow">return</span> NULL;
+<a name="l00047"></a>00047         }
+<a name="l00048"></a>00048     };
+<a name="l00049"></a>00049 
+<a name="l00050"></a>00050     <span class="comment">// The class spawns two or three child tasks</span>
+<a name="l00051"></a>00051     <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="l00052"></a>00052     <span class="keyword">class </span>spawner : <span class="keyword">public</span> task {
+<a name="l00053"></a>00053     <span class="keyword">private</span>:
+<a name="l00054"></a>00054         <span class="keyword">const</span> function1& my_func1;
+<a name="l00055"></a>00055         <span class="keyword">const</span> function2& my_func2;
+<a name="l00056"></a>00056         <span class="keyword">const</span> function3& my_func3;
+<a name="l00057"></a>00057         <span class="keywordtype">bool</span> is_recycled;
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059         task* execute (){
+<a name="l00060"></a>00060             <span class="keywordflow">if</span>(is_recycled){
+<a name="l00061"></a>00061                 <span class="keywordflow">return</span> NULL;
+<a name="l00062"></a>00062             }<span class="keywordflow">else</span>{
+<a name="l00063"></a>00063                 __TBB_ASSERT(N==2 || N==3, <span class="stringliteral">"Number of arguments passed to spawner is wrong"</span>);
+<a name="l00064"></a>00064                 set_ref_count(N);
+<a name="l00065"></a>00065                 recycle_as_safe_continuation();
+<a name="l00066"></a>00066                 internal::function_invoker<function2>* invoker2 = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function2>(my_func2);
+<a name="l00067"></a>00067                 __TBB_ASSERT(invoker2, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00068"></a>00068                 spawn(*invoker2);
+<a name="l00069"></a>00069                 size_t n = N; <span class="comment">// To prevent compiler warnings</span>
+<a name="l00070"></a>00070                 <span class="keywordflow">if</span> (n>2) {
+<a name="l00071"></a>00071                     internal::function_invoker<function3>* invoker3 = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function3>(my_func3);
+<a name="l00072"></a>00072                     __TBB_ASSERT(invoker3, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00073"></a>00073                     spawn(*invoker3);
+<a name="l00074"></a>00074                 }
+<a name="l00075"></a>00075                 my_func1();
+<a name="l00076"></a>00076                 is_recycled = <span class="keyword">true</span>;
+<a name="l00077"></a>00077                 <span class="keywordflow">return</span> NULL;
+<a name="l00078"></a>00078             }
+<a name="l00079"></a>00079         } <span class="comment">// execute</span>
+<a name="l00080"></a>00080 
+<a name="l00081"></a>00081     <span class="keyword">public</span>:
+<a name="l00082"></a>00082         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="l00083"></a>00083     };
+<a name="l00084"></a>00084 
+<a name="l00085"></a>00085     <span class="comment">// Creates and spawns child tasks</span>
+<a name="l00086"></a>00086     <span class="keyword">class </span>parallel_invoke_helper : <span class="keyword">public</span> empty_task {
+<a name="l00087"></a>00087     <span class="keyword">public</span>:
+<a name="l00088"></a>00088         <span class="comment">// Dummy functor class</span>
+<a name="l00089"></a>00089         <span class="keyword">class </span>parallel_invoke_noop {
+<a name="l00090"></a>00090         <span class="keyword">public</span>:
+<a name="l00091"></a>00091             <span class="keywordtype">void</span> operator() ()<span class="keyword"> const </span>{}
+<a name="l00092"></a>00092         };
+<a name="l00093"></a>00093         <span class="comment">// Creates a helper object with user-defined number of children expected</span>
+<a name="l00094"></a>00094         parallel_invoke_helper(<span class="keywordtype">int</span> number_of_children)
+<a name="l00095"></a>00095         {
+<a name="l00096"></a>00096             set_ref_count(number_of_children + 1);
+<a name="l00097"></a>00097         }
+<a name="l00098"></a>00098         <span class="comment">// Adds child task and spawns it</span>
+<a name="l00099"></a>00099         <span class="keyword">template</span> <<span class="keyword">typename</span> function>
+<a name="l00100"></a>00100         <span class="keywordtype">void</span> add_child (<span class="keyword">const</span> function &_func)
+<a name="l00101"></a>00101         {
+<a name="l00102"></a>00102             internal::function_invoker<function>* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<function>(_func);
+<a name="l00103"></a>00103             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00104"></a>00104             spawn(*invoker);
+<a name="l00105"></a>00105         }
+<a name="l00106"></a>00106 
+<a name="l00107"></a>00107         <span class="comment">// Adds a task with multiple child tasks and spawns it</span>
+<a name="l00108"></a>00108         <span class="comment">// two arguments</span>
+<a name="l00109"></a>00109         <span class="keyword">template</span> <<span class="keyword">typename</span> function1, <span class="keyword">typename</span> function2>
+<a name="l00110"></a>00110         <span class="keywordtype">void</span> add_children (<span class="keyword">const</span> function1& _func1, <span class="keyword">const</span> function2& _func2)
+<a name="l00111"></a>00111         {
+<a name="l00112"></a>00112             <span class="comment">// The third argument is dummy, it is ignored actually.</span>
+<a name="l00113"></a>00113             parallel_invoke_noop noop;
+<a name="l00114"></a>00114             internal::spawner<2, function1, function2, parallel_invoke_noop>& sub_root = *<span class="keyword">new</span>(allocate_child())internal::spawner<2, function1, function2, parallel_invoke_noop>(_func1, _func2, noop);
+<a name="l00115"></a>00115             spawn(sub_root);
+<a name="l00116"></a>00116         }
+<a name="l00117"></a>00117         <span class="comment">// three arguments</span>
+<a name="l00118"></a>00118         <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="l00119"></a>00119         <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="l00120"></a>00120         {
+<a name="l00121"></a>00121             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="l00122"></a>00122             spawn(sub_root);
+<a name="l00123"></a>00123         }
+<a name="l00124"></a>00124 
+<a name="l00125"></a>00125         <span class="comment">// Waits for all child tasks</span>
+<a name="l00126"></a>00126         <span class="keyword">template</span> <<span class="keyword">typename</span> F0>
+<a name="l00127"></a>00127         <span class="keywordtype">void</span> run_and_finish(<span class="keyword">const</span> F0& f0)
+<a name="l00128"></a>00128         {
+<a name="l00129"></a>00129             internal::function_invoker<F0>* invoker = <span class="keyword">new</span> (allocate_child()) internal::function_invoker<F0>(f0);
+<a name="l00130"></a>00130             __TBB_ASSERT(invoker, <span class="stringliteral">"Child task allocation failed"</span>);
+<a name="l00131"></a>00131             spawn_and_wait_for_all(*invoker);
+<a name="l00132"></a>00132         }
+<a name="l00133"></a>00133     };
+<a name="l00134"></a>00134     <span class="comment">// The class destroys root if exception occurred as well as in normal case</span>
+<a name="l00135"></a>00135     <span class="keyword">class </span>parallel_invoke_cleaner: internal::no_copy {
+<a name="l00136"></a>00136     <span class="keyword">public</span>:
+<a name="l00137"></a>00137 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00138"></a>00138 <span class="preprocessor"></span>        parallel_invoke_cleaner(<span class="keywordtype">int</span> number_of_children, <a class="code" href="a00339.html">tbb::task_group_context</a>& context)
+<a name="l00139"></a>00139             : root(*new(task::allocate_root(context)) internal::parallel_invoke_helper(number_of_children))
+<a name="l00140"></a>00140 #else
+<a name="l00141"></a>00141         parallel_invoke_cleaner(int number_of_children, tbb::task_group_context&)
+<a name="l00142"></a>00142             : root(*new(task::allocate_root()) internal::parallel_invoke_helper(number_of_children))
+<a name="l00143"></a>00143 #endif <span class="comment">/* !__TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00144"></a>00144         {}
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146         ~parallel_invoke_cleaner(){
+<a name="l00147"></a>00147             root.destroy(root);
+<a name="l00148"></a>00148         }
+<a name="l00149"></a>00149         internal::parallel_invoke_helper& root;
+<a name="l00150"></a>00150     };
+<a name="l00151"></a>00151 } <span class="comment">// namespace internal</span>
+<a name="l00153"></a>00153 <span class="comment"></span>
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158 
+<a name="l00160"></a>00160 <span class="comment">// parallel_invoke with user-defined context</span>
+<a name="l00161"></a>00161 <span class="comment">// two arguments</span>
+<a name="l00162"></a>00162 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1 >
+<a name="l00163"></a><a class="code" href="a00426.html#gd3e2998f171494f94c2103f4eb924084">00163</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1, <a class="code" href="a00339.html">tbb::task_group_context</a>& context) {
+<a name="l00164"></a>00164     internal::parallel_invoke_cleaner cleaner(2, context);
+<a name="l00165"></a>00165     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00166"></a>00166 
+<a name="l00167"></a>00167     root.add_child(f1);
+<a name="l00168"></a>00168 
+<a name="l00169"></a>00169     root.run_and_finish(f0);
+<a name="l00170"></a>00170 }
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172 <span class="comment">// three 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 >
+<a name="l00174"></a>00174 <span class="keywordtype">void</span> <a class="code" href="a00426.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="a00339.html">tbb::task_group_context</a>& context) {
+<a name="l00175"></a>00175     internal::parallel_invoke_cleaner cleaner(3, 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(f2);
+<a name="l00179"></a>00179     root.add_child(f1);
+<a name="l00180"></a>00180 
+<a name="l00181"></a>00181     root.run_and_finish(f0);
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184 <span class="comment">// four arguments</span>
+<a name="l00185"></a>00185 <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="l00186"></a>00186 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00187"></a>00187                      <a class="code" href="a00339.html">tbb::task_group_context</a>& context)
+<a name="l00188"></a>00188 {
+<a name="l00189"></a>00189     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00190"></a>00190     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192     root.add_child(f3);
+<a name="l00193"></a>00193     root.add_child(f2);
+<a name="l00194"></a>00194     root.add_child(f1);
+<a name="l00195"></a>00195 
+<a name="l00196"></a>00196     root.run_and_finish(f0);
+<a name="l00197"></a>00197 }
+<a name="l00198"></a>00198 
+<a name="l00199"></a>00199 <span class="comment">// five arguments</span>
+<a name="l00200"></a>00200 <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="l00201"></a>00201 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00202"></a>00202                      <a class="code" href="a00339.html">tbb::task_group_context</a>& context)
+<a name="l00203"></a>00203 {
+<a name="l00204"></a>00204     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00205"></a>00205     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00206"></a>00206 
+<a name="l00207"></a>00207     root.add_children(f4, f3);
+<a name="l00208"></a>00208     root.add_children(f2, f1);
+<a name="l00209"></a>00209 
+<a name="l00210"></a>00210     root.run_and_finish(f0);
+<a name="l00211"></a>00211 }
+<a name="l00212"></a>00212 
+<a name="l00213"></a>00213 <span class="comment">// six arguments</span>
+<a name="l00214"></a>00214 <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="l00215"></a>00215 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00216"></a>00216                      <a class="code" href="a00339.html">tbb::task_group_context</a>& context)
+<a name="l00217"></a>00217 {
+<a name="l00218"></a>00218     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00219"></a>00219     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00220"></a>00220 
+<a name="l00221"></a>00221     root.add_children(f5, f4, f3);
+<a name="l00222"></a>00222     root.add_children(f2, f1);
+<a name="l00223"></a>00223 
+<a name="l00224"></a>00224     root.run_and_finish(f0);
+<a name="l00225"></a>00225 }
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227 <span class="comment">// seven arguments</span>
+<a name="l00228"></a>00228 <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="l00229"></a>00229 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00230"></a>00230                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6,
+<a name="l00231"></a>00231                      <a class="code" href="a00339.html">tbb::task_group_context</a>& context)
+<a name="l00232"></a>00232 {
+<a name="l00233"></a>00233     internal::parallel_invoke_cleaner cleaner(3, context);
+<a name="l00234"></a>00234     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236     root.add_children(f6, f5, f4);
+<a name="l00237"></a>00237     root.add_children(f3, f2, f1);
+<a name="l00238"></a>00238 
+<a name="l00239"></a>00239     root.run_and_finish(f0);
+<a name="l00240"></a>00240 }
+<a name="l00241"></a>00241 
+<a name="l00242"></a>00242 <span class="comment">// eight arguments</span>
+<a name="l00243"></a>00243 <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="l00244"></a>00244          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7>
+<a name="l00245"></a>00245 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00246"></a>00246                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7,
+<a name="l00247"></a>00247                      <a class="code" href="a00339.html">tbb::task_group_context</a>& context)
+<a name="l00248"></a>00248 {
+<a name="l00249"></a>00249     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00250"></a>00250     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00251"></a>00251 
+<a name="l00252"></a>00252     root.add_children(f7, f6, f5);
+<a name="l00253"></a>00253     root.add_children(f4, f3);
+<a name="l00254"></a>00254     root.add_children(f2, f1);
+<a name="l00255"></a>00255 
+<a name="l00256"></a>00256     root.run_and_finish(f0);
+<a name="l00257"></a>00257 }
+<a name="l00258"></a>00258 
+<a name="l00259"></a>00259 <span class="comment">// nine arguments</span>
+<a name="l00260"></a>00260 <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="l00261"></a>00261          <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="l00262"></a>00262 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00263"></a>00263                      <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="l00264"></a>00264                      <a class="code" href="a00339.html">tbb::task_group_context</a>& context)
+<a name="l00265"></a>00265 {
+<a name="l00266"></a>00266     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00267"></a>00267     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00268"></a>00268 
+<a name="l00269"></a>00269     root.add_children(f8, f7, f6);
+<a name="l00270"></a>00270     root.add_children(f5, f4, f3);
+<a name="l00271"></a>00271     root.add_children(f2, f1);
+<a name="l00272"></a>00272 
+<a name="l00273"></a>00273     root.run_and_finish(f0);
+<a name="l00274"></a>00274 }
+<a name="l00275"></a>00275 
+<a name="l00276"></a>00276 <span class="comment">// ten arguments</span>
+<a name="l00277"></a>00277 <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="l00278"></a>00278          <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="l00279"></a>00279 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00280"></a>00280                      <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="l00281"></a>00281                      <a class="code" href="a00339.html">tbb::task_group_context</a>& context)
+<a name="l00282"></a>00282 {
+<a name="l00283"></a>00283     internal::parallel_invoke_cleaner cleaner(4, context);
+<a name="l00284"></a>00284     internal::parallel_invoke_helper& root = cleaner.root;
+<a name="l00285"></a>00285 
+<a name="l00286"></a>00286     root.add_children(f9, f8, f7);
+<a name="l00287"></a>00287     root.add_children(f6, f5, f4);
+<a name="l00288"></a>00288     root.add_children(f3, f2, f1);
+<a name="l00289"></a>00289 
+<a name="l00290"></a>00290     root.run_and_finish(f0);
+<a name="l00291"></a>00291 }
+<a name="l00292"></a>00292 
+<a name="l00293"></a>00293 <span class="comment">// two arguments</span>
+<a name="l00294"></a>00294 <span class="keyword">template</span><<span class="keyword">typename</span> F0, <span class="keyword">typename</span> F1>
+<a name="l00295"></a>00295 <span class="keywordtype">void</span> <a class="code" href="a00426.html#gd3e2998f171494f94c2103f4eb924084">parallel_invoke</a>(<span class="keyword">const</span> F0& f0, <span class="keyword">const</span> F1& f1) {
+<a name="l00296"></a>00296     task_group_context context;
+<a name="l00297"></a>00297     parallel_invoke<F0, F1>(f0, f1, context);
+<a name="l00298"></a>00298 }
+<a name="l00299"></a>00299 <span class="comment">// three 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>
+<a name="l00301"></a>00301 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00302"></a>00302     task_group_context context;
+<a name="l00303"></a>00303     parallel_invoke<F0, F1, F2>(f0, f1, f2, context);
+<a name="l00304"></a>00304 }
+<a name="l00305"></a>00305 <span class="comment">// four 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 >
+<a name="l00307"></a>00307 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00308"></a>00308     task_group_context context;
+<a name="l00309"></a>00309     parallel_invoke<F0, F1, F2, F3>(f0, f1, f2, f3, context);
+<a name="l00310"></a>00310 }
+<a name="l00311"></a>00311 <span class="comment">// five 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>
+<a name="l00313"></a>00313 <span class="keywordtype">void</span> <a class="code" href="a00426.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     task_group_context context;
+<a name="l00315"></a>00315     parallel_invoke<F0, F1, F2, F3, F4>(f0, f1, f2, f3, f4, context);
+<a name="l00316"></a>00316 }
+<a name="l00317"></a>00317 <span class="comment">// six arguments</span>
+<a name="l00318"></a>00318 <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="l00319"></a>00319 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00320"></a>00320     task_group_context context;
+<a name="l00321"></a>00321     parallel_invoke<F0, F1, F2, F3, F4, F5>(f0, f1, f2, f3, f4, f5, context);
+<a name="l00322"></a>00322 }
+<a name="l00323"></a>00323 <span class="comment">// seven arguments</span>
+<a name="l00324"></a>00324 <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="l00325"></a>00325 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00326"></a>00326                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6)
+<a name="l00327"></a>00327 {
+<a name="l00328"></a>00328     task_group_context context;
+<a name="l00329"></a>00329     parallel_invoke<F0, F1, F2, F3, F4, F5, F6>(f0, f1, f2, f3, f4, f5, f6, context);
+<a name="l00330"></a>00330 }
+<a name="l00331"></a>00331 <span class="comment">// eigth arguments</span>
+<a name="l00332"></a>00332 <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="l00333"></a>00333          <span class="keyword">typename</span> F5, <span class="keyword">typename</span> F6, <span class="keyword">typename</span> F7>
+<a name="l00334"></a>00334 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00335"></a>00335                      <span class="keyword">const</span> F5& f5, <span class="keyword">const</span> F6& f6, <span class="keyword">const</span> F7& f7)
+<a name="l00336"></a>00336 {
+<a name="l00337"></a>00337     task_group_context context;
+<a name="l00338"></a>00338     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7>(f0, f1, f2, f3, f4, f5, f6, f7, context);
+<a name="l00339"></a>00339 }
+<a name="l00340"></a>00340 <span class="comment">// nine arguments</span>
+<a name="l00341"></a>00341 <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="l00342"></a>00342          <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="l00343"></a>00343 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00344"></a>00344                      <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="l00345"></a>00345 {
+<a name="l00346"></a>00346     task_group_context context;
+<a name="l00347"></a>00347     parallel_invoke<F0, F1, F2, F3, F4, F5, F6, F7, F8>(f0, f1, f2, f3, f4, f5, f6, f7, f8, context);
+<a name="l00348"></a>00348 }
+<a name="l00349"></a>00349 <span class="comment">// ten arguments</span>
+<a name="l00350"></a>00350 <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="l00351"></a>00351          <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="l00352"></a>00352 <span class="keywordtype">void</span> <a class="code" href="a00426.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="l00353"></a>00353                      <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="l00354"></a>00354 {
+<a name="l00355"></a>00355     task_group_context context;
+<a name="l00356"></a>00356     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="l00357"></a>00357 }
+<a name="l00358"></a>00358 
+<a name="l00360"></a>00360 
+<a name="l00361"></a>00361 } <span class="comment">// namespace</span>
+<a name="l00362"></a>00362 
+<a name="l00363"></a>00363 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_invoke_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00556.html b/doc/html/a00556.html
new file mode 100644
index 0000000..0aa7595
--- /dev/null
+++ b/doc/html/a00556.html
@@ -0,0 +1,476 @@
+<!DOCTYPE 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-2012 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 <new></span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "task.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "tbb_profiling.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="l00032"></a>00032 <span class="keyword">namespace </span>interface6 {
+<a name="l00034"></a>00034 <span class="keyword">namespace </span>internal {
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036     <span class="keyword">using namespace </span>tbb::internal;
+<a name="l00037"></a>00037 
+<a name="l00039"></a>00039     <span class="keyword">enum</span> {
+<a name="l00040"></a>00040         root_task, left_child, right_child
+<a name="l00041"></a>00041     };
+<a name="l00042"></a>00042 
+<a name="l00044"></a>00044     <span class="keyword">typedef</span> <span class="keywordtype">char</span> reduction_context;
+<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> Body>
+<a name="l00049"></a>00049     <span class="keyword">class </span>finish_reduce: <span class="keyword">public</span> flag_task {
+<a name="l00051"></a>00051         <span class="keywordtype">bool</span> has_right_zombie;
+<a name="l00052"></a>00052         <span class="keyword">const</span> reduction_context my_context;
+<a name="l00053"></a>00053         Body* my_body;
+<a name="l00054"></a>00054         aligned_space<Body,1> zombie_space;
+<a name="l00055"></a>00055         finish_reduce( reduction_context context_ ) :
+<a name="l00056"></a>00056             has_right_zombie(false), <span class="comment">// TODO: substitute by flag_task::child_stolen?</span>
+<a name="l00057"></a>00057             my_context(context_),
+<a name="l00058"></a>00058             my_body(NULL)
+<a name="l00059"></a>00059         {
+<a name="l00060"></a>00060         }
+<a name="l00061"></a>00061         task* execute() {
+<a name="l00062"></a>00062             <span class="keywordflow">if</span>( has_right_zombie ) {
+<a name="l00063"></a>00063                 <span class="comment">// Right child was stolen.</span>
+<a name="l00064"></a>00064                 Body* s = zombie_space.begin();
+<a name="l00065"></a>00065                 my_body->join( *s );
+<a name="l00066"></a>00066                 s->~Body();
+<a name="l00067"></a>00067             }
+<a name="l00068"></a>00068             <span class="keywordflow">if</span>( my_context==left_child )
+<a name="l00069"></a>00069                 itt_store_word_with_release( static_cast<finish_reduce*>(parent())->my_body, my_body );
+<a name="l00070"></a>00070             <span class="keywordflow">return</span> NULL;
+<a name="l00071"></a>00071         }
+<a name="l00072"></a>00072         <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="l00073"></a>00073         <span class="keyword">friend</span> <span class="keyword">class </span>start_reduce;
+<a name="l00074"></a>00074     };
+<a name="l00075"></a>00075 
+<a name="l00077"></a>00077 
+<a name="l00078"></a>00078     <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="l00079"></a>00079     <span class="keyword">class </span>start_reduce: <span class="keyword">public</span> task {
+<a name="l00080"></a>00080         <span class="keyword">typedef</span> finish_reduce<Body> finish_type;
+<a name="l00081"></a>00081         Body* my_body;
+<a name="l00082"></a>00082         Range my_range;
+<a name="l00083"></a>00083         <span class="keyword">typename</span> Partitioner::task_partition_type my_partition;
+<a name="l00084"></a>00084         reduction_context my_context; <span class="comment">// TODO: factor out into start_reduce_base</span>
+<a name="l00085"></a>00085         <span class="comment">/*override*/</span> task* execute();
+<a name="l00086"></a>00086         <span class="keyword">template</span><<span class="keyword">typename</span> Body_>
+<a name="l00087"></a>00087         <span class="keyword">friend</span> <span class="keyword">class </span>finish_reduce;
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089 <span class="keyword">public</span>:
+<a name="l00091"></a>00091         start_reduce( <span class="keyword">const</span> Range& range, Body* body, Partitioner& partitioner ) :
+<a name="l00092"></a>00092             my_body(body),
+<a name="l00093"></a>00093             my_range(range),
+<a name="l00094"></a>00094             my_partition(partitioner),
+<a name="l00095"></a>00095             my_context(root_task)
+<a name="l00096"></a>00096         {
+<a name="l00097"></a>00097         }
+<a name="l00099"></a>00099 
+<a name="l00100"></a>00100         start_reduce( start_reduce& parent_, split ) :
+<a name="l00101"></a>00101             my_body(parent_.my_body),
+<a name="l00102"></a>00102             my_range(parent_.my_range,split()),
+<a name="l00103"></a>00103             my_partition(parent_.my_partition,split()),
+<a name="l00104"></a>00104             my_context(right_child)
+<a name="l00105"></a>00105         {
+<a name="l00106"></a>00106             my_partition.set_affinity(*<span class="keyword">this</span>);
+<a name="l00107"></a>00107             parent_.my_context = left_child;
+<a name="l00108"></a>00108         }
+<a name="l00110"></a>00110 
+<a name="l00111"></a>00111         start_reduce( start_reduce& parent_, <span class="keyword">const</span> Range& r, depth_t d ) :
+<a name="l00112"></a>00112             my_body(parent_.my_body),
+<a name="l00113"></a>00113             my_range(r),
+<a name="l00114"></a>00114             my_partition(parent_.my_partition,split()),
+<a name="l00115"></a>00115             my_context(right_child)
+<a name="l00116"></a>00116         {
+<a name="l00117"></a>00117             my_partition.set_affinity(*<span class="keyword">this</span>);
+<a name="l00118"></a>00118             my_partition.align_depth( d );
+<a name="l00119"></a>00119             parent_.my_context = left_child;
+<a name="l00120"></a>00120         }
+<a name="l00122"></a>00122         <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> ) {
+<a name="l00123"></a>00123             my_partition.note_affinity( <span class="keywordtype">id</span> );
+<a name="l00124"></a>00124         }
+<a name="l00125"></a>00125         <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, Partitioner& partitioner ) {
+<a name="l00126"></a>00126             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00127"></a>00127 #<span class="keywordflow">if</span> !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP
+<a name="l00128"></a>00128                 <a class="code" href="a00337.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(<a class="code" href="a00337.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>()) start_reduce(range,&body,partitioner) );
+<a name="l00129"></a>00129 <span class="preprocessor">#else</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
+<a name="l00131"></a>00131                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
+<a name="l00132"></a>00132                 task_group_context context;
+<a name="l00133"></a>00133                 <a class="code" href="a00337.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
+<a name="l00134"></a>00134 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */</span>
+<a name="l00135"></a>00135             }
+<a name="l00136"></a>00136         }
+<a name="l00137"></a>00137 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00138"></a>00138 <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="l00139"></a>00139             <span class="keywordflow">if</span>( !range.empty() )
+<a name="l00140"></a>00140                 <a class="code" href="a00337.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( *<span class="keyword">new</span>(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
+<a name="l00141"></a>00141         }
+<a name="l00142"></a>00142 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00144"></a>00144         finish_type *create_continuation() {
+<a name="l00145"></a>00145             <span class="keywordflow">return</span> <span class="keyword">new</span>( allocate_continuation() ) finish_type(my_context);
+<a name="l00146"></a>00146         }
+<a name="l00148"></a>00148         <span class="keywordtype">void</span> run_body( Range &r ) { (*my_body)( r ); }
+<a name="l00149"></a>00149     };
+<a name="l00150"></a>00150     <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="l00151"></a>00151     task* start_reduce<Range,Body,Partitioner>::execute() {
+<a name="l00152"></a>00152         my_partition.check_being_stolen( *<span class="keyword">this</span> );
+<a name="l00153"></a>00153         <span class="keywordflow">if</span>( my_context==right_child ) {
+<a name="l00154"></a>00154             finish_type* parent_ptr = static_cast<finish_type*>(parent());
+<a name="l00155"></a>00155             <span class="keywordflow">if</span>( !itt_load_word_with_acquire(parent_ptr->my_body) ) { <span class="comment">// TODO: replace by is_stolen_task() or by parent_ptr->ref_count() == 2???</span>
+<a name="l00156"></a>00156                 my_body = <span class="keyword">new</span>( parent_ptr->zombie_space.begin() ) Body(*my_body,split());
+<a name="l00157"></a>00157                 parent_ptr->has_right_zombie = <span class="keyword">true</span>;
+<a name="l00158"></a>00158             }
+<a name="l00159"></a>00159         } <span class="keywordflow">else</span> __TBB_ASSERT(my_context==root_task,NULL);<span class="comment">// because left leaf spawns right leafs without recycling</span>
+<a name="l00160"></a>00160         my_partition.execute(*<span class="keyword">this</span>, my_range);
+<a name="l00161"></a>00161         <span class="keywordflow">if</span>( my_context==left_child ) {
+<a name="l00162"></a>00162             finish_type* parent_ptr = static_cast<finish_type*>(parent());
+<a name="l00163"></a>00163             __TBB_ASSERT(my_body!=parent_ptr->zombie_space.begin(),NULL);
+<a name="l00164"></a>00164             itt_store_word_with_release(parent_ptr->my_body, my_body );
+<a name="l00165"></a>00165         }
+<a name="l00166"></a>00166         <span class="keywordflow">return</span> NULL;
+<a name="l00167"></a>00167     }
+<a name="l00168"></a>00168 
+<a name="l00169"></a>00169 <span class="preprocessor">#if TBB_PREVIEW_DETERMINISTIC_REDUCE</span>
+<a name="l00171"></a>00171 <span class="preprocessor"></span>
+<a name="l00172"></a>00172 <span class="preprocessor">    template<typename Body></span>
+<a name="l00173"></a>00173 <span class="preprocessor"></span>    <span class="keyword">class </span>finish_deterministic_reduce: <span class="keyword">public</span> task {
+<a name="l00174"></a>00174         Body &my_left_body;
+<a name="l00175"></a>00175         Body my_right_body;
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177         finish_deterministic_reduce( Body &body ) :
+<a name="l00178"></a>00178             my_left_body( body ),
+<a name="l00179"></a>00179             my_right_body( body, split() )
+<a name="l00180"></a>00180         {
+<a name="l00181"></a>00181         }
+<a name="l00182"></a>00182         task* execute() {
+<a name="l00183"></a>00183             my_left_body.join( my_right_body );
+<a name="l00184"></a>00184             <span class="keywordflow">return</span> NULL;
+<a name="l00185"></a>00185         }
+<a name="l00186"></a>00186         <span class="keyword">template</span><<span class="keyword">typename</span> Range,<span class="keyword">typename</span> Body_>
+<a name="l00187"></a>00187         <span class="keyword">friend</span> <span class="keyword">class </span>start_deterministic_reduce;
+<a name="l00188"></a>00188     };
+<a name="l00189"></a>00189 
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00193"></a>00193     <span class="keyword">class </span>start_deterministic_reduce: <span class="keyword">public</span> task {
+<a name="l00194"></a>00194         <span class="keyword">typedef</span> finish_deterministic_reduce<Body> finish_type;
+<a name="l00195"></a>00195         Body &my_body;
+<a name="l00196"></a>00196         Range my_range;
+<a name="l00197"></a>00197         <span class="comment">/*override*/</span> task* execute();
+<a name="l00198"></a>00198 
+<a name="l00200"></a>00200         start_deterministic_reduce( <span class="keyword">const</span> Range& range, Body& body ) :
+<a name="l00201"></a>00201             my_body( body ),
+<a name="l00202"></a>00202             my_range( range )
+<a name="l00203"></a>00203         {
+<a name="l00204"></a>00204         }
+<a name="l00206"></a>00206 
+<a name="l00207"></a>00207         start_deterministic_reduce( start_deterministic_reduce& parent_, finish_type& c ) :
+<a name="l00208"></a>00208             my_body( c.my_right_body ),
+<a name="l00209"></a>00209             my_range( parent_.my_range, split() )
+<a name="l00210"></a>00210         {
+<a name="l00211"></a>00211         }
+<a name="l00212"></a>00212 
+<a name="l00213"></a>00213 <span class="keyword">public</span>:
+<a name="l00214"></a>00214         <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body ) {
+<a name="l00215"></a>00215             <span class="keywordflow">if</span>( !range.empty() ) {
+<a name="l00216"></a>00216 #<span class="keywordflow">if</span> !__TBB_TASK_GROUP_CONTEXT || TBB_JOIN_OUTER_TASK_GROUP
+<a name="l00217"></a>00217                 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root()) start_deterministic_reduce(range,&body) );
+<a name="l00218"></a>00218 <span class="preprocessor">#else</span>
+<a name="l00219"></a>00219 <span class="preprocessor"></span>                <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
+<a name="l00220"></a>00220                 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
+<a name="l00221"></a>00221                 task_group_context context;
+<a name="l00222"></a>00222                 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) start_deterministic_reduce(range,body) );
+<a name="l00223"></a>00223 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT && !TBB_JOIN_OUTER_TASK_GROUP */</span>
+<a name="l00224"></a>00224             }
+<a name="l00225"></a>00225         }
+<a name="l00226"></a>00226 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00227"></a>00227 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, task_group_context& context ) {
+<a name="l00228"></a>00228             <span class="keywordflow">if</span>( !range.empty() )
+<a name="l00229"></a>00229                 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) start_deterministic_reduce(range,body) );
+<a name="l00230"></a>00230         }
+<a name="l00231"></a>00231 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00232"></a>00232     };
+<a name="l00233"></a>00233 
+<a name="l00234"></a>00234     <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00235"></a>00235     task* start_deterministic_reduce<Range,Body>::execute() {
+<a name="l00236"></a>00236         <span class="keywordflow">if</span>( !my_range.is_divisible() ) {
+<a name="l00237"></a>00237             my_body( my_range );
+<a name="l00238"></a>00238             <span class="keywordflow">return</span> NULL;
+<a name="l00239"></a>00239         } <span class="keywordflow">else</span> {
+<a name="l00240"></a>00240             finish_type& c = *<span class="keyword">new</span>( allocate_continuation() ) finish_type( my_body );
+<a name="l00241"></a>00241             recycle_as_child_of(c);
+<a name="l00242"></a>00242             c.set_ref_count(2);
+<a name="l00243"></a>00243             start_deterministic_reduce& b = *<span class="keyword">new</span>( c.allocate_child() ) start_deterministic_reduce( *<span class="keyword">this</span>, c );
+<a name="l00244"></a>00244             task::spawn(b);
+<a name="l00245"></a>00245             <span class="keywordflow">return</span> <span class="keyword">this</span>;
+<a name="l00246"></a>00246         }
+<a name="l00247"></a>00247     }
+<a name="l00248"></a>00248 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_DETERMINISTIC_REDUCE */</span>
+<a name="l00249"></a>00249 } <span class="comment">// namespace internal</span>
+<a name="l00251"></a>00251 <span class="comment"></span>} <span class="comment">//namespace interfaceX</span>
+<a name="l00252"></a>00252 
+<a name="l00254"></a>00254 <span class="keyword">namespace </span>internal {
+<a name="l00255"></a>00255     <span class="keyword">using</span> interface6::internal::start_reduce;
+<a name="l00256"></a>00256 <span class="preprocessor">#if TBB_PREVIEW_DETERMINISTIC_REDUCE</span>
+<a name="l00257"></a>00257 <span class="preprocessor"></span>    <span class="keyword">using</span> interface6::internal::start_deterministic_reduce;
+<a name="l00258"></a>00258 <span class="preprocessor">#endif</span>
+<a name="l00260"></a>00260 <span class="preprocessor"></span>
+<a name="l00264"></a>00264 <span class="preprocessor">    template<typename Range, typename Value, typename RealBody, typename Reduction></span>
+<a name="l00265"></a>00265 <span class="preprocessor"></span>    <span class="keyword">class </span>lambda_reduce_body {
+<a name="l00266"></a>00266 
+<a name="l00267"></a>00267 <span class="comment">//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced</span>
+<a name="l00268"></a>00268 <span class="comment">//       (might require some performance measurements)</span>
+<a name="l00269"></a>00269 
+<a name="l00270"></a>00270         <span class="keyword">const</span> Value&     identity_element;
+<a name="l00271"></a>00271         <span class="keyword">const</span> RealBody&  my_real_body;
+<a name="l00272"></a>00272         <span class="keyword">const</span> Reduction& my_reduction;
+<a name="l00273"></a>00273         Value            my_value;
+<a name="l00274"></a>00274         lambda_reduce_body& operator= ( <span class="keyword">const</span> lambda_reduce_body& other );
+<a name="l00275"></a>00275     <span class="keyword">public</span>:
+<a name="l00276"></a>00276         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="l00277"></a>00277             : identity_element(identity)
+<a name="l00278"></a>00278             , my_real_body(body)
+<a name="l00279"></a>00279             , my_reduction(reduction)
+<a name="l00280"></a>00280             , my_value(identity)
+<a name="l00281"></a>00281         { }
+<a name="l00282"></a>00282         lambda_reduce_body( <span class="keyword">const</span> lambda_reduce_body& other )
+<a name="l00283"></a>00283             : identity_element(other.identity_element)
+<a name="l00284"></a>00284             , my_real_body(other.my_real_body)
+<a name="l00285"></a>00285             , my_reduction(other.my_reduction)
+<a name="l00286"></a>00286             , my_value(other.my_value)
+<a name="l00287"></a>00287         { }
+<a name="l00288"></a>00288         lambda_reduce_body( lambda_reduce_body& other, <a class="code" href="a00335.html">tbb::split</a> )
+<a name="l00289"></a>00289             : identity_element(other.identity_element)
+<a name="l00290"></a>00290             , my_real_body(other.my_real_body)
+<a name="l00291"></a>00291             , my_reduction(other.my_reduction)
+<a name="l00292"></a>00292             , my_value(other.identity_element)
+<a name="l00293"></a>00293         { }
+<a name="l00294"></a>00294         <span class="keywordtype">void</span> operator()(Range& range) {
+<a name="l00295"></a>00295             my_value = my_real_body(range, const_cast<const Value&>(my_value));
+<a name="l00296"></a>00296         }
+<a name="l00297"></a>00297         <span class="keywordtype">void</span> join( lambda_reduce_body& rhs ) {
+<a name="l00298"></a>00298             my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.my_value));
+<a name="l00299"></a>00299         }
+<a name="l00300"></a>00300         Value result()<span class="keyword"> const </span>{
+<a name="l00301"></a>00301             <span class="keywordflow">return</span> my_value;
+<a name="l00302"></a>00302         }
+<a name="l00303"></a>00303     };
+<a name="l00304"></a>00304 
+<a name="l00305"></a>00305 } <span class="comment">// namespace internal</span>
+<a name="l00307"></a>00307 <span class="comment"></span>
+<a name="l00308"></a>00308 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
+<a name="l00309"></a>00309 
+<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> Body>
+<a name="l00332"></a><a class="code" href="a00426.html#g1b3d59c5eb62683c5754db6970392fa3">00332</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body ) {
+<a name="l00333"></a>00333     internal::start_reduce<Range,Body, const __TBB_DEFAULT_PARTITIONER>::run( range, body, __TBB_DEFAULT_PARTITIONER() );
+<a name="l00334"></a>00334 }
+<a name="l00335"></a>00335 
+<a name="l00337"></a>00337 
+<a name="l00338"></a>00338 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00339"></a><a class="code" href="a00426.html#gec1b7c03f9da909bef5db12e3d41bed3">00339</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00329.html">simple_partitioner</a>& partitioner ) {
+<a name="l00340"></a>00340     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner );
+<a name="l00341"></a>00341 }
+<a name="l00342"></a>00342 
+<a name="l00344"></a>00344 
+<a name="l00345"></a>00345 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00346"></a><a class="code" href="a00426.html#g18a19157e6245992fc00ca0adeb7dd37">00346</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00257.html">auto_partitioner</a>& partitioner ) {
+<a name="l00347"></a>00347     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner );
+<a name="l00348"></a>00348 }
+<a name="l00349"></a>00349 
+<a name="l00351"></a>00351 
+<a name="l00352"></a>00352 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00353"></a><a class="code" href="a00426.html#gc61e73fcc36c92d79a217fc355ff4a6b">00353</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00249.html">affinity_partitioner</a>& partitioner ) {
+<a name="l00354"></a>00354     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner );
+<a name="l00355"></a>00355 }
+<a name="l00356"></a>00356 
+<a name="l00357"></a>00357 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00359"></a>00359 <span class="preprocessor"></span>
+<a name="l00360"></a>00360 <span class="preprocessor">template<typename Range, typename Body></span>
+<a name="l00361"></a><a class="code" href="a00426.html#g45cb00c42a18e334bbde8b7535afe460">00361</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00426.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00329.html">simple_partitioner</a>& partitioner, <a class="code" href="a00339.html">task_group_cont [...]
+<a name="l00362"></a>00362     internal::start_reduce<Range,Body,const simple_partitioner>::run( range, body, partitioner, context );
+<a name="l00363"></a>00363 }
+<a name="l00364"></a>00364 
+<a name="l00366"></a>00366 
+<a name="l00367"></a>00367 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00368"></a><a class="code" href="a00426.html#g1c1ea1d7c61b3c225e92c70d669a53a5">00368</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00257.html">auto_partitioner</a>& partitioner, <a class="code" href="a00339.html">task_group_context</a>& context ) {
+<a name="l00369"></a>00369     internal::start_reduce<Range,Body,const auto_partitioner>::run( range, body, partitioner, context );
+<a name="l00370"></a>00370 }
+<a name="l00371"></a>00371 
+<a name="l00373"></a>00373 
+<a name="l00374"></a>00374 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00375"></a><a class="code" href="a00426.html#gd9ac3a3811060314695f33b703c6e11b">00375</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g1b3d59c5eb62683c5754db6970392fa3">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00249.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00339.html">task_group_context</a>& context ) {
+<a name="l00376"></a>00376     internal::start_reduce<Range,Body,affinity_partitioner>::run( range, body, partitioner, context );
+<a name="l00377"></a>00377 }
+<a name="l00378"></a>00378 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00379"></a>00379 
+<a name="l00383"></a>00383 
+<a name="l00384"></a>00384 
+<a name="l00385"></a>00385 <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="l00386"></a><a class="code" href="a00426.html#gc9412e09fb01fcad8c018ea9cffb28ef">00386</a> Value <a class="code" href="a00426.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="l00387"></a>00387     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00388"></a>00388     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> __TBB_DEFAULT_PARTITIONER>
+<a name="l00389"></a>00389                           ::run(range, body, __TBB_DEFAULT_PARTITIONER() );
+<a name="l00390"></a>00390     <span class="keywordflow">return</span> body.result();
+<a name="l00391"></a>00391 }
+<a name="l00392"></a>00392 
+<a name="l00394"></a>00394 
+<a name="l00395"></a>00395 <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="l00396"></a><a class="code" href="a00426.html#gaddffeec0e892ac3d6fc7fc2053e1eca">00396</a> Value <a class="code" href="a00426.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="l00397"></a>00397                        <span class="keyword">const</span> <a class="code" href="a00329.html">simple_partitioner</a>& partitioner ) {
+<a name="l00398"></a>00398     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00399"></a>00399     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00329.html">simple_partitioner</a>>
+<a name="l00400"></a>00400                           ::run(range, body, partitioner );
+<a name="l00401"></a>00401     <span class="keywordflow">return</span> body.result();
+<a name="l00402"></a>00402 }
+<a name="l00403"></a>00403 
+<a name="l00405"></a>00405 
+<a name="l00406"></a>00406 <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="l00407"></a><a class="code" href="a00426.html#gb175401f0729e40dd2c5860a17c14385">00407</a> Value <a class="code" href="a00426.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="l00408"></a>00408                        <span class="keyword">const</span> <a class="code" href="a00257.html">auto_partitioner</a>& partitioner ) {
+<a name="l00409"></a>00409     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00410"></a>00410     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00257.html">auto_partitioner</a>>
+<a name="l00411"></a>00411                           ::run( range, body, partitioner );
+<a name="l00412"></a>00412     <span class="keywordflow">return</span> body.result();
+<a name="l00413"></a>00413 }
+<a name="l00414"></a>00414 
+<a name="l00416"></a>00416 
+<a name="l00417"></a>00417 <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="l00418"></a><a class="code" href="a00426.html#gb7f1f1828ae2b330ce05b8513a495154">00418</a> Value <a class="code" href="a00426.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="l00419"></a>00419                        <a class="code" href="a00249.html">affinity_partitioner</a>& partitioner ) {
+<a name="l00420"></a>00420     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00421"></a>00421     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00249.html">affinity_partitioner</a>>
+<a name="l00422"></a>00422                                         ::run( range, body, partitioner );
+<a name="l00423"></a>00423     <span class="keywordflow">return</span> body.result();
+<a name="l00424"></a>00424 }
+<a name="l00425"></a>00425 
+<a name="l00426"></a>00426 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00428"></a>00428 <span class="preprocessor"></span>
+<a name="l00429"></a>00429 <span class="preprocessor">template<typename Range, typename Value, typename RealBody, typename Reduction></span>
+<a name="l00430"></a><a class="code" href="a00426.html#gfbc0cc2026d87f11a96bcd62788f5bb5">00430</a> <span class="preprocessor"></span>Value <a class="code" href="a00426.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="l00431"></a>00431                        <span class="keyword">const</span> <a class="code" href="a00329.html">simple_partitioner</a>& partitioner, <a class="code" href="a00339.html">task_group_context</a>& context ) {
+<a name="l00432"></a>00432     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00433"></a>00433     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00329.html">simple_partitioner</a>>
+<a name="l00434"></a>00434                           ::run( range, body, partitioner, context );
+<a name="l00435"></a>00435     <span class="keywordflow">return</span> body.result();
+<a name="l00436"></a>00436 }
+<a name="l00437"></a>00437 
+<a name="l00439"></a>00439 
+<a name="l00440"></a>00440 <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="l00441"></a><a class="code" href="a00426.html#g630c90a399937d9d4ae70ff883186dfd">00441</a> Value <a class="code" href="a00426.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="l00442"></a>00442                        <span class="keyword">const</span> <a class="code" href="a00257.html">auto_partitioner</a>& partitioner, <a class="code" href="a00339.html">task_group_context</a>& context ) {
+<a name="l00443"></a>00443     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00444"></a>00444     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<span class="keyword">const</span> <a class="code" href="a00257.html">auto_partitioner</a>>
+<a name="l00445"></a>00445                           ::run( range, body, partitioner, context );
+<a name="l00446"></a>00446     <span class="keywordflow">return</span> body.result();
+<a name="l00447"></a>00447 }
+<a name="l00448"></a>00448 
+<a name="l00450"></a>00450 
+<a name="l00451"></a>00451 <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="l00452"></a><a class="code" href="a00426.html#g496bd7eadb3b97495ccb5655ef90319e">00452</a> Value <a class="code" href="a00426.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="l00453"></a>00453                        <a class="code" href="a00249.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00339.html">task_group_context</a>& context ) {
+<a name="l00454"></a>00454     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00455"></a>00455     internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,<a class="code" href="a00249.html">affinity_partitioner</a>>
+<a name="l00456"></a>00456                                         ::run( range, body, partitioner, context );
+<a name="l00457"></a>00457     <span class="keywordflow">return</span> body.result();
+<a name="l00458"></a>00458 }
+<a name="l00459"></a>00459 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00460"></a>00460 
+<a name="l00461"></a>00461 <span class="preprocessor">#if TBB_PREVIEW_DETERMINISTIC_REDUCE</span>
+<a name="l00463"></a>00463 <span class="preprocessor"></span>
+<a name="l00464"></a>00464 <span class="preprocessor">template<typename Range, typename Body></span>
+<a name="l00465"></a><a class="code" href="a00426.html#g873006cc80868b5b4604822bf100ddeb">00465</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00426.html#g873006cc80868b5b4604822bf100ddeb">parallel_deterministic_reduce</a>( <span class="keyword">const</span> Range& range, Body& body ) {
+<a name="l00466"></a>00466     internal::start_deterministic_reduce<Range,Body>::run( range, body );
+<a name="l00467"></a>00467 }
+<a name="l00468"></a>00468 
+<a name="l00469"></a>00469 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00471"></a>00471 <span class="preprocessor"></span>
+<a name="l00472"></a>00472 <span class="preprocessor">template<typename Range, typename Body></span>
+<a name="l00473"></a><a class="code" href="a00426.html#gfd08c56b3a98d4437dadc5365326928a">00473</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="a00426.html#g873006cc80868b5b4604822bf100ddeb">parallel_deterministic_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00339.html">task_group_context</a>& context ) {
+<a name="l00474"></a>00474     internal::start_deterministic_reduce<Range,Body>::run( range, body, context );
+<a name="l00475"></a>00475 }
+<a name="l00476"></a>00476 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00477"></a>00477 
+<a name="l00481"></a>00481 
+<a name="l00482"></a>00482 
+<a name="l00483"></a>00483 <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="l00484"></a><a class="code" href="a00426.html#g3edb17bb1967c291d227556e0e47e507">00484</a> Value <a class="code" href="a00426.html#g873006cc80868b5b4604822bf100ddeb">parallel_deterministic_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="l00485"></a>00485     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00486"></a>00486     internal::start_deterministic_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction> >
+<a name="l00487"></a>00487                           ::run(range, body);
+<a name="l00488"></a>00488     <span class="keywordflow">return</span> body.result();
+<a name="l00489"></a>00489 }
+<a name="l00490"></a>00490 
+<a name="l00491"></a>00491 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00493"></a>00493 <span class="preprocessor"></span>
+<a name="l00494"></a>00494 <span class="preprocessor">template<typename Range, typename Value, typename RealBody, typename Reduction></span>
+<a name="l00495"></a><a class="code" href="a00426.html#g0a66bc67567b2d01d709b59b9bddf84a">00495</a> <span class="preprocessor"></span>Value <a class="code" href="a00426.html#g873006cc80868b5b4604822bf100ddeb">parallel_deterministic_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="l00496"></a>00496                        <a class="code" href="a00339.html">task_group_context</a>& context ) {
+<a name="l00497"></a>00497     internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+<a name="l00498"></a>00498     internal::start_deterministic_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction> >
+<a name="l00499"></a>00499                           ::run( range, body, context );
+<a name="l00500"></a>00500     <span class="keywordflow">return</span> body.result();
+<a name="l00501"></a>00501 }
+<a name="l00502"></a>00502 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00503"></a>00503 <span class="preprocessor">#endif </span><span class="comment">/* TBB_PREVIEW_DETERMINISTIC_REDUCE */</span>
+<a name="l00504"></a>00504 
+<a name="l00505"></a>00505 
+<a name="l00506"></a>00506 } <span class="comment">// namespace tbb</span>
+<a name="l00507"></a>00507 
+<a name="l00508"></a>00508 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_reduce_H */</span>
+<a name="l00509"></a>00509 
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00557.html b/doc/html/a00557.html
deleted file mode 100644
index efc804c..0000000
--- a/doc/html/a00557.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>queuing_mutex.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<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>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-2011 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_queuing_mutex_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_queuing_mutex_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_config.h"</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
-<a name="l00028"></a>00028 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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">#include <cstring></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="keyword">namespace </span>tbb {
-<a name="l00042"></a>00042 
-<a name="l00044"></a>00044 
-<a name="l00045"></a><a class="code" href="a00288.html">00045</a> <span class="keyword">class </span><a class="code" href="a00288.html">queuing_mutex</a> {
-<a name="l00046"></a>00046 <span class="keyword">public</span>:
-<a name="l00048"></a><a class="code" href="a00288.html#b389ad9c4db7293e4bdb5b8cda69ec04">00048</a>     <a class="code" href="a00288.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>() {
-<a name="l00049"></a>00049         q_tail = NULL;
-<a name="l00050"></a>00050 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span>        internal_construct();
-<a name="l00052"></a>00052 <span class="preprocessor">#endif</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>    }
-<a name="l00054"></a>00054 
-<a name="l00056"></a>00056 
-<a name="l00058"></a><a class="code" href="a00289.html">00058</a>     <span class="keyword">class </span><a class="code" href="a00289.html">scoped_lock</a>: internal::no_copy {
-<a name="l00060"></a>00060         <span class="keywordtype">void</span> initialize() {
-<a name="l00061"></a>00061             <a class="code" href="a00275.html">mutex</a> = NULL;
-<a name="l00062"></a>00062 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span>            internal::poison_pointer(next);
-<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     <span class="keyword">public</span>:
-<a name="l00068"></a>00068 
-<a name="l00069"></a><a class="code" href="a00289.html#db0fa3967491014572e24d6607bdc971">00069</a>         <a class="code" href="a00289.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>() {initialize();}
-<a name="l00070"></a>00070 
-<a name="l00072"></a><a class="code" href="a00289.html#9b51ef972f5618ac17caadb58841ab6d">00072</a>         <a class="code" href="a00289.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>( <a class="code" href="a00288.html">queuing_mutex</a>& m ) {
-<a name="l00073"></a>00073             initialize();
-<a name="l00074"></a>00074             <a class="code" href="a00289.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(m);
-<a name="l00075"></a>00075         }
-<a name="l00076"></a>00076 
-<a name="l00078"></a><a class="code" href="a00289.html#ac2c576a93570957d694192a5f491443">00078</a>         <a class="code" href="a00289.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>() {
-<a name="l00079"></a>00079             <span class="keywordflow">if</span>( <a class="code" href="a00275.html">mutex</a> ) <a class="code" href="a00289.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>();
-<a name="l00080"></a>00080         }
-<a name="l00081"></a>00081 
-<a name="l00083"></a>00083         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00289.html#533e4fc8355ee321206a0609c42d909d">acquire</a>( <a class="code" href="a00288.html">queuing_mutex</a>& m );
-<a name="l00084"></a>00084 
-<a name="l00086"></a>00086         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00289.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>( <a class="code" href="a00288.html">queuing_mutex</a>& m );
-<a name="l00087"></a>00087 
-<a name="l00089"></a>00089         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00289.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>();
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091     <span class="keyword">private</span>:
-<a name="l00093"></a>00093         <a class="code" href="a00288.html">queuing_mutex</a>* <a class="code" href="a00275.html">mutex</a>;
-<a name="l00094"></a>00094 
-<a name="l00096"></a>00096         <a class="code" href="a00289.html">scoped_lock</a> *next;
-<a name="l00097"></a>00097 
-<a name="l00099"></a>00099 
-<a name="l00102"></a>00102         uintptr_t going;
-<a name="l00103"></a>00103     };
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107     <span class="comment">// Mutex traits</span>
-<a name="l00108"></a>00108     <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="l00109"></a>00109     <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="l00110"></a>00110     <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="l00111"></a>00111 <span class="keyword">private</span>:
-<a name="l00113"></a>00113     <a class="code" href="a00228.html">atomic<scoped_lock*></a> q_tail;
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 };
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 __TBB_DEFINE_PROFILING_SET_NAME(queuing_mutex)
-<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_queuing_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00558.html b/doc/html/a00558.html
deleted file mode 100644
index 18f42a9..0000000
--- a/doc/html/a00558.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>queuing_rw_mutex.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<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>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-2011 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_queuing_rw_mutex_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_queuing_rw_mutex_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_config.h"</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
-<a name="l00028"></a>00028 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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">#include <cstring></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="keyword">namespace </span>tbb {
-<a name="l00042"></a>00042 
-<a name="l00044"></a>00044 
-<a name="l00047"></a><a class="code" href="a00290.html">00047</a> <span class="keyword">class </span><a class="code" href="a00290.html">queuing_rw_mutex</a> {
-<a name="l00048"></a>00048 <span class="keyword">public</span>:
-<a name="l00050"></a><a class="code" href="a00290.html#85c90877c3447690ac4e2ac4ff8dea5e">00050</a>     <a class="code" href="a00290.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>() {
-<a name="l00051"></a>00051         q_tail = NULL;
-<a name="l00052"></a>00052 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>        internal_construct();
-<a name="l00054"></a>00054 <span class="preprocessor">#endif</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span>    }
-<a name="l00056"></a>00056 
-<a name="l00058"></a><a class="code" href="a00290.html#1ba73e3d95cfdf8323880bc623af9099">00058</a>     <a class="code" href="a00290.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>() {
-<a name="l00059"></a>00059 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span>        __TBB_ASSERT( !q_tail, <span class="stringliteral">"destruction of an acquired mutex"</span>);
-<a name="l00061"></a>00061 <span class="preprocessor">#endif</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span>    }
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064     <span class="keyword">class </span>scoped_lock;
-<a name="l00065"></a>00065     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-<a name="l00066"></a>00066 
-<a name="l00068"></a>00068 
-<a name="l00070"></a><a class="code" href="a00291.html">00070</a>     <span class="keyword">class </span><a class="code" href="a00291.html">scoped_lock</a>: internal::no_copy {
-<a name="l00072"></a>00072         <span class="keywordtype">void</span> initialize() {
-<a name="l00073"></a>00073             my_mutex = NULL;
-<a name="l00074"></a>00074 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span>            my_state = 0xFF; <span class="comment">// Set to invalid state</span>
-<a name="l00076"></a>00076             internal::poison_pointer(my_next);
-<a name="l00077"></a>00077             internal::poison_pointer(my_prev);
-<a name="l00078"></a>00078 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00079"></a>00079         }
-<a name="l00080"></a>00080     <span class="keyword">public</span>:
-<a name="l00082"></a>00082 
-<a name="l00083"></a><a class="code" href="a00291.html#c62e365be7bcbba091c9ea7454a4d22c">00083</a>         <a class="code" href="a00291.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>() {initialize();}
-<a name="l00084"></a>00084 
-<a name="l00086"></a><a class="code" href="a00291.html#fbb8798792d3aebb136c46fc63d2529e">00086</a>         <a class="code" href="a00291.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>( <a class="code" href="a00290.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> ) {
-<a name="l00087"></a>00087             initialize();
-<a name="l00088"></a>00088             <a class="code" href="a00291.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(m,write);
-<a name="l00089"></a>00089         }
-<a name="l00090"></a>00090 
-<a name="l00092"></a><a class="code" href="a00291.html#32c7d67a660d23ebbaab1a1d2826d31a">00092</a>         <a class="code" href="a00291.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>() {
-<a name="l00093"></a>00093             <span class="keywordflow">if</span>( my_mutex ) <a class="code" href="a00291.html#67ae221109ddc69510ab593874e435d4">release</a>();
-<a name="l00094"></a>00094         }
-<a name="l00095"></a>00095 
-<a name="l00097"></a>00097         <span class="keywordtype">void</span> <a class="code" href="a00291.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>( <a class="code" href="a00290.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
-<a name="l00098"></a>00098 
-<a name="l00100"></a>00100         <span class="keywordtype">bool</span> <a class="code" href="a00291.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>( <a class="code" href="a00290.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
-<a name="l00101"></a>00101 
-<a name="l00103"></a>00103         <span class="keywordtype">void</span> <a class="code" href="a00291.html#67ae221109ddc69510ab593874e435d4">release</a>();
-<a name="l00104"></a>00104 
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107         <span class="keywordtype">bool</span> <a class="code" href="a00291.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>();
-<a name="l00108"></a>00108 
-<a name="l00110"></a>00110         <span class="keywordtype">bool</span> <a class="code" href="a00291.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>();
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112     <span class="keyword">private</span>:
-<a name="l00114"></a>00114         <a class="code" href="a00290.html">queuing_rw_mutex</a>* my_mutex;
-<a name="l00115"></a>00115 
-<a name="l00117"></a>00117         <a class="code" href="a00291.html">scoped_lock</a> *__TBB_atomic my_prev, *__TBB_atomic my_next;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state_t;
-<a name="l00120"></a>00120 
-<a name="l00122"></a>00122         <a class="code" href="a00228.html">atomic<state_t></a> my_state;
-<a name="l00123"></a>00123 
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> __TBB_atomic my_going;
-<a name="l00127"></a>00127 
-<a name="l00129"></a>00129         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> my_internal_lock;
-<a name="l00130"></a>00130 
-<a name="l00132"></a>00132         <span class="keywordtype">void</span> acquire_internal_lock();
-<a name="l00133"></a>00133 
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136         <span class="keywordtype">bool</span> try_acquire_internal_lock();
-<a name="l00137"></a>00137 
-<a name="l00139"></a>00139         <span class="keywordtype">void</span> release_internal_lock();
-<a name="l00140"></a>00140 
-<a name="l00142"></a>00142         <span class="keywordtype">void</span> wait_for_release_of_internal_lock();
-<a name="l00143"></a>00143 
-<a name="l00145"></a>00145         <span class="keywordtype">void</span> unblock_or_wait_on_internal_lock( uintptr_t );
-<a name="l00146"></a>00146     };
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     <span class="comment">// Mutex traits</span>
-<a name="l00151"></a>00151     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;
-<a name="l00152"></a>00152     <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="l00153"></a>00153     <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="l00154"></a>00154 
-<a name="l00155"></a>00155 <span class="keyword">private</span>:
-<a name="l00157"></a>00157     <a class="code" href="a00228.html">atomic<scoped_lock*></a> q_tail;
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 };
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161 __TBB_DEFINE_PROFILING_SET_NAME(queuing_rw_mutex)
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163 } <span class="comment">// namespace tbb</span>
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_queuing_rw_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00559.html b/doc/html/a00559.html
deleted file mode 100644
index 2ed52ff..0000000
--- a/doc/html/a00559.html
+++ /dev/null
@@ -1,179 +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>reader_writer_lock.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>reader_writer_lock.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-2011 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_reader_writer_lock_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_reader_writer_lock_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_thread.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_allocator.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
-<a name="l00029"></a>00029 <span class="keyword">namespace </span>interface5 {
-<a name="l00031"></a>00031 
-<a name="l00034"></a><a class="code" href="a00292.html">00034</a>     <span class="keyword">class </span><a class="code" href="a00292.html">reader_writer_lock</a> : tbb::internal::no_copy {
-<a name="l00035"></a>00035  <span class="keyword">public</span>:
-<a name="l00036"></a>00036     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00293.html">scoped_lock</a>;
-<a name="l00037"></a>00037     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00294.html">scoped_lock_read</a>;
-<a name="l00039"></a>00039 
-<a name="l00074"></a><a class="code" href="a00292.html#6f921f0d7c1812ceb5674418c8b6ccaf">00074</a>     <span class="keyword">enum</span> <a class="code" href="a00292.html#6f921f0d7c1812ceb5674418c8b6ccaf">status_t</a> { waiting_nonblocking, waiting, active, invalid };
-<a name="l00075"></a>00075 
-<a name="l00077"></a><a class="code" href="a00292.html#c1431c4293e777efd9aab9a95c2a46e1">00077</a>     <a class="code" href="a00292.html#c1431c4293e777efd9aab9a95c2a46e1">reader_writer_lock</a>() {
-<a name="l00078"></a>00078         internal_construct();
-<a name="l00079"></a>00079     }
-<a name="l00080"></a>00080 
-<a name="l00082"></a><a class="code" href="a00292.html#5135f64f7b7339017f33d956445edbee">00082</a>     <a class="code" href="a00292.html#5135f64f7b7339017f33d956445edbee">~reader_writer_lock</a>() {
-<a name="l00083"></a>00083         internal_destroy();
-<a name="l00084"></a>00084     }
-<a name="l00085"></a>00085 
-<a name="l00087"></a>00087 
-<a name="l00089"></a><a class="code" href="a00293.html">00089</a>     <span class="keyword">class </span><a class="code" href="a00293.html">scoped_lock</a> : tbb::internal::no_copy {
-<a name="l00090"></a>00090     <span class="keyword">public</span>:
-<a name="l00091"></a>00091         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00292.html">reader_writer_lock</a>;
-<a name="l00092"></a>00092  
-<a name="l00094"></a><a class="code" href="a00293.html#cf19f20e082887c1bb0ba6b0911c3583">00094</a>         <a class="code" href="a00293.html">scoped_lock</a>(<a class="code" href="a00292.html">reader_writer_lock</a>& <a class="code" href="a00292.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>) {
-<a name="l00095"></a>00095             internal_construct(<a class="code" href="a00292.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>);
-<a name="l00096"></a>00096         }
-<a name="l00097"></a>00097         
-<a name="l00099"></a><a class="code" href="a00293.html#70246e0260493625ff956fa5926fc71f">00099</a>         <a class="code" href="a00293.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a>() {
-<a name="l00100"></a>00100             internal_destroy();
-<a name="l00101"></a>00101         }
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103         <span class="keywordtype">void</span>* operator new(size_t s) {
-<a name="l00104"></a>00104             <span class="keywordflow">return</span> tbb::internal::allocate_via_handler_v3(s);
-<a name="l00105"></a>00105         }
-<a name="l00106"></a>00106         <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span>* p) {
-<a name="l00107"></a>00107             tbb::internal::deallocate_via_handler_v3(p);
-<a name="l00108"></a>00108         }
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110     <span class="keyword">private</span>:
-<a name="l00112"></a>00112         <a class="code" href="a00292.html">reader_writer_lock</a> *<a class="code" href="a00275.html">mutex</a>;
-<a name="l00114"></a>00114         scoped_lock* next;
-<a name="l00116"></a>00116         <a class="code" href="a00228.html">atomic<status_t></a> status;
-<a name="l00117"></a>00117 
-<a name="l00119"></a>00119         scoped_lock();
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct(<a class="code" href="a00292.html">reader_writer_lock</a>&);
-<a name="l00122"></a>00122         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
-<a name="l00123"></a>00123    };
-<a name="l00124"></a>00124 
-<a name="l00126"></a><a class="code" href="a00294.html">00126</a>     <span class="keyword">class </span><a class="code" href="a00294.html">scoped_lock_read</a> : tbb::internal::no_copy {
-<a name="l00127"></a>00127     <span class="keyword">public</span>:
-<a name="l00128"></a>00128         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00292.html">reader_writer_lock</a>;
-<a name="l00129"></a>00129 
-<a name="l00131"></a><a class="code" href="a00294.html#87ab0dc8f7216e6ba0f7acd6aec33064">00131</a>         <a class="code" href="a00294.html">scoped_lock_read</a>(<a class="code" href="a00292.html">reader_writer_lock</a>& <a class="code" href="a00292.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>) {
-<a name="l00132"></a>00132             internal_construct(<a class="code" href="a00292.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>);
-<a name="l00133"></a>00133         }
-<a name="l00134"></a>00134 
-<a name="l00136"></a><a class="code" href="a00294.html#bd21c5f3d555d64d1de8658e15bf4966">00136</a>         <a class="code" href="a00294.html#bd21c5f3d555d64d1de8658e15bf4966">~scoped_lock_read</a>() { 
-<a name="l00137"></a>00137             internal_destroy();
-<a name="l00138"></a>00138         }
-<a name="l00139"></a>00139         
-<a name="l00140"></a>00140         <span class="keywordtype">void</span>* operator new(size_t s) {
-<a name="l00141"></a>00141             <span class="keywordflow">return</span> tbb::internal::allocate_via_handler_v3(s);
-<a name="l00142"></a>00142         }
-<a name="l00143"></a>00143         <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span>* p) {
-<a name="l00144"></a>00144             tbb::internal::deallocate_via_handler_v3(p);
-<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="a00292.html">reader_writer_lock</a> *<a class="code" href="a00275.html">mutex</a>;
-<a name="l00151"></a>00151         scoped_lock_read *next;
-<a name="l00153"></a>00153         <a class="code" href="a00228.html">atomic<status_t></a> status;
-<a name="l00154"></a>00154 
-<a name="l00156"></a>00156         scoped_lock_read();
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct(<a class="code" href="a00292.html">reader_writer_lock</a>&);
-<a name="l00159"></a>00159         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
-<a name="l00160"></a>00160     };
-<a name="l00161"></a>00161     
-<a name="l00163"></a>00163 
-<a name="l00168"></a>00168     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00292.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>();
-<a name="l00169"></a>00169 
-<a name="l00171"></a>00171 
-<a name="l00175"></a>00175     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00292.html#721eb173e154ab38292273e9266a9b07">try_lock</a>();
-<a name="l00176"></a>00176 
-<a name="l00178"></a>00178 
-<a name="l00182"></a>00182     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00292.html#d9d16a24d9f6c3dada73c6b9ff214f5b">lock_read</a>(); 
-<a name="l00183"></a>00183 
-<a name="l00185"></a>00185 
-<a name="l00187"></a>00187     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00292.html#595fb23952e3b89426b1f7938dea9b11">try_lock_read</a>();
-<a name="l00188"></a>00188 
-<a name="l00190"></a>00190     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00292.html#5113b32689305599b2c36b5831547704">unlock</a>();
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192  <span class="keyword">private</span>:
-<a name="l00193"></a>00193     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00194"></a>00194     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
-<a name="l00195"></a>00195 
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     <span class="keywordtype">bool</span> start_write(scoped_lock *);
-<a name="l00200"></a>00200     <span class="keywordtype">void</span> set_next_writer(scoped_lock *w);
-<a name="l00202"></a>00202     <span class="keywordtype">void</span> end_write(scoped_lock *);
-<a name="l00204"></a>00204     <span class="keywordtype">bool</span> is_current_writer();
-<a name="l00205"></a>00205 
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208     <span class="keywordtype">void</span> start_read(scoped_lock_read *);
-<a name="l00210"></a>00210     <span class="keywordtype">void</span> unblock_readers();
-<a name="l00212"></a>00212     <span class="keywordtype">void</span> end_read();
-<a name="l00213"></a>00213 
-<a name="l00215"></a>00215     atomic<scoped_lock_read*> reader_head;
-<a name="l00217"></a>00217     atomic<scoped_lock*> writer_head;
-<a name="l00219"></a>00219     atomic<scoped_lock*> writer_tail;
-<a name="l00221"></a>00221     tbb_thread::id my_current_writer;
-<a name="l00223"></a>00223     atomic<unsigned> rdr_count_and_flags;
-<a name="l00224"></a>00224 };
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226 } <span class="comment">// namespace interface5</span>
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 <span class="keyword">using</span> interface5::reader_writer_lock;
-<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_reader_writer_lock_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00560.html b/doc/html/a00560.html
deleted file mode 100644
index 38f7304..0000000
--- a/doc/html/a00560.html
+++ /dev/null
@@ -1,241 +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-2011 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><span class="preprocessor">#include "machine/windows_api.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">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#include <new></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "tbb_profiling.h"</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keyword">namespace </span>tbb {
-<a name="l00037"></a>00037 
-<a name="l00039"></a><a class="code" href="a00296.html">00039</a> <span class="keyword">class </span><a class="code" href="a00296.html">recursive_mutex</a> {
-<a name="l00040"></a>00040 <span class="keyword">public</span>:
-<a name="l00042"></a><a class="code" href="a00296.html#d2fceb7f95c24a8cd1457d4527e4b8c6">00042</a>     <a class="code" href="a00296.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>() {
-<a name="l00043"></a>00043 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>        internal_construct();
-<a name="l00045"></a>00045 <span class="preprocessor">#else</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span>        InitializeCriticalSection(&impl);
-<a name="l00048"></a>00048 <span class="preprocessor">  #else</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span>        pthread_mutexattr_t mtx_attr;
-<a name="l00050"></a>00050         <span class="keywordtype">int</span> error_code = pthread_mutexattr_init( &mtx_attr );
-<a name="l00051"></a>00051         <span class="keywordflow">if</span>( error_code )
-<a name="l00052"></a>00052             tbb::internal::handle_perror(error_code,<span class="stringliteral">"recursive_mutex: pthread_mutexattr_init failed"</span>);
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054         pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );
-<a name="l00055"></a>00055         error_code = pthread_mutex_init( &impl, &mtx_attr );
-<a name="l00056"></a>00056         <span class="keywordflow">if</span>( error_code )
-<a name="l00057"></a>00057             tbb::internal::handle_perror(error_code,<span class="stringliteral">"recursive_mutex: pthread_mutex_init failed"</span>);
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059         pthread_mutexattr_destroy( &mtx_attr );
-<a name="l00060"></a>00060 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
-<a name="l00061"></a>00061 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00062"></a>00062     };
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064     ~<a class="code" href="a00296.html">recursive_mutex</a>() {
-<a name="l00065"></a>00065 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span>        internal_destroy();
-<a name="l00067"></a>00067 <span class="preprocessor">#else</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span>        DeleteCriticalSection(&impl);
-<a name="l00070"></a>00070 <span class="preprocessor">  #else</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span>        pthread_mutex_destroy(&impl); 
-<a name="l00072"></a>00072 
-<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     <span class="keyword">class </span>scoped_lock;
-<a name="l00078"></a>00078     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-<a name="l00079"></a>00079 
-<a name="l00081"></a>00081 
-<a name="l00083"></a><a class="code" href="a00297.html">00083</a>     <span class="keyword">class </span><a class="code" href="a00297.html">scoped_lock</a>: internal::no_copy {
-<a name="l00084"></a>00084     <span class="keyword">public</span>:
-<a name="l00086"></a><a class="code" href="a00297.html#d82d4d36fbf9727a493d26ae50855fe7">00086</a>         <a class="code" href="a00297.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>() : my_mutex(NULL) {};
-<a name="l00087"></a>00087 
-<a name="l00089"></a><a class="code" href="a00297.html#dec17713c4c1321ac8fec66816d0c602">00089</a>         <a class="code" href="a00297.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>( <a class="code" href="a00296.html">recursive_mutex</a>& <a class="code" href="a00275.html">mutex</a> ) {
-<a name="l00090"></a>00090 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span>            my_mutex = &mutex; 
-<a name="l00092"></a>00092 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00093"></a>00093             <a class="code" href="a00297.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( mutex );
-<a name="l00094"></a>00094         }
-<a name="l00095"></a>00095 
-<a name="l00097"></a><a class="code" href="a00297.html#c1197ffb8f3cd9d4fed71d7e06265b7c">00097</a>         <a class="code" href="a00297.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>() {
-<a name="l00098"></a>00098             <span class="keywordflow">if</span>( my_mutex ) 
-<a name="l00099"></a>00099                 <a class="code" href="a00297.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>();
-<a name="l00100"></a>00100         }
-<a name="l00101"></a>00101 
-<a name="l00103"></a><a class="code" href="a00297.html#7fb04da37cccf8c99b1f9102d9074f9a">00103</a>         <span class="keywordtype">void</span> <a class="code" href="a00297.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( <a class="code" href="a00296.html">recursive_mutex</a>& <a class="code" href="a00275.html">mutex</a> ) {
-<a name="l00104"></a>00104 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span>            internal_acquire( mutex );
-<a name="l00106"></a>00106 <span class="preprocessor">#else</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span>            my_mutex = &mutex;
-<a name="l00108"></a>00108             mutex.<a class="code" href="a00296.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>();
-<a name="l00109"></a>00109 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00110"></a>00110         }
-<a name="l00111"></a>00111 
-<a name="l00113"></a><a class="code" href="a00297.html#36bfc3e93e3ef6340abef4901444d340">00113</a>         <span class="keywordtype">bool</span> <a class="code" href="a00297.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>( <a class="code" href="a00296.html">recursive_mutex</a>& <a class="code" href="a00275.html">mutex</a> ) {
-<a name="l00114"></a>00114 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire( mutex );
-<a name="l00116"></a>00116 <span class="preprocessor">#else</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00296.html#86e719b0afee25704af11ab97694d240">try_lock</a>();
-<a name="l00118"></a>00118             <span class="keywordflow">if</span>( result )
-<a name="l00119"></a>00119                 my_mutex = &mutex;
-<a name="l00120"></a>00120             <span class="keywordflow">return</span> result;
-<a name="l00121"></a>00121 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00122"></a>00122         }
-<a name="l00123"></a>00123 
-<a name="l00125"></a><a class="code" href="a00297.html#ac480ea0e9d5ea0345a67d57008b6263">00125</a>         <span class="keywordtype">void</span> <a class="code" href="a00297.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>() {
-<a name="l00126"></a>00126 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span>            internal_release();
-<a name="l00128"></a>00128 <span class="preprocessor">#else</span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span>            my_mutex-><a class="code" href="a00296.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>();
-<a name="l00130"></a>00130             my_mutex = NULL;
-<a name="l00131"></a>00131 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00132"></a>00132         }
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134     <span class="keyword">private</span>:
-<a name="l00136"></a>00136         <a class="code" href="a00296.html">recursive_mutex</a>* my_mutex;
-<a name="l00137"></a>00137 
-<a name="l00139"></a>00139         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00296.html">recursive_mutex</a>& m );
-<a name="l00140"></a>00140 
-<a name="l00142"></a>00142         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00296.html">recursive_mutex</a>& m );
-<a name="l00143"></a>00143 
-<a name="l00145"></a>00145         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00296.html">recursive_mutex</a>;
-<a name="l00148"></a>00148     };
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     <span class="comment">// Mutex traits</span>
-<a name="l00151"></a>00151     <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="l00152"></a>00152     <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="l00153"></a>00153     <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="l00154"></a>00154 
-<a name="l00155"></a>00155     <span class="comment">// C++0x compatibility interface</span>
-<a name="l00156"></a>00156     
-<a name="l00158"></a><a class="code" href="a00296.html#4c342c69d47f4bb0b393535dee4015d6">00158</a>     <span class="keywordtype">void</span> <a class="code" href="a00296.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>() {
-<a name="l00159"></a>00159 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00160"></a>00160 <span class="preprocessor"></span>        <a class="code" href="a00227.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00161"></a>00161         <span class="keyword">new</span>(tmp.<a class="code" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00297.html">scoped_lock</a>(*<span class="keyword">this</span>);
-<a name="l00162"></a>00162 <span class="preprocessor">#else</span>
-<a name="l00163"></a>00163 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00164"></a>00164 <span class="preprocessor"></span>        EnterCriticalSection(&impl);
-<a name="l00165"></a>00165 <span class="preprocessor">  #else</span>
-<a name="l00166"></a>00166 <span class="preprocessor"></span>        pthread_mutex_lock(&impl);
-<a name="l00167"></a>00167 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00168"></a>00168 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00169"></a>00169     }
-<a name="l00170"></a>00170 
-<a name="l00172"></a>00172 
-<a name="l00173"></a><a class="code" href="a00296.html#86e719b0afee25704af11ab97694d240">00173</a>     <span class="keywordtype">bool</span> <a class="code" href="a00296.html#86e719b0afee25704af11ab97694d240">try_lock</a>() {
-<a name="l00174"></a>00174 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00175"></a>00175 <span class="preprocessor"></span>        <a class="code" href="a00227.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00176"></a>00176         <span class="keywordflow">return</span> (<span class="keyword">new</span>(tmp.<a class="code" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00297.html">scoped_lock</a>)->internal_try_acquire(*<span class="keyword">this</span>);
-<a name="l00177"></a>00177 <span class="preprocessor">#else        </span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00179"></a>00179 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&impl)!=0;
-<a name="l00180"></a>00180 <span class="preprocessor">  #else</span>
-<a name="l00181"></a>00181 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&impl)==0;
-<a name="l00182"></a>00182 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00183"></a>00183 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00184"></a>00184     }
-<a name="l00185"></a>00185 
-<a name="l00187"></a><a class="code" href="a00296.html#f0a96e26b7f074588dc31e32524856ae">00187</a>     <span class="keywordtype">void</span> <a class="code" href="a00296.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>() {
-<a name="l00188"></a>00188 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00189"></a>00189 <span class="preprocessor"></span>        <a class="code" href="a00227.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00190"></a>00190         <a class="code" href="a00297.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00191"></a>00191         s.<a class="code" href="a00297.html#3efd10a49e2435ea5215b49907f93ba2">my_mutex</a> = <span class="keyword">this</span>;
-<a name="l00192"></a>00192         s.<a class="code" href="a00297.html#43ed37cec508072e53a52113c8040137">internal_release</a>();
-<a name="l00193"></a>00193 <span class="preprocessor">#else</span>
-<a name="l00194"></a>00194 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00195"></a>00195 <span class="preprocessor"></span>        LeaveCriticalSection(&impl);
-<a name="l00196"></a>00196 <span class="preprocessor">  #else</span>
-<a name="l00197"></a>00197 <span class="preprocessor"></span>        pthread_mutex_unlock(&impl);
-<a name="l00198"></a>00198 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00199"></a>00199 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
-<a name="l00200"></a>00200     }
-<a name="l00201"></a>00201 
-<a name="l00203"></a>00203 <span class="preprocessor">  #if _WIN32||_WIN64</span>
-<a name="l00204"></a><a class="code" href="a00296.html#889fa8cc32dd707eef7c0f52dda09c0d">00204</a> <span class="preprocessor"></span>    <span class="keyword">typedef</span> LPCRITICAL_SECTION <a class="code" href="a00296.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a>;
-<a name="l00205"></a>00205 <span class="preprocessor">  #else</span>
-<a name="l00206"></a>00206 <span class="preprocessor"></span>    <span class="keyword">typedef</span> pthread_mutex_t* <a class="code" href="a00296.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a>;
-<a name="l00207"></a>00207 <span class="preprocessor">  #endif</span>
-<a name="l00208"></a>00208 <span class="preprocessor"></span>    <a class="code" href="a00296.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a> native_handle() { <span class="keywordflow">return</span> (<a class="code" href="a00296.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a>) &impl; }
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210 <span class="keyword">private</span>:
-<a name="l00211"></a>00211 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00212"></a>00212 <span class="preprocessor"></span>    CRITICAL_SECTION impl;
-<a name="l00213"></a>00213     <span class="keyword">enum</span> state_t {
-<a name="l00214"></a>00214         INITIALIZED=0x1234,
-<a name="l00215"></a>00215         DESTROYED=0x789A,
-<a name="l00216"></a>00216     } state;
-<a name="l00217"></a>00217 <span class="preprocessor">#else</span>
-<a name="l00218"></a>00218 <span class="preprocessor"></span>    pthread_mutex_t impl;
-<a name="l00219"></a>00219 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00220"></a>00220 
-<a name="l00222"></a>00222     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00223"></a>00223 
-<a name="l00225"></a>00225     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
-<a name="l00226"></a>00226 };
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 __TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)
-<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_recursive_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00561.html b/doc/html/a00561.html
deleted file mode 100644
index 0ffc1de..0000000
--- a/doc/html/a00561.html
+++ /dev/null
@@ -1,137 +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>runtime_loader.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>runtime_loader.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-2011 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_runtime_loader_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_runtime_loader_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#if ! TBB_PREVIEW_RUNTIME_LOADER</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">    #error Set TBB_PREVIEW_RUNTIME_LOADER to include runtime_loader.h</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="l00028"></a>00028 <span class="preprocessor">#include "tbb/tbb_stddef.h"</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include <climits></span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">    #if ! __TBB_NO_IMPLICIT_LINKAGE</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment( linker, "/nodefaultlib:tbb_debug.lib" )</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment( linker, "/defaultlib:tbbproxy_debug.lib" )</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">            #pragma comment( linker, "/nodefaultlib:tbb.lib" )</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment( linker, "/defaultlib:tbbproxy.lib" )</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span>
-<a name="l00043"></a>00043 <span class="keyword">namespace </span>tbb {
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="keyword">namespace </span>interface6 {
-<a name="l00046"></a>00046 
-<a name="l00048"></a>00048 
-<a name="l00085"></a><a class="code" href="a00298.html">00085</a> <span class="keyword">class </span><a class="code" href="a00298.html">runtime_loader</a> : tbb::internal::no_copy {
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087     <span class="keyword">public</span>:
-<a name="l00088"></a>00088 
-<a name="l00090"></a><a class="code" href="a00298.html#bb0130fe0f596399707e61431231ebcb">00090</a>         <span class="keyword">enum</span> <a class="code" href="a00298.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> {
-<a name="l00091"></a>00091             <a class="code" href="a00298.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">em_status</a>,     
-<a name="l00092"></a>00092             <a class="code" href="a00298.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">em_throw</a>,      
-<a name="l00093"></a><a class="code" href="a00298.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">00093</a>             <a class="code" href="a00298.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a>       
-<a name="l00094"></a>00094         }; <span class="comment">// error_mode</span>
-<a name="l00095"></a>00095 
-<a name="l00097"></a><a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde018789">00097</a>         <span class="keyword">enum</span> <a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde018789">error_code</a> {
-<a name="l00098"></a>00098             <a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">ec_ok</a>,         
-<a name="l00099"></a>00099             <a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">ec_bad_call</a>,   
-<a name="l00100"></a>00100             <a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">ec_bad_arg</a>,    
-<a name="l00101"></a>00101             <a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">ec_bad_lib</a>,    
-<a name="l00102"></a>00102             <a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">ec_bad_ver</a>,    
-<a name="l00103"></a><a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">00103</a>             <a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">ec_no_lib</a>      
-<a name="l00104"></a>00104         }; <span class="comment">// error_code</span>
-<a name="l00105"></a>00105 
-<a name="l00107"></a>00107         <a class="code" href="a00298.html#7caa4ff6e44c2348e67f601cc5d97c34">runtime_loader</a>( <a class="code" href="a00298.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> mode = <a class="code" href="a00298.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a> );
-<a name="l00108"></a>00108 
-<a name="l00110"></a>00110 
-<a name="l00115"></a>00115         <a class="code" href="a00298.html#7caa4ff6e44c2348e67f601cc5d97c34">runtime_loader</a>(
-<a name="l00116"></a>00116             <span class="keywordtype">char</span> <span class="keyword">const</span> * path[],                           
-<a name="l00117"></a>00117             <span class="keywordtype">int</span>          min_ver = TBB_INTERFACE_VERSION,  
-<a name="l00118"></a>00118             <span class="keywordtype">int</span>          max_ver = INT_MAX,                
-<a name="l00119"></a>00119             <a class="code" href="a00298.html#bb0130fe0f596399707e61431231ebcb">error_mode</a>   mode    = <a class="code" href="a00298.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a>                
-<a name="l00120"></a>00120         );
-<a name="l00121"></a>00121 
-<a name="l00123"></a>00123         <a class="code" href="a00298.html#c25fec923a751a3e03f5cbe969f1f0c5">~runtime_loader</a>();
-<a name="l00124"></a>00124 
-<a name="l00126"></a>00126 
-<a name="l00150"></a>00150         <a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde018789">error_code</a>
-<a name="l00151"></a>00151         <a class="code" href="a00298.html#5f3f6f1683386705a6931acae45f0862">load</a>(
-<a name="l00152"></a>00152             <span class="keywordtype">char</span> <span class="keyword">const</span> * path[],                           
-<a name="l00153"></a>00153             <span class="keywordtype">int</span>          min_ver = TBB_INTERFACE_VERSION,  
-<a name="l00154"></a>00154             <span class="keywordtype">int</span>          max_ver = INT_MAX                 
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156         );
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 
-<a name="l00160"></a>00160 
-<a name="l00163"></a>00163         <a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde018789">error_code</a> <a class="code" href="a00298.html#78d938ed2e54d38dd38d6609e6c60389">status</a>();
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165     <span class="keyword">private</span>:
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167         <a class="code" href="a00298.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> <span class="keyword">const</span> my_mode;
-<a name="l00168"></a>00168         <a class="code" href="a00298.html#6831be91cdc64e57e565ce0dde018789">error_code</a>       my_status;
-<a name="l00169"></a>00169         <span class="keywordtype">bool</span>             my_loaded;
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 }; <span class="comment">// class runtime_loader</span>
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 } <span class="comment">// namespace interface6</span>
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 <span class="keyword">using</span> interface6::runtime_loader;
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177 } <span class="comment">// namespace tbb</span>
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_runtime_loader_H */</span>
-<a name="l00180"></a>00180 
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00562.html b/doc/html/a00562.html
index f804ef8..bc3407f 100644
--- a/doc/html/a00562.html
+++ b/doc/html/a00562.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_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>scalable_allocator.h</h1><a href="a00363.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-2011 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-2012 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,184 +39,300 @@
 <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_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="l00025"></a>00025 <span class="preprocessor">#include <stddef.h></span> <span class="comment">/* Need ptrdiff_t and size_t from here. */</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#if !_MSC_VER</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include <stdint.h></span> <span class="comment">/* Need intptr_t from here. */</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 991)</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#ifdef __cplusplus</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
-<a name="l00037"></a>00037 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</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="a00311.html">00033</a> <span class="keyword">struct </span><a class="code" href="a00311.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 <span class="preprocessor">#if _MSC_VER >= 1400</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC   __cdecl</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00397.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a> (size_t size);
-<a name="l00048"></a>00048 
-<a name="l00051"></a>00051 <span class="keywordtype">void</span>   __TBB_EXPORTED_FUNC <a class="code" href="a00397.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a> (<span class="keywordtype">void</span>* ptr);
-<a name="l00052"></a>00052 
-<a name="l00055"></a>00055 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00397.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size);
-<a name="l00056"></a>00056 
-<a name="l00059"></a>00059 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00397.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size);
-<a name="l00060"></a>00060 
-<a name="l00063"></a>00063 <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00397.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (<span class="keywordtype">void</span>** memptr, size_t alignment, size_t size);
-<a name="l00064"></a>00064 
-<a name="l00067"></a>00067 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00397.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_aligned_malloc</a> (size_t size, size_t alignment);
-<a name="l00068"></a>00068 
-<a name="l00071"></a>00071 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00397.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_aligned_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size, size_t alignment);
-<a name="l00072"></a>00072 
-<a name="l00075"></a>00075 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00397.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (<span class="keywordtype">void</span>* ptr);
-<a name="l00076"></a>00076 
-<a name="l00081"></a>00081 size_t __TBB_EXPORTED_FUNC <a class="code" href="a00397.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (<span class="keywordtype">void</span>* ptr);
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="preprocessor">#ifdef __cplusplus</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span>
-<a name="l00085"></a>00085 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="preprocessor">#ifdef __cplusplus</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span>
-<a name="l00089"></a>00089 <span class="keyword">namespace </span>rml {
-<a name="l00090"></a>00090 <span class="keyword">class </span>MemoryPool;
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 <span class="preprocessor">#define MEM_POLICY_DEFINED 1</span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">void</span> *(*rawAllocType)(intptr_t pool_id, size_t &bytes);
-<a name="l00094"></a>00094 <span class="keyword">typedef</span> int   (*rawFreeType)(intptr_t pool_id, <span class="keywordtype">void</span>* raw_ptr, size_t raw_bytes);
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="keyword">struct </span>MemPoolPolicy {
-<a name="l00097"></a>00097     rawAllocType pAlloc;
-<a name="l00098"></a>00098     rawFreeType  pFree;
-<a name="l00099"></a>00099     size_t       granularity;   <span class="comment">// granularity of pAlloc allocations</span>
-<a name="l00100"></a>00100     <span class="keywordtype">void</span>        *pReserved;     <span class="comment">// reserved for future extensions</span>
-<a name="l00101"></a>00101     size_t       szReserved;    <span class="comment">// size of pReserved data</span>
-<a name="l00102"></a>00102 };
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 MemoryPool *pool_create(intptr_t pool_id, <span class="keyword">const</span> MemPoolPolicy* memPoolPolicy);
-<a name="l00105"></a>00105 <span class="keywordtype">bool</span>  pool_destroy(MemoryPool* memPool);
-<a name="l00106"></a>00106 <span class="keywordtype">void</span> *pool_malloc(MemoryPool* memPool, size_t size);
-<a name="l00107"></a>00107 <span class="keywordtype">void</span> *pool_realloc(MemoryPool* memPool, <span class="keywordtype">void</span> *object, size_t size);
-<a name="l00108"></a>00108 <span class="keywordtype">bool</span>  pool_reset(MemoryPool* memPool);
-<a name="l00109"></a>00109 <span class="keywordtype">bool</span>  pool_free(MemoryPool *memPool, <span class="keywordtype">void</span> *object);
-<a name="l00110"></a>00110 }
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="preprocessor">#include <new></span>      <span class="comment">/* To use new with the placement argument */</span>
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 <span class="comment">/* Ensure that including this header does not cause implicit linkage with TBB */</span>
-<a name="l00115"></a>00115 <span class="preprocessor">#ifndef __TBB_NO_IMPLICIT_LINKAGE</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_NO_IMPLICIT_LINKAGE 1</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</span>
-<a name="l00118"></a>00118 <span class="preprocessor">    #undef  __TBB_NO_IMPLICIT_LINKAGE</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</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">namespace </span>tbb {
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
-<a name="l00128"></a>00128 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
-<a name="l00130"></a>00130 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00131"></a>00131 <span class="preprocessor"></span>
-<a name="l00133"></a>00133 
-<a name="l00136"></a>00136 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00137"></a><a class="code" href="a00299.html">00137</a> <span class="keyword">class </span><a class="code" href="a00299.html">scalable_allocator</a> {
-<a name="l00138"></a>00138 <span class="keyword">public</span>:
-<a name="l00139"></a>00139     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type<T>::value_type value_type;
-<a name="l00140"></a>00140     <span class="keyword">typedef</span> value_type* pointer;
-<a name="l00141"></a>00141     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
-<a name="l00142"></a>00142     <span class="keyword">typedef</span> value_type& reference;
-<a name="l00143"></a>00143     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference;
-<a name="l00144"></a>00144     <span class="keyword">typedef</span> size_t size_type;
-<a name="l00145"></a>00145     <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00146"></a>00146     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00147"></a>00147         <span class="keyword">typedef</span> <a class="code" href="a00299.html">scalable_allocator<U></a> other;
-<a name="l00148"></a>00148     };
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     <a class="code" href="a00299.html">scalable_allocator</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00151"></a>00151     <a class="code" href="a00299.html">scalable_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00299.html">scalable_allocator</a>& ) <span class="keywordflow">throw</span>() {}
-<a name="l00152"></a>00152     <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00299.html">scalable_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00299.html">scalable_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-<a name="l00155"></a>00155     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-<a name="l00156"></a>00156 
-<a name="l00158"></a><a class="code" href="a00299.html#726b1586d05d44665a36e1c7b2699bfd">00158</a>     pointer <a class="code" href="a00299.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="l00159"></a>00159         <span class="keywordflow">return</span> static_cast<pointer>( <a class="code" href="a00397.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a>( n * <span class="keyword">sizeof</span>(value_type) ) );
-<a name="l00160"></a>00160     }
-<a name="l00161"></a>00161 
-<a name="l00163"></a><a class="code" href="a00299.html#f806a238c18cbcfb531e1e0a0d2ec59d">00163</a>     <span class="keywordtype">void</span> <a class="code" href="a00299.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>( pointer p, size_type ) {
-<a name="l00164"></a>00164         <a class="code" href="a00397.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a>( p );
-<a name="l00165"></a>00165     }
-<a name="l00166"></a>00166 
-<a name="l00168"></a><a class="code" href="a00299.html#880e766f1d913988c21973dbdd874fd5">00168</a>     size_type <a class="code" href="a00299.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const throw() {
-<a name="l00169"></a>00169         size_type absolutemax = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (value_type);
-<a name="l00170"></a>00170         <span class="keywordflow">return</span> (absolutemax > 0 ? absolutemax : 1);
-<a name="l00171"></a>00171     }
-<a name="l00172"></a>00172     <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="l00173"></a>00173     <span class="keywordtype">void</span> destroy( pointer p ) {p->~value_type();}
-<a name="l00174"></a>00174 };
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
-<a name="l00179"></a>00179 <span class="preprocessor"></span>
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182 <span class="keyword">template</span><>
-<a name="l00183"></a><a class="code" href="a00300.html">00183</a> <span class="keyword">class </span><a class="code" href="a00299.html">scalable_allocator</a><void> {
-<a name="l00184"></a>00184 <span class="keyword">public</span>:
-<a name="l00185"></a>00185     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
-<a name="l00186"></a>00186     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
-<a name="l00187"></a>00187     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
-<a name="l00188"></a>00188     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00189"></a>00189         <span class="keyword">typedef</span> <a class="code" href="a00299.html">scalable_allocator<U></a> other;
-<a name="l00190"></a>00190     };
-<a name="l00191"></a>00191 };
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00194"></a>00194 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00299.html">scalable_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00299.html">scalable_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00197"></a>00197 <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="l00198"></a>00198 
-<a name="l00199"></a>00199 } <span class="comment">// namespace tbb</span>
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00202"></a>00202 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_BUILD && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)</span>
-<a name="l00203"></a>00203 <span class="preprocessor"></span><span class="preprocessor">        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1</span>
-<a name="l00204"></a>00204 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00205"></a>00205 <span class="preprocessor"></span>
-<a name="l00206"></a>00206 <span class="preprocessor">    #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE</span>
-<a name="l00207"></a>00207 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
-<a name="l00208"></a>00208 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc_debug.lib")</span>
-<a name="l00209"></a>00209 <span class="preprocessor"></span><span class="preprocessor">        #else</span>
-<a name="l00210"></a>00210 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc.lib")</span>
-<a name="l00211"></a>00211 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
-<a name="l00212"></a>00212 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00213"></a>00213 <span class="preprocessor"></span>
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 <span class="preprocessor">#endif</span>
-<a name="l00216"></a>00216 <span class="preprocessor"></span>
-<a name="l00217"></a>00217 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
-<a name="l00220"></a>00220 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00221"></a>00221 <span class="preprocessor"></span><span class="preprocessor">#endif // ICC 11.0 warning 991 is back</span>
-<a name="l00222"></a>00222 <span class="preprocessor"></span>
-<a name="l00223"></a>00223 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_scalable_allocator_H */</span>
+<a name="l00039"></a><a class="code" href="a00284.html">00039</a> <span class="keyword">struct </span><a class="code" href="a00284.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="a00337.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="a00253.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="a00335.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="a00337.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="a00337.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="a00337.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="a00337.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="a00337.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="a00426.html#ged143f31dd3d96ded02ab3db915b91c7">00321</a> <span class="keywordtype">void</span> <a class="code" href="a00426.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="a00426.html#gc9fac8870b2e6365fb337014404529df">00328</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00329.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="a00426.html#g62fde400a37bbca1a2fddc8e3d22f556">00335</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#ged143f31dd3d96ded02ab3db915b91c7">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> <a class="code" href="a00257.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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00565.html b/doc/html/a00565.html
deleted file mode 100644
index a0ae60b..0000000
--- a/doc/html/a00565.html
+++ /dev/null
@@ -1,192 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>spin_mutex.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<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>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-2011 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_spin_mutex_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_spin_mutex_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 <new></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "aligned_space.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "tbb_machine.h"</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_profiling.h"</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 
-<a name="l00039"></a><a class="code" href="a00305.html">00039</a> <span class="keyword">class </span><a class="code" href="a00305.html">spin_mutex</a> {
-<a name="l00041"></a>00041     __TBB_atomic_flag 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="a00305.html#3d8fb44644fd8d41ada1fbeba7409be3">00046</a>     <a class="code" href="a00305.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="a00306.html">00053</a>     <span class="keyword">class </span><a class="code" href="a00306.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="a00305.html">spin_mutex</a>* my_mutex; 
-<a name="l00057"></a>00057 
-<a name="l00059"></a>00059         __TBB_Flag 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="a00305.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="a00305.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="a00305.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="a00306.html#29ae680ae7f5e685c2e15535b9c855b3">00074</a>         <a class="code" href="a00306.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="a00306.html#5ce6807050a9e8f87bcb4a65dccb12ef">00077</a>         <a class="code" href="a00306.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>( <a class="code" href="a00305.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="a00305.html#0a6204153f18f3a7816faa95b2c1626d">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="a00306.html#3ee3c338732b1f64b0b32a757807a30d">00088</a>         <span class="keywordtype">void</span> <a class="code" href="a00306.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>( <a class="code" href="a00305.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="a00305.html#0a6204153f18f3a7816faa95b2c1626d">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="a00306.html#9297ec188534b45dc0ca48f2f39a0501">00099</a>         <span class="keywordtype">bool</span> <a class="code" href="a00306.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>( <a class="code" href="a00305.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="a00305.html#0a6204153f18f3a7816faa95b2c1626d">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;
-<a name="l00107"></a>00107             }
-<a name="l00108"></a>00108             <span class="keywordflow">return</span> result;
-<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="a00306.html#eeb615e68e963e6bf8d9c11402d0ce8e">00113</a>         <span class="keywordtype">void</span> <a class="code" href="a00306.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_UnlockByte(my_mutex-><a class="code" href="a00305.html#0a6204153f18f3a7816faa95b2c1626d">flag</a>, 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="a00306.html#ac6fa425d1f06c56d8b70abc51aac844">00123</a>         <a class="code" href="a00306.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_UnlockByte(my_mutex-><a class="code" href="a00305.html#0a6204153f18f3a7816faa95b2c1626d">flag</a>, 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         }
-<a name="l00132"></a>00132     };
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     <span class="comment">// Mutex traits</span>
-<a name="l00137"></a>00137     <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="l00138"></a>00138     <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="l00139"></a>00139     <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="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="a00305.html#4f748989e19b6045e3a2d2ee73626a28">00144</a>     <span class="keywordtype">void</span> <a class="code" href="a00305.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="a00227.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00147"></a>00147         <span class="keyword">new</span>(tmp.<a class="code" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00306.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="a00305.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">00155</a>     <span class="keywordtype">bool</span> <a class="code" href="a00305.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="a00227.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="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00306.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="a00305.html#0e843ee6265f57f27d228ba91e7308ef">00165</a>     <span class="keywordtype">void</span> <a class="code" href="a00305.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="a00227.html">aligned_space<scoped_lock,1></a> tmp;
-<a name="l00168"></a>00168         <a class="code" href="a00306.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
-<a name="l00169"></a>00169         s.<a class="code" href="a00306.html#d968921bed018503214f36e09007ee7b">my_mutex</a> = <span class="keyword">this</span>;
-<a name="l00170"></a>00170         s.<a class="code" href="a00306.html#96af1c1af58988d527102379c3d4c831">my_unlock_value</a> = 0;
-<a name="l00171"></a>00171         s.<a class="code" href="a00306.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>
-<a name="l00175"></a>00175     }
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-<a name="l00178"></a>00178 };
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 __TBB_DEFINE_PROFILING_SET_NAME(spin_mutex)
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182 } <span class="comment">// namespace tbb</span>
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_spin_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00566.html b/doc/html/a00566.html
deleted file mode 100644
index 347145e..0000000
--- a/doc/html/a00566.html
+++ /dev/null
@@ -1,217 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>spin_rw_mutex.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<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>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-2011 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_spin_rw_mutex_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_spin_rw_mutex_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 "tbb_profiling.h"</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="keyword">class </span>spin_rw_mutex_v3;
-<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="a00307.html">00035</a> <span class="keyword">class </span><a class="code" href="a00307.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 
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release_writer();
-<a name="l00044"></a>00044 
-<a name="l00046"></a>00046     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire_reader();
-<a name="l00047"></a>00047 
-<a name="l00049"></a>00049     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_upgrade();
-<a name="l00050"></a>00050 
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_downgrade();
-<a name="l00054"></a>00054 
-<a name="l00056"></a>00056     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release_reader();
-<a name="l00057"></a>00057 
-<a name="l00059"></a>00059     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire_writer();
-<a name="l00060"></a>00060 
-<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="a00307.html#61332b2756de89f3f5f69310cbb6e70c">00067</a>     <a class="code" href="a00307.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="a00307.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="a00308.html">00083</a>     <span class="keyword">class </span><a class="code" href="a00308.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="a00308.html#d6ea60dee5563f702379bf5e51aa8806">00087</a>         <a class="code" href="a00308.html">scoped_lock</a>() : <a class="code" href="a00275.html">mutex</a>(NULL), is_writer(false) {}
-<a name="l00088"></a>00088 
-<a name="l00090"></a><a class="code" href="a00308.html#42a92d4f8fdde425b111cfa8a9228071">00090</a>         <a class="code" href="a00308.html">scoped_lock</a>( <a class="code" href="a00307.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) : <a class="code" href="a00275.html">mutex</a>(NULL) {
-<a name="l00091"></a>00091             <a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>(m, write);
-<a name="l00092"></a>00092         }
-<a name="l00093"></a>00093 
-<a name="l00095"></a><a class="code" href="a00308.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">00095</a>         <a class="code" href="a00293.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a>() {
-<a name="l00096"></a>00096             <span class="keywordflow">if</span>( <a class="code" href="a00275.html">mutex</a> ) <a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>();
-<a name="l00097"></a>00097         }
-<a name="l00098"></a>00098 
-<a name="l00100"></a><a class="code" href="a00308.html#b0b646ec5be02a127d159bbb7ca65353">00100</a>         <span class="keywordtype">void</span> <a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00307.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
-<a name="l00101"></a>00101             __TBB_ASSERT( !<a class="code" href="a00275.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
-<a name="l00102"></a>00102             is_writer = write; 
-<a name="l00103"></a>00103             <a class="code" href="a00275.html">mutex</a> = &m;
-<a name="l00104"></a>00104             <span class="keywordflow">if</span>( write ) <a class="code" href="a00275.html">mutex</a>->internal_acquire_writer();
-<a name="l00105"></a>00105             <span class="keywordflow">else</span>        <a class="code" href="a00275.html">mutex</a>->internal_acquire_reader();
-<a name="l00106"></a>00106         }
-<a name="l00107"></a>00107 
-<a name="l00109"></a>00109 
-<a name="l00110"></a><a class="code" href="a00308.html#3f0b1e3f2efab63336400348bd070226">00110</a>         <span class="keywordtype">bool</span> upgrade_to_writer() {
-<a name="l00111"></a>00111             __TBB_ASSERT( <a class="code" href="a00275.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
-<a name="l00112"></a>00112             __TBB_ASSERT( !is_writer, <span class="stringliteral">"not a reader"</span> );
-<a name="l00113"></a>00113             is_writer = <span class="keyword">true</span>; 
-<a name="l00114"></a>00114             <span class="keywordflow">return</span> <a class="code" href="a00275.html">mutex</a>->internal_upgrade();
-<a name="l00115"></a>00115         }
-<a name="l00116"></a>00116 
-<a name="l00118"></a><a class="code" href="a00308.html#61b14d00a78185c9b2d206ebfc379124">00118</a>         <span class="keywordtype">void</span> <a class="code" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
-<a name="l00119"></a>00119             __TBB_ASSERT( <a class="code" href="a00275.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
-<a name="l00120"></a>00120             <a class="code" href="a00307.html">spin_rw_mutex</a> *m = <a class="code" href="a00275.html">mutex</a>; 
-<a name="l00121"></a>00121             <a class="code" href="a00275.html">mutex</a> = NULL;
-<a name="l00122"></a>00122 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00123"></a>00123 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( is_writer ) m->internal_release_writer();
-<a name="l00124"></a>00124             <span class="keywordflow">else</span>            m->internal_release_reader();
-<a name="l00125"></a>00125 <span class="preprocessor">#else</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( is_writer ) __TBB_AtomicAND( &m-><a class="code" href="a00307.html#621b900d5fef23d2e401aabcbb777c76">state</a>, READERS ); 
-<a name="l00127"></a>00127             <span class="keywordflow">else</span>            __TBB_FetchAndAddWrelease( &m-><a class="code" href="a00307.html#621b900d5fef23d2e401aabcbb777c76">state</a>, -(intptr_t)ONE_READER);
-<a name="l00128"></a>00128 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
-<a name="l00129"></a>00129         }
-<a name="l00130"></a>00130 
-<a name="l00132"></a><a class="code" href="a00308.html#c2c2c38a08cb9080e87099fac3e5bc94">00132</a>         <span class="keywordtype">bool</span> downgrade_to_reader() {
-<a name="l00133"></a>00133 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00134"></a>00134 <span class="preprocessor"></span>            __TBB_ASSERT( <a class="code" href="a00275.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
-<a name="l00135"></a>00135             __TBB_ASSERT( is_writer, <span class="stringliteral">"not a writer"</span> );
-<a name="l00136"></a>00136             <a class="code" href="a00275.html">mutex</a>->internal_downgrade();
-<a name="l00137"></a>00137 <span class="preprocessor">#else</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span>            __TBB_FetchAndAddW( &<a class="code" href="a00275.html">mutex</a>->state, ((intptr_t)ONE_READER-WRITER));
-<a name="l00139"></a>00139 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
-<a name="l00140"></a>00140             is_writer = <span class="keyword">false</span>;
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142             <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00143"></a>00143         }
-<a name="l00144"></a>00144 
-<a name="l00146"></a><a class="code" href="a00308.html#9879626968d9b9a04cd2ec0fb2e84ae1">00146</a>         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00307.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
-<a name="l00147"></a>00147             __TBB_ASSERT( !<a class="code" href="a00275.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
-<a name="l00148"></a>00148             <span class="keywordtype">bool</span> result;
-<a name="l00149"></a>00149             is_writer = write; 
-<a name="l00150"></a>00150             result = write? m.internal_try_acquire_writer()
-<a name="l00151"></a>00151                           : m.internal_try_acquire_reader();
-<a name="l00152"></a>00152             <span class="keywordflow">if</span>( result ) 
-<a name="l00153"></a>00153                 <a class="code" href="a00275.html">mutex</a> = &m;
-<a name="l00154"></a>00154             <span class="keywordflow">return</span> result;
-<a name="l00155"></a>00155         }
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     <span class="keyword">protected</span>:
-<a name="l00159"></a><a class="code" href="a00308.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">00159</a>         <a class="code" href="a00307.html">spin_rw_mutex</a>* <a class="code" href="a00275.html">mutex</a>;
-<a name="l00160"></a>00160 
-<a name="l00162"></a>00162 
-<a name="l00163"></a><a class="code" href="a00308.html#6b5a7c3c67a36b05c4df8410d32627d8">00163</a>         <span class="keywordtype">bool</span> is_writer;
-<a name="l00164"></a>00164     };
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     <span class="comment">// Mutex traits</span>
-<a name="l00167"></a>00167     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;
-<a name="l00168"></a>00168     <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="l00169"></a>00169     <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="l00170"></a>00170 
-<a name="l00171"></a>00171     <span class="comment">// ISO C++0x compatibility methods</span>
-<a name="l00172"></a>00172 
-<a name="l00174"></a><a class="code" href="a00307.html#4007d6e1523dbc3c2bb7f889ab789a8a">00174</a>     <span class="keywordtype">void</span> lock() {internal_acquire_writer();}
-<a name="l00175"></a>00175 
-<a name="l00177"></a>00177 
-<a name="l00178"></a><a class="code" href="a00307.html#088bb256be794cc47d3b83791632fdfc">00178</a>     <span class="keywordtype">bool</span> try_lock() {<span class="keywordflow">return</span> internal_try_acquire_writer();}
-<a name="l00179"></a>00179 
-<a name="l00181"></a><a class="code" href="a00307.html#f9f52ead2098eb5fb12da59d5ae53b55">00181</a>     <span class="keywordtype">void</span> unlock() {
-<a name="l00182"></a>00182 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00183"></a>00183 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( state&WRITER ) internal_release_writer();
-<a name="l00184"></a>00184         <span class="keywordflow">else</span>               internal_release_reader();
-<a name="l00185"></a>00185 <span class="preprocessor">#else</span>
-<a name="l00186"></a>00186 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( state&WRITER ) __TBB_AtomicAND( &state, READERS ); 
-<a name="l00187"></a>00187         <span class="keywordflow">else</span>               __TBB_FetchAndAddWrelease( &state, -(intptr_t)ONE_READER);
-<a name="l00188"></a>00188 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
-<a name="l00189"></a>00189     }
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <span class="comment">// Methods for reader locks that resemble ISO C++0x compatibility methods.</span>
-<a name="l00192"></a>00192 
-<a name="l00194"></a><a class="code" href="a00307.html#13f799708ac4ca437a16be202e263e18">00194</a>     <span class="keywordtype">void</span> lock_read() {internal_acquire_reader();}
-<a name="l00195"></a>00195 
-<a name="l00197"></a>00197 
-<a name="l00198"></a><a class="code" href="a00307.html#b8667415869013f840d976aa406d385a">00198</a>     <span class="keywordtype">bool</span> try_lock_read() {<span class="keywordflow">return</span> internal_try_acquire_reader();}
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200 <span class="keyword">private</span>:
-<a name="l00201"></a>00201     <span class="keyword">typedef</span> intptr_t state_t;
-<a name="l00202"></a>00202     <span class="keyword">static</span> <span class="keyword">const</span> state_t WRITER = 1;
-<a name="l00203"></a>00203     <span class="keyword">static</span> <span class="keyword">const</span> state_t WRITER_PENDING = 2;
-<a name="l00204"></a>00204     <span class="keyword">static</span> <span class="keyword">const</span> state_t READERS = ~(WRITER | WRITER_PENDING);
-<a name="l00205"></a>00205     <span class="keyword">static</span> <span class="keyword">const</span> state_t ONE_READER = 4;
-<a name="l00206"></a>00206     <span class="keyword">static</span> <span class="keyword">const</span> state_t BUSY = WRITER | READERS;
-<a name="l00208"></a>00208 
-<a name="l00211"></a>00211     state_t state;
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
-<a name="l00214"></a>00214 };
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 __TBB_DEFINE_PROFILING_SET_NAME(spin_rw_mutex)
-<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_spin_rw_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00567.html b/doc/html/a00567.html
index 50cc5ff..70fffb3 100644
--- a/doc/html/a00567.html
+++ b/doc/html/a00567.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.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>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-2011 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-2012 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,692 +39,188 @@
 <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="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 "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 <climits></span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="keyword">typedef</span> <span class="keyword">struct </span>___itt_caller *__itt_caller;
+<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="l00032"></a>00032 <span class="keyword">class </span>task;
-<a name="l00033"></a>00033 <span class="keyword">class </span>task_list;
+<a name="l00033"></a>00033 <span class="keyword">namespace </span>internal {
 <a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="keyword">class </span>task_group_context;
-<a name="l00037"></a>00037 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">// MSVC does not allow taking the address of a member that was defined</span>
-<a name="l00040"></a>00040 <span class="comment">// privately in task_base and made public in class task via a using declaration.</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#if _MSC_VER || (__GNUC__==3 && __GNUC_MINOR__<3)</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TASK_BASE_ACCESS public</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TASK_BASE_ACCESS private</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <span class="keyword">namespace </span>internal {
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049     <span class="keyword">class </span>allocate_additional_child_of_proxy: no_assign {
-<a name="l00051"></a>00051         task* <span class="keyword">self</span>;
-<a name="l00052"></a>00052         task& parent;
-<a name="l00053"></a>00053     <span class="keyword">public</span>:
-<a name="l00054"></a>00054         <span class="keyword">explicit</span> allocate_additional_child_of_proxy( task& parent_ ) : self(NULL), parent(parent_) {}
-<a name="l00055"></a>00055         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00056"></a>00056         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00057"></a>00057     };
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 }
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="keyword">namespace </span>interface5 {
-<a name="l00062"></a>00062     <span class="keyword">namespace </span>internal {
-<a name="l00064"></a>00064 
-<a name="l00069"></a><a class="code" href="a00312.html">00069</a>         <span class="keyword">class </span><a class="code" href="a00312.html">task_base</a>: tbb::internal::no_copy {
-<a name="l00070"></a>00070         __TBB_TASK_BASE_ACCESS:
-<a name="l00071"></a>00071             <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00311.html">tbb::task</a>;
-<a name="l00072"></a>00072 
-<a name="l00074"></a>00074             <span class="keyword">static</span> <span class="keywordtype">void</span> spawn( <a class="code" href="a00311.html">task</a>& t );
-<a name="l00075"></a>00075 
-<a name="l00077"></a>00077             <span class="keyword">static</span> <span class="keywordtype">void</span> spawn( <a class="code" href="a00315.html">task_list</a>& list );
-<a name="l00078"></a>00078 
-<a name="l00080"></a>00080 
-<a name="l00082"></a>00082             <span class="keyword">static</span> tbb::internal::allocate_additional_child_of_proxy allocate_additional_child_of( <a class="code" href="a00311.html">task</a>& t ) {
-<a name="l00083"></a>00083                 <span class="keywordflow">return</span> tbb::internal::allocate_additional_child_of_proxy(t);
-<a name="l00084"></a>00084             }
-<a name="l00085"></a>00085 
-<a name="l00087"></a>00087 
-<a name="l00091"></a>00091             <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00311.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>( <a class="code" href="a00311.html">task</a>& victim );
-<a name="l00092"></a>00092         };
-<a name="l00093"></a>00093     } <span class="comment">// internal</span>
-<a name="l00094"></a>00094 } <span class="comment">// interface5</span>
-<a name="l00095"></a>00095 
-<a name="l00097"></a>00097 <span class="keyword">namespace </span>internal {
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099     <span class="keyword">class </span>scheduler: no_copy {
-<a name="l00100"></a>00100     <span class="keyword">public</span>:
-<a name="l00102"></a>00102         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn( <a class="code" href="a00311.html">task</a>& first, <a class="code" href="a00311.html">task</a>*& next ) = 0;
-<a name="l00103"></a>00103 
-<a name="l00105"></a>00105         <span class="keyword">virtual</span> <span class="keywordtype">void</span> wait_for_all( <a class="code" href="a00311.html">task</a>& parent, <a class="code" href="a00311.html">task</a>* child ) = 0;
-<a name="l00106"></a>00106 
-<a name="l00108"></a>00108         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00311.html">task</a>& first, <a class="code" href="a00311.html">task</a>*& next ) = 0;
-<a name="l00109"></a>00109 
-<a name="l00111"></a>00111         <span class="comment">//  Have to have it just to shut up overzealous compilation warnings</span>
-<a name="l00112"></a>00112         <span class="keyword">virtual</span> ~scheduler() = 0;
-<a name="l00113"></a>00113 
-<a name="l00115"></a>00115         <span class="keyword">virtual</span> <span class="keywordtype">void</span> enqueue( <a class="code" href="a00311.html">task</a>& t, <span class="keywordtype">void</span>* reserved ) = 0;
-<a name="l00116"></a>00116     };
-<a name="l00117"></a>00117 
+<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="l00106"></a>00106 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span>
+<a name="l00109"></a>00109 <span class="preprocessor">template<typename RandomAccessIterator, typename Compare></span>
+<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="keyword">class </span>quick_sort_pretest_body : internal::no_assign {
+<a name="l00111"></a>00111     <span class="keyword">const</span> Compare &comp;
+<a name="l00112"></a>00112 
+<a name="l00113"></a>00113 <span class="keyword">public</span>:
+<a name="l00114"></a>00114     quick_sort_pretest_body(<span class="keyword">const</span> Compare &_comp) : comp(_comp) {}
+<a name="l00115"></a>00115 
+<a name="l00116"></a>00116     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> blocked_range<RandomAccessIterator>& range )<span class="keyword"> const </span>{
+<a name="l00117"></a>00117         task &my_task = <a class="code" href="a00337.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>();
+<a name="l00118"></a>00118         RandomAccessIterator my_end = range.end();
 <a name="l00119"></a>00119 
-<a name="l00120"></a>00120     <span class="keyword">typedef</span> intptr_t reference_count;
-<a name="l00121"></a>00121 
-<a name="l00123"></a>00123     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> affinity_id;
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span>    <span class="keyword">class </span>generic_scheduler;
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128     <span class="keyword">struct </span>context_list_node_t {
-<a name="l00129"></a>00129         context_list_node_t *my_prev,
-<a name="l00130"></a>00130                             *my_next;
-<a name="l00131"></a>00131     };
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133     <span class="keyword">class </span>allocate_root_with_context_proxy: no_assign {
-<a name="l00134"></a>00134         task_group_context& my_context;
-<a name="l00135"></a>00135     <span class="keyword">public</span>:
-<a name="l00136"></a>00136         allocate_root_with_context_proxy ( task_group_context& ctx ) : my_context(ctx) {}
-<a name="l00137"></a>00137         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00138"></a>00138         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00139"></a>00139     };
-<a name="l00140"></a>00140 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142     <span class="keyword">class </span>allocate_root_proxy: no_assign {
-<a name="l00143"></a>00143     <span class="keyword">public</span>:
-<a name="l00144"></a>00144         <span class="keyword">static</span> task& __TBB_EXPORTED_FUNC allocate( size_t size );
-<a name="l00145"></a>00145         <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free( task& );
-<a name="l00146"></a>00146     };
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <span class="keyword">class </span>allocate_continuation_proxy: no_assign {
-<a name="l00149"></a>00149     <span class="keyword">public</span>:
-<a name="l00150"></a>00150         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00151"></a>00151         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00152"></a>00152     };
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     <span class="keyword">class </span>allocate_child_proxy: no_assign {
-<a name="l00155"></a>00155     <span class="keyword">public</span>:
-<a name="l00156"></a>00156         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
-<a name="l00157"></a>00157         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
-<a name="l00158"></a>00158     };
-<a name="l00159"></a>00159 
-<a name="l00161"></a>00161 
-<a name="l00172"></a>00172     <span class="keyword">class </span>task_prefix {
-<a name="l00173"></a>00173     <span class="keyword">private</span>:
-<a name="l00174"></a>00174         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00311.html">tbb::task</a>;
-<a name="l00175"></a>00175         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00312.html">tbb::interface5::internal::task_base</a>;
-<a name="l00176"></a>00176         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00315.html">tbb::task_list</a>;
-<a name="l00177"></a>00177         <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
-<a name="l00178"></a>00178         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
-<a name="l00179"></a>00179         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
-<a name="l00180"></a>00180         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
-<a name="l00181"></a>00181         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00185"></a>00185 <span class="preprocessor"></span>
-<a name="l00188"></a>00188 <span class="preprocessor">        task_group_context  *context;</span>
-<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00190"></a>00190 
-<a name="l00192"></a>00192 
-<a name="l00197"></a>00197         scheduler* origin;
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
-<a name="l00200"></a>00200 <span class="preprocessor"></span>        <span class="keyword">union </span>{
-<a name="l00201"></a>00201 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00120"></a>00120         <span class="keywordtype">int</span> i = 0;
+<a name="l00121"></a>00121         <span class="keywordflow">for</span> (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {
+<a name="l00122"></a>00122             <span class="keywordflow">if</span> ( i%64 == 0 && my_task.is_cancelled() ) <span class="keywordflow">break</span>;
+<a name="l00123"></a>00123           
+<a name="l00124"></a>00124             <span class="comment">// The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1</span>
+<a name="l00125"></a>00125             <span class="keywordflow">if</span> ( comp( *(k), *(k-1) ) ) {
+<a name="l00126"></a>00126                 my_task.cancel_group_execution();
+<a name="l00127"></a>00127                 <span class="keywordflow">break</span>;
+<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="l00133"></a>00133 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<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> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00138"></a>00138 <span class="keyword">struct </span>quick_sort_body {
+<a name="l00139"></a>00139     <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> quick_sort_range<RandomAccessIterator,Compare>& range )<span class="keyword"> const </span>{
+<a name="l00140"></a>00140         <span class="comment">//SerialQuickSort( range.begin, range.size, range.comp );</span>
+<a name="l00141"></a>00141         std::sort( range.begin, range.begin + range.size, range.comp );
+<a name="l00142"></a>00142     }
+<a name="l00143"></a>00143 };
+<a name="l00144"></a>00144 
+<a name="l00146"></a>00146 
+<a name="l00147"></a>00147 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00148"></a>00148 <span class="keywordtype">void</span> parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp ) {
+<a name="l00149"></a>00149 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span>    task_group_context my_context;
+<a name="l00151"></a>00151     <span class="keyword">const</span> <span class="keywordtype">int</span> serial_cutoff = 9;
+<a name="l00152"></a>00152 
+<a name="l00153"></a>00153     __TBB_ASSERT( begin + serial_cutoff < end, <span class="stringliteral">"min_parallel_size is smaller than serial cutoff?"</span> );
+<a name="l00154"></a>00154     RandomAccessIterator k;
+<a name="l00155"></a>00155     <span class="keywordflow">for</span> ( k = begin ; k != begin + serial_cutoff; ++k ) {
+<a name="l00156"></a>00156         <span class="keywordflow">if</span> ( comp( *(k+1), *k ) ) {
+<a name="l00157"></a>00157             <span class="keywordflow">goto</span> do_parallel_quick_sort;
+<a name="l00158"></a>00158         }
+<a name="l00159"></a>00159     }
+<a name="l00160"></a>00160 
+<a name="l00161"></a>00161     <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( blocked_range<RandomAccessIterator>(k+1, end),
+<a name="l00162"></a>00162                   quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),
+<a name="l00163"></a>00163                   auto_partitioner(),
+<a name="l00164"></a>00164                   my_context);
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166     <span class="keywordflow">if</span> (my_context.is_group_execution_cancelled())
+<a name="l00167"></a>00167 do_parallel_quick_sort:
+<a name="l00168"></a>00168 #endif <span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00169"></a>00169         <a class="code" href="a00426.html#g68cc046ef72c42ce205fccbc435a0d81">parallel_for</a>( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), 
+<a name="l00170"></a>00170                       quick_sort_body<RandomAccessIterator,Compare>(),
+<a name="l00171"></a>00171                       auto_partitioner() );
+<a name="l00172"></a>00172 }
+<a name="l00173"></a>00173 
+<a name="l00174"></a>00174 } <span class="comment">// namespace internal</span>
+<a name="l00176"></a>00176 <span class="comment"></span>
+<a name="l00187"></a>00187 
+<a name="l00189"></a>00189 
+<a name="l00192"></a>00192 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00193"></a><a class="code" href="a00426.html#g49edcf9447cd91a9527a3f8e8512b7aa">00193</a> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp) { 
+<a name="l00194"></a>00194     <span class="keyword">const</span> <span class="keywordtype">int</span> min_parallel_size = 500; 
+<a name="l00195"></a>00195     <span class="keywordflow">if</span>( end > begin ) {
+<a name="l00196"></a>00196         <span class="keywordflow">if</span> (end - begin < min_parallel_size) { 
+<a name="l00197"></a>00197             std::sort(begin, end, comp);
+<a name="l00198"></a>00198         } <span class="keywordflow">else</span> {
+<a name="l00199"></a>00199             internal::parallel_quick_sort(begin, end, comp);
+<a name="l00200"></a>00200         }
+<a name="l00201"></a>00201     }
+<a name="l00202"></a>00202 }
 <a name="l00203"></a>00203 
-<a name="l00205"></a>00205         scheduler* owner;
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
-<a name="l00209"></a>00209 <span class="preprocessor"></span>
-<a name="l00210"></a>00210 <span class="preprocessor">        task* next_offloaded;</span>
-<a name="l00211"></a>00211 <span class="preprocessor"></span>        };
-<a name="l00212"></a>00212 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
-<a name="l00213"></a>00213 
-<a name="l00215"></a>00215 
-<a name="l00218"></a>00218         <a class="code" href="a00311.html">tbb::task</a>* parent;
+<a name="l00205"></a>00205 
+<a name="l00206"></a>00206 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator>
+<a name="l00207"></a><a class="code" href="a00426.html#g16c3eb77d0e530834c51ce3857f01012">00207</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end ) { 
+<a name="l00208"></a>00208     <a class="code" href="a00426.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< <span class="keyword">typename</span> std::iterator_traits<RandomAccessIterator>::value_type >() );
+<a name="l00209"></a>00209 }
+<a name="l00210"></a>00210 
+<a name="l00212"></a>00212 
+<a name="l00213"></a>00213 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00214"></a><a class="code" href="a00426.html#gc7576f82fdedc8a701a6c17ad9415926">00214</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00426.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( T * begin, T * end ) {
+<a name="l00215"></a>00215     <a class="code" href="a00426.html#g49edcf9447cd91a9527a3f8e8512b7aa">parallel_sort</a>( begin, end, std::less< T >() );
+<a name="l00216"></a>00216 }   
+<a name="l00218"></a>00218 
 <a name="l00219"></a>00219 
+<a name="l00220"></a>00220 } <span class="comment">// namespace tbb</span>
 <a name="l00221"></a>00221 
-<a name="l00225"></a>00225         __TBB_atomic reference_count ref_count;
-<a name="l00226"></a>00226 
-<a name="l00228"></a>00228 
-<a name="l00230"></a>00230         <span class="keywordtype">int</span> depth;
-<a name="l00231"></a>00231 
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state;
-<a name="l00235"></a>00235 
-<a name="l00237"></a>00237 
-<a name="l00242"></a>00242         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> extra_state;
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244         affinity_id affinity;
-<a name="l00245"></a>00245 
-<a name="l00247"></a>00247         <a class="code" href="a00311.html">tbb::task</a>* next;
-<a name="l00248"></a>00248 
-<a name="l00250"></a>00250         <a class="code" href="a00311.html">tbb::task</a>& task() {<span class="keywordflow">return</span> *reinterpret_cast<tbb::task*>(<span class="keyword">this</span>+1);}
-<a name="l00251"></a>00251     };
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253 } <span class="comment">// namespace internal</span>
-<a name="l00255"></a>00255 <span class="comment"></span>
-<a name="l00256"></a>00256 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00257"></a>00257 <span class="preprocessor"></span>
-<a name="l00258"></a>00258 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
-<a name="l00259"></a>00259 <span class="preprocessor"></span><span class="keyword">namespace </span>internal {
-<a name="l00260"></a>00260     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> priority_stride_v4 = INT_MAX / 4;
-<a name="l00261"></a>00261 }
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 <span class="keyword">enum</span> priority_t {
-<a name="l00264"></a>00264     priority_normal = internal::priority_stride_v4 * 2,
-<a name="l00265"></a>00265     priority_low = priority_normal - internal::priority_stride_v4,
-<a name="l00266"></a>00266     priority_high = priority_normal + internal::priority_stride_v4
-<a name="l00267"></a>00267 };
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00272"></a>00272 <span class="preprocessor"></span>    <span class="keyword">class </span>tbb_exception;
-<a name="l00273"></a>00273 <span class="preprocessor">#else</span>
-<a name="l00274"></a>00274 <span class="preprocessor"></span>    <span class="keyword">namespace </span>internal {
-<a name="l00275"></a>00275         <span class="keyword">class </span>tbb_exception_ptr;
-<a name="l00276"></a>00276     }
-<a name="l00277"></a>00277 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279 <span class="keyword">class </span>task_scheduler_init;
-<a name="l00280"></a>00280 
-<a name="l00282"></a>00282 
-<a name="l00302"></a><a class="code" href="a00313.html">00302</a> <span class="keyword">class </span><a class="code" href="a00314.html">task_group_context</a> : internal::no_copy {
-<a name="l00303"></a>00303 <span class="keyword">private</span>:
-<a name="l00304"></a>00304     <span class="keyword">friend</span> <span class="keyword">class </span>internal::generic_scheduler;
-<a name="l00305"></a>00305     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00316.html">task_scheduler_init</a>;
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00308"></a>00308 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00319.html">tbb_exception</a> <a class="code" href="a00319.html">exception_container_type</a>;
-<a name="l00309"></a>00309 <span class="preprocessor">#else</span>
-<a name="l00310"></a>00310 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00320.html">internal::tbb_exception_ptr</a> <a class="code" href="a00319.html">exception_container_type</a>;
-<a name="l00311"></a>00311 <span class="preprocessor">#endif</span>
-<a name="l00312"></a>00312 <span class="preprocessor"></span>
-<a name="l00313"></a>00313     <span class="keyword">enum</span> version_traits_word_layout {
-<a name="l00314"></a>00314         traits_offset = 16,
-<a name="l00315"></a>00315         version_mask = 0xFFFF,
-<a name="l00316"></a>00316         traits_mask = 0xFFFFul << traits_offset
-<a name="l00317"></a>00317     };
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319 <span class="keyword">public</span>:
-<a name="l00320"></a>00320     <span class="keyword">enum</span> kind_type {
-<a name="l00321"></a>00321         isolated,
-<a name="l00322"></a>00322         bound
-<a name="l00323"></a>00323     };
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325     <span class="keyword">enum</span> traits_type {
-<a name="l00326"></a>00326         exact_exception = 0x0001ul << traits_offset,
-<a name="l00327"></a>00327         concurrent_wait = 0x0004ul << traits_offset,
-<a name="l00328"></a>00328 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00329"></a>00329 <span class="preprocessor"></span>        default_traits = 0
-<a name="l00330"></a>00330 <span class="preprocessor">#else</span>
-<a name="l00331"></a>00331 <span class="preprocessor"></span>        default_traits = exact_exception
-<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 
-<a name="l00335"></a>00335 <span class="keyword">private</span>:
-<a name="l00336"></a>00336     <span class="keyword">enum</span> state {
-<a name="l00337"></a>00337         may_have_children = 1
-<a name="l00338"></a>00338     };
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340     <span class="keyword">union </span>{
-<a name="l00342"></a>00342         kind_type my_kind;
-<a name="l00343"></a>00343         uintptr_t _my_kind_aligner;
-<a name="l00344"></a>00344     };
-<a name="l00345"></a>00345 
-<a name="l00347"></a>00347     <a class="code" href="a00314.html">task_group_context</a> *my_parent;
-<a name="l00348"></a>00348 
-<a name="l00350"></a>00350 
-<a name="l00352"></a>00352     internal::context_list_node_t my_node;
-<a name="l00353"></a>00353 
-<a name="l00355"></a>00355     __itt_caller itt_caller;
-<a name="l00356"></a>00356 
-<a name="l00358"></a>00358 
-<a name="l00361"></a>00361     <span class="keywordtype">char</span> _leading_padding[internal::NFS_MaxLineSize
-<a name="l00362"></a>00362                           - 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="l00363"></a>00363                           - <span class="keyword">sizeof</span>(__itt_caller)];
-<a name="l00364"></a>00364 
-<a name="l00366"></a>00366     uintptr_t my_cancellation_requested;
-<a name="l00367"></a>00367 
-<a name="l00369"></a>00369 
-<a name="l00372"></a>00372     uintptr_t  my_version_and_traits;
-<a name="l00373"></a>00373 
-<a name="l00375"></a>00375     <a class="code" href="a00319.html">exception_container_type</a> *my_exception;
-<a name="l00376"></a>00376 
-<a name="l00378"></a>00378     internal::generic_scheduler *my_owner;
-<a name="l00379"></a>00379 
-<a name="l00381"></a>00381     uintptr_t my_state;
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
-<a name="l00385"></a>00385 <span class="preprocessor">    intptr_t my_priority;</span>
-<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
-<a name="l00387"></a>00387 
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390     <span class="keywordtype">char</span> _trailing_padding[internal::NFS_MaxLineSize - 2 * <span class="keyword">sizeof</span>(uintptr_t) - 2 * <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*)
-<a name="l00391"></a>00391 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
-<a name="l00392"></a>00392 <span class="preprocessor"></span>                            - <span class="keyword">sizeof</span>(intptr_t)
-<a name="l00393"></a>00393 #endif <span class="comment">/* __TBB_TASK_PRIORITY */</span>
-<a name="l00394"></a>00394                           ];
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396 <span class="keyword">public</span>:
-<a name="l00398"></a>00398 
-<a name="l00426"></a><a class="code" href="a00313.html#19fee08fb8ac98adccfe69c1aa63c491">00426</a>     <a class="code" href="a00314.html">task_group_context</a> ( kind_type relation_with_parent = bound,
-<a name="l00427"></a>00427                          uintptr_t traits = default_traits )
-<a name="l00428"></a>00428         : my_kind(relation_with_parent)
-<a name="l00429"></a>00429         , my_version_and_traits(1 | traits)
-<a name="l00430"></a>00430     {
-<a name="l00431"></a>00431         init();
-<a name="l00432"></a>00432     }
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434     __TBB_EXPORTED_METHOD ~<a class="code" href="a00314.html">task_group_context</a> ();
-<a name="l00435"></a>00435 
-<a name="l00437"></a>00437 
-<a name="l00444"></a>00444     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD reset ();
-<a name="l00445"></a>00445 
-<a name="l00447"></a>00447 
-<a name="l00454"></a>00454     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD cancel_group_execution ();
-<a name="l00455"></a>00455 
-<a name="l00457"></a>00457     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_group_execution_cancelled () <span class="keyword">const</span>;
-<a name="l00458"></a>00458 
-<a name="l00460"></a>00460 
-<a name="l00466"></a>00466     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD register_pending_exception ();
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
-<a name="l00470"></a>00470 <span class="preprocessor">    void set_priority ( priority_t );</span>
-<a name="l00471"></a>00471 <span class="preprocessor"></span>
-<a name="l00473"></a>00473     priority_t priority () <span class="keyword">const</span>;
-<a name="l00474"></a>00474 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
-<a name="l00475"></a>00475 
-<a name="l00476"></a>00476 <span class="keyword">protected</span>:
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD init ();
-<a name="l00480"></a>00480 
-<a name="l00481"></a>00481 <span class="keyword">private</span>:
-<a name="l00482"></a>00482     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00311.html">task</a>;
-<a name="l00483"></a>00483     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
-<a name="l00484"></a>00484 
-<a name="l00485"></a>00485     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_required = bound;
-<a name="l00486"></a>00486     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_completed = kind_type(bound+1);
-<a name="l00487"></a>00487     <span class="keyword">static</span> <span class="keyword">const</span> kind_type detached = kind_type(binding_completed+1);
-<a name="l00488"></a>00488     <span class="keyword">static</span> <span class="keyword">const</span> kind_type dying = kind_type(detached+1);
-<a name="l00489"></a>00489 
-<a name="l00491"></a>00491 
-<a name="l00493"></a>00493     <span class="keyword">template</span> <<span class="keyword">typename</span> T>
-<a name="l00494"></a>00494     <span class="keywordtype">void</span> propagate_state_from_ancestors ( T <a class="code" href="a00314.html">task_group_context</a>::*mptr_state, T new_state );
-<a name="l00495"></a>00495 
-<a name="l00497"></a>00497     <span class="keyword">inline</span> <span class="keywordtype">void</span> finish_initialization ( internal::generic_scheduler *local_sched );
-<a name="l00498"></a>00498 
-<a name="l00500"></a>00500     <span class="keywordtype">void</span> bind_to ( internal::generic_scheduler *local_sched );
-<a name="l00501"></a>00501 
-<a name="l00503"></a>00503     <span class="keywordtype">void</span> register_with ( internal::generic_scheduler *local_sched );
-<a name="l00504"></a>00504 
-<a name="l00505"></a>00505 }; <span class="comment">// class task_group_context</span>
-<a name="l00506"></a>00506 
-<a name="l00507"></a>00507 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00508"></a>00508 
-<a name="l00510"></a>00510 
-<a name="l00511"></a><a class="code" href="a00311.html">00511</a> <span class="keyword">class </span><a class="code" href="a00311.html">task</a>: __TBB_TASK_BASE_ACCESS interface5::internal::task_base {
-<a name="l00512"></a>00512 
-<a name="l00514"></a>00514     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_ref_count( <span class="keywordtype">int</span> count );
-<a name="l00515"></a>00515 
-<a name="l00517"></a>00517     internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count();
-<a name="l00518"></a>00518 
-<a name="l00519"></a>00519 <span class="keyword">protected</span>:
-<a name="l00521"></a><a class="code" href="a00311.html#2bce8ec6e44706e70128f5cf91b76e67">00521</a>     <a class="code" href="a00311.html">task</a>() {prefix().extra_state=1;}
-<a name="l00522"></a>00522 
-<a name="l00523"></a>00523 <span class="keyword">public</span>:
-<a name="l00525"></a><a class="code" href="a00311.html#98245ee0473f84cb19dbbf8c81134908">00525</a>     <span class="keyword">virtual</span> ~<a class="code" href="a00311.html">task</a>() {}
-<a name="l00526"></a>00526 
-<a name="l00528"></a>00528     <span class="keyword">virtual</span> <a class="code" href="a00311.html">task</a>* execute() = 0;
-<a name="l00529"></a>00529 
-<a name="l00531"></a><a class="code" href="a00311.html#4a3c415562d17905390ea5b49d12293e">00531</a>     <span class="keyword">enum</span> <a class="code" href="a00311.html#4a3c415562d17905390ea5b49d12293e">state_type</a> {
-<a name="l00533"></a>00533         executing,
-<a name="l00535"></a>00535         reexecute,
-<a name="l00537"></a>00537         ready,
-<a name="l00539"></a>00539         allocated,
-<a name="l00541"></a>00541         freed,
-<a name="l00543"></a>00543         recycle
-<a name="l00544"></a>00544     };
-<a name="l00545"></a>00545 
-<a name="l00546"></a>00546     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00547"></a>00547     <span class="comment">// Allocating tasks</span>
-<a name="l00548"></a>00548     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00549"></a>00549 
-<a name="l00551"></a><a class="code" href="a00311.html#23acb0da0afd690da797f9f882027d34">00551</a>     <span class="keyword">static</span> internal::allocate_root_proxy allocate_root() {
-<a name="l00552"></a>00552         <span class="keywordflow">return</span> internal::allocate_root_proxy();
-<a name="l00553"></a>00553     }
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00557"></a><a class="code" href="a00311.html#8ccc518caf31075a3e073996d2d240a4">00557</a> <span class="preprocessor">    static internal::allocate_root_with_context_proxy allocate_root( task_group_context& ctx ) {</span>
-<a name="l00558"></a>00558 <span class="preprocessor"></span>        <span class="keywordflow">return</span> internal::allocate_root_with_context_proxy(ctx);
-<a name="l00559"></a>00559     }
-<a name="l00560"></a>00560 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00561"></a>00561 
-<a name="l00563"></a>00563 
-<a name="l00564"></a><a class="code" href="a00311.html#1434c79a5138993269d034008bff7329">00564</a>     internal::allocate_continuation_proxy& allocate_continuation() {
-<a name="l00565"></a>00565         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_continuation_proxy*>(<span class="keyword">this</span>);
-<a name="l00566"></a>00566     }
-<a name="l00567"></a>00567 
-<a name="l00569"></a><a class="code" href="a00311.html#1ff794f7053cd9148d5f280fbf07377f">00569</a>     internal::allocate_child_proxy& allocate_child() {
-<a name="l00570"></a>00570         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_child_proxy*>(<span class="keyword">this</span>);
-<a name="l00571"></a>00571     }
-<a name="l00572"></a>00572 
-<a name="l00574"></a>00574     <span class="keyword">using</span> task_base::allocate_additional_child_of;
-<a name="l00575"></a>00575 
-<a name="l00576"></a>00576 <span class="preprocessor">#if __TBB_DEPRECATED_TASK_INTERFACE</span>
-<a name="l00578"></a>00578 <span class="preprocessor"></span>
-<a name="l00582"></a>00582 <span class="preprocessor">    void __TBB_EXPORTED_METHOD destroy( task& t );</span>
-<a name="l00583"></a>00583 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !__TBB_DEPRECATED_TASK_INTERFACE */</span>
-<a name="l00585"></a>00585     using task_base::destroy;
-<a name="l00586"></a>00586 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_DEPRECATED_TASK_INTERFACE */</span>
-<a name="l00587"></a>00587 
-<a name="l00588"></a>00588     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00589"></a>00589     <span class="comment">// Recycling of tasks</span>
-<a name="l00590"></a>00590     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00591"></a>00591 
-<a name="l00593"></a>00593 
-<a name="l00599"></a><a class="code" href="a00311.html#a67a79e18f62b43a623a00cfbd76db4c">00599</a>     <span class="keywordtype">void</span> recycle_as_continuation() {
-<a name="l00600"></a>00600         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
-<a name="l00601"></a>00601         prefix().state = allocated;
-<a name="l00602"></a>00602     }
-<a name="l00603"></a>00603 
-<a name="l00605"></a>00605 
-<a name="l00607"></a><a class="code" href="a00311.html#3b290d14109704e2b69dc1ac980a7a76">00607</a>     <span class="keywordtype">void</span> recycle_as_safe_continuation() {
-<a name="l00608"></a>00608         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
-<a name="l00609"></a>00609         prefix().state = recycle;
-<a name="l00610"></a>00610     }
-<a name="l00611"></a>00611 
-<a name="l00613"></a><a class="code" href="a00311.html#db399855177438bbc9cc61d508dae8d2">00613</a>     <span class="keywordtype">void</span> recycle_as_child_of( <a class="code" href="a00311.html">task</a>& new_parent ) {
-<a name="l00614"></a>00614         internal::task_prefix& p = prefix();
-<a name="l00615"></a>00615         __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, <span class="stringliteral">"execute not running, or already recycled"</span> );
-<a name="l00616"></a>00616         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled as a child"</span> );
-<a name="l00617"></a>00617         __TBB_ASSERT( p.parent==NULL, <span class="stringliteral">"parent must be null"</span> );
-<a name="l00618"></a>00618         __TBB_ASSERT( new_parent.<a class="code" href="a00311.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state<=recycle, <span class="stringliteral">"corrupt parent's state"</span> );
-<a name="l00619"></a>00619         __TBB_ASSERT( new_parent.<a class="code" href="a00311.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state!=freed, <span class="stringliteral">"parent already freed"</span> );
-<a name="l00620"></a>00620         p.state = allocated;
-<a name="l00621"></a>00621         p.parent = &new_parent;
-<a name="l00622"></a>00622 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00623"></a>00623 <span class="preprocessor"></span>        p.<a class="code" href="a00311.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> = new_parent.<a class="code" href="a00311.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().context;
-<a name="l00624"></a>00624 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00625"></a>00625     }
-<a name="l00626"></a>00626 
-<a name="l00628"></a>00628 
-<a name="l00629"></a><a class="code" href="a00311.html#4f1be9bbcdb487830dbe298b68d85144">00629</a>     <span class="keywordtype">void</span> recycle_to_reexecute() {
-<a name="l00630"></a>00630         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running, or already recycled"</span> );
-<a name="l00631"></a>00631         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled for reexecution"</span> );
-<a name="l00632"></a>00632         prefix().state = reexecute;
-<a name="l00633"></a>00633     }
-<a name="l00634"></a>00634 
-<a name="l00635"></a>00635     <span class="comment">// All depth-related methods are obsolete, and are retained for the sake</span>
-<a name="l00636"></a>00636     <span class="comment">// of backward source compatibility only</span>
-<a name="l00637"></a>00637     intptr_t depth()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 0;}
-<a name="l00638"></a>00638     <span class="keywordtype">void</span> set_depth( intptr_t ) {}
-<a name="l00639"></a>00639     <span class="keywordtype">void</span> add_to_depth( <span class="keywordtype">int</span> ) {}
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641 
-<a name="l00642"></a>00642     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00643"></a>00643     <span class="comment">// Spawning and blocking</span>
-<a name="l00644"></a>00644     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00645"></a>00645 
-<a name="l00647"></a><a class="code" href="a00311.html#06a4206a57e8e12a439b14d6d41cfd92">00647</a>     <span class="keywordtype">void</span> set_ref_count( <span class="keywordtype">int</span> count ) {
-<a name="l00648"></a>00648 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00649"></a>00649 <span class="preprocessor"></span>        internal_set_ref_count(count);
-<a name="l00650"></a>00650 <span class="preprocessor">#else</span>
-<a name="l00651"></a>00651 <span class="preprocessor"></span>        prefix().ref_count = count;
-<a name="l00652"></a>00652 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
-<a name="l00653"></a>00653     }
-<a name="l00654"></a>00654 
-<a name="l00656"></a>00656 
-<a name="l00657"></a><a class="code" href="a00311.html#f5fb43c7ad0de5a4b95703cebc39e345">00657</a>     <span class="keywordtype">void</span> increment_ref_count() {
-<a name="l00658"></a>00658         __TBB_FetchAndIncrementWacquire( &prefix().ref_count );
-<a name="l00659"></a>00659     }
-<a name="l00660"></a>00660 
-<a name="l00662"></a>00662 
-<a name="l00663"></a><a class="code" href="a00311.html#ef4680f5c148020c5e7e43ddef44cd5d">00663</a>     <span class="keywordtype">int</span> decrement_ref_count() {
-<a name="l00664"></a>00664 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
-<a name="l00665"></a>00665 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(internal_decrement_ref_count());
-<a name="l00666"></a>00666 <span class="preprocessor">#else</span>
-<a name="l00667"></a>00667 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(__TBB_FetchAndDecrementWrelease( &prefix().ref_count ))-1;
-<a name="l00668"></a>00668 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
-<a name="l00669"></a>00669     }
-<a name="l00670"></a>00670 
-<a name="l00672"></a>00672     <span class="keyword">using</span> task_base::spawn;
-<a name="l00673"></a>00673 
-<a name="l00675"></a><a class="code" href="a00311.html#3ce28ca9baa771cfc37ecd72e69c4f3c">00675</a>     <span class="keywordtype">void</span> spawn_and_wait_for_all( <a class="code" href="a00311.html">task</a>& child ) {
-<a name="l00676"></a>00676         prefix().owner->wait_for_all( *<span class="keyword">this</span>, &child );
-<a name="l00677"></a>00677     }
-<a name="l00678"></a>00678 
-<a name="l00680"></a>00680     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD spawn_and_wait_for_all( <a class="code" href="a00315.html">task_list</a>& list );
-<a name="l00681"></a>00681 
-<a name="l00683"></a><a class="code" href="a00311.html#ce8ce689c26a4ddf343829bc3c73290a">00683</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00311.html">task</a>& root ) {
-<a name="l00684"></a>00684         root.<a class="code" href="a00311.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->spawn_root_and_wait( root, root.<a class="code" href="a00311.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next );
-<a name="l00685"></a>00685     }
-<a name="l00686"></a>00686 
-<a name="l00688"></a>00688 
-<a name="l00690"></a>00690     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00315.html">task_list</a>& root_list );
-<a name="l00691"></a>00691 
-<a name="l00693"></a>00693 
-<a name="l00694"></a><a class="code" href="a00311.html#53d2615ad9c38859b4c8080936600283">00694</a>     <span class="keywordtype">void</span> wait_for_all() {
-<a name="l00695"></a>00695         prefix().owner->wait_for_all( *<span class="keyword">this</span>, NULL );
-<a name="l00696"></a>00696     }
-<a name="l00697"></a>00697 
-<a name="l00699"></a>00699 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
-<a name="l00700"></a>00700 <span class="preprocessor"></span>
-<a name="l00710"></a>00710 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
-<a name="l00711"></a><a class="code" href="a00311.html#8365d063c0cc9d7bd616bca47256b93c">00711</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> enqueue( <a class="code" href="a00311.html">task</a>& t ) {
-<a name="l00712"></a>00712         t.<a class="code" href="a00311.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->enqueue( t, NULL );
-<a name="l00713"></a>00713     }
-<a name="l00714"></a>00714 
-<a name="l00715"></a>00715 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
-<a name="l00717"></a><a class="code" href="a00311.html#fe6bf6aaf84e664134fabb6c4f409ea9">00717</a> <span class="preprocessor">    static void enqueue( task& t, priority_t p ) {</span>
-<a name="l00718"></a>00718 <span class="preprocessor"></span>        __TBB_ASSERT( p == priority_low || p == priority_normal || p == priority_high, <span class="stringliteral">"Invalid priority level value"</span> );
-<a name="l00719"></a>00719         t.prefix().owner->enqueue( t, (<span class="keywordtype">void</span>*)p );
-<a name="l00720"></a>00720     }
-<a name="l00721"></a>00721 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
-<a name="l00722"></a>00722 
-<a name="l00724"></a>00724     <span class="keyword">static</span> <a class="code" href="a00311.html">task</a>& __TBB_EXPORTED_FUNC <span class="keyword">self</span>();
-<a name="l00725"></a>00725 
-<a name="l00727"></a><a class="code" href="a00311.html#314e98ee4347ccec83efcb9ee22e8596">00727</a>     <a class="code" href="a00311.html">task</a>* parent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().parent;}
-<a name="l00728"></a>00728 
-<a name="l00730"></a><a class="code" href="a00311.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">00730</a>     <span class="keywordtype">void</span> set_parent(<a class="code" href="a00311.html">task</a>* p) {
-<a name="l00731"></a>00731 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00732"></a>00732 <span class="preprocessor"></span>        __TBB_ASSERT(prefix().context == p-><a class="code" href="a00311.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().context, <span class="stringliteral">"The tasks must be in the same context"</span>);
-<a name="l00733"></a>00733 <span class="preprocessor">#endif</span>
-<a name="l00734"></a>00734 <span class="preprocessor"></span>        prefix().parent = p;
-<a name="l00735"></a>00735     }
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00739"></a>00739 <span class="preprocessor"></span>
-<a name="l00740"></a><a class="code" href="a00311.html#d8c36a93f3972590fbb65ff1cef3173b">00740</a> <span class="preprocessor">    task_group_context* context() {return prefix().context;}</span>
-<a name="l00741"></a>00741 <span class="preprocessor"></span>
-<a name="l00743"></a><a class="code" href="a00311.html#5987123486afca36ddebb9e2a8b7779a">00743</a>     <a class="code" href="a00314.html">task_group_context</a>* group () { <span class="keywordflow">return</span> prefix().<a class="code" href="a00311.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>; }
-<a name="l00744"></a>00744 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00745"></a>00745 
-<a name="l00747"></a><a class="code" href="a00311.html#f9169402702f56bf519448aaf34450aa">00747</a>     <span class="keywordtype">bool</span> is_stolen_task()<span class="keyword"> const </span>{
-<a name="l00748"></a>00748         <span class="keywordflow">return</span> (prefix().extra_state & 0x80)!=0;
-<a name="l00749"></a>00749     }
-<a name="l00750"></a>00750 
-<a name="l00751"></a>00751     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00752"></a>00752     <span class="comment">// Debugging</span>
-<a name="l00753"></a>00753     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00754"></a>00754 
-<a name="l00756"></a><a class="code" href="a00311.html#0af7b2d7e6e8b4333b2accfce3dfb374">00756</a>     <a class="code" href="a00311.html#4a3c415562d17905390ea5b49d12293e">state_type</a> state()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00311.html#4a3c415562d17905390ea5b49d12293e">state_type</a>(prefix().state);}
-<a name="l00757"></a>00757 
-<a name="l00759"></a><a class="code" href="a00311.html#ad774f55eaec008ae02b236423209ced">00759</a>     <span class="keywordtype">int</span> ref_count()<span class="keyword"> const </span>{
-<a name="l00760"></a>00760 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00761"></a>00761 <span class="preprocessor"></span>        internal::reference_count ref_count_ = prefix().ref_count;
-<a name="l00762"></a>00762         __TBB_ASSERT( ref_count_==<span class="keywordtype">int</span>(ref_count_), <span class="stringliteral">"integer overflow error"</span>);
-<a name="l00763"></a>00763 <span class="preprocessor">#endif</span>
-<a name="l00764"></a>00764 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(prefix().ref_count);
-<a name="l00765"></a>00765     }
-<a name="l00766"></a>00766 
-<a name="l00768"></a>00768     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_owned_by_current_thread() <span class="keyword">const</span>;
-<a name="l00769"></a>00769 
-<a name="l00770"></a>00770     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00771"></a>00771     <span class="comment">// Affinity</span>
-<a name="l00772"></a>00772     <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00773"></a>00773 
-<a name="l00775"></a>00775 
-<a name="l00776"></a><a class="code" href="a00311.html#d61bb32389d3857bf7511d69beaafb76">00776</a>     <span class="keyword">typedef</span> internal::affinity_id affinity_id;
-<a name="l00777"></a>00777 
-<a name="l00779"></a><a class="code" href="a00311.html#dca19d7a45487a7d67a0db517e2b57c9">00779</a>     <span class="keywordtype">void</span> set_affinity( affinity_id <span class="keywordtype">id</span> ) {prefix().affinity = id;}
-<a name="l00780"></a>00780 
-<a name="l00782"></a><a class="code" href="a00311.html#3a920a56b0bcf2801518fb45b2c9d2be">00782</a>     affinity_id affinity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().affinity;}
-<a name="l00783"></a>00783 
-<a name="l00785"></a>00785 
-<a name="l00789"></a>00789     <span class="keyword">virtual</span> <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD note_affinity( affinity_id <span class="keywordtype">id</span> );
-<a name="l00790"></a>00790 
-<a name="l00791"></a>00791 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00793"></a>00793 <span class="preprocessor"></span>
-<a name="l00803"></a>00803 <span class="preprocessor">    void __TBB_EXPORTED_METHOD change_group ( task_group_context& ctx );</span>
-<a name="l00804"></a>00804 <span class="preprocessor"></span>
-<a name="l00806"></a>00806 
-<a name="l00807"></a><a class="code" href="a00311.html#0f3fb4aac549ab642022450a4bd13326">00807</a>     <span class="keywordtype">bool</span> cancel_group_execution () { <span class="keywordflow">return</span> prefix().context->cancel_group_execution(); }
-<a name="l00808"></a>00808 
-<a name="l00810"></a><a class="code" href="a00311.html#025f18118c057c4c8db87ff2ce8df975">00810</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="l00811"></a>00811 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00812"></a>00812 
-<a name="l00813"></a>00813 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
-<a name="l00815"></a><a class="code" href="a00311.html#9ac8d1542d67d9d80121ff986801ac26">00815</a> <span class="preprocessor">    void set_group_priority ( priority_t p ) {  prefix().context->set_priority(p); }</span>
-<a name="l00816"></a>00816 <span class="preprocessor"></span>
-<a name="l00818"></a><a class="code" href="a00311.html#e1d969a1ccab6796e3b8b2c1a5be33d2">00818</a>     priority_t group_priority ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> prefix().context->priority(); }
-<a name="l00819"></a>00819 
-<a name="l00820"></a>00820 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
-<a name="l00821"></a>00821 
-<a name="l00822"></a>00822 <span class="keyword">private</span>:
-<a name="l00823"></a>00823     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00312.html">interface5::internal::task_base</a>;
-<a name="l00824"></a>00824     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00315.html">task_list</a>;
-<a name="l00825"></a>00825     <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
-<a name="l00826"></a>00826     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
-<a name="l00827"></a>00827 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00828"></a>00828 <span class="preprocessor"></span>    <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
-<a name="l00829"></a>00829 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00830"></a>00830     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
-<a name="l00831"></a>00831     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
-<a name="l00832"></a>00832     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
-<a name="l00833"></a>00833 
-<a name="l00835"></a>00835 
-<a name="l00836"></a>00836     internal::task_prefix& prefix( internal::version_tag* = NULL )<span class="keyword"> const </span>{
-<a name="l00837"></a>00837         <span class="keywordflow">return</span> reinterpret_cast<internal::task_prefix*>(const_cast<task*>(<span class="keyword">this</span>))[-1];
-<a name="l00838"></a>00838     }
-<a name="l00839"></a>00839 }; <span class="comment">// class task</span>
-<a name="l00840"></a>00840 
-<a name="l00842"></a>00842 
-<a name="l00843"></a><a class="code" href="a00254.html">00843</a> <span class="keyword">class </span><a class="code" href="a00254.html">empty_task</a>: <span class="keyword">public</span> <a class="code" href="a00311.html">task</a> {
-<a name="l00844"></a>00844     <span class="comment">/*override*/</span> <a class="code" href="a00311.html">task</a>* execute() {
-<a name="l00845"></a>00845         <span class="keywordflow">return</span> NULL;
-<a name="l00846"></a>00846     }
-<a name="l00847"></a>00847 };
-<a name="l00848"></a>00848 
-<a name="l00850"></a>00850 
-<a name="l00852"></a><a class="code" href="a00315.html">00852</a> <span class="keyword">class </span><a class="code" href="a00315.html">task_list</a>: internal::no_copy {
-<a name="l00853"></a>00853 <span class="keyword">private</span>:
-<a name="l00854"></a>00854     <a class="code" href="a00311.html">task</a>* first;
-<a name="l00855"></a>00855     <a class="code" href="a00311.html">task</a>** next_ptr;
-<a name="l00856"></a>00856     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00311.html">task</a>;
-<a name="l00857"></a>00857     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00312.html">interface5::internal::task_base</a>;
-<a name="l00858"></a>00858 <span class="keyword">public</span>:
-<a name="l00860"></a><a class="code" href="a00315.html#416341c2047eaef50417b41eaf7e9de6">00860</a>     <a class="code" href="a00315.html#416341c2047eaef50417b41eaf7e9de6">task_list</a>() : first(NULL), next_ptr(&first) {}
-<a name="l00861"></a>00861 
-<a name="l00863"></a><a class="code" href="a00315.html#6d438f1499a02db1e59c24ab6043e5ba">00863</a>     <a class="code" href="a00315.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a>() {}
-<a name="l00864"></a>00864 
-<a name="l00866"></a><a class="code" href="a00315.html#f3ac31e092814b90929f81bb30441959">00866</a>     <span class="keywordtype">bool</span> <a class="code" href="a00315.html#f3ac31e092814b90929f81bb30441959">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !first;}
-<a name="l00867"></a>00867 
-<a name="l00869"></a><a class="code" href="a00315.html#4cd34756bc4763dafb8c84838a0124ff">00869</a>     <span class="keywordtype">void</span> <a class="code" href="a00315.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a>( <a class="code" href="a00311.html">task</a>& <a class="code" href="a00311.html">task</a> ) {
-<a name="l00870"></a>00870         task.<a class="code" href="a00311.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next = NULL;
-<a name="l00871"></a>00871         *next_ptr = &task;
-<a name="l00872"></a>00872         next_ptr = &task.<a class="code" href="a00311.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
-<a name="l00873"></a>00873     }
-<a name="l00874"></a>00874 
-<a name="l00876"></a><a class="code" href="a00315.html#5fe85df5ed524418389d34051750347d">00876</a>     <a class="code" href="a00311.html">task</a>& <a class="code" href="a00315.html#5fe85df5ed524418389d34051750347d">pop_front</a>() {
-<a name="l00877"></a>00877         __TBB_ASSERT( !<a class="code" href="a00315.html#f3ac31e092814b90929f81bb30441959">empty</a>(), <span class="stringliteral">"attempt to pop item from empty task_list"</span> );
-<a name="l00878"></a>00878         <a class="code" href="a00311.html">task</a>* result = first;
-<a name="l00879"></a>00879         first = result-><a class="code" href="a00311.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
-<a name="l00880"></a>00880         <span class="keywordflow">if</span>( !first ) next_ptr = &first;
-<a name="l00881"></a>00881         <span class="keywordflow">return</span> *result;
-<a name="l00882"></a>00882     }
-<a name="l00883"></a>00883 
-<a name="l00885"></a><a class="code" href="a00315.html#fce446ee13e025969945328f3ff59b95">00885</a>     <span class="keywordtype">void</span> <a class="code" href="a00315.html#fce446ee13e025969945328f3ff59b95">clear</a>() {
-<a name="l00886"></a>00886         first=NULL;
-<a name="l00887"></a>00887         next_ptr=&first;
-<a name="l00888"></a>00888     }
-<a name="l00889"></a>00889 };
-<a name="l00890"></a>00890 
-<a name="l00891"></a>00891 <span class="keyword">inline</span> <span class="keywordtype">void</span> interface5::internal::task_base::spawn( task& t ) {
-<a name="l00892"></a>00892     t.<a class="code" href="a00311.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->spawn( t, t.prefix().next );
-<a name="l00893"></a>00893 }
-<a name="l00894"></a>00894 
-<a name="l00895"></a>00895 <span class="keyword">inline</span> <span class="keywordtype">void</span> interface5::internal::task_base::spawn( task_list& list ) {
-<a name="l00896"></a>00896     <span class="keywordflow">if</span>( task* t = list.first ) {
-<a name="l00897"></a>00897         t->prefix().owner->spawn( *t, *list.next_ptr );
-<a name="l00898"></a>00898         list.clear();
-<a name="l00899"></a>00899     }
-<a name="l00900"></a>00900 }
-<a name="l00901"></a>00901 
-<a name="l00902"></a><a class="code" href="a00311.html#c33c7edbaec67aa8a56f48986a9dc69f">00902</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00311.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( <a class="code" href="a00315.html">task_list</a>& root_list ) {
-<a name="l00903"></a>00903     <span class="keywordflow">if</span>( <a class="code" href="a00311.html">task</a>* t = root_list.<a class="code" href="a00315.html#78fcc389819ee34427d510f7d8cb8b1e">first</a> ) {
-<a name="l00904"></a>00904         t->prefix().owner->spawn_root_and_wait( *t, *root_list.<a class="code" href="a00315.html#21553a32bcd08f980aa28f61254307da">next_ptr</a> );
-<a name="l00905"></a>00905         root_list.<a class="code" href="a00315.html#fce446ee13e025969945328f3ff59b95">clear</a>();
-<a name="l00906"></a>00906     }
-<a name="l00907"></a>00907 }
-<a name="l00908"></a>00908 
-<a name="l00909"></a>00909 } <span class="comment">// namespace tbb</span>
-<a name="l00910"></a>00910 
-<a name="l00911"></a>00911 <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="l00912"></a>00912     <span class="keywordflow">return</span> &tbb::internal::allocate_root_proxy::allocate(bytes);
-<a name="l00913"></a>00913 }
-<a name="l00914"></a>00914 
-<a name="l00915"></a>00915 <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="l00916"></a>00916     tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );
-<a name="l00917"></a>00917 }
-<a name="l00918"></a>00918 
-<a name="l00919"></a>00919 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00920"></a>00920 <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="l00921"></a>00921     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00922"></a>00922 }
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924 <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="l00925"></a>00925     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00926"></a>00926 }
-<a name="l00927"></a>00927 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00928"></a>00928 
-<a name="l00929"></a>00929 <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="l00930"></a>00930     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00931"></a>00931 }
-<a name="l00932"></a>00932 
-<a name="l00933"></a>00933 <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="l00934"></a>00934     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00935"></a>00935 }
-<a name="l00936"></a>00936 
-<a name="l00937"></a>00937 <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="l00938"></a>00938     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00939"></a>00939 }
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941 <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="l00942"></a>00942     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00943"></a>00943 }
-<a name="l00944"></a>00944 
-<a name="l00945"></a>00945 <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="l00946"></a>00946     <span class="keywordflow">return</span> &p.allocate(bytes);
-<a name="l00947"></a>00947 }
-<a name="l00948"></a>00948 
-<a name="l00949"></a>00949 <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="l00950"></a>00950     p.free( *static_cast<tbb::task*>(task) );
-<a name="l00951"></a>00951 }
-<a name="l00952"></a>00952 
-<a name="l00953"></a>00953 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_H */</span>
+<a name="l00222"></a>00222 <span class="preprocessor">#endif</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00571.html b/doc/html/a00571.html
new file mode 100644
index 0000000..7918b93
--- /dev/null
+++ b/doc/html/a00571.html
@@ -0,0 +1,196 @@
+<!DOCTYPE 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>
+<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_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-2012 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_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="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="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="a00308.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="a00308.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="a00308.html">00129</a> <span class="keyword">class </span><a class="code" href="a00308.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="a00308.html#36e26ba3880c7bcf804a97ba0cbe133f">00132</a>     <a class="code" href="a00308.html#36e26ba3880c7bcf804a97ba0cbe133f">parallel_while</a>() : my_body(NULL), my_barrier(NULL) {}
+<a name="l00133"></a>00133 
+<a name="l00135"></a><a class="code" href="a00308.html#6fcfc973cc56b79c6d0fbb8a31be7e84">00135</a>     <a class="code" href="a00308.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="a00337.html#dfaacf92685e5f86393bf657b2853bf8">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="a00308.html#fa297e53d3af2a101e712bc200233e9c">00143</a>     <span class="keyword">typedef</span> <span class="keyword">typename</span> Body::argument_type <a class="code" href="a00308.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="a00308.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="a00308.html#e131c560057a58229992b61eb8dba4c6">add</a>( <span class="keyword">const</span> <a class="code" href="a00308.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="a00280.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="a00308.html#b32a0a6e5e09ebb7fad3e6652c19afe5">00163</a> <span class="keywordtype">void</span> <a class="code" href="a00308.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="a00280.html">empty_task</a>& barrier = *<span class="keyword">new</span>( <a class="code" href="a00337.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>() ) <a class="code" href="a00280.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="a00337.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="a00337.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a>() ) while_task<Stream,Body>( stream, body, barrier );
+<a name="l00170"></a>00170     my_barrier-><a class="code" href="a00337.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a>(w);
+<a name="l00171"></a>00171     my_barrier-><a class="code" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">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="a00308.html#e131c560057a58229992b61eb8dba4c6">00177</a> <span class="keywordtype">void</span> <a class="code" href="a00308.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>( task::allocate_additional_child_of(*my_barrier) ) iteration_type(item,*my_body);
+<a name="l00181"></a>00181     <a class="code" href="a00337.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().spawn( 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-2012 Intel Corporation.  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/a00575.html b/doc/html/a00575.html
new file mode 100644
index 0000000..7b9bbe9
--- /dev/null
+++ b/doc/html/a00575.html
@@ -0,0 +1,500 @@
+<!DOCTYPE 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>
+<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>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-2012 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_partitioner_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_partitioner_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __TBB_INITIAL_CHUNKS</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_INITIAL_CHUNKS 2</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_RANGE_POOL_CAPACITY</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_RANGE_POOL_CAPACITY 8</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_INIT_DEPTH</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_INIT_DEPTH 5</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "task.h"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00037"></a>00037 
+<a name="l00038"></a>00038 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>    <span class="comment">// Workaround for overzealous compiler warnings</span>
+<a name="l00040"></a>00040 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4244)</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="keyword">namespace </span>tbb {
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046 <span class="keyword">class </span>auto_partitioner;
+<a name="l00047"></a>00047 <span class="keyword">class </span>simple_partitioner;
+<a name="l00048"></a>00048 <span class="keyword">class </span>affinity_partitioner;
+<a name="l00049"></a>00049 <span class="keyword">namespace </span>interface6 {
+<a name="l00050"></a>00050     <span class="keyword">namespace </span>internal {
+<a name="l00051"></a>00051         <span class="keyword">class </span>affinity_partition_type;
+<a name="l00052"></a>00052     }
+<a name="l00053"></a>00053 }
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055 <span class="keyword">namespace </span>internal {
+<a name="l00056"></a>00056 size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();
+<a name="l00057"></a>00057 
+<a name="l00059"></a><a class="code" href="a00250.html">00059</a> <span class="keyword">class </span><a class="code" href="a00250.html">affinity_partitioner_base_v3</a>: no_copy {
+<a name="l00060"></a>00060     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00249.html">tbb::affinity_partitioner</a>;
+<a name="l00061"></a>00061     <span class="keyword">friend</span> <span class="keyword">class </span>tbb::interface6::internal::affinity_partition_type;
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064     affinity_id* my_array;
+<a name="l00066"></a>00066     size_t my_size;
+<a name="l00068"></a>00068     <a class="code" href="a00250.html">affinity_partitioner_base_v3</a>() : my_array(NULL), my_size(0) {}
+<a name="l00070"></a>00070     ~<a class="code" href="a00250.html">affinity_partitioner_base_v3</a>() {resize(0);}
+<a name="l00072"></a>00072 
+<a name="l00073"></a>00073     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD resize( <span class="keywordtype">unsigned</span> factor );
+<a name="l00074"></a>00074 };
+<a name="l00075"></a>00075 
+<a name="l00077"></a><a class="code" href="a00309.html">00077</a> <span class="keyword">class </span><a class="code" href="a00309.html">partition_type_base</a> {
+<a name="l00078"></a>00078 <span class="keyword">public</span>:
+<a name="l00079"></a>00079     <span class="keywordtype">void</span> set_affinity( <a class="code" href="a00337.html">task</a> & ) {}
+<a name="l00080"></a>00080     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00337.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> ) {}
+<a name="l00081"></a>00081     <a class="code" href="a00337.html">task</a>* continue_after_execute_range() {<span class="keywordflow">return</span> NULL;}
+<a name="l00082"></a>00082     <span class="keywordtype">bool</span> decide_whether_to_delay() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00083"></a>00083     <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span>, <a class="code" href="a00337.html">task</a>& b ) {
+<a name="l00084"></a>00084         task::spawn(b);
+<a name="l00085"></a>00085     }
+<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> <span class="keyword">class </span>start_scan;
+<a name="l00089"></a>00089 
+<a name="l00090"></a>00090 } <span class="comment">// namespace internal</span>
+<a name="l00092"></a>00092 <span class="comment"></span>
+<a name="l00093"></a>00093 <span class="keyword">namespace </span>serial {
+<a name="l00094"></a>00094 <span class="keyword">namespace </span>interface6 {
+<a name="l00095"></a>00095 <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="l00096"></a>00096 }
+<a name="l00097"></a>00097 }
+<a name="l00098"></a>00098 
+<a name="l00099"></a>00099 <span class="keyword">namespace </span>interface6 {
+<a name="l00101"></a>00101 <span class="keyword">namespace </span>internal {
+<a name="l00102"></a>00102 <span class="keyword">using namespace </span>tbb::internal;
+<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">class </span>start_for;
+<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">class </span>start_reduce;
+<a name="l00105"></a>00105 
+<a name="l00107"></a>00107 <span class="keyword">class </span>flag_task: <span class="keyword">public</span> task {
+<a name="l00108"></a>00108 <span class="keyword">public</span>:
+<a name="l00109"></a>00109     <a class="code" href="a00254.html">tbb::atomic<bool></a> child_stolen;
+<a name="l00110"></a>00110     flag_task() { child_stolen = <span class="keyword">false</span>; }
+<a name="l00111"></a>00111     task* execute() { <span class="keywordflow">return</span> NULL; }
+<a name="l00112"></a>00112 };
+<a name="l00113"></a>00113 
+<a name="l00115"></a>00115 <span class="keyword">class </span>signal_task: <span class="keyword">public</span> task {
+<a name="l00116"></a>00116 <span class="keyword">public</span>:
+<a name="l00117"></a>00117     task* execute() {
+<a name="l00118"></a>00118         <span class="keywordflow">if</span>( is_stolen_task() ) {
+<a name="l00119"></a>00119             static_cast<flag_task*>(parent())->child_stolen = <span class="keyword">true</span>;
+<a name="l00120"></a>00120         }
+<a name="l00121"></a>00121         <span class="keywordflow">return</span> NULL;
+<a name="l00122"></a>00122     }
+<a name="l00123"></a>00123 };
+<a name="l00124"></a>00124 
+<a name="l00128"></a>00128 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> depth_t;
+<a name="l00129"></a>00129 
+<a name="l00131"></a>00131 <span class="keyword">template</span> <<span class="keyword">typename</span> T, depth_t MaxCapacity>
+<a name="l00132"></a>00132 <span class="keyword">class </span>range_vector {
+<a name="l00133"></a>00133     depth_t my_head;
+<a name="l00134"></a>00134     depth_t my_tail;
+<a name="l00135"></a>00135     depth_t my_size;
+<a name="l00136"></a>00136     depth_t my_depth[MaxCapacity]; <span class="comment">// relative depths of stored ranges</span>
+<a name="l00137"></a>00137     <a class="code" href="a00253.html">tbb::aligned_space<T, MaxCapacity></a> my_pool;
+<a name="l00138"></a>00138 
+<a name="l00139"></a>00139 <span class="keyword">public</span>:
+<a name="l00141"></a>00141     range_vector(<span class="keyword">const</span> T& elem) : my_head(0), my_tail(0), my_size(1) {
+<a name="l00142"></a>00142         my_depth[0] = 0;
+<a name="l00143"></a>00143         <span class="keyword">new</span>( my_pool.begin() ) T(elem);<span class="comment">//TODO: std::move?</span>
+<a name="l00144"></a>00144     }
+<a name="l00145"></a>00145     ~range_vector() {
+<a name="l00146"></a>00146         <span class="keywordflow">while</span>( !empty() ) pop_back();
+<a name="l00147"></a>00147     }
+<a name="l00148"></a>00148     <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size == 0; }
+<a name="l00149"></a>00149     depth_t size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_size; }
+<a name="l00152"></a>00152     <span class="keywordtype">void</span> split_to_fill(depth_t max_depth) {
+<a name="l00153"></a>00153         <span class="keywordflow">while</span>( my_size < MaxCapacity && my_depth[my_head] < max_depth
+<a name="l00154"></a>00154           && my_pool.begin()[my_head].is_divisible() ) {
+<a name="l00155"></a>00155             depth_t prev = my_head;
+<a name="l00156"></a>00156             my_head = (my_head + 1) % MaxCapacity;
+<a name="l00157"></a>00157             <span class="keyword">new</span>(my_pool.begin()+my_head) T(my_pool.begin()[prev]); <span class="comment">// copy TODO: std::move?</span>
+<a name="l00158"></a>00158             my_pool.begin()[prev].~T(); <span class="comment">// instead of assignment</span>
+<a name="l00159"></a>00159             <span class="keyword">new</span>(my_pool.begin()+prev) T(my_pool.begin()[my_head], split()); <span class="comment">// do 'inverse' split</span>
+<a name="l00160"></a>00160             my_depth[my_head] = ++my_depth[prev];
+<a name="l00161"></a>00161             my_size++;
+<a name="l00162"></a>00162         }
+<a name="l00163"></a>00163     }
+<a name="l00164"></a>00164     <span class="keywordtype">void</span> pop_back() {
+<a name="l00165"></a>00165         __TBB_ASSERT(my_size > 0, <span class="stringliteral">"range_vector::pop_back() with empty size"</span>);
+<a name="l00166"></a>00166         my_pool.begin()[my_head].~T();
+<a name="l00167"></a>00167         my_size--;
+<a name="l00168"></a>00168         my_head = (my_head + MaxCapacity - 1) % MaxCapacity;
+<a name="l00169"></a>00169     }
+<a name="l00170"></a>00170     <span class="keywordtype">void</span> pop_front() {
+<a name="l00171"></a>00171         __TBB_ASSERT(my_size > 0, <span class="stringliteral">"range_vector::pop_front() with empty size"</span>);
+<a name="l00172"></a>00172         my_pool.begin()[my_tail].~T();
+<a name="l00173"></a>00173         my_size--;
+<a name="l00174"></a>00174         my_tail = (my_tail + 1) % MaxCapacity;
+<a name="l00175"></a>00175     }
+<a name="l00176"></a>00176     T& back() {
+<a name="l00177"></a>00177         __TBB_ASSERT(my_size > 0, <span class="stringliteral">"range_vector::back() with empty size"</span>);
+<a name="l00178"></a>00178         <span class="keywordflow">return</span> my_pool.begin()[my_head];
+<a name="l00179"></a>00179     }
+<a name="l00180"></a>00180     T& front() {
+<a name="l00181"></a>00181         __TBB_ASSERT(my_size > 0, <span class="stringliteral">"range_vector::front() with empty size"</span>);
+<a name="l00182"></a>00182         <span class="keywordflow">return</span> my_pool.begin()[my_tail];
+<a name="l00183"></a>00183     }
+<a name="l00185"></a>00185     depth_t front_depth() {
+<a name="l00186"></a>00186         __TBB_ASSERT(my_size > 0, <span class="stringliteral">"range_vector::front_depth() with empty size"</span>);
+<a name="l00187"></a>00187         <span class="keywordflow">return</span> my_depth[my_tail];
+<a name="l00188"></a>00188     }
+<a name="l00189"></a>00189 };
+<a name="l00190"></a>00190 
+<a name="l00192"></a>00192 <span class="keyword">template</span> <<span class="keyword">typename</span> Partition>
+<a name="l00193"></a>00193 <span class="keyword">struct </span>partition_type_base {
+<a name="l00194"></a>00194     <span class="comment">// decision makers</span>
+<a name="l00195"></a>00195     <span class="keywordtype">void</span> set_affinity( task & ) {}
+<a name="l00196"></a>00196     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00337.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> ) {}
+<a name="l00197"></a>00197     <span class="keywordtype">bool</span> check_being_stolen(task &) { <span class="keywordflow">return</span> <span class="keyword">false</span>; } <span class="comment">// part of old should_execute_range()</span>
+<a name="l00198"></a>00198     <span class="keywordtype">bool</span> check_for_demand(task &) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00199"></a>00199     <span class="keywordtype">bool</span> divisions_left() { <span class="keywordflow">return</span> <span class="keyword">true</span>; } <span class="comment">// part of old should_execute_range()</span>
+<a name="l00200"></a>00200     <span class="keywordtype">bool</span> should_create_trap() { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00201"></a>00201     depth_t max_depth() { <span class="keywordflow">return</span> 0; }
+<a name="l00202"></a>00202     <span class="keywordtype">void</span> align_depth(depth_t) { }
+<a name="l00203"></a>00203     <span class="comment">// common function blocks</span>
+<a name="l00204"></a>00204     Partition& derived() { <span class="keywordflow">return</span> *static_cast<Partition*>(<span class="keyword">this</span>); }
+<a name="l00205"></a>00205     <span class="keyword">template</span><<span class="keyword">typename</span> StartType>
+<a name="l00206"></a>00206     flag_task* split_work(StartType &start) {
+<a name="l00207"></a>00207         flag_task* parent_ptr = start.create_continuation(); <span class="comment">// the type here is to express expectation</span>
+<a name="l00208"></a>00208         start.set_parent(parent_ptr);
+<a name="l00209"></a>00209         parent_ptr->set_ref_count(2);
+<a name="l00210"></a>00210         StartType& right_work = *<span class="keyword">new</span>( parent_ptr->allocate_child() ) StartType(start, split());
+<a name="l00211"></a>00211         start.spawn(right_work);
+<a name="l00212"></a>00212         <span class="keywordflow">return</span> parent_ptr;
+<a name="l00213"></a>00213     }
+<a name="l00214"></a>00214     <span class="keyword">template</span><<span class="keyword">typename</span> StartType, <span class="keyword">typename</span> Range>
+<a name="l00215"></a>00215     <span class="keywordtype">void</span> execute(StartType &start, Range &range) {
+<a name="l00216"></a>00216         <span class="comment">// The algorithm in a few words ([]-denotes calls to decision methods of partitioner):</span>
+<a name="l00217"></a>00217         <span class="comment">// [If this task is stolen, adjust depth and divisions if necessary, set flag].</span>
+<a name="l00218"></a>00218         <span class="comment">// If range is divisible {</span>
+<a name="l00219"></a>00219         <span class="comment">//    Spread the work while [initial divisions left];</span>
+<a name="l00220"></a>00220         <span class="comment">//    Create trap task [if necessary];</span>
+<a name="l00221"></a>00221         <span class="comment">// }</span>
+<a name="l00222"></a>00222         <span class="comment">// If not divisible or [max depth is reached], execute, else do the range pool part</span>
+<a name="l00223"></a>00223         task* parent_ptr = start.parent();
+<a name="l00224"></a>00224         <span class="keywordflow">if</span>( range.is_divisible() ) {
+<a name="l00225"></a>00225             <span class="keywordflow">if</span>( derived().divisions_left() )
+<a name="l00226"></a>00226                 <span class="keywordflow">do</span> parent_ptr = split_work(start); <span class="comment">// split until divisions_left()</span>
+<a name="l00227"></a>00227                 <span class="keywordflow">while</span>( range.is_divisible() && derived().divisions_left() );
+<a name="l00228"></a>00228             <span class="keywordflow">if</span>( derived().should_create_trap() ) { <span class="comment">// only for range pool</span>
+<a name="l00229"></a>00229                 <span class="keywordflow">if</span>( parent_ptr->ref_count() > 1 ) { <span class="comment">// create new parent if necessary</span>
+<a name="l00230"></a>00230                     parent_ptr = start.create_continuation();
+<a name="l00231"></a>00231                     start.set_parent(parent_ptr);
+<a name="l00232"></a>00232                 } <span class="keywordflow">else</span> __TBB_ASSERT(parent_ptr->ref_count() == 1, NULL);
+<a name="l00233"></a>00233                 parent_ptr->set_ref_count(2); <span class="comment">// safe because parent has only one reference</span>
+<a name="l00234"></a>00234                 signal_task& right_signal = *<span class="keyword">new</span>( parent_ptr->allocate_child() ) signal_task();
+<a name="l00235"></a>00235                 start.spawn(right_signal); <span class="comment">// pure signal is to avoid deep recursion in the end</span>
+<a name="l00236"></a>00236             }
+<a name="l00237"></a>00237         }
+<a name="l00238"></a>00238         <span class="keywordflow">if</span>( !range.is_divisible() || !derived().max_depth() )
+<a name="l00239"></a>00239             start.run_body( range ); <span class="comment">// simple partitioner goes always here</span>
+<a name="l00240"></a>00240         <span class="keywordflow">else</span> { <span class="comment">// do range pool</span>
+<a name="l00241"></a>00241             internal::range_vector<Range, Partition::range_pool_size> range_pool(range);
+<a name="l00242"></a>00242             <span class="keywordflow">do</span> {
+<a name="l00243"></a>00243                 range_pool.split_to_fill(derived().max_depth()); <span class="comment">// fill range pool</span>
+<a name="l00244"></a>00244                 <span class="keywordflow">if</span>( derived().check_for_demand( start ) ) {
+<a name="l00245"></a>00245                     <span class="keywordflow">if</span>( range_pool.size() > 1 ) {
+<a name="l00246"></a>00246                         parent_ptr = start.create_continuation();
+<a name="l00247"></a>00247                         start.set_parent(parent_ptr);
+<a name="l00248"></a>00248                         parent_ptr->set_ref_count(2);
+<a name="l00249"></a>00249                         StartType& right_work = *<span class="keyword">new</span>( parent_ptr->allocate_child() ) StartType(start, range_pool.front(), range_pool.front_depth());
+<a name="l00250"></a>00250                         start.spawn(right_work);
+<a name="l00251"></a>00251                         range_pool.pop_front();
+<a name="l00252"></a>00252                         <span class="keywordflow">continue</span>;
+<a name="l00253"></a>00253                     }
+<a name="l00254"></a>00254                     <span class="keywordflow">if</span>( range_pool.back().is_divisible() ) <span class="comment">// was not enough depth to fork a task</span>
+<a name="l00255"></a>00255                         <span class="keywordflow">continue</span>; <span class="comment">// note: check_for_demand() should guarantee increasing max_depth() next time</span>
+<a name="l00256"></a>00256                 }
+<a name="l00257"></a>00257                 start.run_body( range_pool.back() );
+<a name="l00258"></a>00258                 range_pool.pop_back();
+<a name="l00259"></a>00259             } <span class="keywordflow">while</span>( !range_pool.empty() && !start.is_cancelled() );
+<a name="l00260"></a>00260         }
+<a name="l00261"></a>00261     }
+<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> Partition>
+<a name="l00266"></a>00266 <span class="keyword">struct </span>auto_partition_type_base : partition_type_base<Partition> {
+<a name="l00267"></a>00267     size_t my_divisor;
+<a name="l00268"></a>00268     depth_t my_max_depth;
+<a name="l00269"></a>00269     auto_partition_type_base() : my_max_depth(__TBB_INIT_DEPTH) {
+<a name="l00270"></a>00270         my_divisor = tbb::internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4;
+<a name="l00271"></a>00271         __TBB_ASSERT(my_divisor, <span class="stringliteral">"initial value of get_initial_auto_partitioner_divisor() is not valid"</span>);
+<a name="l00272"></a>00272     }
+<a name="l00273"></a>00273     auto_partition_type_base(auto_partition_type_base &src, split) {
+<a name="l00274"></a>00274         my_max_depth = src.my_max_depth;
+<a name="l00275"></a>00275 <span class="preprocessor">#if __TBB_INITIAL_TASK_IMBALANCE</span>
+<a name="l00276"></a>00276 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( src.my_divisor <= 1 ) my_divisor = 0;
+<a name="l00277"></a>00277         <span class="keywordflow">else</span> my_divisor = src.my_divisor = (src.my_divisor+1u) / 2u;
+<a name="l00278"></a>00278 <span class="preprocessor">#else</span>
+<a name="l00279"></a>00279 <span class="preprocessor"></span>        my_divisor = src.my_divisor / 2u;
+<a name="l00280"></a>00280         src.my_divisor = src.my_divisor - my_divisor; <span class="comment">// TODO: check the effect separately</span>
+<a name="l00281"></a>00281         <span class="keywordflow">if</span>(my_divisor) src.my_max_depth += static_cast<depth_t>(__TBB_Log2(src.my_divisor/my_divisor));
+<a name="l00282"></a>00282 <span class="preprocessor">#endif</span>
+<a name="l00283"></a>00283 <span class="preprocessor"></span>    }
+<a name="l00284"></a>00284     <span class="keywordtype">bool</span> check_being_stolen( task &t) { <span class="comment">// part of old should_execute_range()</span>
+<a name="l00285"></a>00285         <span class="keywordflow">if</span>( !my_divisor ) {
+<a name="l00286"></a>00286             my_divisor = 1; <span class="comment">// todo: replace by on-stack flag (partition_state's member)?</span>
+<a name="l00287"></a>00287             <span class="keywordflow">if</span>( t.is_stolen_task() ) {
+<a name="l00288"></a>00288 #<span class="keywordflow">if</span> TBB_USE_EXCEPTIONS
+<a name="l00289"></a>00289                 <span class="comment">// RTTI is available, check whether the cast is valid</span>
+<a name="l00290"></a>00290                 __TBB_ASSERT(dynamic_cast<flag_task*>(t.parent()), 0);
+<a name="l00291"></a>00291                 <span class="comment">// correctness of the cast relies on avoiding the root task for which:</span>
+<a name="l00292"></a>00292                 <span class="comment">// - initial value of my_divisor != 0 (protected by separate assertion)</span>
+<a name="l00293"></a>00293                 <span class="comment">// - is_stolen_task() always return false for the root task.</span>
+<a name="l00294"></a>00294 <span class="preprocessor">#endif</span>
+<a name="l00295"></a>00295 <span class="preprocessor"></span>                static_cast<flag_task*>(t.parent())->child_stolen = <span class="keyword">true</span>;
+<a name="l00296"></a>00296                 my_max_depth++;
+<a name="l00297"></a>00297                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00298"></a>00298             }
+<a name="l00299"></a>00299         }
+<a name="l00300"></a>00300         <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00301"></a>00301     }
+<a name="l00302"></a>00302     <span class="keywordtype">bool</span> divisions_left() { <span class="comment">// part of old should_execute_range()</span>
+<a name="l00303"></a>00303         <span class="keywordflow">if</span>( my_divisor > 1 ) <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00304"></a>00304         <span class="keywordflow">if</span>( my_divisor && my_max_depth > 1 ) { <span class="comment">// can split the task and once more internally. TODO: on-stack flag instead</span>
+<a name="l00305"></a>00305             <span class="comment">// keep same fragmentation while splitting for the local task pool</span>
+<a name="l00306"></a>00306             my_max_depth--;
+<a name="l00307"></a>00307             my_divisor = 0;
+<a name="l00308"></a>00308             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00309"></a>00309         } <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00310"></a>00310     }
+<a name="l00311"></a>00311     <span class="keywordtype">bool</span> should_create_trap() {
+<a name="l00312"></a>00312         <span class="keywordflow">return</span> my_divisor > 0;
+<a name="l00313"></a>00313     }
+<a name="l00314"></a>00314     <span class="keywordtype">bool</span> check_for_demand(task &t) {
+<a name="l00315"></a>00315         <span class="keywordflow">if</span>( static_cast<flag_task*>(t.parent())->child_stolen ) {
+<a name="l00316"></a>00316             my_max_depth++;
+<a name="l00317"></a>00317             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00318"></a>00318         } <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00319"></a>00319     }
+<a name="l00320"></a>00320     <span class="keywordtype">void</span> align_depth(depth_t base) {
+<a name="l00321"></a>00321         __TBB_ASSERT(base <= my_max_depth, 0);
+<a name="l00322"></a>00322         my_max_depth -= base;
+<a name="l00323"></a>00323     }
+<a name="l00324"></a>00324     depth_t max_depth() { <span class="keywordflow">return</span> my_max_depth; }
+<a name="l00325"></a>00325 };
+<a name="l00326"></a>00326 
+<a name="l00328"></a>00328 <span class="keyword">class </span>affinity_partition_type : <span class="keyword">public</span> auto_partition_type_base<affinity_partition_type> {
+<a name="l00329"></a>00329     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> factor_power = 4;
+<a name="l00330"></a>00330     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> factor = 1<<factor_power;
+<a name="l00331"></a>00331     <span class="keywordtype">bool</span> my_delay;
+<a name="l00332"></a>00332     <span class="keywordtype">unsigned</span> map_begin, map_end, map_mid;
+<a name="l00333"></a>00333     tbb::internal::affinity_id* my_array;
+<a name="l00334"></a>00334     <span class="keywordtype">void</span> set_mid() {
+<a name="l00335"></a>00335         <span class="keywordtype">unsigned</span> d = (map_end - map_begin)/2; <span class="comment">// we could add 1 but it is rather for LIFO affinity</span>
+<a name="l00336"></a>00336         <span class="keywordflow">if</span>( d > factor )
+<a name="l00337"></a>00337             d &= 0u-factor;
+<a name="l00338"></a>00338         map_mid = map_end - d;
+<a name="l00339"></a>00339     }
+<a name="l00340"></a>00340 <span class="keyword">public</span>:
+<a name="l00341"></a>00341     affinity_partition_type( <a class="code" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a>& ap ) {
+<a name="l00342"></a>00342         __TBB_ASSERT( (factor&(factor-1))==0, <span class="stringliteral">"factor must be power of two"</span> );
+<a name="l00343"></a>00343         ap.<a class="code" href="a00250.html#d9122ca5725982c602da44dae0acc603">resize</a>(factor);
+<a name="l00344"></a>00344         my_array = ap.<a class="code" href="a00250.html#8681a00f14b6ad375d63b104c24bef17">my_array</a>;
+<a name="l00345"></a>00345         map_begin = 0;
+<a name="l00346"></a>00346         map_end = unsigned(ap.<a class="code" href="a00250.html#8562953693788ae691865453b1ff3a5d">my_size</a>);
+<a name="l00347"></a>00347         set_mid();
+<a name="l00348"></a>00348         my_delay = <span class="keyword">true</span>;
+<a name="l00349"></a>00349         my_divisor /= __TBB_INITIAL_CHUNKS; <span class="comment">// let exactly P tasks to be distributed across workers</span>
+<a name="l00350"></a>00350         my_max_depth = factor_power+1; <span class="comment">// the first factor_power ranges will be spawned, and >=1 ranges should be left</span>
+<a name="l00351"></a>00351         __TBB_ASSERT( my_max_depth < __TBB_RANGE_POOL_CAPACITY, 0 );
+<a name="l00352"></a>00352     }
+<a name="l00353"></a>00353     affinity_partition_type(affinity_partition_type& p, split)
+<a name="l00354"></a>00354         : auto_partition_type_base<affinity_partition_type>(p, split()), my_array(p.my_array) {
+<a name="l00355"></a>00355         __TBB_ASSERT( p.map_end-p.map_begin<factor || (p.map_end-p.map_begin)%factor==0, NULL );
+<a name="l00356"></a>00356         map_end = p.map_end;
+<a name="l00357"></a>00357         map_begin = p.map_end = p.map_mid;
+<a name="l00358"></a>00358         set_mid(); p.set_mid();
+<a name="l00359"></a>00359         my_delay = p.my_delay;
+<a name="l00360"></a>00360     }
+<a name="l00361"></a>00361     <span class="keywordtype">void</span> set_affinity( task &t ) {
+<a name="l00362"></a>00362         <span class="keywordflow">if</span>( map_begin<map_end )
+<a name="l00363"></a>00363             t.set_affinity( my_array[map_begin] );
+<a name="l00364"></a>00364     }
+<a name="l00365"></a>00365     <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00337.html#d61bb32389d3857bf7511d69beaafb76">task::affinity_id</a> <span class="keywordtype">id</span> ) {
+<a name="l00366"></a>00366         <span class="keywordflow">if</span>( map_begin<map_end )
+<a name="l00367"></a>00367             my_array[map_begin] = id;
+<a name="l00368"></a>00368     }
+<a name="l00369"></a>00369     <span class="keywordtype">bool</span> check_for_demand( task &t ) {
+<a name="l00370"></a>00370         <span class="keywordflow">if</span>( !my_delay ) {
+<a name="l00371"></a>00371             <span class="keywordflow">if</span>( map_mid<map_end ) {
+<a name="l00372"></a>00372                 __TBB_ASSERT(my_max_depth>__TBB_Log2(map_end-map_mid), 0);
+<a name="l00373"></a>00373                 <span class="keywordflow">return</span> <span class="keyword">true</span>;<span class="comment">// do not do my_max_depth++ here, but be sure my_max_depth is big enough</span>
+<a name="l00374"></a>00374             }
+<a name="l00375"></a>00375             <span class="keywordflow">if</span>( static_cast<flag_task*>(t.parent())->child_stolen ) {
+<a name="l00376"></a>00376                 my_max_depth++;
+<a name="l00377"></a>00377                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00378"></a>00378             }
+<a name="l00379"></a>00379         } <span class="keywordflow">else</span> my_delay = <span class="keyword">false</span>;
+<a name="l00380"></a>00380         <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00381"></a>00381     }
+<a name="l00382"></a>00382     <span class="keywordtype">bool</span> divisions_left() { <span class="comment">// part of old should_execute_range()</span>
+<a name="l00383"></a>00383         <span class="keywordflow">return</span> my_divisor > 1;
+<a name="l00384"></a>00384     }
+<a name="l00385"></a>00385     <span class="keywordtype">bool</span> should_create_trap() {
+<a name="l00386"></a>00386         <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// TODO: rethink for the stage after memorizing level</span>
+<a name="l00387"></a>00387     }
+<a name="l00388"></a>00388     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> range_pool_size = __TBB_RANGE_POOL_CAPACITY;
+<a name="l00389"></a>00389 };
+<a name="l00390"></a>00390 
+<a name="l00391"></a>00391 <span class="keyword">class </span>auto_partition_type: <span class="keyword">public</span> auto_partition_type_base<auto_partition_type> {
+<a name="l00392"></a>00392 <span class="keyword">public</span>:
+<a name="l00393"></a>00393     auto_partition_type( <span class="keyword">const</span> auto_partitioner& ) {}
+<a name="l00394"></a>00394     auto_partition_type( auto_partition_type& src, split)
+<a name="l00395"></a>00395       : auto_partition_type_base<auto_partition_type>(src, split()) {}
+<a name="l00396"></a>00396     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> range_pool_size = __TBB_RANGE_POOL_CAPACITY;
+<a name="l00397"></a>00397 };
+<a name="l00398"></a>00398 
+<a name="l00399"></a>00399 <span class="keyword">class </span>simple_partition_type: <span class="keyword">public</span> partition_type_base<simple_partition_type> {
+<a name="l00400"></a>00400 <span class="keyword">public</span>:
+<a name="l00401"></a>00401     simple_partition_type( <span class="keyword">const</span> simple_partitioner& ) {}
+<a name="l00402"></a>00402     simple_partition_type( <span class="keyword">const</span> simple_partition_type&, split ) {}
+<a name="l00404"></a>00404     <span class="keyword">template</span><<span class="keyword">typename</span> StartType, <span class="keyword">typename</span> Range>
+<a name="l00405"></a>00405     <span class="keywordtype">void</span> execute(StartType &start, Range &range) {
+<a name="l00406"></a>00406         <span class="keywordflow">while</span>( range.is_divisible() )
+<a name="l00407"></a>00407             split_work( start );
+<a name="l00408"></a>00408         start.run_body( range );
+<a name="l00409"></a>00409     }
+<a name="l00410"></a>00410     <span class="comment">//static const unsigned range_pool_size = 1; - not necessary because execute() is overridden</span>
+<a name="l00411"></a>00411 };
+<a name="l00412"></a>00412 
+<a name="l00414"></a>00414 <span class="keyword">class </span>old_auto_partition_type: <span class="keyword">public</span> tbb::internal::partition_type_base {
+<a name="l00415"></a>00415     size_t num_chunks;
+<a name="l00416"></a>00416     <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
+<a name="l00417"></a>00417 <span class="keyword">public</span>:
+<a name="l00418"></a>00418     <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> task &t) {
+<a name="l00419"></a>00419         <span class="keywordflow">if</span>( num_chunks<VICTIM_CHUNKS && t.is_stolen_task() )
+<a name="l00420"></a>00420             num_chunks = VICTIM_CHUNKS;
+<a name="l00421"></a>00421         <span class="keywordflow">return</span> num_chunks==1;
+<a name="l00422"></a>00422     }
+<a name="l00423"></a>00423     old_auto_partition_type( <span class="keyword">const</span> auto_partitioner& )
+<a name="l00424"></a>00424       : num_chunks(internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4) {}
+<a name="l00425"></a>00425     old_auto_partition_type( <span class="keyword">const</span> affinity_partitioner& )
+<a name="l00426"></a>00426       : num_chunks(internal::get_initial_auto_partitioner_divisor()*__TBB_INITIAL_CHUNKS/4) {}
+<a name="l00427"></a>00427     old_auto_partition_type( old_auto_partition_type& pt, split ) {
+<a name="l00428"></a>00428         num_chunks = pt.num_chunks = (pt.num_chunks+1u) / 2u;
+<a name="l00429"></a>00429     }
+<a name="l00430"></a>00430 };
+<a name="l00431"></a>00431 
+<a name="l00432"></a>00432 } <span class="comment">// namespace interfaceX::internal</span>
+<a name="l00434"></a>00434 <span class="comment"></span>} <span class="comment">// namespace interfaceX</span>
+<a name="l00435"></a>00435 
+<a name="l00437"></a>00437 
+<a name="l00439"></a><a class="code" href="a00329.html">00439</a> <span class="keyword">class </span><a class="code" href="a00329.html">simple_partitioner</a> {
+<a name="l00440"></a>00440 <span class="keyword">public</span>:
+<a name="l00441"></a>00441     <a class="code" href="a00329.html">simple_partitioner</a>() {}
+<a name="l00442"></a>00442 <span class="keyword">private</span>:
+<a name="l00443"></a>00443     <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>serial::interface6::start_for;
+<a name="l00444"></a>00444     <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>interface6::internal::start_for;
+<a name="l00445"></a>00445     <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>interface6::internal::start_reduce;
+<a name="l00446"></a>00446     <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="l00447"></a>00447     <span class="comment">// backward compatibility</span>
+<a name="l00448"></a>00448     <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
+<a name="l00449"></a>00449     <span class="keyword">public</span>:
+<a name="l00450"></a>00450         <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00337.html">task</a>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+<a name="l00451"></a>00451         partition_type( <span class="keyword">const</span> <a class="code" href="a00329.html">simple_partitioner</a>& ) {}
+<a name="l00452"></a>00452         partition_type( <span class="keyword">const</span> partition_type&, <a class="code" href="a00335.html">split</a> ) {}
+<a name="l00453"></a>00453     };
+<a name="l00454"></a>00454     <span class="comment">// new implementation just extends existing interface</span>
+<a name="l00455"></a>00455     <span class="keyword">typedef</span> interface6::internal::simple_partition_type task_partition_type;
+<a name="l00456"></a>00456 };
+<a name="l00457"></a>00457 
+<a name="l00459"></a>00459 
+<a name="l00462"></a><a class="code" href="a00257.html">00462</a> <span class="keyword">class </span><a class="code" href="a00257.html">auto_partitioner</a> {
+<a name="l00463"></a>00463 <span class="keyword">public</span>:
+<a name="l00464"></a>00464     <a class="code" href="a00257.html">auto_partitioner</a>() {}
+<a name="l00465"></a>00465 
+<a name="l00466"></a>00466 <span class="keyword">private</span>:
+<a name="l00467"></a>00467     <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>serial::interface6::start_for;
+<a name="l00468"></a>00468     <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>interface6::internal::start_for;
+<a name="l00469"></a>00469     <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>interface6::internal::start_reduce;
+<a name="l00470"></a>00470     <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="l00471"></a>00471     <span class="comment">// backward compatibility</span>
+<a name="l00472"></a>00472     <span class="keyword">typedef</span> interface6::internal::old_auto_partition_type partition_type;
+<a name="l00473"></a>00473     <span class="comment">// new implementation just extends existing interface</span>
+<a name="l00474"></a>00474     <span class="keyword">typedef</span> interface6::internal::auto_partition_type task_partition_type;
+<a name="l00475"></a>00475 };
+<a name="l00476"></a>00476 
+<a name="l00478"></a><a class="code" href="a00249.html">00478</a> <span class="keyword">class </span><a class="code" href="a00249.html">affinity_partitioner</a>: internal::affinity_partitioner_base_v3 {
+<a name="l00479"></a>00479 <span class="keyword">public</span>:
+<a name="l00480"></a>00480     <a class="code" href="a00249.html">affinity_partitioner</a>() {}
+<a name="l00481"></a>00481 
+<a name="l00482"></a>00482 <span class="keyword">private</span>:
+<a name="l00483"></a>00483     <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>serial::interface6::start_for;
+<a name="l00484"></a>00484     <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>interface6::internal::start_for;
+<a name="l00485"></a>00485     <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>interface6::internal::start_reduce;
+<a name="l00486"></a>00486     <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="l00487"></a>00487     <span class="comment">// backward compatibility - for parallel_scan only</span>
+<a name="l00488"></a>00488     <span class="keyword">typedef</span> interface6::internal::old_auto_partition_type partition_type;
+<a name="l00489"></a>00489     <span class="comment">// new implementation just extends existing interface</span>
+<a name="l00490"></a>00490     <span class="keyword">typedef</span> interface6::internal::affinity_partition_type task_partition_type;
+<a name="l00491"></a>00491 };
+<a name="l00492"></a>00492 
+<a name="l00493"></a>00493 } <span class="comment">// namespace tbb</span>
+<a name="l00494"></a>00494 
+<a name="l00495"></a>00495 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</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 // warning 4244 is back</span>
+<a name="l00498"></a>00498 <span class="preprocessor"></span><span class="preprocessor">#undef __TBB_INITIAL_CHUNKS</span>
+<a name="l00499"></a>00499 <span class="preprocessor"></span><span class="preprocessor">#undef __TBB_RANGE_POOL_CAPACITY</span>
+<a name="l00500"></a>00500 <span class="preprocessor"></span><span class="preprocessor">#undef __TBB_INIT_DEPTH</span>
+<a name="l00501"></a>00501 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_partitioner_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00577.html b/doc/html/a00577.html
deleted file mode 100644
index ce437ea..0000000
--- a/doc/html/a00577.html
+++ /dev/null
@@ -1,274 +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_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-2011 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="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>
-<a name="l00029"></a>00029 <span class="keyword">namespace </span>tbb {
-<a name="l00030"></a>00030 
-<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> F> <span class="keyword">class </span>task_handle_task;
-<a name="l00033"></a>00033 }
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00036"></a>00036 <span class="keyword">class </span>task_handle : internal::no_assign {
-<a name="l00037"></a>00037     <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="l00038"></a>00038 
-<a name="l00039"></a>00039     <span class="keyword">static</span> <span class="keyword">const</span> intptr_t scheduled = 0x1;
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041     F my_func;
-<a name="l00042"></a>00042     intptr_t my_state;
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044     <span class="keywordtype">void</span> mark_scheduled () {
-<a name="l00045"></a>00045         <span class="comment">// The check here is intentionally lax to avoid the impact of interlocked operation</span>
-<a name="l00046"></a>00046         <span class="keywordflow">if</span> ( my_state & scheduled )
-<a name="l00047"></a>00047             internal::throw_exception( internal::eid_invalid_multiple_scheduling );
-<a name="l00048"></a>00048         my_state |= scheduled;
-<a name="l00049"></a>00049     }
-<a name="l00050"></a>00050 <span class="keyword">public</span>:
-<a name="l00051"></a>00051     task_handle( <span class="keyword">const</span> F& f ) : my_func(f), my_state(0) {}
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053     <span class="keywordtype">void</span> operator() ()<span class="keyword"> const </span>{ my_func(); }
-<a name="l00054"></a>00054 };
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="keyword">enum</span> task_group_status {
-<a name="l00057"></a>00057     not_complete,
-<a name="l00058"></a>00058     complete,
-<a name="l00059"></a>00059     canceled
-<a name="l00060"></a>00060 };
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="keyword">namespace </span>internal {
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="comment">// Suppress gratuitous warnings from icc 11.0 when lambda expressions are used in instances of function_task.</span>
-<a name="l00065"></a>00065 <span class="comment">//#pragma warning(disable: 588)</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00068"></a>00068 <span class="keyword">class </span>function_task : <span class="keyword">public</span> task {
-<a name="l00069"></a>00069     F my_func;
-<a name="l00070"></a>00070     <span class="comment">/*override*/</span> <a class="code" href="a00311.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
-<a name="l00071"></a>00071         my_func();
-<a name="l00072"></a>00072         <span class="keywordflow">return</span> NULL;
-<a name="l00073"></a>00073     }
-<a name="l00074"></a>00074 <span class="keyword">public</span>:
-<a name="l00075"></a>00075     function_task( <span class="keyword">const</span> F& f ) : my_func(f) {}
-<a name="l00076"></a>00076 };
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00079"></a>00079 <span class="keyword">class </span>task_handle_task : <span class="keyword">public</span> task {
-<a name="l00080"></a>00080     task_handle<F>& my_handle;
-<a name="l00081"></a>00081     <span class="comment">/*override*/</span> <a class="code" href="a00311.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
-<a name="l00082"></a>00082         my_handle();
-<a name="l00083"></a>00083         <span class="keywordflow">return</span> NULL;
-<a name="l00084"></a>00084     }
-<a name="l00085"></a>00085 <span class="keyword">public</span>:
-<a name="l00086"></a>00086     task_handle_task( task_handle<F>& h ) : my_handle(h) { h.mark_scheduled(); }
-<a name="l00087"></a>00087 };
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="keyword">class </span>task_group_base : internal::no_copy {
-<a name="l00090"></a>00090 <span class="keyword">protected</span>:
-<a name="l00091"></a>00091     empty_task* my_root;
-<a name="l00092"></a>00092     task_group_context my_context;
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094     task& owner () { <span class="keywordflow">return</span> *my_root; }
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00097"></a>00097     task_group_status internal_run_and_wait( F& f ) {
-<a name="l00098"></a>00098         __TBB_TRY {
-<a name="l00099"></a>00099             <span class="keywordflow">if</span> ( !my_context.is_group_execution_cancelled() )
-<a name="l00100"></a>00100                 f();
-<a name="l00101"></a>00101         } __TBB_CATCH( ... ) {
-<a name="l00102"></a>00102             my_context.register_pending_exception();
-<a name="l00103"></a>00103         }
-<a name="l00104"></a>00104         <span class="keywordflow">return</span> wait();
-<a name="l00105"></a>00105     }
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107     <span class="keyword">template</span><<span class="keyword">typename</span> F, <span class="keyword">typename</span> Task>
-<a name="l00108"></a>00108     <span class="keywordtype">void</span> internal_run( F& f ) {
-<a name="l00109"></a>00109         owner().spawn( *<span class="keyword">new</span>( owner().allocate_additional_child_of(*my_root) ) Task(f) );
-<a name="l00110"></a>00110     }
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="keyword">public</span>:
-<a name="l00113"></a>00113     task_group_base( uintptr_t traits = 0 )
-<a name="l00114"></a>00114         : my_context(task_group_context::bound, task_group_context::default_traits | traits)
-<a name="l00115"></a>00115     {
-<a name="l00116"></a>00116         my_root = <span class="keyword">new</span>( <a class="code" href="a00311.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(my_context) ) empty_task;
-<a name="l00117"></a>00117         my_root->set_ref_count(1);
-<a name="l00118"></a>00118     }
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120     ~task_group_base() {
-<a name="l00121"></a>00121         <span class="keywordflow">if</span>( my_root->ref_count() > 1 ) {
-<a name="l00122"></a>00122             <span class="keywordtype">bool</span> stack_unwinding_in_progress = std::uncaught_exception();
-<a name="l00123"></a>00123             <span class="comment">// Always attempt to do proper cleanup to avoid inevitable memory corruption </span>
-<a name="l00124"></a>00124             <span class="comment">// in case of missing wait (for the sake of better testability & debuggability)</span>
-<a name="l00125"></a>00125             <span class="keywordflow">if</span> ( !is_canceling() )
-<a name="l00126"></a>00126                 cancel();
-<a name="l00127"></a>00127             __TBB_TRY {
-<a name="l00128"></a>00128                 my_root->wait_for_all();
-<a name="l00129"></a>00129             } __TBB_CATCH (...) {
-<a name="l00130"></a>00130                 <a class="code" href="a00311.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
-<a name="l00131"></a>00131                 __TBB_RETHROW();
-<a name="l00132"></a>00132             }
-<a name="l00133"></a>00133             <a class="code" href="a00311.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
-<a name="l00134"></a>00134             <span class="keywordflow">if</span> ( !stack_unwinding_in_progress )
-<a name="l00135"></a>00135                 internal::throw_exception( internal::eid_missing_wait );
-<a name="l00136"></a>00136         }
-<a name="l00137"></a>00137         <span class="keywordflow">else</span> {
-<a name="l00138"></a>00138             <a class="code" href="a00311.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
-<a name="l00139"></a>00139         }
-<a name="l00140"></a>00140     }
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00143"></a>00143     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
-<a name="l00144"></a>00144         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
-<a name="l00145"></a>00145     }
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147     task_group_status wait() {
-<a name="l00148"></a>00148         __TBB_TRY {
-<a name="l00149"></a>00149             my_root->wait_for_all();
-<a name="l00150"></a>00150         } __TBB_CATCH( ... ) {
-<a name="l00151"></a>00151             my_context.reset();
-<a name="l00152"></a>00152             __TBB_RETHROW();
-<a name="l00153"></a>00153         }
-<a name="l00154"></a>00154         <span class="keywordflow">if</span> ( my_context.is_group_execution_cancelled() ) {
-<a name="l00155"></a>00155             my_context.reset();
-<a name="l00156"></a>00156             <span class="keywordflow">return</span> canceled;
-<a name="l00157"></a>00157         }
-<a name="l00158"></a>00158         <span class="keywordflow">return</span> complete;
-<a name="l00159"></a>00159     }
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     <span class="keywordtype">bool</span> is_canceling() {
-<a name="l00162"></a>00162         <span class="keywordflow">return</span> my_context.is_group_execution_cancelled();
-<a name="l00163"></a>00163     }
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165     <span class="keywordtype">void</span> cancel() {
-<a name="l00166"></a>00166         my_context.cancel_group_execution();
-<a name="l00167"></a>00167     }
-<a name="l00168"></a>00168 }; <span class="comment">// class task_group_base</span>
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 } <span class="comment">// namespace internal</span>
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 <span class="keyword">class </span>task_group : <span class="keyword">public</span> internal::task_group_base {
-<a name="l00173"></a>00173 <span class="keyword">public</span>:
-<a name="l00174"></a>00174     task_group () : task_group_base( task_group_context::concurrent_wait ) {}
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 <span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00177"></a>00177 <span class="preprocessor"></span>    ~task_group() __TBB_TRY {
-<a name="l00178"></a>00178         __TBB_ASSERT( my_root->ref_count() != 0, NULL );
-<a name="l00179"></a>00179         <span class="keywordflow">if</span>( my_root->ref_count() > 1 )
-<a name="l00180"></a>00180             my_root->wait_for_all();
-<a name="l00181"></a>00181     }
-<a name="l00182"></a>00182 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
-<a name="l00183"></a>00183 <span class="preprocessor"></span>    <span class="keywordflow">catch</span> (...) {
-<a name="l00184"></a>00184         <span class="comment">// Have to destroy my_root here as the base class destructor won't be called</span>
-<a name="l00185"></a>00185         <a class="code" href="a00311.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
-<a name="l00186"></a>00186         <span class="keywordflow">throw</span>;
-<a name="l00187"></a>00187     }
-<a name="l00188"></a>00188 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_EXCEPTIONS */</span>
-<a name="l00189"></a>00189 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DEPRECATED */</span>
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 <span class="preprocessor">#if __SUNPRO_CC</span>
-<a name="l00192"></a>00192 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00193"></a>00193     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
-<a name="l00194"></a>00194         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 <span class="preprocessor">#else</span>
-<a name="l00197"></a>00197 <span class="preprocessor"></span>    <span class="keyword">using</span> task_group_base::run;
-<a name="l00198"></a>00198 <span class="preprocessor">#endif</span>
-<a name="l00199"></a>00199 <span class="preprocessor"></span>
-<a name="l00200"></a>00200     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00201"></a>00201     <span class="keywordtype">void</span> run( <span class="keyword">const</span> F& f ) {
-<a name="l00202"></a>00202         internal_run< const F, internal::function_task<F> >( f );
-<a name="l00203"></a>00203     }
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00206"></a>00206     task_group_status run_and_wait( <span class="keyword">const</span> F& f ) {
-<a name="l00207"></a>00207         <span class="keywordflow">return</span> internal_run_and_wait<const F>( f );
-<a name="l00208"></a>00208     }
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00211"></a>00211     task_group_status run_and_wait( task_handle<F>& h ) {
-<a name="l00212"></a>00212       <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
-<a name="l00213"></a>00213     }
-<a name="l00214"></a>00214 }; <span class="comment">// class task_group</span>
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 <span class="keyword">class </span>structured_task_group : <span class="keyword">public</span> internal::task_group_base {
-<a name="l00217"></a>00217 <span class="keyword">public</span>:
-<a name="l00218"></a>00218     <span class="keyword">template</span><<span class="keyword">typename</span> F>
-<a name="l00219"></a>00219     task_group_status run_and_wait ( task_handle<F>& h ) {
-<a name="l00220"></a>00220         <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
-<a name="l00221"></a>00221     }
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223     task_group_status wait() {
-<a name="l00224"></a>00224         task_group_status res = task_group_base::wait();
-<a name="l00225"></a>00225         my_root->set_ref_count(1);
-<a name="l00226"></a>00226         <span class="keywordflow">return</span> res;
-<a name="l00227"></a>00227     }
-<a name="l00228"></a>00228 }; <span class="comment">// class structured_task_group</span>
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230 <span class="keyword">inline</span> 
-<a name="l00231"></a>00231 <span class="keywordtype">bool</span> is_current_task_group_canceling() {
-<a name="l00232"></a>00232     <span class="keywordflow">return</span> <a class="code" href="a00311.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00311.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>();
-<a name="l00233"></a>00233 }
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 <span class="keyword">template</span><<span class="keyword">class</span> F>
-<a name="l00236"></a>00236 task_handle<F> make_task( <span class="keyword">const</span> F& f ) {
-<a name="l00237"></a>00237     <span class="keywordflow">return</span> task_handle<F>( f );
-<a name="l00238"></a>00238 }
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 } <span class="comment">// namespace tbb</span>
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_group_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00584.html b/doc/html/a00584.html
deleted file mode 100644
index b62f3ed..0000000
--- a/doc/html/a00584.html
+++ /dev/null
@@ -1,117 +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_scheduler_init.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_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-2011 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_scheduler_init_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_scheduler_init_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 "limits.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">typedef</span> std::size_t stack_size_type;
-<a name="l00030"></a>00030 
-<a name="l00032"></a>00032 <span class="keyword">namespace </span>internal {
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035     <span class="keyword">class </span>scheduler;
-<a name="l00036"></a>00036 } <span class="comment">// namespace internal</span>
-<a name="l00038"></a>00038 <span class="comment"></span>
-<a name="l00040"></a>00040 
-<a name="l00053"></a><a class="code" href="a00316.html">00053</a> <span class="keyword">class </span><a class="code" href="a00316.html">task_scheduler_init</a>: internal::no_copy {
-<a name="l00054"></a>00054     <span class="keyword">enum</span> ExceptionPropagationMode {
-<a name="l00055"></a>00055         propagation_mode_exact = 1u,
-<a name="l00056"></a>00056         propagation_mode_captured = 2u,
-<a name="l00057"></a>00057         propagation_mode_mask = propagation_mode_exact | propagation_mode_captured
-<a name="l00058"></a>00058     };
-<a name="l00059"></a>00059 
-<a name="l00061"></a>00061     internal::scheduler* my_scheduler;
-<a name="l00062"></a>00062 <span class="keyword">public</span>:
-<a name="l00063"></a>00063 
-<a name="l00065"></a><a class="code" href="a00316.html#8f5988e2b0fbb2d533fcbb7f2583743f">00065</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00316.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1;
-<a name="l00066"></a>00066 
-<a name="l00068"></a><a class="code" href="a00316.html#e6c860f1e559026ff3ef4599c0d6c514">00068</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00316.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2;
-<a name="l00069"></a>00069 
-<a name="l00071"></a>00071 
-<a name="l00082"></a>00082     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00316.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00316.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> );
-<a name="l00083"></a>00083 
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00316.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads, stack_size_type thread_stack_size );
-<a name="l00087"></a>00087 
-<a name="l00089"></a>00089     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00316.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
-<a name="l00090"></a>00090 
-<a name="l00092"></a><a class="code" href="a00316.html#421600bf9bf9338bcf937063f2ff0e90">00092</a>     <a class="code" href="a00316.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00316.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)  {
-<a name="l00093"></a>00093         <span class="comment">// Two lowest order bits of the stack size argument may be taken to communicate</span>
-<a name="l00094"></a>00094         <span class="comment">// default exception propagation mode of the client to be used when the</span>
-<a name="l00095"></a>00095         <span class="comment">// client manually creates tasks in the master thread and does not use</span>
-<a name="l00096"></a>00096         <span class="comment">// explicit task group context object. This is necessary because newer </span>
-<a name="l00097"></a>00097         <span class="comment">// TBB binaries with exact propagation enabled by default may be used </span>
-<a name="l00098"></a>00098         <span class="comment">// by older clients that expect tbb::captured_exception wrapper.</span>
-<a name="l00099"></a>00099         <span class="comment">// All zeros mean old client - no preference. </span>
-<a name="l00100"></a>00100         __TBB_ASSERT( !(thread_stack_size & propagation_mode_mask), <span class="stringliteral">"Requested stack size is not aligned"</span> );
-<a name="l00101"></a>00101 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span>        thread_stack_size |= TBB_USE_CAPTURED_EXCEPTION ? propagation_mode_captured : propagation_mode_exact;
-<a name="l00103"></a>00103 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_EXCEPTIONS */</span>
-<a name="l00104"></a>00104         <a class="code" href="a00316.html#d476053cc712e572554823492a5229ce">initialize</a>( number_of_threads, thread_stack_size );
-<a name="l00105"></a>00105     }
-<a name="l00106"></a>00106 
-<a name="l00108"></a><a class="code" href="a00316.html#4da6c86292d80c703a66c1f6f5299488">00108</a>     <a class="code" href="a00316.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>() {
-<a name="l00109"></a>00109         <span class="keywordflow">if</span>( my_scheduler ) 
-<a name="l00110"></a>00110             <a class="code" href="a00316.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
-<a name="l00111"></a>00111         internal::poison_pointer( my_scheduler );
-<a name="l00112"></a>00112     }
-<a name="l00114"></a>00114 
-<a name="l00131"></a>00131     <span class="keyword">static</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00316.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a> ();
-<a name="l00132"></a>00132 
-<a name="l00134"></a><a class="code" href="a00316.html#12752282977029f23416642bc03e8b74">00134</a>     <span class="keywordtype">bool</span> <a class="code" href="a00316.html#12752282977029f23416642bc03e8b74">is_active</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_scheduler != NULL; }
-<a name="l00135"></a>00135 };
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137 } <span class="comment">// namespace tbb</span>
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_scheduler_init_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00585.html b/doc/html/a00585.html
deleted file mode 100644
index 0fbc58c..0000000
--- a/doc/html/a00585.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>task_scheduler_observer.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_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-2011 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_scheduler_observer_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_scheduler_observer_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 
-<a name="l00026"></a>00026 <span class="preprocessor">#if __TBB_SCHEDULER_OBSERVER</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>
-<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="keyword">namespace </span>internal {
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="keyword">class </span>observer_proxy;
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="keyword">class </span>task_scheduler_observer_v3 {
-<a name="l00035"></a>00035     <span class="keyword">friend</span> <span class="keyword">class </span>observer_proxy;
-<a name="l00036"></a>00036     observer_proxy* my_proxy;
-<a name="l00037"></a>00037     atomic<intptr_t> my_busy_count;
-<a name="l00038"></a>00038 <span class="keyword">public</span>:
-<a name="l00040"></a>00040     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD observe( <span class="keywordtype">bool</span> state=<span class="keyword">true</span> );
-<a name="l00041"></a>00041 
-<a name="l00043"></a>00043     <span class="keywordtype">bool</span> is_observing()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_proxy!=NULL;}
-<a name="l00044"></a>00044 
-<a name="l00046"></a>00046     task_scheduler_observer_v3() : my_proxy(NULL) {my_busy_count=0;}
-<a name="l00047"></a>00047 
-<a name="l00049"></a>00049     <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_scheduler_entry( <span class="keywordtype">bool</span> <span class="comment">/*is_worker*/</span> ) {} 
-<a name="l00050"></a>00050 
-<a name="l00052"></a>00052     <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_scheduler_exit( <span class="keywordtype">bool</span> <span class="comment">/*is_worker*/</span> ) {}
-<a name="l00053"></a>00053 
-<a name="l00055"></a>00055     <span class="keyword">virtual</span> ~task_scheduler_observer_v3() {observe(<span class="keyword">false</span>);}
-<a name="l00056"></a>00056 };
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 } <span class="comment">// namespace internal</span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="keyword">typedef</span> internal::task_scheduler_observer_v3 task_scheduler_observer;
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 } <span class="comment">// namespace tbb</span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_scheduler_observer_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00587.html b/doc/html/a00587.html
index ea3a07c..afc137a 100644
--- a/doc/html/a00587.html
+++ b/doc/html/a00587.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.h Source File</title>
+<title>pipeline.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.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-2011 Intel Corporation.  All Rights Reserved.</span>
+<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-2012 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,56 +39,571 @@
 <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="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="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 "combinable.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "concurrent_unordered_map.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "concurrent_hash_map.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "concurrent_queue.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "concurrent_vector.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "critical_section.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "enumerable_thread_specific.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "mutex.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "null_mutex.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "null_rw_mutex.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "parallel_do.h"</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "parallel_for.h"</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include "parallel_for_each.h"</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include "parallel_invoke.h"</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include "parallel_reduce.h"</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include "parallel_scan.h"</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include "parallel_sort.h"</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include "partitioner.h"</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include "pipeline.h"</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include "queuing_mutex.h"</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include "queuing_rw_mutex.h"</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include "reader_writer_lock.h"</span>
-<a name="l00060"></a>00060 <span class="preprocessor">#if TBB_PREVIEW_CONCURRENT_PRIORITY_QUEUE</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#include "concurrent_priority_queue.h"</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#endif</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#include "recursive_mutex.h"</span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include "spin_mutex.h"</span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include "task.h"</span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include "task_group.h"</span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include "task_scheduler_init.h"</span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include "task_scheduler_observer.h"</span>
-<a name="l00070"></a>00070 <span class="preprocessor">#include "tbb_allocator.h"</span>
-<a name="l00071"></a>00071 <span class="preprocessor">#include "tbb_exception.h"</span>
-<a name="l00072"></a>00072 <span class="preprocessor">#include "tbb_thread.h"</span>
-<a name="l00073"></a>00073 <span class="preprocessor">#include "tick_count.h"</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 "tbb_allocator.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <cstddef></span>
+<a name="l00028"></a>00028 
+<a name="l00029"></a>00029 <span class="preprocessor">#if !TBB_IMPLEMENT_CPP0X</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#include <type_traits></span>
+<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="keyword">namespace </span>tbb {
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="keyword">class </span>pipeline;
+<a name="l00036"></a>00036 <span class="keyword">class </span>filter;
+<a name="l00037"></a>00037 
+<a name="l00039"></a>00039 <span class="keyword">namespace </span>internal {
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="comment">// The argument for PIPELINE_VERSION should be an integer between 2 and 9</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#define __TBB_PIPELINE_VERSION(x) (unsigned char)(x-2)<<1</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Token;
+<a name="l00045"></a>00045 <span class="keyword">typedef</span> <span class="keywordtype">long</span> tokendiff_t;
+<a name="l00046"></a>00046 <span class="keyword">class </span>stage_task;
+<a name="l00047"></a>00047 <span class="keyword">class </span>input_buffer;
+<a name="l00048"></a>00048 <span class="keyword">class </span>pipeline_root_task;
+<a name="l00049"></a>00049 <span class="keyword">class </span>pipeline_cleaner;
+<a name="l00050"></a>00050 
+<a name="l00051"></a>00051 } <span class="comment">// namespace internal</span>
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053 <span class="keyword">namespace </span>interface6 {
+<a name="l00054"></a>00054     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U> <span class="keyword">class </span>filter_t;
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056     <span class="keyword">namespace </span>internal {
+<a name="l00057"></a>00057         <span class="keyword">class </span>pipeline_proxy;
+<a name="l00058"></a>00058     }
+<a name="l00059"></a>00059 }
+<a name="l00060"></a>00060 
+<a name="l00062"></a>00062 
+<a name="l00064"></a>00064 
+<a name="l00065"></a><a class="code" href="a00282.html">00065</a> <span class="keyword">class </span><a class="code" href="a00282.html">filter</a>: internal::no_copy {
+<a name="l00066"></a>00066 <span class="keyword">private</span>:
+<a name="l00068"></a>00068     <span class="keyword">static</span> <a class="code" href="a00282.html">filter</a>* not_in_pipeline() {<span class="keywordflow">return</span> reinterpret_cast<filter*>(intptr_t(-1));}
+<a name="l00069"></a>00069 <span class="keyword">protected</span>:    
+<a name="l00071"></a><a class="code" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">00071</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a> = 0x1; 
+<a name="l00072"></a>00072 
 <a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_H */</span>
+<a name="l00076"></a><a class="code" href="a00282.html#2e5eb65f95d8050186278077e433c5b1">00076</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00282.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a> = 0x1<<4;  
+<a name="l00077"></a>00077 
+<a name="l00079"></a><a class="code" href="a00282.html#dd6a6e7210efc9bcaf2c5e08767d92b5">00079</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00282.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a> = 0x1<<5;  
+<a name="l00080"></a>00080 
+<a name="l00082"></a><a class="code" href="a00282.html#bdd02a434a6e7499dd1e8f43aae96793">00082</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00282.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a> = 0x1<<6;
+<a name="l00083"></a>00083 
+<a name="l00085"></a><a class="code" href="a00282.html#f17200974c33be21f42a5f00893de028">00085</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00282.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a> =
+<a name="l00086"></a>00086 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span>            0x0;
+<a name="l00088"></a>00088 <span class="preprocessor">#else</span>
+<a name="l00089"></a>00089 <span class="preprocessor"></span>            0x1<<7;
+<a name="l00090"></a>00090 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00091"></a>00091 
+<a name="l00092"></a>00092     <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="l00093"></a>00093     <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="l00094"></a>00094 <span class="keyword">public</span>:
+<a name="l00095"></a>00095     <span class="keyword">enum</span> mode {
+<a name="l00097"></a>00097         parallel = current_version | <a class="code" href="a00282.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a>, 
+<a name="l00099"></a>00099         serial_in_order = current_version | <a class="code" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a>,
+<a name="l00101"></a>00101         serial_out_of_order = current_version | <a class="code" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a> | <a class="code" href="a00282.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a>,
+<a name="l00103"></a>00103         serial = serial_in_order
+<a name="l00104"></a>00104     };
+<a name="l00105"></a>00105 <span class="keyword">protected</span>:
+<a name="l00106"></a>00106     <a class="code" href="a00282.html">filter</a>( <span class="keywordtype">bool</span> is_serial_ ) : 
+<a name="l00107"></a>00107         next_filter_in_pipeline(not_in_pipeline()),
+<a name="l00108"></a>00108         my_input_buffer(NULL),
+<a name="l00109"></a>00109         my_filter_mode(static_cast<unsigned char>((is_serial_ ? serial : parallel) | <a class="code" href="a00282.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a>)),
+<a name="l00110"></a>00110         prev_filter_in_pipeline(not_in_pipeline()),
+<a name="l00111"></a>00111         my_pipeline(NULL),
+<a name="l00112"></a>00112         next_segment(NULL)
+<a name="l00113"></a>00113     {}
+<a name="l00114"></a>00114     
+<a name="l00115"></a>00115     filter( mode filter_mode ) :
+<a name="l00116"></a>00116         next_filter_in_pipeline(not_in_pipeline()),
+<a name="l00117"></a>00117         my_input_buffer(NULL),
+<a name="l00118"></a>00118         my_filter_mode(static_cast<unsigned char>(filter_mode | <a class="code" href="a00282.html#f17200974c33be21f42a5f00893de028">exact_exception_propagation</a>)),
+<a name="l00119"></a>00119         prev_filter_in_pipeline(not_in_pipeline()),
+<a name="l00120"></a>00120         my_pipeline(NULL),
+<a name="l00121"></a>00121         next_segment(NULL)
+<a name="l00122"></a>00122     {}
+<a name="l00123"></a>00123 
+<a name="l00124"></a>00124     <span class="comment">// signal end-of-input for concrete_filters</span>
+<a name="l00125"></a>00125     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD set_end_of_input();
+<a name="l00126"></a>00126 
+<a name="l00127"></a>00127 <span class="keyword">public</span>:
+<a name="l00129"></a><a class="code" href="a00282.html#fcfec27656a69ff2072802ac001e936f">00129</a>     <span class="keywordtype">bool</span> <a class="code" href="a00282.html#fcfec27656a69ff2072802ac001e936f">is_serial</a>()<span class="keyword"> const </span>{
+<a name="l00130"></a>00130         <span class="keywordflow">return</span> bool( my_filter_mode & <a class="code" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a> );
+<a name="l00131"></a>00131     }  
+<a name="l00132"></a>00132     
+<a name="l00134"></a><a class="code" href="a00282.html#cd53206c4795ef2df5df26b795caf692">00134</a>     <span class="keywordtype">bool</span> <a class="code" href="a00282.html#cd53206c4795ef2df5df26b795caf692">is_ordered</a>()<span class="keyword"> const </span>{
+<a name="l00135"></a>00135         <span class="keywordflow">return</span> (my_filter_mode & (<a class="code" href="a00282.html#2e5eb65f95d8050186278077e433c5b1">filter_is_out_of_order</a>|<a class="code" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a>))==<a class="code" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">filter_is_serial</a>;
+<a name="l00136"></a>00136     }
+<a name="l00137"></a>00137 
+<a name="l00139"></a><a class="code" href="a00282.html#15c29cae5d237e6d63dbfe5c94af89d5">00139</a>     <span class="keywordtype">bool</span> <a class="code" href="a00282.html#15c29cae5d237e6d63dbfe5c94af89d5">is_bound</a>()<span class="keyword"> const </span>{
+<a name="l00140"></a>00140         <span class="keywordflow">return</span> ( my_filter_mode & <a class="code" href="a00282.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter_is_bound</a> )==filter_is_bound;
+<a name="l00141"></a>00141     }
+<a name="l00142"></a>00142 
+<a name="l00144"></a><a class="code" href="a00282.html#8ec4dfe053e94a2349d56781ddea8477">00144</a>     <span class="keywordtype">bool</span> <a class="code" href="a00282.html#8ec4dfe053e94a2349d56781ddea8477">object_may_be_null</a>() { 
+<a name="l00145"></a>00145         <span class="keywordflow">return</span> ( my_filter_mode & <a class="code" href="a00282.html#bdd02a434a6e7499dd1e8f43aae96793">filter_may_emit_null</a> ) == filter_may_emit_null;
+<a name="l00146"></a>00146     }
+<a name="l00147"></a>00147 
+<a name="l00149"></a>00149 
+<a name="l00150"></a>00150     <span class="keyword">virtual</span> <span class="keywordtype">void</span>* <a class="code" href="a00282.html#fa1b3dc1f4f47563ccab7f4d92f5b543">operator()</a>( <span class="keywordtype">void</span>* item ) = 0;
+<a name="l00151"></a>00151 
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00282.html#66d159f362293e3964ba3da8bc1d2604">~filter</a>();
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00158"></a>00158 <span class="preprocessor"></span>
+<a name="l00160"></a><a class="code" href="a00282.html#56275eb889c77c4807967133e21401bd">00160</a> <span class="preprocessor">    virtual void finalize( void* </span><span class="comment">/*item*/</span> ) {};
+<a name="l00161"></a>00161 <span class="preprocessor">#endif</span>
+<a name="l00162"></a>00162 <span class="preprocessor"></span>
+<a name="l00163"></a>00163 <span class="keyword">private</span>:
+<a name="l00165"></a>00165     <a class="code" href="a00282.html">filter</a>* next_filter_in_pipeline;
+<a name="l00166"></a>00166 
+<a name="l00168"></a>00168     <span class="comment">//  (pipeline has not yet reached end_of_input or this filter has not yet</span>
+<a name="l00169"></a>00169     <span class="comment">//  seen the last token produced by input_filter)</span>
+<a name="l00170"></a>00170     <span class="keywordtype">bool</span> has_more_work();
+<a name="l00171"></a>00171 
+<a name="l00173"></a>00173 
+<a name="l00174"></a>00174     internal::input_buffer* my_input_buffer;
+<a name="l00175"></a>00175 
+<a name="l00176"></a>00176     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
+<a name="l00177"></a>00177     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
+<a name="l00178"></a>00178     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00310.html">pipeline</a>;
+<a name="l00179"></a>00179     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00348.html">thread_bound_filter</a>;
+<a name="l00180"></a>00180 
+<a name="l00182"></a>00182     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> my_filter_mode;
+<a name="l00183"></a>00183 
+<a name="l00185"></a>00185     <a class="code" href="a00282.html">filter</a>* prev_filter_in_pipeline;
+<a name="l00186"></a>00186 
+<a name="l00188"></a>00188     <a class="code" href="a00310.html">pipeline</a>* my_pipeline;
+<a name="l00189"></a>00189 
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192     <a class="code" href="a00282.html">filter</a>* next_segment;
+<a name="l00193"></a>00193 };
+<a name="l00194"></a>00194 
+<a name="l00196"></a>00196 
+<a name="l00197"></a><a class="code" href="a00348.html">00197</a> <span class="keyword">class </span><a class="code" href="a00348.html">thread_bound_filter</a>: <span class="keyword">public</span> <a class="code" href="a00282.html">filter</a> {
+<a name="l00198"></a>00198 <span class="keyword">public</span>:
+<a name="l00199"></a>00199     <span class="keyword">enum</span> result_type {
+<a name="l00200"></a>00200         <span class="comment">// item was processed</span>
+<a name="l00201"></a>00201         success,
+<a name="l00202"></a>00202         <span class="comment">// item is currently not available</span>
+<a name="l00203"></a>00203         item_not_available,
+<a name="l00204"></a>00204         <span class="comment">// there are no more items to process</span>
+<a name="l00205"></a>00205         end_of_stream
+<a name="l00206"></a>00206     };
+<a name="l00207"></a>00207 <span class="keyword">protected</span>:
+<a name="l00208"></a>00208     <a class="code" href="a00348.html">thread_bound_filter</a>(mode filter_mode): 
+<a name="l00209"></a>00209          <a class="code" href="a00282.html">filter</a>(static_cast<mode>(filter_mode | <a class="code" href="a00282.html#dd6a6e7210efc9bcaf2c5e08767d92b5">filter::filter_is_bound</a>))
+<a name="l00210"></a>00210     {}
+<a name="l00211"></a>00211 <span class="keyword">public</span>:
+<a name="l00213"></a>00213 
+<a name="l00218"></a>00218     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00348.html#c4f90f2c771bce748beb9be734fa286c">try_process_item</a>(); 
+<a name="l00219"></a>00219 
+<a name="l00221"></a>00221 
+<a name="l00225"></a>00225     result_type __TBB_EXPORTED_METHOD <a class="code" href="a00348.html#5e726bdc7fbd924c0b07bd558b1d4d5d">process_item</a>();
+<a name="l00226"></a>00226 
+<a name="l00227"></a>00227 <span class="keyword">private</span>:
+<a name="l00229"></a>00229     result_type internal_process_item(<span class="keywordtype">bool</span> is_blocking);
+<a name="l00230"></a>00230 };
+<a name="l00231"></a>00231 
+<a name="l00233"></a>00233 
+<a name="l00234"></a><a class="code" href="a00310.html">00234</a> <span class="keyword">class </span><a class="code" href="a00310.html">pipeline</a> {
+<a name="l00235"></a>00235 <span class="keyword">public</span>:
+<a name="l00237"></a>00237     __TBB_EXPORTED_METHOD <a class="code" href="a00310.html#596dc3beba27099c4c8581cb419e1a59">pipeline</a>();
+<a name="l00238"></a>00238 
+<a name="l00241"></a>00241     <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD <a class="code" href="a00310.html#49513c6c24f9d5bbbb27edca5efe01c9">~pipeline</a>();
+<a name="l00242"></a>00242 
+<a name="l00244"></a>00244     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00310.html#38fb5c9c8395dd6f89a4ae2011a83e0d">add_filter</a>( <a class="code" href="a00282.html">filter</a>& filter_ );
+<a name="l00245"></a>00245 
+<a name="l00247"></a>00247     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00310.html#f627616049b3fe36801f37ee40403ef8">run</a>( size_t max_number_of_live_tokens );
+<a name="l00248"></a>00248 
+<a name="l00249"></a>00249 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00251"></a>00251 <span class="preprocessor">    void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context& context );</span>
+<a name="l00252"></a>00252 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00253"></a>00253 <span class="preprocessor"></span>
+<a name="l00255"></a>00255     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00310.html#2c84aef5b834b555ee220b176e25931e">clear</a>();
+<a name="l00256"></a>00256 
+<a name="l00257"></a>00257 <span class="keyword">private</span>:
+<a name="l00258"></a>00258     <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
+<a name="l00259"></a>00259     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_root_task;
+<a name="l00260"></a>00260     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00282.html">filter</a>;
+<a name="l00261"></a>00261     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00348.html">thread_bound_filter</a>;
+<a name="l00262"></a>00262     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_cleaner;
+<a name="l00263"></a>00263     <span class="keyword">friend</span> <span class="keyword">class </span>tbb::interface6::internal::pipeline_proxy;
+<a name="l00264"></a>00264 
+<a name="l00266"></a>00266     <a class="code" href="a00282.html">filter</a>* filter_list;
+<a name="l00267"></a>00267 
+<a name="l00269"></a>00269     <a class="code" href="a00282.html">filter</a>* filter_end;
+<a name="l00270"></a>00270 
+<a name="l00272"></a>00272     <a class="code" href="a00337.html">task</a>* end_counter;
+<a name="l00273"></a>00273 
+<a name="l00275"></a>00275     <a class="code" href="a00254.html">atomic<internal::Token></a> input_tokens;
+<a name="l00276"></a>00276 
+<a name="l00278"></a>00278     <a class="code" href="a00254.html">atomic<internal::Token></a> token_counter;
+<a name="l00279"></a>00279 
+<a name="l00281"></a>00281     <span class="keywordtype">bool</span> end_of_input;
+<a name="l00282"></a>00282 
+<a name="l00284"></a>00284     <span class="keywordtype">bool</span> has_thread_bound_filters;
+<a name="l00285"></a>00285 
+<a name="l00287"></a>00287     <span class="keywordtype">void</span> remove_filter( <a class="code" href="a00282.html">filter</a>& filter_ );
+<a name="l00288"></a>00288 
+<a name="l00290"></a>00290     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD inject_token( <a class="code" href="a00337.html">task</a>& <span class="keyword">self</span> );
+<a name="l00291"></a>00291 
+<a name="l00292"></a>00292 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00294"></a>00294 <span class="preprocessor">    void clear_filters();</span>
+<a name="l00295"></a>00295 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00296"></a>00296 <span class="preprocessor"></span>};
+<a name="l00297"></a>00297 
+<a name="l00298"></a>00298 <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00299"></a>00299 <span class="comment">// Support for lambda-friendly parallel_pipeline interface</span>
+<a name="l00300"></a>00300 <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00301"></a>00301 
+<a name="l00302"></a>00302 <span class="keyword">namespace </span>interface6 {
+<a name="l00303"></a>00303 
+<a name="l00304"></a>00304 <span class="keyword">namespace </span>internal {
+<a name="l00305"></a>00305     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> Body> <span class="keyword">class </span>concrete_filter;
+<a name="l00306"></a>00306 }
+<a name="l00307"></a>00307 
+<a name="l00309"></a><a class="code" href="a00285.html">00309</a> <span class="keyword">class </span><a class="code" href="a00285.html">flow_control</a> {
+<a name="l00310"></a>00310     <span class="keywordtype">bool</span> is_pipeline_stopped;
+<a name="l00311"></a>00311     <a class="code" href="a00285.html">flow_control</a>() { is_pipeline_stopped = <span class="keyword">false</span>; }
+<a name="l00312"></a>00312     <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> Body> <span class="keyword">friend</span> <span class="keyword">class </span>internal::concrete_filter;
+<a name="l00313"></a>00313 <span class="keyword">public</span>:
+<a name="l00314"></a>00314     <span class="keywordtype">void</span> stop() { is_pipeline_stopped = <span class="keyword">true</span>; }
+<a name="l00315"></a>00315 };
+<a name="l00316"></a>00316 
+<a name="l00318"></a>00318 <span class="keyword">namespace </span>internal {
+<a name="l00319"></a>00319 
+<a name="l00320"></a>00320 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_large_object {<span class="keyword">enum</span> { value = <span class="keyword">sizeof</span>(T) > <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *) }; };
+<a name="l00321"></a>00321 
+<a name="l00322"></a>00322 <span class="preprocessor">#if TBB_IMPLEMENT_CPP0X</span>
+<a name="l00323"></a>00323 <span class="preprocessor"></span><span class="comment">// cannot use SFINAE in current compilers.  Explicitly list the types we wish to be</span>
+<a name="l00324"></a>00324 <span class="comment">// placed as-is in the pipeline input_buffers.</span>
+<a name="l00325"></a>00325 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_trivially_copyable { <span class="keyword">enum</span> { value = <span class="keyword">false</span> }; };
+<a name="l00326"></a>00326 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_trivially_copyable <T*> { <span class="keyword">enum</span> { value = <span class="keyword">true</span> }; };
+<a name="l00327"></a>00327 <span class="keyword">template</span><> <span class="keyword">struct </span>tbb_trivially_copyable <short> { <span class="keyword">enum</span> { value = <span class="keyword">true</span> }; };
+<a name="l00328"></a>00328 <span class="keyword">template</span><> <span class="keyword">struct </span>tbb_trivially_copyable <unsigned short> { <span class="keyword">enum</span> { value = <span class="keyword">true</span> }; };
+<a name="l00329"></a>00329 <span class="keyword">template</span><> <span class="keyword">struct </span>tbb_trivially_copyable <int> { <span class="keyword">enum</span> { value = !tbb_large_object<int>::value }; };
+<a name="l00330"></a>00330 <span class="keyword">template</span><> <span class="keyword">struct </span>tbb_trivially_copyable <unsigned int> { <span class="keyword">enum</span> { value = !tbb_large_object<int>::value }; };
+<a name="l00331"></a>00331 <span class="keyword">template</span><> <span class="keyword">struct </span>tbb_trivially_copyable <long> { <span class="keyword">enum</span> { value = !tbb_large_object<long>::value }; };
+<a name="l00332"></a>00332 <span class="keyword">template</span><> <span class="keyword">struct </span>tbb_trivially_copyable <unsigned long> { <span class="keyword">enum</span> { value = !tbb_large_object<long>::value }; };
+<a name="l00333"></a>00333 <span class="keyword">template</span><> <span class="keyword">struct </span>tbb_trivially_copyable <float> { <span class="keyword">enum</span> { value = !tbb_large_object<float>::value }; };
+<a name="l00334"></a>00334 <span class="keyword">template</span><> <span class="keyword">struct </span>tbb_trivially_copyable <double> { <span class="keyword">enum</span> { value = !tbb_large_object<double>::value }; };
+<a name="l00335"></a>00335 <span class="preprocessor">#else</span>
+<a name="l00336"></a>00336 <span class="preprocessor"></span><span class="preprocessor">#if __GNUC__==4 && __GNUC_MINOR__>=4 && __GXX_EXPERIMENTAL_CXX0X__</span>
+<a name="l00337"></a>00337 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_trivially_copyable { <span class="keyword">enum</span> { value = std::has_trivial_copy_constructor<T>::value }; };
+<a name="l00338"></a>00338 <span class="preprocessor">#else</span>
+<a name="l00339"></a>00339 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_trivially_copyable { <span class="keyword">enum</span> { value = std::is_trivially_copyable<T>::value }; };
+<a name="l00340"></a>00340 <span class="preprocessor">#endif //</span>
+<a name="l00341"></a>00341 <span class="preprocessor"></span><span class="preprocessor">#endif // __TBB_USE_CPP0X</span>
+<a name="l00342"></a>00342 <span class="preprocessor"></span>
+<a name="l00343"></a>00343 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>is_large_object {<span class="keyword">enum</span> { value = tbb_large_object<T>::value || !tbb_trivially_copyable<T>::value }; };
+<a name="l00344"></a>00344 
+<a name="l00345"></a>00345 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keywordtype">bool</span>> <span class="keyword">class </span>token_helper;
+<a name="l00346"></a>00346 
+<a name="l00347"></a>00347 <span class="comment">// large object helper (uses tbb_allocator)</span>
+<a name="l00348"></a>00348 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00349"></a>00349 <span class="keyword">class </span>token_helper<T, true> {
+<a name="l00350"></a>00350     <span class="keyword">public</span>:
+<a name="l00351"></a>00351     <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="a00343.html">tbb::tbb_allocator<T></a> allocator;
+<a name="l00352"></a>00352     <span class="keyword">typedef</span> T* pointer;
+<a name="l00353"></a>00353     <span class="keyword">typedef</span> T value_type;
+<a name="l00354"></a>00354     <span class="keyword">static</span> pointer create_token(<span class="keyword">const</span> value_type & source) {
+<a name="l00355"></a>00355         pointer output_t = allocator().allocate(1);
+<a name="l00356"></a>00356         <span class="keywordflow">return</span> <span class="keyword">new</span> (output_t) T(source);
+<a name="l00357"></a>00357     }
+<a name="l00358"></a>00358     <span class="keyword">static</span> value_type & token(pointer & t) { <span class="keywordflow">return</span> *t;}
+<a name="l00359"></a>00359     <span class="keyword">static</span> <span class="keywordtype">void</span> * cast_to_void_ptr(pointer ref) { <span class="keywordflow">return</span> (<span class="keywordtype">void</span> *) ref; }
+<a name="l00360"></a>00360     <span class="keyword">static</span> pointer cast_from_void_ptr(<span class="keywordtype">void</span> * ref) { <span class="keywordflow">return</span> (pointer)ref; }
+<a name="l00361"></a>00361     <span class="keyword">static</span> <span class="keywordtype">void</span> destroy_token(pointer token) {
+<a name="l00362"></a>00362         allocator().destroy(token);
+<a name="l00363"></a>00363         allocator().deallocate(token,1);
+<a name="l00364"></a>00364     }
+<a name="l00365"></a>00365 };
+<a name="l00366"></a>00366 
+<a name="l00367"></a>00367 <span class="comment">// pointer specialization</span>
+<a name="l00368"></a>00368 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00369"></a>00369 <span class="keyword">class </span>token_helper<T*, <span class="keyword">false</span> > {
+<a name="l00370"></a>00370     <span class="keyword">public</span>:
+<a name="l00371"></a>00371     <span class="keyword">typedef</span> T* pointer;
+<a name="l00372"></a>00372     <span class="keyword">typedef</span> T* value_type;
+<a name="l00373"></a>00373     <span class="keyword">static</span> pointer create_token(<span class="keyword">const</span> value_type & source) { <span class="keywordflow">return</span> source; }
+<a name="l00374"></a>00374     <span class="keyword">static</span> value_type & token(pointer & t) { <span class="keywordflow">return</span> t;}
+<a name="l00375"></a>00375     <span class="keyword">static</span> <span class="keywordtype">void</span> * cast_to_void_ptr(pointer ref) { <span class="keywordflow">return</span> (<span class="keywordtype">void</span> *)ref; }
+<a name="l00376"></a>00376     <span class="keyword">static</span> pointer cast_from_void_ptr(<span class="keywordtype">void</span> * ref) { <span class="keywordflow">return</span> (pointer)ref; }
+<a name="l00377"></a>00377     <span class="keyword">static</span> <span class="keywordtype">void</span> destroy_token( pointer <span class="comment">/*token*/</span>) {}
+<a name="l00378"></a>00378 };
+<a name="l00379"></a>00379 
+<a name="l00380"></a>00380 <span class="comment">// small object specialization (converts void* to the correct type, passes objects directly.)</span>
+<a name="l00381"></a>00381 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00382"></a>00382 <span class="keyword">class </span>token_helper<T, false> {
+<a name="l00383"></a>00383     <span class="keyword">typedef</span> <span class="keyword">union </span>{
+<a name="l00384"></a>00384         T actual_value;
+<a name="l00385"></a>00385         <span class="keywordtype">void</span> * void_overlay;
+<a name="l00386"></a>00386     } type_to_void_ptr_map;
+<a name="l00387"></a>00387     <span class="keyword">public</span>:
+<a name="l00388"></a>00388     <span class="keyword">typedef</span> T pointer;  <span class="comment">// not really a pointer in this case.</span>
+<a name="l00389"></a>00389     <span class="keyword">typedef</span> T value_type;
+<a name="l00390"></a>00390     <span class="keyword">static</span> pointer create_token(<span class="keyword">const</span> value_type & source) {
+<a name="l00391"></a>00391         <span class="keywordflow">return</span> source; }
+<a name="l00392"></a>00392     <span class="keyword">static</span> value_type & token(pointer & t) { <span class="keywordflow">return</span> t;}
+<a name="l00393"></a>00393     <span class="keyword">static</span> <span class="keywordtype">void</span> * cast_to_void_ptr(pointer ref) { 
+<a name="l00394"></a>00394         type_to_void_ptr_map mymap; 
+<a name="l00395"></a>00395         mymap.void_overlay = NULL;
+<a name="l00396"></a>00396         mymap.actual_value = ref; 
+<a name="l00397"></a>00397         <span class="keywordflow">return</span> mymap.void_overlay; 
+<a name="l00398"></a>00398     }
+<a name="l00399"></a>00399     <span class="keyword">static</span> pointer cast_from_void_ptr(<span class="keywordtype">void</span> * ref) { 
+<a name="l00400"></a>00400         type_to_void_ptr_map mymap;
+<a name="l00401"></a>00401         mymap.void_overlay = ref;
+<a name="l00402"></a>00402         <span class="keywordflow">return</span> mymap.actual_value;
+<a name="l00403"></a>00403     }
+<a name="l00404"></a>00404     <span class="keyword">static</span> <span class="keywordtype">void</span> destroy_token( pointer <span class="comment">/*token*/</span>) {}
+<a name="l00405"></a>00405 };
+<a name="l00406"></a>00406 
+<a name="l00407"></a>00407 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> Body>
+<a name="l00408"></a>00408 <span class="keyword">class </span>concrete_filter: <span class="keyword">public</span> tbb::filter {
+<a name="l00409"></a>00409     <span class="keyword">const</span> Body& my_body;
+<a name="l00410"></a>00410     <span class="keyword">typedef</span> token_helper<T,is_large_object<T>::value > t_helper;
+<a name="l00411"></a>00411     <span class="keyword">typedef</span> <span class="keyword">typename</span> t_helper::pointer t_pointer;
+<a name="l00412"></a>00412     <span class="keyword">typedef</span> token_helper<U,is_large_object<U>::value > u_helper;
+<a name="l00413"></a>00413     <span class="keyword">typedef</span> <span class="keyword">typename</span> u_helper::pointer u_pointer;
+<a name="l00414"></a>00414 
+<a name="l00415"></a>00415     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>* input) {
+<a name="l00416"></a>00416         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
+<a name="l00417"></a>00417         u_pointer output_u = u_helper::create_token(my_body(t_helper::token(temp_input)));
+<a name="l00418"></a>00418         t_helper::destroy_token(temp_input);
+<a name="l00419"></a>00419         <span class="keywordflow">return</span> u_helper::cast_to_void_ptr(output_u);
+<a name="l00420"></a>00420     }
+<a name="l00421"></a>00421 
+<a name="l00422"></a>00422 <span class="keyword">public</span>:
+<a name="l00423"></a>00423     concrete_filter(tbb::filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
+<a name="l00424"></a>00424 };
+<a name="l00425"></a>00425 
+<a name="l00426"></a>00426 <span class="comment">// input </span>
+<a name="l00427"></a>00427 <span class="keyword">template</span><<span class="keyword">typename</span> U, <span class="keyword">typename</span> Body>
+<a name="l00428"></a>00428 <span class="keyword">class </span>concrete_filter<void,U,Body>: <span class="keyword">public</span> filter {
+<a name="l00429"></a>00429     <span class="keyword">const</span> Body& my_body;
+<a name="l00430"></a>00430     <span class="keyword">typedef</span> token_helper<U, is_large_object<U>::value > u_helper;
+<a name="l00431"></a>00431     <span class="keyword">typedef</span> <span class="keyword">typename</span> u_helper::pointer u_pointer;
+<a name="l00432"></a>00432 
+<a name="l00433"></a>00433     <span class="comment">/*override*/</span><span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>*) {
+<a name="l00434"></a>00434         flow_control control;
+<a name="l00435"></a>00435         u_pointer output_u = u_helper::create_token(my_body(control));
+<a name="l00436"></a>00436         <span class="keywordflow">if</span>(control.is_pipeline_stopped) {
+<a name="l00437"></a>00437             u_helper::destroy_token(output_u);
+<a name="l00438"></a>00438             set_end_of_input();
+<a name="l00439"></a>00439             <span class="keywordflow">return</span> NULL;
+<a name="l00440"></a>00440         }
+<a name="l00441"></a>00441         <span class="keywordflow">return</span> u_helper::cast_to_void_ptr(output_u);
+<a name="l00442"></a>00442     }
+<a name="l00443"></a>00443 
+<a name="l00444"></a>00444 <span class="keyword">public</span>:
+<a name="l00445"></a>00445     concrete_filter(tbb::filter::mode filter_mode, <span class="keyword">const</span> Body& body) : 
+<a name="l00446"></a>00446         filter(static_cast<tbb::filter::mode>(filter_mode | filter_may_emit_null)),
+<a name="l00447"></a>00447         my_body(body)
+<a name="l00448"></a>00448     {}
+<a name="l00449"></a>00449 };
+<a name="l00450"></a>00450 
+<a name="l00451"></a>00451 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Body>
+<a name="l00452"></a>00452 <span class="keyword">class </span>concrete_filter<T,void,Body>: <span class="keyword">public</span> filter {
+<a name="l00453"></a>00453     <span class="keyword">const</span> Body& my_body;
+<a name="l00454"></a>00454     <span class="keyword">typedef</span> token_helper<T, is_large_object<T>::value > t_helper;
+<a name="l00455"></a>00455     <span class="keyword">typedef</span> <span class="keyword">typename</span> t_helper::pointer t_pointer;
+<a name="l00456"></a>00456    
+<a name="l00457"></a>00457     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>* input) {
+<a name="l00458"></a>00458         t_pointer temp_input = t_helper::cast_from_void_ptr(input);
+<a name="l00459"></a>00459         my_body(t_helper::token(temp_input));
+<a name="l00460"></a>00460         t_helper::destroy_token(temp_input);
+<a name="l00461"></a>00461         <span class="keywordflow">return</span> NULL;
+<a name="l00462"></a>00462     }
+<a name="l00463"></a>00463 <span class="keyword">public</span>:
+<a name="l00464"></a>00464     concrete_filter(tbb::filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
+<a name="l00465"></a>00465 };
+<a name="l00466"></a>00466 
+<a name="l00467"></a>00467 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00468"></a>00468 <span class="keyword">class </span>concrete_filter<void,void,Body>: <span class="keyword">public</span> filter {
+<a name="l00469"></a>00469     <span class="keyword">const</span> Body& my_body;
+<a name="l00470"></a>00470     
+<a name="l00472"></a>00472     <span class="comment">/*override*/</span> <span class="keywordtype">void</span>* operator()(<span class="keywordtype">void</span>*) {
+<a name="l00473"></a>00473         flow_control control;
+<a name="l00474"></a>00474         my_body(control);
+<a name="l00475"></a>00475         <span class="keywordtype">void</span>* output = control.is_pipeline_stopped ? NULL : (<span class="keywordtype">void</span>*)(intptr_t)-1; 
+<a name="l00476"></a>00476         <span class="keywordflow">return</span> output;
+<a name="l00477"></a>00477     }
+<a name="l00478"></a>00478 <span class="keyword">public</span>:
+<a name="l00479"></a>00479     concrete_filter(filter::mode filter_mode, <span class="keyword">const</span> Body& body) : filter(filter_mode), my_body(body) {}
+<a name="l00480"></a>00480 };
+<a name="l00481"></a>00481 
+<a name="l00483"></a>00483 
+<a name="l00484"></a>00484 <span class="keyword">class </span>pipeline_proxy {
+<a name="l00485"></a>00485     <a class="code" href="a00310.html">tbb::pipeline</a> my_pipe;
+<a name="l00486"></a>00486 <span class="keyword">public</span>:
+<a name="l00487"></a>00487     pipeline_proxy( <span class="keyword">const</span> filter_t<void,void>& filter_chain );
+<a name="l00488"></a>00488     ~pipeline_proxy() {
+<a name="l00489"></a>00489         <span class="keywordflow">while</span>( filter* f = my_pipe.filter_list ) 
+<a name="l00490"></a>00490             <span class="keyword">delete</span> f; <span class="comment">// filter destructor removes it from the pipeline</span>
+<a name="l00491"></a>00491     }
+<a name="l00492"></a>00492     <a class="code" href="a00310.html">tbb::pipeline</a>* operator->() { <span class="keywordflow">return</span> &my_pipe; }
+<a name="l00493"></a>00493 };
+<a name="l00494"></a>00494 
+<a name="l00496"></a>00496 
+<a name="l00497"></a>00497 <span class="keyword">class </span>filter_node: tbb::internal::no_copy {
+<a name="l00499"></a>00499     <a class="code" href="a00254.html">tbb::atomic<intptr_t></a> ref_count;
+<a name="l00500"></a>00500 <span class="keyword">protected</span>:
+<a name="l00501"></a>00501     filter_node() {
+<a name="l00502"></a>00502         ref_count = 0;
+<a name="l00503"></a>00503 <span class="preprocessor">#ifdef __TBB_TEST_FILTER_NODE_COUNT</span>
+<a name="l00504"></a>00504 <span class="preprocessor"></span>        ++(__TBB_TEST_FILTER_NODE_COUNT);
+<a name="l00505"></a>00505 <span class="preprocessor">#endif</span>
+<a name="l00506"></a>00506 <span class="preprocessor"></span>    }
+<a name="l00507"></a>00507 <span class="keyword">public</span>:
+<a name="l00509"></a>00509     <span class="keyword">virtual</span> <span class="keywordtype">void</span> add_to( pipeline& ) = 0;
+<a name="l00511"></a>00511     <span class="keywordtype">void</span> add_ref() {++ref_count;}
+<a name="l00513"></a>00513     <span class="keywordtype">void</span> remove_ref() {
+<a name="l00514"></a>00514         __TBB_ASSERT(ref_count>0,<span class="stringliteral">"ref_count underflow"</span>);
+<a name="l00515"></a>00515         <span class="keywordflow">if</span>( --ref_count==0 ) 
+<a name="l00516"></a>00516             <span class="keyword">delete</span> <span class="keyword">this</span>;
+<a name="l00517"></a>00517     }
+<a name="l00518"></a>00518     <span class="keyword">virtual</span> ~filter_node() {
+<a name="l00519"></a>00519 <span class="preprocessor">#ifdef __TBB_TEST_FILTER_NODE_COUNT</span>
+<a name="l00520"></a>00520 <span class="preprocessor"></span>        --(__TBB_TEST_FILTER_NODE_COUNT);
+<a name="l00521"></a>00521 <span class="preprocessor">#endif</span>
+<a name="l00522"></a>00522 <span class="preprocessor"></span>    }
+<a name="l00523"></a>00523 };
+<a name="l00524"></a>00524 
+<a name="l00526"></a>00526 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> Body>
+<a name="l00527"></a>00527 <span class="keyword">class </span>filter_node_leaf: <span class="keyword">public</span> filter_node  {
+<a name="l00528"></a>00528     <span class="keyword">const</span> tbb::filter::mode mode;
+<a name="l00529"></a>00529     <span class="keyword">const</span> Body body;
+<a name="l00530"></a>00530     <span class="comment">/*override*/</span><span class="keywordtype">void</span> add_to( pipeline& p ) {
+<a name="l00531"></a>00531         concrete_filter<T,U,Body>* f = <span class="keyword">new</span> concrete_filter<T,U,Body>(mode,body);
+<a name="l00532"></a>00532         p.add_filter( *f );
+<a name="l00533"></a>00533     }
+<a name="l00534"></a>00534 <span class="keyword">public</span>:
+<a name="l00535"></a>00535     filter_node_leaf( tbb::filter::mode m, <span class="keyword">const</span> Body& b ) : mode(m), body(b) {}
+<a name="l00536"></a>00536 };
+<a name="l00537"></a>00537 
+<a name="l00539"></a>00539 <span class="keyword">class </span>filter_node_join: <span class="keyword">public</span> filter_node {
+<a name="l00540"></a>00540     <span class="keyword">friend</span> <span class="keyword">class </span>filter_node; <span class="comment">// to suppress GCC 3.2 warnings</span>
+<a name="l00541"></a>00541     filter_node& left;
+<a name="l00542"></a>00542     filter_node& right;
+<a name="l00543"></a>00543     <span class="comment">/*override*/</span>~filter_node_join() {
+<a name="l00544"></a>00544        left.remove_ref();
+<a name="l00545"></a>00545        right.remove_ref();
+<a name="l00546"></a>00546     }
+<a name="l00547"></a>00547     <span class="comment">/*override*/</span><span class="keywordtype">void</span> add_to( pipeline& p ) {
+<a name="l00548"></a>00548         left.add_to(p);
+<a name="l00549"></a>00549         right.add_to(p);
+<a name="l00550"></a>00550     }
+<a name="l00551"></a>00551 <span class="keyword">public</span>:
+<a name="l00552"></a>00552     filter_node_join( filter_node& x, filter_node& y ) : left(x), right(y) {
+<a name="l00553"></a>00553        left.add_ref();
+<a name="l00554"></a>00554        right.add_ref();
+<a name="l00555"></a>00555     }
+<a name="l00556"></a>00556 };
+<a name="l00557"></a>00557 
+<a name="l00558"></a>00558 } <span class="comment">// namespace internal</span>
+<a name="l00560"></a>00560 <span class="comment"></span>
+<a name="l00562"></a>00562 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keyword">typename</span> Body>
+<a name="l00563"></a><a class="code" href="a00283.html#85c2892eff1fddcd06e28911e75838bd">00563</a> <a class="code" href="a00283.html">filter_t<T,U></a> make_filter(tbb::filter::mode mode, <span class="keyword">const</span> Body& body) {
+<a name="l00564"></a>00564     <span class="keywordflow">return</span> <span class="keyword">new</span> internal::filter_node_leaf<T,U,Body>(mode, body);
+<a name="l00565"></a>00565 }
+<a name="l00566"></a>00566 
+<a name="l00567"></a>00567 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> V, <span class="keyword">typename</span> U>
+<a name="l00568"></a>00568 <a class="code" href="a00283.html">filter_t<T,U></a> operator& (<span class="keyword">const</span> <a class="code" href="a00283.html">filter_t<T,V></a>& left, <span class="keyword">const</span> <a class="code" href="a00283.html">filter_t<V,U></a>& right) {
+<a name="l00569"></a>00569     __TBB_ASSERT(left.<a class="code" href="a00283.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>,<span class="stringliteral">"cannot use default-constructed filter_t as left argument of '&'"</span>);
+<a name="l00570"></a>00570     __TBB_ASSERT(right.<a class="code" href="a00283.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>,<span class="stringliteral">"cannot use default-constructed filter_t as right argument of '&'"</span>);
+<a name="l00571"></a>00571     <span class="keywordflow">return</span> <span class="keyword">new</span> internal::filter_node_join(*left.<a class="code" href="a00283.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>,*right.<a class="code" href="a00283.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>);
+<a name="l00572"></a>00572 }
+<a name="l00573"></a>00573 
+<a name="l00575"></a>00575 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00576"></a><a class="code" href="a00283.html">00576</a> <span class="keyword">class </span><a class="code" href="a00283.html">filter_t</a> {
+<a name="l00577"></a>00577     <span class="keyword">typedef</span> internal::filter_node filter_node;
+<a name="l00578"></a>00578     filter_node* root;
+<a name="l00579"></a>00579     <a class="code" href="a00283.html">filter_t</a>( filter_node* root_ ) : root(root_) {
+<a name="l00580"></a>00580         root->add_ref();
+<a name="l00581"></a>00581     }
+<a name="l00582"></a>00582     <span class="keyword">friend</span> <span class="keyword">class </span>internal::pipeline_proxy;
+<a name="l00583"></a>00583     <span class="keyword">template</span><<span class="keyword">typename</span> T_, <span class="keyword">typename</span> U_, <span class="keyword">typename</span> Body>
+<a name="l00584"></a>00584     <span class="keyword">friend</span> <a class="code" href="a00283.html">filter_t<T_,U_></a> <a class="code" href="a00283.html#85c2892eff1fddcd06e28911e75838bd">make_filter</a>(tbb::filter::mode, <span class="keyword">const</span> Body& );
+<a name="l00585"></a>00585     <span class="keyword">template</span><<span class="keyword">typename</span> T_, <span class="keyword">typename</span> V_, <span class="keyword">typename</span> U_>
+<a name="l00586"></a>00586     <span class="keyword">friend</span> <a class="code" href="a00283.html">filter_t<T_,U_></a> operator& (<span class="keyword">const</span> <a class="code" href="a00283.html">filter_t<T_,V_></a>& , <span class="keyword">const</span> <a class="code" href="a00283.html">filter_t<V_,U_></a>& );
+<a name="l00587"></a>00587 <span class="keyword">public</span>:
+<a name="l00588"></a>00588     <a class="code" href="a00283.html">filter_t</a>() : root(NULL) {}
+<a name="l00589"></a>00589     <a class="code" href="a00283.html">filter_t</a>( <span class="keyword">const</span> <a class="code" href="a00283.html">filter_t<T,U></a>& rhs ) : root(rhs.<a class="code" href="a00283.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>) {
+<a name="l00590"></a>00590         <span class="keywordflow">if</span>( root ) root->add_ref();
+<a name="l00591"></a>00591     }
+<a name="l00592"></a>00592     <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00593"></a>00593     <a class="code" href="a00283.html">filter_t</a>( tbb::filter::mode mode, <span class="keyword">const</span> Body& body ) :
+<a name="l00594"></a>00594         root( <span class="keyword">new</span> internal::filter_node_leaf<T,U,Body>(mode, body) ) {
+<a name="l00595"></a>00595         root->add_ref();
+<a name="l00596"></a>00596     }
+<a name="l00597"></a>00597 
+<a name="l00598"></a>00598     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00283.html">filter_t<T,U></a>& rhs ) {
+<a name="l00599"></a>00599         <span class="comment">// Order of operations below carefully chosen so that reference counts remain correct</span>
+<a name="l00600"></a>00600         <span class="comment">// in unlikely event that remove_ref throws exception.</span>
+<a name="l00601"></a>00601         filter_node* old = root;
+<a name="l00602"></a>00602         root = rhs.<a class="code" href="a00283.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>; 
+<a name="l00603"></a>00603         <span class="keywordflow">if</span>( root ) root->add_ref();
+<a name="l00604"></a>00604         <span class="keywordflow">if</span>( old ) old->remove_ref();
+<a name="l00605"></a>00605     }
+<a name="l00606"></a>00606     ~<a class="code" href="a00283.html">filter_t</a>() {
+<a name="l00607"></a>00607         <span class="keywordflow">if</span>( root ) root->remove_ref();
+<a name="l00608"></a>00608     }
+<a name="l00609"></a>00609     <span class="keywordtype">void</span> clear() {
+<a name="l00610"></a>00610         <span class="comment">// Like operator= with filter_t() on right side.</span>
+<a name="l00611"></a>00611         <span class="keywordflow">if</span>( root ) {
+<a name="l00612"></a>00612             filter_node* old = root;
+<a name="l00613"></a>00613             root = NULL;
+<a name="l00614"></a>00614             old->remove_ref();
+<a name="l00615"></a>00615         }
+<a name="l00616"></a>00616     }
+<a name="l00617"></a>00617 };
+<a name="l00618"></a>00618 
+<a name="l00619"></a>00619 <span class="keyword">inline</span> internal::pipeline_proxy::pipeline_proxy( <span class="keyword">const</span> <a class="code" href="a00283.html">filter_t<void,void></a>& filter_chain ) : my_pipe() {
+<a name="l00620"></a>00620     __TBB_ASSERT( filter_chain.<a class="code" href="a00283.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>, <span class="stringliteral">"cannot apply parallel_pipeline to default-constructed filter_t"</span>  );
+<a name="l00621"></a>00621     filter_chain.<a class="code" href="a00283.html#756d88b0cb01ed3cb9af741c1c4bed52">root</a>->add_to(my_pipe);
+<a name="l00622"></a>00622 }
+<a name="l00623"></a>00623 
+<a name="l00624"></a>00624 <span class="keyword">inline</span> <span class="keywordtype">void</span> parallel_pipeline(size_t max_number_of_live_tokens, <span class="keyword">const</span> <a class="code" href="a00283.html">filter_t<void,void></a>& filter_chain
+<a name="l00625"></a>00625 #<span class="keywordflow">if</span> __TBB_TASK_GROUP_CONTEXT
+<a name="l00626"></a>00626     , <a class="code" href="a00339.html">tbb::task_group_context</a>& context
+<a name="l00627"></a>00627 #endif
+<a name="l00628"></a>00628     ) {
+<a name="l00629"></a>00629     internal::pipeline_proxy pipe(filter_chain);
+<a name="l00630"></a>00630     <span class="comment">// tbb::pipeline::run() is called via the proxy</span>
+<a name="l00631"></a>00631     pipe->run(max_number_of_live_tokens
+<a name="l00632"></a>00632 #<span class="keywordflow">if</span> __TBB_TASK_GROUP_CONTEXT
+<a name="l00633"></a>00633               , context
+<a name="l00634"></a>00634 #endif
+<a name="l00635"></a>00635     );
+<a name="l00636"></a>00636 }
+<a name="l00637"></a>00637 
+<a name="l00638"></a>00638 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00639"></a>00639 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> parallel_pipeline(size_t max_number_of_live_tokens, <span class="keyword">const</span> filter_t<void,void>& filter_chain) {
+<a name="l00640"></a>00640     <a class="code" href="a00339.html">tbb::task_group_context</a> context;
+<a name="l00641"></a>00641     parallel_pipeline(max_number_of_live_tokens, filter_chain, context);
+<a name="l00642"></a>00642 }
+<a name="l00643"></a>00643 <span class="preprocessor">#endif // __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00644"></a>00644 <span class="preprocessor"></span>
+<a name="l00645"></a>00645 } <span class="comment">// interface6</span>
+<a name="l00646"></a>00646 
+<a name="l00647"></a>00647 <span class="keyword">using</span> interface6::flow_control;
+<a name="l00648"></a>00648 <span class="keyword">using</span> interface6::filter_t;
+<a name="l00649"></a>00649 <span class="keyword">using</span> interface6::make_filter;
+<a name="l00650"></a>00650 <span class="keyword">using</span> interface6::parallel_pipeline;
+<a name="l00651"></a>00651 
+<a name="l00652"></a>00652 } <span class="comment">// tbb</span>
+<a name="l00653"></a>00653 
+<a name="l00654"></a>00654 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_pipeline_H */</span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00588.html b/doc/html/a00588.html
deleted file mode 100644
index ee303d1..0000000
--- a/doc/html/a00588.html
+++ /dev/null
@@ -1,212 +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_allocator.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_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-2011 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_allocator_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_allocator_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 <new></span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
-<a name="l00029"></a>00029 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cstring></span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</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="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="l00045"></a>00045 
-<a name="l00046"></a>00046     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC deallocate_via_handler_v3( <span class="keywordtype">void</span> *p );
-<a name="l00047"></a>00047 
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n );
-<a name="l00051"></a>00051 
-<a name="l00053"></a>00053     <span class="keywordtype">bool</span> __TBB_EXPORTED_FUNC is_malloc_used_v3();
-<a name="l00054"></a>00054 }
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
-<a name="l00059"></a>00059 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span>
-<a name="l00064"></a>00064 
-<a name="l00069"></a>00069 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00070"></a><a class="code" href="a00317.html">00070</a> <span class="keyword">class </span><a class="code" href="a00317.html">tbb_allocator</a> {
-<a name="l00071"></a>00071 <span class="keyword">public</span>:
-<a name="l00072"></a>00072     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type<T>::value_type value_type;
-<a name="l00073"></a>00073     <span class="keyword">typedef</span> value_type* pointer;
-<a name="l00074"></a>00074     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
-<a name="l00075"></a>00075     <span class="keyword">typedef</span> value_type& reference;
-<a name="l00076"></a>00076     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference;
-<a name="l00077"></a>00077     <span class="keyword">typedef</span> size_t size_type;
-<a name="l00078"></a>00078     <span class="keyword">typedef</span> ptrdiff_t difference_type;
-<a name="l00079"></a>00079     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00080"></a>00080         <span class="keyword">typedef</span> <a class="code" href="a00317.html">tbb_allocator<U></a> other;
-<a name="l00081"></a>00081     };
-<a name="l00082"></a>00082 
-<a name="l00084"></a><a class="code" href="a00317.html#09a7f81fb2c3055aaecf058b11538544">00084</a>     <span class="keyword">enum</span> <a class="code" href="a00317.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> {
-<a name="l00085"></a>00085         scalable, 
-<a name="l00086"></a>00086         standard
-<a name="l00087"></a>00087     };
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089     <a class="code" href="a00317.html">tbb_allocator</a>() throw() {}
-<a name="l00090"></a>00090     tbb_allocator( <span class="keyword">const</span> tbb_allocator& ) throw() {}
-<a name="l00091"></a>00091     <span class="keyword">template</span><<span class="keyword">typename</span> U> tbb_allocator(<span class="keyword">const</span> tbb_allocator<U>&) throw() {}
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-<a name="l00094"></a>00094     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-<a name="l00095"></a>00095     
-<a name="l00097"></a><a class="code" href="a00317.html#f6cb487b1bdce0b581f265a77dca6d53">00097</a>     pointer <a class="code" href="a00317.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="l00098"></a>00098         <span class="keywordflow">return</span> pointer(internal::allocate_via_handler_v3( n * <span class="keyword">sizeof</span>(value_type) ));
-<a name="l00099"></a>00099     }
-<a name="l00100"></a>00100 
-<a name="l00102"></a><a class="code" href="a00317.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">00102</a>     <span class="keywordtype">void</span> <a class="code" href="a00317.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>( pointer p, size_type ) {
-<a name="l00103"></a>00103         internal::deallocate_via_handler_v3(p);        
-<a name="l00104"></a>00104     }
-<a name="l00105"></a>00105 
-<a name="l00107"></a><a class="code" href="a00317.html#f059ca2c96243024f0d562ee3a87a3a5">00107</a>     size_type <a class="code" href="a00317.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const throw() {
-<a name="l00108"></a>00108         size_type max = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (value_type);
-<a name="l00109"></a>00109         <span class="keywordflow">return</span> (max > 0 ? max : 1);
-<a name="l00110"></a>00110     }
-<a name="l00111"></a>00111     
-<a name="l00113"></a><a class="code" href="a00317.html#ab228ab9e324ed041c2226e1d717df5f">00113</a>     <span class="keywordtype">void</span> <a class="code" href="a00317.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="l00114"></a>00114 
-<a name="l00116"></a><a class="code" href="a00317.html#ef133522bf55f05a605bee0763208281">00116</a>     <span class="keywordtype">void</span> <a class="code" href="a00317.html#ef133522bf55f05a605bee0763208281">destroy</a>( pointer p ) {p->~value_type();}
-<a name="l00117"></a>00117 
-<a name="l00119"></a><a class="code" href="a00317.html#78701e7454ef8e1a25b5acd364367080">00119</a>     <span class="keyword">static</span> <a class="code" href="a00317.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> <a class="code" href="a00317.html#78701e7454ef8e1a25b5acd364367080">allocator_type</a>() {
-<a name="l00120"></a>00120         <span class="keywordflow">return</span> internal::is_malloc_used_v3() ? standard : scalable;
-<a name="l00121"></a>00121     }
-<a name="l00122"></a>00122 };
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
-<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span>
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130 <span class="keyword">template</span><> 
-<a name="l00131"></a><a class="code" href="a00318.html">00131</a> <span class="keyword">class </span><a class="code" href="a00317.html">tbb_allocator</a><void> {
-<a name="l00132"></a>00132 <span class="keyword">public</span>:
-<a name="l00133"></a>00133     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
-<a name="l00134"></a>00134     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
-<a name="l00135"></a>00135     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
-<a name="l00136"></a>00136     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00137"></a>00137         <span class="keyword">typedef</span> <a class="code" href="a00317.html">tbb_allocator<U></a> other;
-<a name="l00138"></a>00138     };
-<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">typename</span> U>
-<a name="l00142"></a>00142 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00317.html">tbb_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00317.html">tbb_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00145"></a>00145 <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="l00146"></a>00146 
-<a name="l00148"></a>00148 
-<a name="l00153"></a>00153 <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="l00154"></a><a class="code" href="a00326.html">00154</a> <span class="keyword">class </span><a class="code" href="a00326.html">zero_allocator</a> : <span class="keyword">public</span> Allocator<T>
-<a name="l00155"></a>00155 {
-<a name="l00156"></a>00156 <span class="keyword">public</span>:
-<a name="l00157"></a>00157     <span class="keyword">typedef</span> Allocator<T> base_allocator_type;
-<a name="l00158"></a>00158     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::value_type value_type;
-<a name="l00159"></a>00159     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::pointer pointer;
-<a name="l00160"></a>00160     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::const_pointer const_pointer;
-<a name="l00161"></a>00161     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::reference reference;
-<a name="l00162"></a>00162     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::const_reference const_reference;
-<a name="l00163"></a>00163     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::size_type size_type;
-<a name="l00164"></a>00164     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::difference_type difference_type;
-<a name="l00165"></a>00165     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00166"></a>00166         <span class="keyword">typedef</span> <a class="code" href="a00326.html">zero_allocator<U, Allocator></a> other;
-<a name="l00167"></a>00167     };
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     <a class="code" href="a00326.html">zero_allocator</a>() <span class="keywordflow">throw</span>() { }
-<a name="l00170"></a>00170     <a class="code" href="a00326.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00326.html">zero_allocator</a> &a) <span class="keywordflow">throw</span>() : base_allocator_type( a ) { }
-<a name="l00171"></a>00171     <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00172"></a>00172     <a class="code" href="a00326.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00326.html">zero_allocator<U></a> &a) <span class="keywordflow">throw</span>() : base_allocator_type( Allocator<U>( a ) ) { }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174     pointer allocate(<span class="keyword">const</span> size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span> *hint = 0 ) {
-<a name="l00175"></a>00175         pointer ptr = base_allocator_type::allocate( n, hint );
-<a name="l00176"></a>00176         std::memset( ptr, 0, n * <span class="keyword">sizeof</span>(value_type) );
-<a name="l00177"></a>00177         <span class="keywordflow">return</span> ptr;
-<a name="l00178"></a>00178     }
-<a name="l00179"></a>00179 };
-<a name="l00180"></a>00180 
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183 <span class="keyword">template</span><<span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>Allocator> 
-<a name="l00184"></a><a class="code" href="a00327.html">00184</a> <span class="keyword">class </span><a class="code" href="a00326.html">zero_allocator</a><void, Allocator> : <span class="keyword">public</span> Allocator<void> {
-<a name="l00185"></a>00185 <span class="keyword">public</span>:
-<a name="l00186"></a>00186     <span class="keyword">typedef</span> Allocator<void> base_allocator_type;
-<a name="l00187"></a>00187     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::value_type value_type;
-<a name="l00188"></a>00188     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::pointer pointer;
-<a name="l00189"></a>00189     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::const_pointer const_pointer;
-<a name="l00190"></a>00190     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-<a name="l00191"></a>00191         <span class="keyword">typedef</span> <a class="code" href="a00326.html">zero_allocator<U, Allocator></a> other;
-<a name="l00192"></a>00192     };
-<a name="l00193"></a>00193 };
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195 <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="l00196"></a>00196 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00326.html">zero_allocator<T1,B1></a> &a, <span class="keyword">const</span> <a class="code" href="a00326.html">zero_allocator<T2,B2></a> &b) {
-<a name="l00197"></a>00197     <span class="keywordflow">return</span> static_cast< B1<T1> >(a) == <span class="keyword">static_cast</span>< B2<T2> >(b);
-<a name="l00198"></a>00198 }
-<a name="l00199"></a>00199 <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="l00200"></a>00200 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> zero_allocator<T1,B1> &a, <span class="keyword">const</span> zero_allocator<T2,B2> &b) {
-<a name="l00201"></a>00201     <span class="keywordflow">return</span> static_cast< B1<T1> >(a) != <span class="keyword">static_cast</span>< B2<T2> >(b);
-<a name="l00202"></a>00202 }
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 } <span class="comment">// namespace tbb </span>
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_allocator_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00592.html b/doc/html/a00592.html
deleted file mode 100644
index 77b4a3d..0000000
--- a/doc/html/a00592.html
+++ /dev/null
@@ -1,253 +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-2011 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="l00032"></a>00032 <span class="preprocessor">#define __TBB_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#if (__TBB_GCC_VERSION >= 40400) && !defined(__INTEL_COMPILER)</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span>
-<a name="l00038"></a>00038 <span class="preprocessor">    #define __TBB_GCC_WARNING_SUPPRESSION_PRESENT 1</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="comment">/* TODO: The following condition should be extended when new compilers/runtimes </span>
-<a name="l00042"></a>00042 <span class="comment">         with std::exception_ptr support appear. */</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#define __TBB_EXCEPTION_PTR_PRESENT  ((_MSC_VER >= 1600 || (__GXX_EXPERIMENTAL_CXX0X__ && __GNUC__==4 && __GNUC_MINOR__>=4)) && !__INTEL_COMPILER)</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC || __IBMCPP__</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>    <span class="comment">/* ICC defines __GNUC__ and so is covered */</span>
-<a name="l00047"></a>00047 <span class="preprocessor">    #define __TBB_ATTRIBUTE_ALIGNED_PRESENT 1</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#elif _MSC_VER && (_MSC_VER >= 1300 || __INTEL_COMPILER)</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DECLSPEC_ALIGN_PRESENT 1</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#if (__TBB_GCC_VERSION >= 40102) && !defined(__INTEL_COMPILER)</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>
-<a name="l00054"></a>00054 <span class="preprocessor">    #define __TBB_GCC_BUILTIN_ATOMICS_PRESENT 1</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#ifndef TBB_USE_DEBUG</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG TBB_DO_ASSERT</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">#ifdef _DEBUG</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG _DEBUG</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG 0</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-<a name="l00069"></a>00069 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="preprocessor">#ifndef TBB_USE_ASSERT</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_DO_ASSERT</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#else </span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_USE_DEBUG</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</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 <span class="preprocessor">#ifndef TBB_USE_THREADING_TOOLS</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_THREADING_TOOLS</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_DO_THREADING_TOOLS</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#else </span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS */</span>
-<a name="l00085"></a>00085 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="preprocessor">#ifndef TBB_USE_PERFORMANCE_WARNINGS</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_PERFORMANCE_WARNINGS</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#else </span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_PEFORMANCE_WARNINGS */</span>
-<a name="l00093"></a>00093 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_PERFORMANCE_WARNINGS */</span>
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="preprocessor">#if !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC) || defined(_XBOX)</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">    #if TBB_USE_EXCEPTIONS</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">        #error Compilation settings do not support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">    #elif !defined(TBB_USE_EXCEPTIONS)</span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_EXCEPTIONS 0</span>
-<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#elif !defined(TBB_USE_EXCEPTIONS)</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">    #define TBB_USE_EXCEPTIONS 1</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span>
-<a name="l00105"></a>00105 <span class="preprocessor">#ifndef TBB_IMPLEMENT_CPP0X</span>
-<a name="l00106"></a>00106 <span class="preprocessor"></span>
-<a name="l00107"></a>00107 <span class="preprocessor">    #if __GNUC__==4 && __GNUC_MINOR__>=4 && __GXX_EXPERIMENTAL_CXX0X__</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_IMPLEMENT_CPP0X 0</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_IMPLEMENT_CPP0X 1</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_IMPLEMENT_CPP0X */</span>
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 <span class="preprocessor">#ifndef TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_EXCEPTION_PTR_PRESENT</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 0</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 1</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00121"></a>00121 <span class="preprocessor">    #if !TBB_USE_CAPTURED_EXCEPTION && !__TBB_EXCEPTION_PTR_PRESENT</span>
-<a name="l00122"></a>00122 <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="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00125"></a>00125 
-<a name="l00127"></a>00127 <span class="preprocessor">#if (TBB_USE_GCC_BUILTINS && !__TBB_GCC_BUILTIN_ATOMICS_PRESENT)</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span><span class="preprocessor">    #error "GCC atomic built-ins are not supported."</span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00130"></a>00130 <span class="preprocessor"></span>
-<a name="l00133"></a>00133 <span class="preprocessor">#ifndef __TBB_DYNAMIC_LOAD_ENABLED</span>
-<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DYNAMIC_LOAD_ENABLED !__TBB_TASK_CPP_DIRECTLY_INCLUDED</span>
-<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#elif !__TBB_DYNAMIC_LOAD_ENABLED</span>
-<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">    #if _WIN32||_WIN64</span>
-<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_NO_IMPLICIT_LINKAGE 1</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span><span class="preprocessor">        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1</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_WEAK_SYMBOLS 1</span>
-<a name="l00141"></a>00141 <span class="preprocessor"></span><span class="preprocessor">    #endif</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">#ifndef __TBB_COUNT_TASK_NODES</span>
-<a name="l00145"></a>00145 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_COUNT_TASK_NODES TBB_USE_ASSERT</span>
-<a name="l00146"></a>00146 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00147"></a>00147 <span class="preprocessor"></span>
-<a name="l00148"></a>00148 <span class="preprocessor">#ifndef __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00149"></a>00149 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_TASK_GROUP_CONTEXT 1</span>
-<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 <span class="preprocessor">#if TBB_USE_EXCEPTIONS && !__TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00153"></a>00153 <span class="preprocessor"></span><span class="preprocessor">    #error TBB_USE_EXCEPTIONS requires __TBB_TASK_GROUP_CONTEXT to be enabled</span>
-<a name="l00154"></a>00154 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00155"></a>00155 <span class="preprocessor"></span>
-<a name="l00156"></a>00156 <span class="preprocessor">#ifndef __TBB_SCHEDULER_OBSERVER</span>
-<a name="l00157"></a>00157 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_SCHEDULER_OBSERVER 1</span>
-<a name="l00158"></a>00158 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 <span class="preprocessor">#ifndef __TBB_TASK_PRIORITY</span>
-<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_TASK_PRIORITY __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00162"></a>00162 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 <span class="preprocessor">#if __TBB_TASK_PRIORITY && !__TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00165"></a>00165 <span class="preprocessor"></span><span class="preprocessor">    #error __TBB_TASK_PRIORITY requires __TBB_TASK_GROUP_CONTEXT to be enabled</span>
-<a name="l00166"></a>00166 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00167"></a>00167 <span class="preprocessor"></span>
-<a name="l00168"></a>00168 <span class="preprocessor">#if !defined(__TBB_SURVIVE_THREAD_SWITCH) && (_WIN32 || _WIN64 || __linux__)</span>
-<a name="l00169"></a>00169 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_SURVIVE_THREAD_SWITCH 1</span>
-<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SURVIVE_THREAD_SWITCH */</span>
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 <span class="preprocessor">#ifndef __TBB_DEFAULT_PARTITIONER</span>
-<a name="l00173"></a>00173 <span class="preprocessor"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
-<a name="l00174"></a>00174 <span class="preprocessor"></span>
-<a name="l00175"></a>00175 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::simple_partitioner</span>
-<a name="l00176"></a>00176 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00177"></a>00177 <span class="preprocessor"></span>
-<a name="l00178"></a>00178 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::auto_partitioner</span>
-<a name="l00179"></a>00179 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEPRECATED */</span>
-<a name="l00180"></a>00180 <span class="preprocessor">#endif </span><span class="comment">/* !defined(__TBB_DEFAULT_PARTITIONER */</span>
-<a name="l00181"></a>00181 
-<a name="l00188"></a>00188 <span class="preprocessor">#if __GNUC__ && __TBB_x86_64 && __INTEL_COMPILER == 1200</span>
-<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_ICC_12_0_INL_ASM_FSTCW_BROKEN 1</span>
-<a name="l00190"></a>00190 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00191"></a>00191 <span class="preprocessor"></span>
-<a name="l00192"></a>00192 <span class="preprocessor">#if _MSC_VER && __INTEL_COMPILER && (__INTEL_COMPILER<1110 || __INTEL_COMPILER==1110 && __INTEL_COMPILER_BUILD_DATE < 20091012)</span>
-<a name="l00193"></a>00193 <span class="preprocessor"></span>
-<a name="l00196"></a>00196 <span class="preprocessor">    #define __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN 1</span>
-<a name="l00197"></a>00197 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00198"></a>00198 <span class="preprocessor"></span>
-<a name="l00199"></a>00199 <span class="preprocessor">#if defined(_MSC_VER) && _MSC_VER < 1500 && !defined(__INTEL_COMPILER)</span>
-<a name="l00200"></a>00200 <span class="preprocessor"></span>
-<a name="l00202"></a>00202 <span class="preprocessor">    #define __TBB_TEMPLATE_FRIENDS_BROKEN 1</span>
-<a name="l00203"></a>00203 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00204"></a>00204 <span class="preprocessor"></span>
-<a name="l00205"></a>00205 <span class="preprocessor">#if __GLIBC__==2 && __GLIBC_MINOR__==3 || __MINGW32__ || (__APPLE__ && __INTEL_COMPILER==1200 && !TBB_USE_DEBUG)</span>
-<a name="l00207"></a>00207 <span class="preprocessor"></span>
-<a name="l00208"></a>00208 <span class="preprocessor">    #define __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN 1</span>
-<a name="l00209"></a>00209 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00210"></a>00210 <span class="preprocessor"></span>
-<a name="l00211"></a>00211 <span class="preprocessor">#if (_WIN32||_WIN64) && __INTEL_COMPILER == 1110</span>
-<a name="l00212"></a>00212 <span class="preprocessor"></span>
-<a name="l00213"></a>00213 <span class="preprocessor">    #define __TBB_ICL_11_1_CODE_GEN_BROKEN 1</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="l00216"></a>00216 <span class="preprocessor">#if __GNUC__==3 && __GNUC_MINOR__==3 && !defined(__INTEL_COMPILER)</span>
-<a name="l00217"></a>00217 <span class="preprocessor"></span>
-<a name="l00218"></a>00218 <span class="preprocessor">    #define __TBB_GCC_3_3_PROTECTED_BROKEN 1</span>
-<a name="l00219"></a>00219 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00220"></a>00220 <span class="preprocessor"></span>
-<a name="l00221"></a>00221 <span class="preprocessor">#if __MINGW32__ && (__GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<2)</span>
-<a name="l00222"></a>00222 <span class="preprocessor"></span>
-<a name="l00224"></a>00224 <span class="preprocessor">    #define __TBB_SSE_STACK_ALIGNMENT_BROKEN 1</span>
-<a name="l00225"></a>00225 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00226"></a>00226 <span class="preprocessor"></span>
-<a name="l00227"></a>00227 <span class="preprocessor">#if __GNUC__==4 && __GNUC_MINOR__==3 && __GNUC_PATCHLEVEL__==0</span>
-<a name="l00228"></a>00228 <span class="preprocessor"></span>    <span class="comment">// GCC of this version may rashly ignore control dependencies</span>
-<a name="l00229"></a>00229 <span class="preprocessor">    #define __TBB_GCC_OPTIMIZER_ORDERING_BROKEN 1</span>
-<a name="l00230"></a>00230 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00231"></a>00231 <span class="preprocessor"></span>
-<a name="l00232"></a>00232 <span class="preprocessor">#if __FreeBSD__</span>
-<a name="l00233"></a>00233 <span class="preprocessor"></span>
-<a name="l00235"></a>00235 <span class="preprocessor">    #define __TBB_PRIO_INHERIT_BROKEN 1</span>
-<a name="l00236"></a>00236 <span class="preprocessor"></span>
-<a name="l00239"></a>00239 <span class="preprocessor">    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1</span>
-<a name="l00240"></a>00240 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __FreeBSD__ */</span>
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 <span class="preprocessor">#if (__linux__ || __APPLE__) && __i386__ && defined(__INTEL_COMPILER)</span>
-<a name="l00243"></a>00243 <span class="preprocessor"></span>
-<a name="l00245"></a>00245 <span class="preprocessor">    #define __TBB_ICC_ASM_VOLATILE_BROKEN 1</span>
-<a name="l00246"></a>00246 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00247"></a>00247 <span class="preprocessor"></span>
-<a name="l00248"></a>00248 <span class="preprocessor">#if !__INTEL_COMPILER && (_MSC_VER || __GNUC__==3 && __GNUC_MINOR__<=2)</span>
-<a name="l00249"></a>00249 <span class="preprocessor"></span>
-<a name="l00251"></a>00251 <span class="preprocessor">    #define __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN 1</span>
-<a name="l00252"></a>00252 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00253"></a>00253 <span class="preprocessor"></span>
-<a name="l00254"></a>00254 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_config_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00593.html b/doc/html/a00593.html
deleted file mode 100644
index a928935..0000000
--- a/doc/html/a00593.html
+++ /dev/null
@@ -1,316 +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-2011 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_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
-<a name="l00028"></a>00028 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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">#include <stdexcept></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <string></span> <span class="comment">// required to construct std exception classes</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</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="keyword">namespace </span>tbb {
-<a name="l00040"></a>00040 
-<a name="l00042"></a><a class="code" href="a00232.html">00042</a> <span class="keyword">class </span><a class="code" href="a00232.html">bad_last_alloc</a> : <span class="keyword">public</span> std::bad_alloc {
-<a name="l00043"></a>00043 <span class="keyword">public</span>:
-<a name="l00044"></a>00044     <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="l00045"></a>00045 <span class="preprocessor">#if __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>    <span class="comment">/*override*/</span> ~<a class="code" href="a00232.html">bad_last_alloc</a>() <span class="keywordflow">throw</span>() {}
-<a name="l00047"></a>00047 <span class="preprocessor">#endif</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span>};
-<a name="l00049"></a>00049 
-<a name="l00051"></a><a class="code" href="a00264.html">00051</a> <span class="keyword">class </span><a class="code" href="a00264.html">improper_lock</a> : <span class="keyword">public</span> std::exception {
-<a name="l00052"></a>00052 <span class="keyword">public</span>:
-<a name="l00053"></a>00053     <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="l00054"></a>00054 };
-<a name="l00055"></a>00055 
-<a name="l00057"></a><a class="code" href="a00272.html">00057</a> <span class="keyword">class </span><a class="code" href="a00272.html">missing_wait</a> : <span class="keyword">public</span> std::exception {
-<a name="l00058"></a>00058 <span class="keyword">public</span>:
-<a name="l00059"></a>00059     <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="l00060"></a>00060 };
-<a name="l00061"></a>00061 
-<a name="l00063"></a><a class="code" href="a00265.html">00063</a> <span class="keyword">class </span><a class="code" href="a00265.html">invalid_multiple_scheduling</a> : <span class="keyword">public</span> std::exception {
-<a name="l00064"></a>00064 <span class="keyword">public</span>:
-<a name="l00065"></a>00065     <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="l00066"></a>00066 };
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="keyword">namespace </span>internal {
-<a name="l00070"></a>00070 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4();
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="keyword">enum</span> exception_id {
-<a name="l00073"></a>00073     eid_bad_alloc = 1,
-<a name="l00074"></a>00074     eid_bad_last_alloc,
-<a name="l00075"></a>00075     eid_nonpositive_step,
-<a name="l00076"></a>00076     eid_out_of_range,
-<a name="l00077"></a>00077     eid_segment_range_error,
-<a name="l00078"></a>00078     eid_index_range_error,
-<a name="l00079"></a>00079     eid_missing_wait,
-<a name="l00080"></a>00080     eid_invalid_multiple_scheduling,
-<a name="l00081"></a>00081     eid_improper_lock,
-<a name="l00082"></a>00082     eid_possible_deadlock,
-<a name="l00083"></a>00083     eid_operation_not_permitted,
-<a name="l00084"></a>00084     eid_condvar_wait_failed,
-<a name="l00085"></a>00085     eid_invalid_load_factor,
-<a name="l00086"></a>00086     eid_reserved, <span class="comment">// free slot for backward compatibility, can be reused.</span>
-<a name="l00087"></a>00087     eid_invalid_swap,
-<a name="l00088"></a>00088     eid_reservation_length_error,
-<a name="l00089"></a>00089     eid_invalid_key,
-<a name="l00091"></a>00091 
-<a name="l00093"></a>00093     eid_max
-<a name="l00094"></a>00094 };
-<a name="l00095"></a>00095 
-<a name="l00097"></a>00097 
-<a name="l00099"></a>00099 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC throw_exception_v4 ( exception_id );
-<a name="l00100"></a>00100 
-<a name="l00102"></a>00102 <span class="keyword">inline</span> <span class="keywordtype">void</span> throw_exception ( exception_id eid ) { throw_exception_v4(eid); }
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 } <span class="comment">// namespace internal</span>
-<a name="l00105"></a>00105 } <span class="comment">// namespace tbb</span>
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_allocator.h"</span>
-<a name="l00109"></a>00109 <span class="preprocessor">#include <exception></span>
-<a name="l00110"></a>00110 <span class="preprocessor">#include <typeinfo></span>
-<a name="l00111"></a>00111 <span class="preprocessor">#include <new></span>
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 <span class="keyword">namespace </span>tbb {
-<a name="l00114"></a>00114 
-<a name="l00116"></a>00116 
-<a name="l00136"></a><a class="code" href="a00319.html">00136</a> <span class="keyword">class </span><a class="code" href="a00319.html">tbb_exception</a> : <span class="keyword">public</span> std::exception
-<a name="l00137"></a>00137 {
-<a name="l00141"></a>00141     <span class="keywordtype">void</span>* operator new ( size_t );
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 <span class="keyword">public</span>:
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="keyword">virtual</span> <a class="code" href="a00319.html">tbb_exception</a>* <a class="code" href="a00319.html#3e3482bf264d4ca4dde046cd9c02c766">move</a> () <span class="keywordflow">throw</span>() = 0;
-<a name="l00147"></a>00147 
-<a name="l00149"></a>00149 
-<a name="l00151"></a>00151     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00319.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a> () <span class="keywordflow">throw</span>() = 0;
-<a name="l00152"></a>00152 
-<a name="l00154"></a>00154 
-<a name="l00158"></a>00158     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00319.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a> () = 0;
-<a name="l00159"></a>00159 
-<a name="l00161"></a>00161     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00319.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
-<a name="l00162"></a>00162 
-<a name="l00164"></a>00164     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00319.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
-<a name="l00165"></a>00165 
-<a name="l00172"></a><a class="code" href="a00319.html#3f2da7f3d8a6e4c1df522af1213afb5a">00172</a>     <span class="keywordtype">void</span> <a class="code" href="a00319.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete </a>( <span class="keywordtype">void</span>* p ) {
-<a name="l00173"></a>00173         internal::deallocate_via_handler_v3(p);
-<a name="l00174"></a>00174     }
-<a name="l00175"></a>00175 };
-<a name="l00176"></a>00176 
-<a name="l00178"></a>00178 
-<a name="l00182"></a><a class="code" href="a00240.html">00182</a> <span class="keyword">class </span><a class="code" href="a00240.html">captured_exception</a> : <span class="keyword">public</span> <a class="code" href="a00319.html">tbb_exception</a>
-<a name="l00183"></a>00183 {
-<a name="l00184"></a>00184 <span class="keyword">public</span>:
-<a name="l00185"></a>00185     <a class="code" href="a00240.html">captured_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00240.html">captured_exception</a>& src )
-<a name="l00186"></a>00186         : <a class="code" href="a00319.html">tbb_exception</a>(src), my_dynamic(<span class="keyword">false</span>)
-<a name="l00187"></a>00187     {
-<a name="l00188"></a>00188         set(src.<a class="code" href="a00240.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00240.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
-<a name="l00189"></a>00189     }
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <a class="code" href="a00240.html">captured_exception</a> ( <span class="keyword">const</span> <span class="keywordtype">char</span>* name_, <span class="keyword">const</span> <span class="keywordtype">char</span>* info )
-<a name="l00192"></a>00192         : my_dynamic(<span class="keyword">false</span>)
-<a name="l00193"></a>00193     {
-<a name="l00194"></a>00194         set(name_, info);
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197     __TBB_EXPORTED_METHOD ~<a class="code" href="a00240.html">captured_exception</a> () <span class="keywordflow">throw</span>();
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199     <a class="code" href="a00240.html">captured_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00240.html">captured_exception</a>& src ) {
-<a name="l00200"></a>00200         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
-<a name="l00201"></a>00201             clear();
-<a name="l00202"></a>00202             set(src.<a class="code" href="a00240.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00240.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
-<a name="l00203"></a>00203         }
-<a name="l00204"></a>00204         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00205"></a>00205     }
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     <span class="comment">/*override*/</span>
-<a name="l00208"></a>00208     <a class="code" href="a00240.html">captured_exception</a>* __TBB_EXPORTED_METHOD <a class="code" href="a00240.html#837a50b8f6a800bda225c39d1699643f">move</a> () <span class="keywordflow">throw</span>();
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210     <span class="comment">/*override*/</span>
-<a name="l00211"></a>00211     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00240.html#93d875d3555502ff6f18513525de204c">destroy</a> () <span class="keywordflow">throw</span>();
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213     <span class="comment">/*override*/</span>
-<a name="l00214"></a><a class="code" href="a00240.html#2dd1be66ab32fa27e0ddef5707fa67ef">00214</a>     <span class="keywordtype">void</span> <a class="code" href="a00240.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> () { __TBB_THROW(*<span class="keyword">this</span>); }
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216     <span class="comment">/*override*/</span>
-<a name="l00217"></a>00217     <span class="keyword">const</span> <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00240.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const throw();
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219     <span class="comment">/*override*/</span>
-<a name="l00220"></a>00220     const <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00240.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const throw();
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD set ( const <span class="keywordtype">char</span>* <a class="code" href="a00240.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>, const <span class="keywordtype">char</span>* info ) throw();
-<a name="l00223"></a>00223     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD clear () throw();
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225 private:
-<a name="l00227"></a>00227     <a class="code" href="a00240.html">captured_exception</a>() {}
-<a name="l00228"></a>00228 
-<a name="l00230"></a>00230     <span class="keyword">static</span> captured_exception* allocate ( <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00240.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>, <span class="keyword">const</span> <span class="keywordtype">char</span>* info );
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232     <span class="keywordtype">bool</span> my_dynamic;
-<a name="l00233"></a>00233     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_name;
-<a name="l00234"></a>00234     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_info;
-<a name="l00235"></a>00235 };
-<a name="l00236"></a>00236 
-<a name="l00238"></a>00238 
-<a name="l00242"></a>00242 <span class="keyword">template</span><<span class="keyword">typename</span> ExceptionData>
-<a name="l00243"></a><a class="code" href="a00273.html">00243</a> <span class="keyword">class </span><a class="code" href="a00273.html">movable_exception</a> : <span class="keyword">public</span> <a class="code" href="a00319.html">tbb_exception</a>
-<a name="l00244"></a>00244 {
-<a name="l00245"></a>00245     <span class="keyword">typedef</span> <a class="code" href="a00273.html">movable_exception<ExceptionData></a> <a class="code" href="a00273.html">self_type</a>;
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247 <span class="keyword">public</span>:
-<a name="l00248"></a>00248     <a class="code" href="a00273.html">movable_exception</a> ( <span class="keyword">const</span> ExceptionData& data_ )
-<a name="l00249"></a>00249         : <a class="code" href="a00273.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>(data_)
-<a name="l00250"></a>00250         , my_dynamic(<span class="keyword">false</span>)
-<a name="l00251"></a>00251         , my_exception_name(
-<a name="l00252"></a>00252 #<span class="keywordflow">if</span> TBB_USE_EXCEPTIONS
-<a name="l00253"></a>00253         <span class="keyword">typeid</span>(<a class="code" href="a00273.html">self_type</a>).<a class="code" href="a00273.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>()
-<a name="l00254"></a>00254 #<span class="keywordflow">else</span> <span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
-<a name="l00255"></a>00255         <span class="stringliteral">"movable_exception"</span>
-<a name="l00256"></a>00256 #endif <span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
-<a name="l00257"></a>00257         )
-<a name="l00258"></a>00258     {}
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260     <a class="code" href="a00273.html">movable_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00273.html">movable_exception</a>& src ) <span class="keywordflow">throw</span> ()
-<a name="l00261"></a>00261         : <a class="code" href="a00319.html">tbb_exception</a>(src)
-<a name="l00262"></a>00262         , <a class="code" href="a00273.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>(src.<a class="code" href="a00273.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>)
-<a name="l00263"></a>00263         , my_dynamic(<span class="keyword">false</span>)
-<a name="l00264"></a>00264         , my_exception_name(src.<a class="code" href="a00273.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>)
-<a name="l00265"></a>00265     {}
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267     ~<a class="code" href="a00273.html">movable_exception</a> () <span class="keywordflow">throw</span>() {}
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269     <span class="keyword">const</span> <a class="code" href="a00273.html">movable_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00273.html">movable_exception</a>& src ) {
-<a name="l00270"></a>00270         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
-<a name="l00271"></a>00271             <a class="code" href="a00273.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a> = src.<a class="code" href="a00273.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
-<a name="l00272"></a>00272             my_exception_name = src.<a class="code" href="a00273.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>;
-<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="l00277"></a>00277     ExceptionData& data () <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> <a class="code" href="a00273.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>; }
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279     <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="a00273.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>; }
-<a name="l00280"></a>00280 
-<a name="l00281"></a><a class="code" href="a00273.html#bc5f5c4739b17ac5211ac58226c2f5a5">00281</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00273.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a> () const throw() { <span class="keywordflow">return</span> my_exception_name; }
-<a name="l00282"></a>00282 
-<a name="l00283"></a><a class="code" href="a00273.html#b33a89bccf0c63106f1270c7bfaaf54f">00283</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00273.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a> () const throw() { <span class="keywordflow">return</span> <span class="stringliteral">"tbb::movable_exception"</span>; }
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285     <span class="comment">/*override*/</span>
-<a name="l00286"></a><a class="code" href="a00273.html#1aea0ad179d6f0481fe7f3495f66adf9">00286</a>     <a class="code" href="a00273.html">movable_exception</a>* <a class="code" href="a00273.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a> () throw() {
-<a name="l00287"></a>00287         <span class="keywordtype">void</span>* e = internal::allocate_via_handler_v3(<span class="keyword">sizeof</span>(<a class="code" href="a00273.html">movable_exception</a>));
-<a name="l00288"></a>00288         <span class="keywordflow">if</span> ( e ) {
-<a name="l00289"></a>00289             ::new (e) movable_exception(*<span class="keyword">this</span>);
-<a name="l00290"></a>00290             ((movable_exception*)e)->my_dynamic = <span class="keyword">true</span>;
-<a name="l00291"></a>00291         }
-<a name="l00292"></a>00292         <span class="keywordflow">return</span> (movable_exception*)e;
-<a name="l00293"></a>00293     }
-<a name="l00294"></a>00294     <span class="comment">/*override*/</span>
-<a name="l00295"></a><a class="code" href="a00273.html#7a46873119d9f85a7b0009c13e41a258">00295</a>     <span class="keywordtype">void</span> <a class="code" href="a00273.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> () throw() {
-<a name="l00296"></a>00296         __TBB_ASSERT ( my_dynamic, <span class="stringliteral">"Method destroy can be called only on dynamically allocated movable_exceptions"</span> );
-<a name="l00297"></a>00297         <span class="keywordflow">if</span> ( my_dynamic ) {
-<a name="l00298"></a>00298             this->~<a class="code" href="a00273.html">movable_exception</a>();
-<a name="l00299"></a>00299             internal::deallocate_via_handler_v3(<span class="keyword">this</span>);
-<a name="l00300"></a>00300         }
-<a name="l00301"></a>00301     }
-<a name="l00302"></a>00302     <span class="comment">/*override*/</span>
-<a name="l00303"></a><a class="code" href="a00273.html#17cffba35811c92b7e65d63506b69602">00303</a>     <span class="keywordtype">void</span> <a class="code" href="a00273.html#17cffba35811c92b7e65d63506b69602">throw_self</a> () { __TBB_THROW( *<span class="keyword">this</span> ); }
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305 <span class="keyword">protected</span>:
-<a name="l00307"></a><a class="code" href="a00273.html#a8c0ae2089ae784b28907cf748b89416">00307</a>     ExceptionData  <a class="code" href="a00273.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309 <span class="keyword">private</span>:
-<a name="l00311"></a>00311     <span class="keywordtype">bool</span> my_dynamic;
-<a name="l00312"></a>00312 
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_name;
-<a name="l00316"></a>00316 };
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318 <span class="preprocessor">#if !TBB_USE_CAPTURED_EXCEPTION</span>
-<a name="l00319"></a>00319 <span class="preprocessor"></span><span class="keyword">namespace </span>internal {
-<a name="l00320"></a>00320 
-<a name="l00322"></a>00322 
-<a name="l00324"></a><a class="code" href="a00320.html">00324</a> <span class="keyword">class </span><a class="code" href="a00320.html">tbb_exception_ptr</a> {
-<a name="l00325"></a>00325     std::exception_ptr  my_ptr;
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327 <span class="keyword">public</span>:
-<a name="l00328"></a>00328     <span class="keyword">static</span> <a class="code" href="a00320.html">tbb_exception_ptr</a>* allocate ();
-<a name="l00329"></a>00329     <span class="keyword">static</span> <a class="code" href="a00320.html">tbb_exception_ptr</a>* allocate ( <span class="keyword">const</span> <a class="code" href="a00319.html">tbb_exception</a>& tag );
-<a name="l00331"></a>00331     <span class="keyword">static</span> <a class="code" href="a00320.html">tbb_exception_ptr</a>* allocate ( <a class="code" href="a00240.html">captured_exception</a>& src );
-<a name="l00332"></a>00332 
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335     <span class="keywordtype">void</span> <a class="code" href="a00320.html#921875bbacd2c8a5f324c7da7a415262">destroy</a> () <span class="keywordflow">throw</span>();
-<a name="l00336"></a>00336 
-<a name="l00338"></a><a class="code" href="a00320.html#292832fd5c523e3d8081a22247840a1d">00338</a>     <span class="keywordtype">void</span> <a class="code" href="a00320.html#292832fd5c523e3d8081a22247840a1d">throw_self</a> () { std::rethrow_exception(my_ptr); }
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 <span class="keyword">private</span>:
-<a name="l00341"></a>00341     <a class="code" href="a00320.html">tbb_exception_ptr</a> ( <span class="keyword">const</span> std::exception_ptr& src ) : my_ptr(src) {}
-<a name="l00342"></a>00342     tbb_exception_ptr ( <span class="keyword">const</span> <a class="code" href="a00240.html">captured_exception</a>& src ) : my_ptr(std::copy_exception(src)) {}
-<a name="l00343"></a>00343 }; <span class="comment">// class tbb::internal::tbb_exception_ptr</span>
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345 } <span class="comment">// namespace internal</span>
-<a name="l00346"></a>00346 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348 } <span class="comment">// namespace tbb</span>
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
-<a name="l00351"></a>00351 
-<a name="l00352"></a>00352 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_exception_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00594.html b/doc/html/a00594.html
deleted file mode 100644
index 84e2f7c..0000000
--- a/doc/html/a00594.html
+++ /dev/null
@@ -1,748 +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_machine.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_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-2011 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_machine_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00099"></a>00099 <span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="keyword">namespace </span>tbb {
-<a name="l00102"></a>00102 <span class="keyword">namespace </span>internal {
-<a name="l00103"></a>00103 
-<a name="l00105"></a>00105 <span class="comment">// Overridable helpers declarations</span>
-<a name="l00106"></a>00106 <span class="comment">//</span>
-<a name="l00107"></a>00107 <span class="comment">// A machine/*.h file may choose to define these templates, otherwise it must</span>
-<a name="l00108"></a>00108 <span class="comment">// request default implementation by setting appropriate __TBB_USE_GENERIC_XXX macro(s).</span>
-<a name="l00109"></a>00109 <span class="comment">//</span>
-<a name="l00110"></a>00110 <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::size_t S>
-<a name="l00111"></a>00111 <span class="keyword">struct </span>machine_load_store;
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::size_t S>
-<a name="l00114"></a>00114 <span class="keyword">struct </span>machine_load_store_relaxed;
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::size_t S>
-<a name="l00117"></a>00117 <span class="keyword">struct </span>machine_load_store_seq_cst;
-<a name="l00118"></a>00118 <span class="comment">//</span>
-<a name="l00119"></a>00119 <span class="comment">// End of overridable helpers declarations</span>
-<a name="l00121"></a>00121 <span class="comment"></span>
-<a name="l00122"></a>00122 <span class="keyword">template</span><size_t S> <span class="keyword">struct </span>atomic_selector;
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 <span class="keyword">template</span><> <span class="keyword">struct </span>atomic_selector<1> {
-<a name="l00125"></a>00125     <span class="keyword">typedef</span> int8_t word;
-<a name="l00126"></a>00126     <span class="keyword">inline</span> <span class="keyword">static</span> word fetch_store ( <span class="keyword">volatile</span> <span class="keywordtype">void</span>* location, word value );
-<a name="l00127"></a>00127 };
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129 <span class="keyword">template</span><> <span class="keyword">struct </span>atomic_selector<2> {
-<a name="l00130"></a>00130     <span class="keyword">typedef</span> int16_t word;
-<a name="l00131"></a>00131     <span class="keyword">inline</span> <span class="keyword">static</span> word fetch_store ( <span class="keyword">volatile</span> <span class="keywordtype">void</span>* location, word value );
-<a name="l00132"></a>00132 };
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 <span class="keyword">template</span><> <span class="keyword">struct </span>atomic_selector<4> {
-<a name="l00135"></a>00135 <span class="preprocessor">#if _MSC_VER && !_WIN64</span>
-<a name="l00136"></a>00136 <span class="preprocessor"></span>    <span class="comment">// Work-around that avoids spurious /Wp64 warnings</span>
-<a name="l00137"></a>00137     <span class="keyword">typedef</span> intptr_t word;
-<a name="l00138"></a>00138 <span class="preprocessor">#else</span>
-<a name="l00139"></a>00139 <span class="preprocessor"></span>    <span class="keyword">typedef</span> int32_t word;
-<a name="l00140"></a>00140 <span class="preprocessor">#endif</span>
-<a name="l00141"></a>00141 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keyword">static</span> word fetch_store ( <span class="keyword">volatile</span> <span class="keywordtype">void</span>* location, word value );
-<a name="l00142"></a>00142 };
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144 <span class="keyword">template</span><> <span class="keyword">struct </span>atomic_selector<8> {
-<a name="l00145"></a>00145     <span class="keyword">typedef</span> int64_t word;
-<a name="l00146"></a>00146     <span class="keyword">inline</span> <span class="keyword">static</span> word fetch_store ( <span class="keyword">volatile</span> <span class="keywordtype">void</span>* location, word value );
-<a name="l00147"></a>00147 };
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 }} <span class="comment">// namespaces internal, tbb</span>
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00152"></a>00152 <span class="preprocessor"></span>
-<a name="l00153"></a>00153 <span class="preprocessor">#ifdef _MANAGED</span>
-<a name="l00154"></a>00154 <span class="preprocessor"></span><span class="preprocessor">#pragma managed(push, off)</span>
-<a name="l00155"></a>00155 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00156"></a>00156 <span class="preprocessor"></span>
-<a name="l00157"></a>00157 <span class="preprocessor">    #if __MINGW64__ || __MINGW32__</span>
-<a name="l00158"></a>00158 <span class="preprocessor"></span>        <span class="keyword">extern</span> <span class="stringliteral">"C"</span> __declspec(dllimport) int __stdcall SwitchToThread( <span class="keywordtype">void</span> );
-<a name="l00159"></a>00159         <span class="preprocessor">#define __TBB_Yield()  SwitchToThread()</span>
-<a name="l00160"></a>00160 <span class="preprocessor"></span><span class="preprocessor">        #if (TBB_USE_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT)</span>
-<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor">            #include "machine/gcc_generic.h"</span>
-<a name="l00162"></a>00162 <span class="preprocessor">        #elif __MINGW64__</span>
-<a name="l00163"></a>00163 <span class="preprocessor"></span><span class="preprocessor">            #include "machine/linux_intel64.h"</span>
-<a name="l00164"></a>00164 <span class="preprocessor">        #elif __MINGW32__</span>
-<a name="l00165"></a>00165 <span class="preprocessor"></span><span class="preprocessor">            #include "machine/linux_ia32.h"</span>
-<a name="l00166"></a>00166 <span class="preprocessor">        #endif</span>
-<a name="l00167"></a>00167 <span class="preprocessor"></span><span class="preprocessor">    #elif defined(_M_IX86)</span>
-<a name="l00168"></a>00168 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/windows_ia32.h"</span>
-<a name="l00169"></a>00169 <span class="preprocessor">    #elif defined(_M_X64) </span>
-<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/windows_intel64.h"</span>
-<a name="l00171"></a>00171 <span class="preprocessor">    #elif _XBOX</span>
-<a name="l00172"></a>00172 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/xbox360_ppc.h"</span>
-<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="preprocessor">#ifdef _MANAGED</span>
-<a name="l00176"></a>00176 <span class="preprocessor"></span><span class="preprocessor">#pragma managed(pop)</span>
-<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span>
-<a name="l00179"></a>00179 <span class="preprocessor">#elif __linux__ || __FreeBSD__ || __NetBSD__</span>
-<a name="l00180"></a>00180 <span class="preprocessor"></span>
-<a name="l00181"></a>00181 <span class="preprocessor">    #if (TBB_USE_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT)</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/gcc_generic.h"</span>
-<a name="l00183"></a>00183 <span class="preprocessor">    #elif __i386__</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_ia32.h"</span>
-<a name="l00185"></a>00185 <span class="preprocessor">    #elif __x86_64__</span>
-<a name="l00186"></a>00186 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_intel64.h"</span>
-<a name="l00187"></a>00187 <span class="preprocessor">    #elif __ia64__</span>
-<a name="l00188"></a>00188 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_ia64.h"</span>
-<a name="l00189"></a>00189 <span class="preprocessor">    #elif __powerpc__</span>
-<a name="l00190"></a>00190 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/mac_ppc.h"</span>
-<a name="l00191"></a>00191 <span class="preprocessor">    #elif __TBB_GCC_BUILTIN_ATOMICS_PRESENT</span>
-<a name="l00192"></a>00192 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/gcc_generic.h"</span>
-<a name="l00193"></a>00193 <span class="preprocessor">    #endif</span>
-<a name="l00194"></a>00194 <span class="preprocessor"></span><span class="preprocessor">    #include "machine/linux_common.h"</span>
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196 <span class="preprocessor">#elif __APPLE__</span>
-<a name="l00197"></a>00197 <span class="preprocessor"></span>
-<a name="l00198"></a>00198 <span class="preprocessor">    #if __i386__</span>
-<a name="l00199"></a>00199 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_ia32.h"</span>
-<a name="l00200"></a>00200 <span class="preprocessor">    #elif __x86_64__</span>
-<a name="l00201"></a>00201 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_intel64.h"</span>
-<a name="l00202"></a>00202 <span class="preprocessor">    #elif __POWERPC__</span>
-<a name="l00203"></a>00203 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/mac_ppc.h"</span>
-<a name="l00204"></a>00204 <span class="preprocessor">    #endif</span>
-<a name="l00205"></a>00205 <span class="preprocessor"></span><span class="preprocessor">    #include "machine/macos_common.h"</span>
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207 <span class="preprocessor">#elif _AIX</span>
-<a name="l00208"></a>00208 <span class="preprocessor"></span>
-<a name="l00209"></a>00209 <span class="preprocessor">    #include "machine/ibm_aix51.h"</span>
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211 <span class="preprocessor">#elif __sun || __SUNPRO_CC</span>
-<a name="l00212"></a>00212 <span class="preprocessor"></span>
-<a name="l00213"></a>00213 <span class="preprocessor">    #define __asm__ asm</span>
-<a name="l00214"></a>00214 <span class="preprocessor"></span><span class="preprocessor">    #define __volatile__ volatile</span>
-<a name="l00215"></a>00215 <span class="preprocessor"></span>
-<a name="l00216"></a>00216 <span class="preprocessor">    #if __i386  || __i386__</span>
-<a name="l00217"></a>00217 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_ia32.h"</span>
-<a name="l00218"></a>00218 <span class="preprocessor">    #elif __x86_64__</span>
-<a name="l00219"></a>00219 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_intel64.h"</span>
-<a name="l00220"></a>00220 <span class="preprocessor">    #elif __sparc</span>
-<a name="l00221"></a>00221 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/sunos_sparc.h"</span>
-<a name="l00222"></a>00222 <span class="preprocessor">    #endif</span>
-<a name="l00223"></a>00223 <span class="preprocessor"></span><span class="preprocessor">    #include <sched.h></span>
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225 <span class="preprocessor">    #define __TBB_Yield() sched_yield()</span>
-<a name="l00226"></a>00226 <span class="preprocessor"></span>
-<a name="l00227"></a>00227 <span class="preprocessor">#endif </span><span class="comment">/* OS selection */</span>
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229 <span class="preprocessor">#ifndef __TBB_64BIT_ATOMICS</span>
-<a name="l00230"></a>00230 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_64BIT_ATOMICS 1</span>
-<a name="l00231"></a>00231 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00232"></a>00232 <span class="preprocessor"></span>
-<a name="l00233"></a>00233 <span class="comment">// Special atomic functions</span>
-<a name="l00234"></a>00234 <span class="preprocessor">#if __TBB_USE_FENCED_ATOMICS</span>
-<a name="l00235"></a>00235 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_machine_cmpswp1   __TBB_machine_cmpswp1full_fence</span>
-<a name="l00236"></a>00236 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_machine_cmpswp2   __TBB_machine_cmpswp2full_fence</span>
-<a name="l00237"></a>00237 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_machine_cmpswp4   __TBB_machine_cmpswp4full_fence</span>
-<a name="l00238"></a>00238 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_machine_cmpswp8   __TBB_machine_cmpswp8full_fence</span>
-<a name="l00239"></a>00239 <span class="preprocessor"></span>
-<a name="l00240"></a>00240 <span class="preprocessor">    #if __TBB_WORDSIZE==8</span>
-<a name="l00241"></a>00241 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_machine_fetchadd8             __TBB_machine_fetchadd8full_fence</span>
-<a name="l00242"></a>00242 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_machine_fetchstore8           __TBB_machine_fetchstore8full_fence</span>
-<a name="l00243"></a>00243 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_FetchAndAddWrelease(P,V)      __TBB_machine_fetchadd8release(P,V)</span>
-<a name="l00244"></a>00244 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_FetchAndIncrementWacquire(P)  __TBB_machine_fetchadd8acquire(P,1)</span>
-<a name="l00245"></a>00245 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_FetchAndDecrementWrelease(P)  __TBB_machine_fetchadd8release(P,(-1))</span>
-<a name="l00246"></a>00246 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
-<a name="l00247"></a>00247 <span class="preprocessor"></span><span class="preprocessor">        #error Define macros for 4-byte word, similarly to the above __TBB_WORDSIZE==8 branch.</span>
-<a name="l00248"></a>00248 <span class="preprocessor"></span><span class="preprocessor">    #endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
-<a name="l00249"></a>00249 <span class="preprocessor">#else </span><span class="comment">/* !__TBB_USE_FENCED_ATOMICS */</span>
-<a name="l00250"></a>00250 <span class="preprocessor">    #define __TBB_FetchAndAddWrelease(P,V)      __TBB_FetchAndAddW(P,V)</span>
-<a name="l00251"></a>00251 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndIncrementWacquire(P)  __TBB_FetchAndAddW(P,1)</span>
-<a name="l00252"></a>00252 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndDecrementWrelease(P)  __TBB_FetchAndAddW(P,(-1))</span>
-<a name="l00253"></a>00253 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__TBB_USE_FENCED_ATOMICS */</span>
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255 <span class="preprocessor">#if __TBB_WORDSIZE==4</span>
-<a name="l00256"></a>00256 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CompareAndSwapW(P,V,C)    __TBB_machine_cmpswp4(P,V,C)</span>
-<a name="l00257"></a>00257 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndAddW(P,V)         __TBB_machine_fetchadd4(P,V)</span>
-<a name="l00258"></a>00258 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndStoreW(P,V)       __TBB_machine_fetchstore4(P,V)</span>
-<a name="l00259"></a>00259 <span class="preprocessor"></span><span class="preprocessor">#elif  __TBB_WORDSIZE==8</span>
-<a name="l00260"></a>00260 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_USE_GENERIC_DWORD_LOAD_STORE || __TBB_USE_GENERIC_DWORD_FETCH_ADD || __TBB_USE_GENERIC_DWORD_FETCH_STORE</span>
-<a name="l00261"></a>00261 <span class="preprocessor"></span><span class="preprocessor">        #error These macros should only be used on 32-bit platforms.</span>
-<a name="l00262"></a>00262 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
-<a name="l00263"></a>00263 <span class="preprocessor"></span>
-<a name="l00264"></a>00264 <span class="preprocessor">    #define __TBB_CompareAndSwapW(P,V,C)    __TBB_machine_cmpswp8(P,V,C)</span>
-<a name="l00265"></a>00265 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndAddW(P,V)         __TBB_machine_fetchadd8(P,V)</span>
-<a name="l00266"></a>00266 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndStoreW(P,V)       __TBB_machine_fetchstore8(P,V)</span>
-<a name="l00267"></a>00267 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* __TBB_WORDSIZE != 8 */</span>
-<a name="l00268"></a>00268 <span class="preprocessor">    #error Unsupported machine word size.</span>
-<a name="l00269"></a>00269 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE */</span>
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 <span class="preprocessor">#ifndef __TBB_Pause</span>
-<a name="l00272"></a>00272 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Pause(int32_t) {
-<a name="l00273"></a>00273         __TBB_Yield();
-<a name="l00274"></a>00274     }
-<a name="l00275"></a>00275 <span class="preprocessor">#endif</span>
-<a name="l00276"></a>00276 <span class="preprocessor"></span>
-<a name="l00277"></a>00277 <span class="keyword">namespace </span>tbb {
-<a name="l00278"></a>00278 
-<a name="l00280"></a><a class="code" href="a00383.html#250275615f10d5b5de6ad466ae2f54de">00280</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00383.html#250275615f10d5b5de6ad466ae2f54de">atomic_fence</a> () { __TBB_full_memory_fence(); }
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282 <span class="keyword">namespace </span>internal {
-<a name="l00283"></a>00283 
-<a name="l00285"></a>00285 
-<a name="l00286"></a><a class="code" href="a00230.html">00286</a> <span class="keyword">class </span><a class="code" href="a00230.html">atomic_backoff</a> : no_copy {
-<a name="l00288"></a>00288 
-<a name="l00290"></a>00290     <span class="keyword">static</span> <span class="keyword">const</span> int32_t LOOPS_BEFORE_YIELD = 16;
-<a name="l00291"></a>00291     int32_t count;
-<a name="l00292"></a>00292 <span class="keyword">public</span>:
-<a name="l00293"></a>00293     <a class="code" href="a00230.html">atomic_backoff</a>() : count(1) {}
-<a name="l00294"></a>00294 
-<a name="l00296"></a><a class="code" href="a00230.html#a174ea93e3bd3d5cce82389c2f28d037">00296</a>     <span class="keywordtype">void</span> <a class="code" href="a00230.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>() {
-<a name="l00297"></a>00297         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
-<a name="l00298"></a>00298             __TBB_Pause(count);
-<a name="l00299"></a>00299             <span class="comment">// Pause twice as long the next time.</span>
-<a name="l00300"></a>00300             count*=2;
-<a name="l00301"></a>00301         } <span class="keywordflow">else</span> {
-<a name="l00302"></a>00302             <span class="comment">// Pause is so long that we might as well yield CPU to scheduler.</span>
-<a name="l00303"></a>00303             __TBB_Yield();
-<a name="l00304"></a>00304         }
-<a name="l00305"></a>00305     }
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307     <span class="comment">// pause for a few times and then return false immediately.</span>
-<a name="l00308"></a>00308     <span class="keywordtype">bool</span> bounded_pause() {
-<a name="l00309"></a>00309         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
-<a name="l00310"></a>00310             __TBB_Pause(count);
-<a name="l00311"></a>00311             <span class="comment">// Pause twice as long the next time.</span>
-<a name="l00312"></a>00312             count*=2;
-<a name="l00313"></a>00313             <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00314"></a>00314         } <span class="keywordflow">else</span> {
-<a name="l00315"></a>00315             <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00316"></a>00316         }
-<a name="l00317"></a>00317     }
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319     <span class="keywordtype">void</span> reset() {
-<a name="l00320"></a>00320         count = 1;
-<a name="l00321"></a>00321     }
-<a name="l00322"></a>00322 };
-<a name="l00323"></a>00323 
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00327"></a>00327 <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="l00328"></a>00328     atomic_backoff backoff;
-<a name="l00329"></a>00329     <span class="keywordflow">while</span>( location==value ) backoff.pause();
-<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> T, <span class="keyword">typename</span> U>
-<a name="l00335"></a>00335 <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="l00336"></a>00336     atomic_backoff backoff;
-<a name="l00337"></a>00337     <span class="keywordflow">while</span>( location!=value ) backoff.pause();
-<a name="l00338"></a>00338 }
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 <span class="comment">// T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.</span>
-<a name="l00341"></a>00341 <span class="comment">// S should be either 1 or 2, for the mask calculation to work correctly.</span>
-<a name="l00342"></a>00342 <span class="comment">// Together, these rules limit applicability of Masked CAS to unsigned char and unsigned short.</span>
-<a name="l00343"></a>00343 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00344"></a>00344 <span class="keyword">inline</span> T __TBB_MaskedCompareAndSwap (<span class="keyword">volatile</span> T *ptr, T value, T comparand ) {
-<a name="l00345"></a>00345     <span class="keyword">volatile</span> uint32_t * base = (uint32_t*)( (uintptr_t)ptr & ~(uintptr_t)0x3 );
-<a name="l00346"></a>00346 <span class="preprocessor">#if __TBB_BIG_ENDIAN</span>
-<a name="l00347"></a>00347 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*( 4-S - (uintptr_t(ptr) & 0x3) ) );
-<a name="l00348"></a>00348 <span class="preprocessor">#else</span>
-<a name="l00349"></a>00349 <span class="preprocessor"></span>    <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*((uintptr_t)ptr & 0x3) );
-<a name="l00350"></a>00350 <span class="preprocessor">#endif</span>
-<a name="l00351"></a>00351 <span class="preprocessor"></span>    <span class="keyword">const</span> uint32_t mask = ( (1<<(S*8)) - 1 )<<bitoffset;
-<a name="l00352"></a>00352     atomic_backoff b;
-<a name="l00353"></a>00353     uint32_t result;
-<a name="l00354"></a>00354     <span class="keywordflow">for</span>(;;) {
-<a name="l00355"></a>00355         result = *base; <span class="comment">// reload the base value which might change during the pause</span>
-<a name="l00356"></a>00356         uint32_t old_value = ( result & ~mask ) | ( comparand << bitoffset );
-<a name="l00357"></a>00357         uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
-<a name="l00358"></a>00358         <span class="comment">// __TBB_CompareAndSwap4 presumed to have full fence.</span>
-<a name="l00359"></a>00359         <span class="comment">// Cast shuts up /Wp64 warning</span>
-<a name="l00360"></a>00360         result = (uint32_t)__TBB_machine_cmpswp4( base, new_value, old_value );
-<a name="l00361"></a>00361         <span class="keywordflow">if</span>(  result==old_value               <span class="comment">// CAS succeeded</span>
-<a name="l00362"></a>00362           || ((result^old_value)&mask)!=0 )  <span class="comment">// CAS failed and the bits of interest have changed</span>
-<a name="l00363"></a>00363             <span class="keywordflow">break</span>;
-<a name="l00364"></a>00364         <span class="keywordflow">else</span>                                 <span class="comment">// CAS failed but the bits of interest left unchanged</span>
-<a name="l00365"></a>00365             b.pause();
-<a name="l00366"></a>00366     }
-<a name="l00367"></a>00367     <span class="keywordflow">return</span> T((result & mask) >> bitoffset);
-<a name="l00368"></a>00368 }
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00371"></a>00371 <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="l00372"></a>00372 
-<a name="l00373"></a>00373 <span class="keyword">template</span><>
-<a name="l00374"></a>00374 <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="l00375"></a>00375 #<span class="keywordflow">if</span> __TBB_USE_GENERIC_PART_WORD_CAS
-<a name="l00376"></a>00376     <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<1,uint8_t>((<span class="keyword">volatile</span> uint8_t *)ptr,value,comparand);
-<a name="l00377"></a>00377 <span class="preprocessor">#else</span>
-<a name="l00378"></a>00378 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_machine_cmpswp1(ptr,value,comparand);
-<a name="l00379"></a>00379 <span class="preprocessor">#endif</span>
-<a name="l00380"></a>00380 <span class="preprocessor"></span>}
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382 <span class="keyword">template</span><>
-<a name="l00383"></a>00383 <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="l00384"></a>00384 #<span class="keywordflow">if</span> __TBB_USE_GENERIC_PART_WORD_CAS
-<a name="l00385"></a>00385     <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<2,uint16_t>((<span class="keyword">volatile</span> uint16_t *)ptr,value,comparand);
-<a name="l00386"></a>00386 <span class="preprocessor">#else</span>
-<a name="l00387"></a>00387 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_machine_cmpswp2(ptr,value,comparand);
-<a name="l00388"></a>00388 <span class="preprocessor">#endif</span>
-<a name="l00389"></a>00389 <span class="preprocessor"></span>}
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391 <span class="keyword">template</span><>
-<a name="l00392"></a>00392 <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="l00393"></a>00393     <span class="comment">// Cast shuts up /Wp64 warning</span>
-<a name="l00394"></a>00394     <span class="keywordflow">return</span> (uint32_t)__TBB_machine_cmpswp4(ptr,value,comparand);
-<a name="l00395"></a>00395 }
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
-<a name="l00398"></a>00398 <span class="preprocessor"></span><span class="keyword">template</span><>
-<a name="l00399"></a>00399 <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="l00400"></a>00400     <span class="keywordflow">return</span> __TBB_machine_cmpswp8(ptr,value,comparand);
-<a name="l00401"></a>00401 }
-<a name="l00402"></a>00402 <span class="preprocessor">#endif</span>
-<a name="l00403"></a>00403 <span class="preprocessor"></span>
-<a name="l00404"></a>00404 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00405"></a>00405 <span class="keyword">inline</span> T __TBB_FetchAndAddGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T addend) {
-<a name="l00406"></a>00406     atomic_backoff b;
-<a name="l00407"></a>00407     T result;
-<a name="l00408"></a>00408     <span class="keywordflow">for</span>(;;) {
-<a name="l00409"></a>00409         result = *reinterpret_cast<volatile T *>(ptr);
-<a name="l00410"></a>00410         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence.</span>
-<a name="l00411"></a>00411         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result )
-<a name="l00412"></a>00412             <span class="keywordflow">break</span>;
-<a name="l00413"></a>00413         b.pause();
-<a name="l00414"></a>00414     }
-<a name="l00415"></a>00415     <span class="keywordflow">return</span> result;
-<a name="l00416"></a>00416 }
-<a name="l00417"></a>00417 
-<a name="l00418"></a>00418 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-<a name="l00419"></a>00419 <span class="keyword">inline</span> T __TBB_FetchAndStoreGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value) {
-<a name="l00420"></a>00420     atomic_backoff b;
-<a name="l00421"></a>00421     T result;
-<a name="l00422"></a>00422     <span class="keywordflow">for</span>(;;) {
-<a name="l00423"></a>00423         result = *reinterpret_cast<volatile T *>(ptr);
-<a name="l00424"></a>00424         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence.</span>
-<a name="l00425"></a>00425         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result )
-<a name="l00426"></a>00426             <span class="keywordflow">break</span>;
-<a name="l00427"></a>00427         b.pause();
-<a name="l00428"></a>00428     }
-<a name="l00429"></a>00429     <span class="keywordflow">return</span> result;
-<a name="l00430"></a>00430 }
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432 <span class="preprocessor">#if __TBB_USE_GENERIC_PART_WORD_CAS</span>
-<a name="l00433"></a>00433 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_cmpswp1 tbb::internal::__TBB_CompareAndSwapGeneric<1,uint8_t></span>
-<a name="l00434"></a>00434 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_cmpswp2 tbb::internal::__TBB_CompareAndSwapGeneric<2,uint16_t></span>
-<a name="l00435"></a>00435 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00436"></a>00436 <span class="preprocessor"></span>
-<a name="l00437"></a>00437 <span class="preprocessor">#if __TBB_USE_GENERIC_FETCH_ADD || __TBB_USE_GENERIC_PART_WORD_FETCH_ADD</span>
-<a name="l00438"></a>00438 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchadd1 tbb::internal::__TBB_FetchAndAddGeneric<1,uint8_t></span>
-<a name="l00439"></a>00439 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchadd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t></span>
-<a name="l00440"></a>00440 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00441"></a>00441 <span class="preprocessor"></span>
-<a name="l00442"></a>00442 <span class="preprocessor">#if __TBB_USE_GENERIC_FETCH_ADD </span>
-<a name="l00443"></a>00443 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchadd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t></span>
-<a name="l00444"></a>00444 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00445"></a>00445 <span class="preprocessor"></span>
-<a name="l00446"></a>00446 <span class="preprocessor">#if __TBB_USE_GENERIC_FETCH_ADD || __TBB_USE_GENERIC_DWORD_FETCH_ADD</span>
-<a name="l00447"></a>00447 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchadd8 tbb::internal::__TBB_FetchAndAddGeneric<8,uint64_t></span>
-<a name="l00448"></a>00448 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00449"></a>00449 <span class="preprocessor"></span>
-<a name="l00450"></a>00450 <span class="preprocessor">#if __TBB_USE_GENERIC_FETCH_STORE || __TBB_USE_GENERIC_PART_WORD_FETCH_STORE</span>
-<a name="l00451"></a>00451 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchstore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,uint8_t></span>
-<a name="l00452"></a>00452 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchstore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t></span>
-<a name="l00453"></a>00453 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00454"></a>00454 <span class="preprocessor"></span>
-<a name="l00455"></a>00455 <span class="preprocessor">#if __TBB_USE_GENERIC_FETCH_STORE </span>
-<a name="l00456"></a>00456 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchstore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t></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">#if __TBB_USE_GENERIC_FETCH_STORE || __TBB_USE_GENERIC_DWORD_FETCH_STORE</span>
-<a name="l00460"></a>00460 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchstore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,uint64_t></span>
-<a name="l00461"></a>00461 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00462"></a>00462 <span class="preprocessor"></span>
-<a name="l00463"></a>00463 <span class="preprocessor">#if __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE</span>
-<a name="l00464"></a>00464 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(S)                                             \</span>
-<a name="l00465"></a>00465 <span class="preprocessor">    atomic_selector<S>::word atomic_selector<S>::fetch_store ( volatile void* location, word value ) {  \</span>
-<a name="l00466"></a>00466 <span class="preprocessor">        return __TBB_machine_fetchstore##S( location, value );                                          \</span>
-<a name="l00467"></a>00467 <span class="preprocessor">    }</span>
-<a name="l00468"></a>00468 <span class="preprocessor"></span>
-<a name="l00469"></a>00469 __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(1)
-<a name="l00470"></a>00470 __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(2)
-<a name="l00471"></a>00471 __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(4)
-<a name="l00472"></a>00472 __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(8)
-<a name="l00473"></a>00473 
-<a name="l00474"></a>00474 <span class="preprocessor">#undef __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE</span>
-<a name="l00475"></a>00475 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */</span>
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477 <span class="preprocessor">#if __TBB_USE_GENERIC_DWORD_LOAD_STORE</span>
-<a name="l00478"></a>00478 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_machine_store8 (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, int64_t value) {
-<a name="l00479"></a>00479     <span class="keywordflow">for</span>(;;) {
-<a name="l00480"></a>00480         int64_t result = *(int64_t *)ptr;
-<a name="l00481"></a>00481         <span class="keywordflow">if</span>( __TBB_machine_cmpswp8(ptr,value,result)==result ) <span class="keywordflow">break</span>;
-<a name="l00482"></a>00482     }
-<a name="l00483"></a>00483 }
-<a name="l00484"></a>00484 
-<a name="l00485"></a>00485 <span class="keyword">inline</span> int64_t __TBB_machine_load8 (<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr) {
-<a name="l00486"></a>00486     <span class="comment">// Comparand and new value may be anything, they only must be equal, and</span>
-<a name="l00487"></a>00487     <span class="comment">// the value should have a low probability to be actually found in 'location'.</span>
-<a name="l00488"></a>00488     <span class="keyword">const</span> int64_t anyvalue = 2305843009213693951;
-<a name="l00489"></a>00489     <span class="keywordflow">return</span> __TBB_machine_cmpswp8(const_cast<volatile void *>(ptr),anyvalue,anyvalue);
-<a name="l00490"></a>00490 }
-<a name="l00491"></a>00491 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_USE_GENERIC_DWORD_LOAD_STORE */</span>
-<a name="l00492"></a>00492 
-<a name="l00493"></a>00493 <span class="preprocessor">#if __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE</span>
-<a name="l00494"></a>00494 <span class="preprocessor"></span>
-<a name="l00500"></a>00500 <span class="keyword">template</span> <<span class="keyword">typename</span> T, size_t S>
-<a name="l00501"></a>00501 <span class="keyword">struct </span>machine_load_store {
-<a name="l00502"></a>00502     <span class="keyword">static</span> T load_with_acquire ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
-<a name="l00503"></a>00503         T to_return = location;
-<a name="l00504"></a>00504         __TBB_acquire_consistency_helper();
-<a name="l00505"></a>00505         <span class="keywordflow">return</span> to_return;
-<a name="l00506"></a>00506     }
-<a name="l00507"></a>00507     <span class="keyword">static</span> <span class="keywordtype">void</span> store_with_release ( <span class="keyword">volatile</span> T &location, T value ) {
-<a name="l00508"></a>00508         __TBB_release_consistency_helper();
-<a name="l00509"></a>00509         location = value;
-<a name="l00510"></a>00510     }
-<a name="l00511"></a>00511 };
-<a name="l00512"></a>00512 
-<a name="l00513"></a>00513 <span class="preprocessor">#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS</span>
-<a name="l00514"></a>00514 <span class="preprocessor"></span><span class="keyword">template</span> <<span class="keyword">typename</span> T>
-<a name="l00515"></a>00515 <span class="keyword">struct </span>machine_load_store<T,8> {
-<a name="l00516"></a>00516     <span class="keyword">static</span> T load_with_acquire ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
-<a name="l00517"></a>00517         <span class="keywordflow">return</span> (T)__TBB_machine_load8( (<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location );
-<a name="l00518"></a>00518     }
-<a name="l00519"></a>00519     <span class="keyword">static</span> <span class="keywordtype">void</span> store_with_release ( <span class="keyword">volatile</span> T& location, T value ) {
-<a name="l00520"></a>00520         __TBB_machine_store8( (<span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location, (int64_t)value );
-<a name="l00521"></a>00521     }
-<a name="l00522"></a>00522 };
-<a name="l00523"></a>00523 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */</span>
-<a name="l00524"></a>00524 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE */</span>
-<a name="l00525"></a>00525 
-<a name="l00526"></a>00526 <span class="keyword">template</span> <<span class="keyword">typename</span> T, size_t S>
-<a name="l00527"></a>00527 <span class="keyword">struct </span>machine_load_store_seq_cst {
-<a name="l00528"></a>00528     <span class="keyword">static</span> T load ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
-<a name="l00529"></a>00529         __TBB_full_memory_fence();
-<a name="l00530"></a>00530         <span class="keywordflow">return</span> machine_load_store<T,S>::load_with_acquire( location );
-<a name="l00531"></a>00531     }
-<a name="l00532"></a>00532 <span class="preprocessor">#if __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE</span>
-<a name="l00533"></a>00533 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keywordtype">void</span> store ( <span class="keyword">volatile</span> T &location, T value ) {
-<a name="l00534"></a>00534         atomic_selector<S>::fetch_store( (<span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location, (<span class="keyword">typename</span> atomic_selector<S>::word)value );
-<a name="l00535"></a>00535     }
-<a name="l00536"></a>00536 <span class="preprocessor">#else </span><span class="comment">/* !__TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */</span>
-<a name="l00537"></a>00537     <span class="keyword">static</span> <span class="keywordtype">void</span> store ( <span class="keyword">volatile</span> T &location, T value ) {
-<a name="l00538"></a>00538         machine_load_store<T,S>::store_with_release( location, value );
-<a name="l00539"></a>00539         __TBB_full_memory_fence();
-<a name="l00540"></a>00540     }
-<a name="l00541"></a>00541 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */</span>
-<a name="l00542"></a>00542 };
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544 <span class="preprocessor">#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS</span>
-<a name="l00545"></a>00545 <span class="preprocessor"></span>
-<a name="l00547"></a>00547 <span class="keyword">template</span> <<span class="keyword">typename</span> T>
-<a name="l00548"></a><a class="code" href="a00268.html">00548</a> <span class="keyword">struct </span>machine_load_store_seq_cst<T,8> {
-<a name="l00549"></a>00549     <span class="keyword">static</span> T load ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
-<a name="l00550"></a>00550         <span class="comment">// Comparand and new value may be anything, they only must be equal, and</span>
-<a name="l00551"></a>00551         <span class="comment">// the value should have a low probability to be actually found in 'location'.</span>
-<a name="l00552"></a>00552         <span class="keyword">const</span> int64_t anyvalue = 2305843009213693951ll;
-<a name="l00553"></a>00553         <span class="keywordflow">return</span> __TBB_machine_cmpswp8( (<span class="keyword">volatile</span> <span class="keywordtype">void</span>*)const_cast<volatile T*>(&location), anyvalue, anyvalue );
-<a name="l00554"></a>00554     }
-<a name="l00555"></a>00555     <span class="keyword">static</span> <span class="keywordtype">void</span> store ( <span class="keyword">volatile</span> T &location, T value ) {
-<a name="l00556"></a>00556         int64_t result = (<span class="keyword">volatile</span> int64_t&)location;
-<a name="l00557"></a>00557         <span class="keywordflow">while</span> ( __TBB_machine_cmpswp8((<span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location, (int64_t)value, result) != result )
-<a name="l00558"></a>00558             result = (<span class="keyword">volatile</span> int64_t&)location;
-<a name="l00559"></a>00559     }
-<a name="l00560"></a>00560 };
-<a name="l00561"></a>00561 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */</span>
-<a name="l00562"></a>00562 
-<a name="l00563"></a>00563 <span class="preprocessor">#if __TBB_USE_GENERIC_RELAXED_LOAD_STORE</span>
-<a name="l00564"></a>00564 <span class="preprocessor"></span><span class="comment">// Relaxed operations add volatile qualifier to prevent compiler from optimizing them out.</span>
-<a name="l00568"></a>00568 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">typename</span> T, size_t S>
-<a name="l00569"></a><a class="code" href="a00267.html">00569</a> <span class="keyword">struct </span><a class="code" href="a00267.html">machine_load_store_relaxed</a> {
-<a name="l00570"></a>00570     <span class="keyword">static</span> <span class="keyword">inline</span> T load ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
-<a name="l00571"></a>00571         <span class="keywordflow">return</span> location;
-<a name="l00572"></a>00572     }
-<a name="l00573"></a>00573     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> store ( <span class="keyword">volatile</span> T& location, T value ) {
-<a name="l00574"></a>00574         location = value;
-<a name="l00575"></a>00575     }
-<a name="l00576"></a>00576 };
-<a name="l00577"></a>00577 
-<a name="l00578"></a>00578 <span class="preprocessor">#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS</span>
-<a name="l00579"></a>00579 <span class="preprocessor"></span><span class="keyword">template</span> <<span class="keyword">typename</span> T>
-<a name="l00580"></a>00580 <span class="keyword">struct </span><a class="code" href="a00267.html">machine_load_store_relaxed</a><T,8> {
-<a name="l00581"></a>00581     <span class="keyword">static</span> <span class="keyword">inline</span> T load ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
-<a name="l00582"></a>00582         <span class="keywordflow">return</span> (T)__TBB_machine_load8( (<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location );
-<a name="l00583"></a>00583     }
-<a name="l00584"></a>00584     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> store ( <span class="keyword">volatile</span> T& location, T value ) {
-<a name="l00585"></a>00585         __TBB_machine_store8( (<span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location, (int64_t)value );
-<a name="l00586"></a>00586     }
-<a name="l00587"></a>00587 };
-<a name="l00588"></a>00588 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */</span>
-<a name="l00589"></a>00589 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_USE_GENERIC_RELAXED_LOAD_STORE */</span>
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00592"></a>00592 <span class="keyword">inline</span> T __TBB_load_with_acquire(<span class="keyword">const</span> <span class="keyword">volatile</span> T &location) {
-<a name="l00593"></a>00593     <span class="keywordflow">return</span> machine_load_store<T,sizeof(T)>::load_with_acquire( location );
-<a name="l00594"></a>00594 }
-<a name="l00595"></a>00595 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> V>
-<a name="l00596"></a>00596 <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="l00597"></a>00597     machine_load_store<T,sizeof(T)>::store_with_release( location, T(value) );
-<a name="l00598"></a>00598 }
-<a name="l00600"></a>00600 <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_with_release(<span class="keyword">volatile</span> size_t& location, size_t value) {
-<a name="l00601"></a>00601     machine_load_store<size_t,sizeof(size_t)>::store_with_release( location, value );
-<a name="l00602"></a>00602 }
-<a name="l00603"></a>00603 
-<a name="l00604"></a>00604 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00605"></a>00605 <span class="keyword">inline</span> T __TBB_load_full_fence(<span class="keyword">const</span> <span class="keyword">volatile</span> T &location) {
-<a name="l00606"></a>00606     <span class="keywordflow">return</span> machine_load_store_seq_cst<T,sizeof(T)>::load( location );
-<a name="l00607"></a>00607 }
-<a name="l00608"></a>00608 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> V>
-<a name="l00609"></a>00609 <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_full_fence(<span class="keyword">volatile</span> T& location, V value) {
-<a name="l00610"></a>00610     machine_load_store_seq_cst<T,sizeof(T)>::store( location, T(value) );
-<a name="l00611"></a>00611 }
-<a name="l00613"></a>00613 <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_full_fence(<span class="keyword">volatile</span> size_t& location, size_t value) {
-<a name="l00614"></a>00614     machine_load_store_seq_cst<size_t,sizeof(size_t)>::store( location, value );
-<a name="l00615"></a>00615 }
-<a name="l00616"></a>00616 
-<a name="l00617"></a>00617 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00618"></a>00618 <span class="keyword">inline</span> T __TBB_load_relaxed (<span class="keyword">const</span> <span class="keyword">volatile</span> T& location) {
-<a name="l00619"></a>00619     <span class="keywordflow">return</span> machine_load_store_relaxed<T,sizeof(T)>::load( const_cast<T&>(location) );
-<a name="l00620"></a>00620 }
-<a name="l00621"></a>00621 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> V>
-<a name="l00622"></a>00622 <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_relaxed ( <span class="keyword">volatile</span> T& location, V value ) {
-<a name="l00623"></a>00623     machine_load_store_relaxed<T,sizeof(T)>::store( const_cast<T&>(location), T(value) );
-<a name="l00624"></a>00624 }
-<a name="l00626"></a>00626 <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_relaxed ( <span class="keyword">volatile</span> size_t& location, size_t value ) {
-<a name="l00627"></a>00627     machine_load_store_relaxed<size_t,sizeof(size_t)>::store( const_cast<size_t&>(location), value );
-<a name="l00628"></a>00628 }
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630 <span class="comment">// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as </span>
-<a name="l00631"></a>00631 <span class="comment">// strict as type T.  The type should have a trivial default constructor and destructor, so that</span>
-<a name="l00632"></a>00632 <span class="comment">// arrays of that type can be declared without initializers.</span>
-<a name="l00633"></a>00633 <span class="comment">// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands</span>
-<a name="l00634"></a>00634 <span class="comment">// to a type bigger than T.</span>
-<a name="l00635"></a>00635 <span class="comment">// The default definition here works on machines where integers are naturally aligned and the</span>
-<a name="l00636"></a>00636 <span class="comment">// strictest alignment is 64.</span>
-<a name="l00637"></a>00637 <span class="preprocessor">#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict</span>
-<a name="l00638"></a>00638 <span class="preprocessor"></span>
-<a name="l00639"></a>00639 <span class="preprocessor">#if __TBB_ATTRIBUTE_ALIGNED_PRESENT</span>
-<a name="l00640"></a>00640 <span class="preprocessor"></span>
-<a name="l00641"></a>00641 <span class="preprocessor">#define __TBB_DefineTypeWithAlignment(PowerOf2)       \</span>
-<a name="l00642"></a>00642 <span class="preprocessor">struct __TBB_machine_type_with_alignment_##PowerOf2 { \</span>
-<a name="l00643"></a>00643 <span class="preprocessor">    uint32_t member[PowerOf2/sizeof(uint32_t)];       \</span>
-<a name="l00644"></a>00644 <span class="preprocessor">} __attribute__((aligned(PowerOf2)));</span>
-<a name="l00645"></a>00645 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_alignof(T) __alignof__(T)</span>
-<a name="l00646"></a>00646 <span class="preprocessor"></span>
-<a name="l00647"></a>00647 <span class="preprocessor">#elif __TBB_DECLSPEC_ALIGN_PRESENT</span>
-<a name="l00648"></a>00648 <span class="preprocessor"></span>
-<a name="l00649"></a>00649 <span class="preprocessor">#define __TBB_DefineTypeWithAlignment(PowerOf2)       \</span>
-<a name="l00650"></a>00650 <span class="preprocessor">__declspec(align(PowerOf2))                           \</span>
-<a name="l00651"></a>00651 <span class="preprocessor">struct __TBB_machine_type_with_alignment_##PowerOf2 { \</span>
-<a name="l00652"></a>00652 <span class="preprocessor">    uint32_t member[PowerOf2/sizeof(uint32_t)];       \</span>
-<a name="l00653"></a>00653 <span class="preprocessor">};</span>
-<a name="l00654"></a>00654 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_alignof(T) __alignof(T)</span>
-<a name="l00655"></a>00655 <span class="preprocessor"></span>
-<a name="l00656"></a>00656 <span class="preprocessor">#else </span><span class="comment">/* A compiler with unknown syntax for data alignment */</span>
-<a name="l00657"></a>00657 <span class="preprocessor">#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T)</span>
-<a name="l00658"></a>00658 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00659"></a>00659 <span class="preprocessor"></span>
-<a name="l00660"></a>00660 <span class="comment">/* Now declare types aligned to useful powers of two */</span>
-<a name="l00661"></a>00661 <span class="comment">// TODO: Is __TBB_DefineTypeWithAlignment(8) needed on 32 bit platforms?</span>
-<a name="l00662"></a>00662 __TBB_DefineTypeWithAlignment(16)
-<a name="l00663"></a>00663 __TBB_DefineTypeWithAlignment(32)
-<a name="l00664"></a>00664 __TBB_DefineTypeWithAlignment(64)
-<a name="l00665"></a>00665 
-<a name="l00666"></a>00666 typedef __TBB_machine_type_with_alignment_64 __TBB_machine_type_with_strictest_alignment;
-<a name="l00667"></a>00667 
-<a name="l00668"></a>00668 <span class="comment">// Primary template is a declaration of incomplete type so that it fails with unknown alignments</span>
-<a name="l00669"></a>00669 template<size_t N> struct type_with_alignment;
-<a name="l00670"></a>00670 
-<a name="l00671"></a>00671 <span class="comment">// Specializations for allowed alignments</span>
-<a name="l00672"></a>00672 template<> struct type_with_alignment<1> { <span class="keywordtype">char</span> member; };
-<a name="l00673"></a>00673 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<2> { uint16_t member; };
-<a name="l00674"></a>00674 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<4> { uint32_t member; };
-<a name="l00675"></a>00675 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<8> { uint64_t member; };
-<a name="l00676"></a>00676 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<16> {__TBB_machine_type_with_alignment_16 member; };
-<a name="l00677"></a>00677 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<32> {__TBB_machine_type_with_alignment_32 member; };
-<a name="l00678"></a>00678 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<64> {__TBB_machine_type_with_alignment_64 member; };
-<a name="l00679"></a>00679 
-<a name="l00680"></a>00680 <span class="preprocessor">#if __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN  </span>
-<a name="l00682"></a>00682 <span class="preprocessor"></span>
-<a name="l00684"></a>00684 <span class="preprocessor">template<size_t Size, typename T></span>
-<a name="l00685"></a><a class="code" href="a00325.html">00685</a> <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00325.html">work_around_alignment_bug</a> {
-<a name="l00686"></a>00686     <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __TBB_alignof(T);
-<a name="l00687"></a>00687 };
-<a name="l00688"></a>00688 <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="l00689"></a>00689 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00690"></a>00690 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__TBB_alignof(T)></span>
-<a name="l00691"></a>00691 <span class="preprocessor"></span><span class="preprocessor">#endif  </span><span class="comment">/* __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN */</span>
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693 <span class="preprocessor">#endif  </span><span class="comment">/* __TBB_TypeWithAlignmentAtLeastAsStrict */</span>
-<a name="l00694"></a>00694 
-<a name="l00695"></a>00695 <span class="comment">// Template class here is to avoid instantiation of the static data for modules that don't use it</span>
-<a name="l00696"></a>00696 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00697"></a>00697 <span class="keyword">struct </span>reverse {
-<a name="l00698"></a>00698     <span class="keyword">static</span> <span class="keyword">const</span> T byte_table[256];
-<a name="l00699"></a>00699 };
-<a name="l00700"></a>00700 <span class="comment">// An efficient implementation of the reverse function utilizes a 2^8 lookup table holding the bit-reversed</span>
-<a name="l00701"></a>00701 <span class="comment">// values of [0..2^8 - 1]. Those values can also be computed on the fly at a slightly higher cost.</span>
-<a name="l00702"></a>00702 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00703"></a>00703 <span class="keyword">const</span> T reverse<T>::byte_table[256] = {
-<a name="l00704"></a>00704     0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
-<a name="l00705"></a>00705     0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
-<a name="l00706"></a>00706     0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
-<a name="l00707"></a>00707     0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
-<a name="l00708"></a>00708     0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
-<a name="l00709"></a>00709     0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
-<a name="l00710"></a>00710     0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
-<a name="l00711"></a>00711     0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
-<a name="l00712"></a>00712     0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
-<a name="l00713"></a>00713     0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
-<a name="l00714"></a>00714     0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
-<a name="l00715"></a>00715     0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
-<a name="l00716"></a>00716     0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
-<a name="l00717"></a>00717     0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
-<a name="l00718"></a>00718     0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
-<a name="l00719"></a>00719     0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
-<a name="l00720"></a>00720 };
-<a name="l00721"></a>00721 
-<a name="l00722"></a>00722 } <span class="comment">// namespace internal</span>
-<a name="l00723"></a>00723 } <span class="comment">// namespace tbb</span>
-<a name="l00724"></a>00724 
-<a name="l00725"></a>00725 <span class="comment">// Preserving access to legacy APIs</span>
-<a name="l00726"></a>00726 <span class="keyword">using</span> tbb::internal::__TBB_load_with_acquire;
-<a name="l00727"></a>00727 <span class="keyword">using</span> tbb::internal::__TBB_store_with_release;
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729 <span class="comment">// Mapping historically used names to the ones expected by atomic_load_store_traits</span>
-<a name="l00730"></a>00730 <span class="preprocessor">#define __TBB_load_acquire  __TBB_load_with_acquire</span>
-<a name="l00731"></a>00731 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_store_release __TBB_store_with_release</span>
-<a name="l00732"></a>00732 <span class="preprocessor"></span>
-<a name="l00733"></a>00733 <span class="preprocessor">#ifndef __TBB_Log2</span>
-<a name="l00734"></a>00734 <span class="preprocessor"></span><span class="keyword">inline</span> intptr_t __TBB_Log2( uintptr_t x ) {
-<a name="l00735"></a>00735     <span class="keywordflow">if</span>( x==0 ) <span class="keywordflow">return</span> -1;
-<a name="l00736"></a>00736     intptr_t result = 0;
-<a name="l00737"></a>00737     uintptr_t tmp;
-<a name="l00738"></a>00738 <span class="preprocessor">#if __TBB_WORDSIZE>=8</span>
-<a name="l00739"></a>00739 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>32) ) { x=tmp; result += 32; }
-<a name="l00740"></a>00740 <span class="preprocessor">#endif</span>
-<a name="l00741"></a>00741 <span class="preprocessor"></span>    <span class="keywordflow">if</span>( (tmp = x>>16) ) { x=tmp; result += 16; }
-<a name="l00742"></a>00742     <span class="keywordflow">if</span>( (tmp = x>>8) )  { x=tmp; result += 8; }
-<a name="l00743"></a>00743     <span class="keywordflow">if</span>( (tmp = x>>4) )  { x=tmp; result += 4; }
-<a name="l00744"></a>00744     <span class="keywordflow">if</span>( (tmp = x>>2) )  { x=tmp; result += 2; }
-<a name="l00745"></a>00745     <span class="keywordflow">return</span> (x&2)? result+1: result;
-<a name="l00746"></a>00746 }
-<a name="l00747"></a>00747 <span class="preprocessor">#endif</span>
-<a name="l00748"></a>00748 <span class="preprocessor"></span>
-<a name="l00749"></a>00749 <span class="preprocessor">#ifndef __TBB_AtomicOR</span>
-<a name="l00750"></a>00750 <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="l00751"></a>00751     <a class="code" href="a00230.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00752"></a>00752     <span class="keywordflow">for</span>(;;) {
-<a name="l00753"></a>00753         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
-<a name="l00754"></a>00754         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
-<a name="l00755"></a>00755         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
-<a name="l00756"></a>00756         b.<a class="code" href="a00230.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00757"></a>00757     }
-<a name="l00758"></a>00758 }
-<a name="l00759"></a>00759 <span class="preprocessor">#endif</span>
-<a name="l00760"></a>00760 <span class="preprocessor"></span>
-<a name="l00761"></a>00761 <span class="preprocessor">#ifndef __TBB_AtomicAND</span>
-<a name="l00762"></a>00762 <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="l00763"></a>00763     <a class="code" href="a00230.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00764"></a>00764     <span class="keywordflow">for</span>(;;) {
-<a name="l00765"></a>00765         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
-<a name="l00766"></a>00766         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);
-<a name="l00767"></a>00767         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
-<a name="l00768"></a>00768         b.<a class="code" href="a00230.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00769"></a>00769     }
-<a name="l00770"></a>00770 }
-<a name="l00771"></a>00771 <span class="preprocessor">#endif</span>
-<a name="l00772"></a>00772 <span class="preprocessor"></span>
-<a name="l00773"></a>00773 <span class="preprocessor">#ifndef __TBB_Flag</span>
-<a name="l00774"></a>00774 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> __TBB_Flag;
-<a name="l00775"></a>00775 <span class="preprocessor">#endif</span>
-<a name="l00776"></a>00776 <span class="preprocessor"></span><span class="keyword">typedef</span> __TBB_atomic __TBB_Flag __TBB_atomic_flag;
-<a name="l00777"></a>00777 
-<a name="l00778"></a>00778 <span class="preprocessor">#ifndef __TBB_TryLockByte</span>
-<a name="l00779"></a>00779 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> __TBB_TryLockByte( __TBB_atomic_flag &flag ) {
-<a name="l00780"></a>00780     <span class="keywordflow">return</span> __TBB_machine_cmpswp1(&flag,1,0)==0;
-<a name="l00781"></a>00781 }
-<a name="l00782"></a>00782 <span class="preprocessor">#endif</span>
-<a name="l00783"></a>00783 <span class="preprocessor"></span>
-<a name="l00784"></a>00784 <span class="preprocessor">#ifndef __TBB_LockByte</span>
-<a name="l00785"></a>00785 <span class="preprocessor"></span><span class="keyword">inline</span> __TBB_Flag __TBB_LockByte( __TBB_atomic_flag& flag ) {
-<a name="l00786"></a>00786     <span class="keywordflow">if</span> ( !__TBB_TryLockByte(flag) ) {
-<a name="l00787"></a>00787         <a class="code" href="a00230.html">tbb::internal::atomic_backoff</a> b;
-<a name="l00788"></a>00788         <span class="keywordflow">do</span> {
-<a name="l00789"></a>00789             b.<a class="code" href="a00230.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
-<a name="l00790"></a>00790         } <span class="keywordflow">while</span> ( !__TBB_TryLockByte(flag) );
-<a name="l00791"></a>00791     }
-<a name="l00792"></a>00792     <span class="keywordflow">return</span> 0;
-<a name="l00793"></a>00793 }
-<a name="l00794"></a>00794 <span class="preprocessor">#endif</span>
-<a name="l00795"></a>00795 <span class="preprocessor"></span>
-<a name="l00796"></a>00796 <span class="preprocessor">#define __TBB_UnlockByte __TBB_store_with_release</span>
-<a name="l00797"></a>00797 <span class="preprocessor"></span>
-<a name="l00798"></a>00798 <span class="preprocessor">#ifndef __TBB_ReverseByte</span>
-<a name="l00799"></a>00799 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> __TBB_ReverseByte(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> src) {
-<a name="l00800"></a>00800     <span class="keywordflow">return</span> tbb::internal::reverse<unsigned char>::byte_table[src];
-<a name="l00801"></a>00801 }
-<a name="l00802"></a>00802 <span class="preprocessor">#endif</span>
-<a name="l00803"></a>00803 <span class="preprocessor"></span>
-<a name="l00804"></a>00804 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00805"></a>00805 T __TBB_ReverseBits(T src) {
-<a name="l00806"></a>00806     T dst;
-<a name="l00807"></a>00807     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *original = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &src;
-<a name="l00808"></a>00808     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *reversed = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &dst;
-<a name="l00809"></a>00809 
-<a name="l00810"></a>00810     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = <span class="keyword">sizeof</span>(T)-1; i >= 0; i-- )
-<a name="l00811"></a>00811         reversed[i] = __TBB_ReverseByte( original[<span class="keyword">sizeof</span>(T)-i-1] );
-<a name="l00812"></a>00812 
-<a name="l00813"></a>00813     <span class="keywordflow">return</span> dst;
-<a name="l00814"></a>00814 }
-<a name="l00815"></a>00815 
-<a name="l00816"></a>00816 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_machine_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00600.html b/doc/html/a00600.html
deleted file mode 100644
index e75183f..0000000
--- a/doc/html/a00600.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>tbb_profiling.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_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-2011 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_profiling_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_profiling_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="comment">// Check if the tools support is enabled</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#if (_WIN32||_WIN64||__linux__) && !__MINGW32__ && TBB_USE_THREADING_TOOLS</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#include <stdlib.h></span>  <span class="comment">/* mbstowcs_s */</span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_stddef.h"</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="keyword">namespace </span>tbb {
-<a name="l00033"></a>00033     <span class="keyword">namespace </span>internal {
-<a name="l00034"></a>00034 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>        <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_set_sync_name_v3( <span class="keywordtype">void</span> *obj, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* name ); 
-<a name="l00036"></a>00036         <span class="keyword">inline</span> size_t multibyte_to_widechar( <span class="keywordtype">wchar_t</span>* wcs, <span class="keyword">const</span> <span class="keywordtype">char</span>* mbs, size_t bufsize) {
-<a name="l00037"></a>00037 <span class="preprocessor">#if _MSC_VER>=1400</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>            size_t len;
-<a name="l00039"></a>00039             mbstowcs_s( &len, wcs, bufsize, mbs, _TRUNCATE );
-<a name="l00040"></a>00040             <span class="keywordflow">return</span> len;   <span class="comment">// mbstowcs_s counts null terminator</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#else</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span>            size_t len = mbstowcs( wcs, mbs, bufsize );
-<a name="l00043"></a>00043             <span class="keywordflow">if</span>(wcs && len!=size_t(-1) )
-<a name="l00044"></a>00044                 wcs[len<bufsize-1? len: bufsize-1] = wchar_t(<span class="charliteral">'\0'</span>);
-<a name="l00045"></a>00045             <span class="keywordflow">return</span> len+1; <span class="comment">// mbstowcs does not count null terminator</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span>        }
-<a name="l00048"></a>00048 <span class="preprocessor">#else</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span>        <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_set_sync_name_v3( <span class="keywordtype">void</span> *obj, <span class="keyword">const</span> <span class="keywordtype">char</span>* name ); 
-<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span>    } <span class="comment">// namespace internal</span>
-<a name="l00052"></a>00052 } <span class="comment">// namespace tbb</span>
-<a name="l00053"></a>00053 
-<a name="l00055"></a>00055 
-<a name="l00057"></a>00057 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
-<a name="l00059"></a>00059 <span class="preprocessor">        namespace profiling {                                                       \</span>
-<a name="l00060"></a>00060 <span class="preprocessor">            inline void set_name( sync_object_type& obj, const wchar_t* name ) {    \</span>
-<a name="l00061"></a>00061 <span class="preprocessor">                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \</span>
-<a name="l00062"></a>00062 <span class="preprocessor">            }                                                                       \</span>
-<a name="l00063"></a>00063 <span class="preprocessor">            inline void set_name( sync_object_type& obj, const char* name ) {       \</span>
-<a name="l00064"></a>00064 <span class="preprocessor">                size_t len = tbb::internal::multibyte_to_widechar(NULL, name, 0);   \</span>
-<a name="l00065"></a>00065 <span class="preprocessor">                wchar_t *wname = new wchar_t[len];                                  \</span>
-<a name="l00066"></a>00066 <span class="preprocessor">                tbb::internal::multibyte_to_widechar(wname, name, len);             \</span>
-<a name="l00067"></a>00067 <span class="preprocessor">                set_name( obj, wname );                                             \</span>
-<a name="l00068"></a>00068 <span class="preprocessor">                delete[] wname;                                                     \</span>
-<a name="l00069"></a>00069 <span class="preprocessor">            }                                                                       \</span>
-<a name="l00070"></a>00070 <span class="preprocessor">        }</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !WIN */</span>
-<a name="l00072"></a>00072 <span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
-<a name="l00073"></a>00073 <span class="preprocessor">        namespace profiling {                                                       \</span>
-<a name="l00074"></a>00074 <span class="preprocessor">            inline void set_name( sync_object_type& obj, const char* name ) {       \</span>
-<a name="l00075"></a>00075 <span class="preprocessor">                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \</span>
-<a name="l00076"></a>00076 <span class="preprocessor">            }                                                                       \</span>
-<a name="l00077"></a>00077 <span class="preprocessor">        }</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !WIN */</span>
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="preprocessor">#else </span><span class="comment">/* no tools support */</span>
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
-<a name="l00084"></a>00084 <span class="preprocessor">        namespace profiling {                                               \</span>
-<a name="l00085"></a>00085 <span class="preprocessor">            inline void set_name( sync_object_type&, const wchar_t* ) {}    \</span>
-<a name="l00086"></a>00086 <span class="preprocessor">            inline void set_name( sync_object_type&, const char* ) {}       \</span>
-<a name="l00087"></a>00087 <span class="preprocessor">        }</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !WIN */</span>
-<a name="l00089"></a>00089 <span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
-<a name="l00090"></a>00090 <span class="preprocessor">        namespace profiling {                                               \</span>
-<a name="l00091"></a>00091 <span class="preprocessor">            inline void set_name( sync_object_type&, const char* ) {}       \</span>
-<a name="l00092"></a>00092 <span class="preprocessor">        }</span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !WIN */</span>
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="preprocessor">#endif </span><span class="comment">/* no tools support */</span>
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 <span class="preprocessor">#include "atomic.h"</span>
-<a name="l00098"></a>00098 <span class="comment">// Need these to work regardless of tools support</span>
-<a name="l00099"></a>00099 <span class="keyword">namespace </span>tbb {
-<a name="l00100"></a>00100     <span class="keyword">namespace </span>internal {
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102         <span class="keyword">enum</span> notify_type {prepare=0, cancel, acquired, releasing};
-<a name="l00103"></a>00103         <span class="keyword">const</span> uintptr_t NUM_NOTIFY_TYPES = 4; <span class="comment">// set to # elements in enum above</span>
-<a name="l00104"></a>00104         
-<a name="l00105"></a>00105         <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC call_itt_notify_v5(<span class="keywordtype">int</span> t, <span class="keywordtype">void</span> *ptr);
-<a name="l00106"></a>00106         <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="l00107"></a>00107         <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="l00108"></a>00108         <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="l00109"></a>00109 
-<a name="l00110"></a>00110         <span class="comment">// two template arguments are to workaround /Wp64 warning with tbb::atomic specialized for unsigned type</span>
-<a name="l00111"></a>00111         <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-<a name="l00112"></a>00112         <span class="keyword">inline</span> <span class="keywordtype">void</span> itt_store_word_with_release(<a class="code" href="a00228.html">tbb::atomic<T></a>& dst, U src) {
-<a name="l00113"></a>00113 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00114"></a>00114 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
-<a name="l00115"></a>00115             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized."</span>);
-<a name="l00116"></a>00116             itt_store_pointer_with_release_v3(&dst, (<span class="keywordtype">void</span> *)uintptr_t(src));
-<a name="l00117"></a>00117 <span class="preprocessor">#else</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span>            dst = src;
-<a name="l00119"></a>00119 <span class="preprocessor">#endif // TBB_USE_THREADING_TOOLS</span>
-<a name="l00120"></a>00120 <span class="preprocessor"></span>        }
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122         <span class="keyword">template</span> <<span class="keyword">typename</span> T>
-<a name="l00123"></a>00123         <span class="keyword">inline</span> T itt_load_word_with_acquire(<span class="keyword">const</span> <a class="code" href="a00228.html">tbb::atomic<T></a>& src) {
-<a name="l00124"></a>00124 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00125"></a>00125 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
-<a name="l00126"></a>00126             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized."</span>);
-<a name="l00127"></a>00127 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span>            <span class="comment">// Workaround for overzealous compiler warnings </span>
-<a name="l00129"></a>00129 <span class="preprocessor">            #pragma warning (push)</span>
-<a name="l00130"></a>00130 <span class="preprocessor"></span><span class="preprocessor">            #pragma warning (disable: 4311)</span>
-<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00132"></a>00132 <span class="preprocessor"></span>            T result = (T)itt_load_pointer_with_acquire_v3(&src);
-<a name="l00133"></a>00133 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
-<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor">            #pragma warning (pop)</span>
-<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00136"></a>00136 <span class="preprocessor"></span>            <span class="keywordflow">return</span> result;
-<a name="l00137"></a>00137 <span class="preprocessor">#else</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span>            <span class="keywordflow">return</span> src;
-<a name="l00139"></a>00139 <span class="preprocessor">#endif // TBB_USE_THREADING_TOOLS</span>
-<a name="l00140"></a>00140 <span class="preprocessor"></span>        }
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142         <span class="keyword">template</span> <<span class="keyword">typename</span> T>
-<a name="l00143"></a>00143         <span class="keyword">inline</span> <span class="keywordtype">void</span> itt_store_word_with_release(T& dst, T src) {
-<a name="l00144"></a>00144 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00145"></a>00145 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
-<a name="l00146"></a>00146             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized."</span>);
-<a name="l00147"></a>00147             itt_store_pointer_with_release_v3(&dst, (<span class="keywordtype">void</span> *)src);
-<a name="l00148"></a>00148 <span class="preprocessor">#else</span>
-<a name="l00149"></a>00149 <span class="preprocessor"></span>            __TBB_store_with_release(dst, src); 
-<a name="l00150"></a>00150 <span class="preprocessor">#endif // TBB_USE_THREADING_TOOLS</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span>        }
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153         <span class="keyword">template</span> <<span class="keyword">typename</span> T>
-<a name="l00154"></a>00154         <span class="keyword">inline</span> T itt_load_word_with_acquire(<span class="keyword">const</span> T& src) {
-<a name="l00155"></a>00155 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00156"></a>00156 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
-<a name="l00157"></a>00157             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized"</span>);
-<a name="l00158"></a>00158             <span class="keywordflow">return</span> (T)itt_load_pointer_with_acquire_v3(&src);
-<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_load_with_acquire(src);
-<a name="l00161"></a>00161 <span class="preprocessor">#endif // TBB_USE_THREADING_TOOLS</span>
-<a name="l00162"></a>00162 <span class="preprocessor"></span>        }
-<a name="l00163"></a>00163         
-<a name="l00164"></a>00164         <span class="keyword">template</span> <<span class="keyword">typename</span> T>
-<a name="l00165"></a>00165         <span class="keyword">inline</span> <span class="keywordtype">void</span> itt_hide_store_word(T& dst, T src) {
-<a name="l00166"></a>00166 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00167"></a>00167 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
-<a name="l00168"></a>00168             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized"</span>);
-<a name="l00169"></a>00169             itt_store_pointer_with_release_v3(&dst, (<span class="keywordtype">void</span> *)src);
-<a name="l00170"></a>00170 <span class="preprocessor">#else</span>
-<a name="l00171"></a>00171 <span class="preprocessor"></span>            dst = src;
-<a name="l00172"></a>00172 <span class="preprocessor">#endif</span>
-<a name="l00173"></a>00173 <span class="preprocessor"></span>        }
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175         <span class="keyword">template</span> <<span class="keyword">typename</span> T>
-<a name="l00176"></a>00176         <span class="keyword">inline</span> T itt_hide_load_word(<span class="keyword">const</span> T& src) {
-<a name="l00177"></a>00177 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
-<a name="l00179"></a>00179             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized."</span>);
-<a name="l00180"></a>00180             <span class="keywordflow">return</span> (T)itt_load_pointer_v3(&src);
-<a name="l00181"></a>00181 <span class="preprocessor">#else</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span>            <span class="keywordflow">return</span> src;
-<a name="l00183"></a>00183 <span class="preprocessor">#endif</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span>        }
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
-<a name="l00187"></a>00187 <span class="preprocessor"></span>        <span class="keyword">inline</span> <span class="keywordtype">void</span> call_itt_notify(notify_type t, <span class="keywordtype">void</span> *ptr) {
-<a name="l00188"></a>00188             call_itt_notify_v5((<span class="keywordtype">int</span>)t, ptr);
-<a name="l00189"></a>00189         }
-<a name="l00190"></a>00190 <span class="preprocessor">#else</span>
-<a name="l00191"></a>00191 <span class="preprocessor"></span>        <span class="keyword">inline</span> <span class="keywordtype">void</span> call_itt_notify(notify_type <span class="comment">/*t*/</span>, <span class="keywordtype">void</span> * <span class="comment">/*ptr*/</span>) {}
-<a name="l00192"></a>00192 <span class="preprocessor">#endif // TBB_USE_THREADING_TOOLS</span>
-<a name="l00193"></a>00193 <span class="preprocessor"></span>
-<a name="l00194"></a>00194     } <span class="comment">// namespace internal</span>
-<a name="l00195"></a>00195 } <span class="comment">// namespace tbb</span>
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_profiling_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00601.html b/doc/html/a00601.html
deleted file mode 100644
index 70ad527..0000000
--- a/doc/html/a00601.html
+++ /dev/null
@@ -1,272 +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_stddef.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_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-2011 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_stddef_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_stddef_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 4</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define TBB_VERSION_MINOR 0</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 6000</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_X64)||defined(__x86_64__)  // the latter for MinGW support</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="comment">// tbb_config.h should be included the first since it contains macro definitions used in other headers</span>
-<a name="l00119"></a>00119 <span class="preprocessor">#include "tbb_config.h"</span>
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 <span class="preprocessor">#if _MSC_VER >=1400</span>
-<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXPORTED_FUNC   __cdecl</span>
-<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXPORTED_METHOD __thiscall</span>
-<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXPORTED_FUNC</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXPORTED_METHOD</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">#include <cstddef></span>      <span class="comment">/* Need size_t and ptrdiff_t */</span>
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00132"></a>00132 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_tbb_windef_H</span>
-<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor">    #include "internal/_tbb_windef.h"</span>
-<a name="l00134"></a>00134 <span class="preprocessor">    #undef __TBB_tbb_windef_H</span>
-<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">    #include <stdint.h></span>
-<a name="l00137"></a>00137 <span class="preprocessor">#endif</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span>
-<a name="l00140"></a>00140 <span class="keyword">namespace </span>tbb {
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span>    <span class="keyword">namespace </span>internal {
-<a name="l00144"></a>00144         <span class="keyword">typedef</span> __int8 int8_t;
-<a name="l00145"></a>00145         <span class="keyword">typedef</span> __int16 int16_t;
-<a name="l00146"></a>00146         <span class="keyword">typedef</span> __int32 int32_t;
-<a name="l00147"></a>00147         <span class="keyword">typedef</span> __int64 int64_t;
-<a name="l00148"></a>00148         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int8 uint8_t;
-<a name="l00149"></a>00149         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int16 uint16_t;
-<a name="l00150"></a>00150         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int32 uint32_t;
-<a name="l00151"></a>00151         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 uint64_t;
-<a name="l00152"></a>00152     } <span class="comment">// namespace internal</span>
-<a name="l00153"></a>00153 <span class="preprocessor">#else </span><span class="comment">/* Posix */</span>
-<a name="l00154"></a>00154     <span class="keyword">namespace </span>internal {
-<a name="l00155"></a>00155         using ::int8_t;
-<a name="l00156"></a>00156         using ::int16_t;
-<a name="l00157"></a>00157         using ::int32_t;
-<a name="l00158"></a>00158         using ::int64_t;
-<a name="l00159"></a>00159         using ::uint8_t;
-<a name="l00160"></a>00160         using ::uint16_t;
-<a name="l00161"></a>00161         using ::uint32_t;
-<a name="l00162"></a>00162         using ::uint64_t;
-<a name="l00163"></a>00163     } <span class="comment">// namespace internal</span>
-<a name="l00164"></a>00164 <span class="preprocessor">#endif </span><span class="comment">/* Posix */</span>
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     <span class="keyword">using</span> std::size_t;
-<a name="l00167"></a>00167     <span class="keyword">using</span> std::ptrdiff_t;
-<a name="l00168"></a>00168 
-<a name="l00170"></a><a class="code" href="a00383.html#ed375248ff6019a70ca0f9da528e5d0b">00170</a>     <span class="keyword">typedef</span> void(*<a class="code" href="a00383.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="l00171"></a>00171 
-<a name="l00172"></a>00172 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00173"></a>00173 <span class="preprocessor"></span>
-<a name="l00175"></a>00175 
-<a name="l00178"></a>00178 <span class="preprocessor">    #define __TBB_ASSERT(predicate,message) ((predicate)?((void)0):tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))</span>
-<a name="l00179"></a>00179 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_ASSERT_EX __TBB_ASSERT</span>
-<a name="l00180"></a>00180 <span class="preprocessor"></span>
-<a name="l00182"></a>00182     <a class="code" href="a00383.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> __TBB_EXPORTED_FUNC <a class="code" href="a00383.html#823fa1c15dd829d1d9167157450ddcd9">set_assertion_handler</a>( <a class="code" href="a00383.html#ed375248ff6019a70ca0f9da528e5d0b">assertion_handler_type</a> new_handler );
-<a name="l00183"></a>00183 
-<a name="l00185"></a>00185 
-<a name="l00188"></a>00188     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00383.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="l00189"></a>00189 
-<a name="l00190"></a>00190 <span class="preprocessor">#else </span><span class="comment">/* !TBB_USE_ASSERT */</span>
-<a name="l00191"></a>00191 
-<a name="l00193"></a>00193 <span class="preprocessor">    #define __TBB_ASSERT(predicate,comment) ((void)0)</span>
-<a name="l00195"></a>00195 <span class="preprocessor">    #define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))</span>
-<a name="l00196"></a>00196 <span class="preprocessor"></span>
-<a name="l00197"></a>00197 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_ASSERT */</span>
-<a name="l00198"></a>00198 
-<a name="l00200"></a>00200 
-<a name="l00204"></a>00204 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00383.html#a6858b22e90041c9c4669674ff39b056">TBB_runtime_interface_version</a>();
-<a name="l00205"></a>00205 
-<a name="l00207"></a>00207 
-<a name="l00211"></a><a class="code" href="a00309.html">00211</a> <span class="keyword">class </span><a class="code" href="a00309.html">split</a> {
-<a name="l00212"></a>00212 };
-<a name="l00213"></a>00213 
-<a name="l00218"></a>00218 <span class="keyword">namespace </span>internal {
-<a name="l00219"></a>00219 
-<a name="l00221"></a>00221 
-<a name="l00224"></a>00224 <span class="keyword">const</span> size_t NFS_MaxLineSize = 128;
-<a name="l00225"></a>00225 
-<a name="l00245"></a>00245 <span class="preprocessor">#define __TBB_atomic // intentionally empty, see above</span>
-<a name="l00246"></a>00246 <span class="preprocessor"></span>
-<a name="l00247"></a>00247 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keywordtype">int</span> S>
-<a name="l00248"></a>00248 <span class="keyword">struct </span>padded_base : T {
-<a name="l00249"></a>00249     <span class="keywordtype">char</span> pad[NFS_MaxLineSize - <span class="keyword">sizeof</span>(T) % NFS_MaxLineSize];
-<a name="l00250"></a>00250 };
-<a name="l00251"></a>00251 <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">struct </span>padded_base<T, 0> : T {};
-<a name="l00252"></a>00252 
-<a name="l00254"></a>00254 <span class="keyword">template</span><<span class="keyword">class</span> T>
-<a name="l00255"></a>00255 <span class="keyword">struct </span>padded : padded_base<T, sizeof(T)> {};
-<a name="l00256"></a>00256 
-<a name="l00258"></a>00258 
-<a name="l00260"></a>00260 <span class="preprocessor">#define __TBB_offsetof(class_name, member_name) \</span>
-<a name="l00261"></a>00261 <span class="preprocessor">    ((ptrdiff_t)&(reinterpret_cast<class_name*>(0x1000)->member_name) - 0x1000)</span>
-<a name="l00262"></a>00262 <span class="preprocessor"></span>
-<a name="l00264"></a>00264 <span class="preprocessor">#define __TBB_get_object_ref(class_name, member_name, member_addr) \</span>
-<a name="l00265"></a>00265 <span class="preprocessor">    (*reinterpret_cast<class_name*>((char*)member_addr - __TBB_offsetof(class_name, member_name)))</span>
-<a name="l00266"></a>00266 <span class="preprocessor"></span>
-<a name="l00268"></a>00268 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC handle_perror( <span class="keywordtype">int</span> error_code, <span class="keyword">const</span> <span class="keywordtype">char</span>* aux_info );
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
-<a name="l00271"></a>00271 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_TRY try</span>
-<a name="l00272"></a>00272 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CATCH(e) catch(e)</span>
-<a name="l00273"></a>00273 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_THROW(e) throw e</span>
-<a name="l00274"></a>00274 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_RETHROW() throw</span>
-<a name="l00275"></a>00275 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
-<a name="l00276"></a>00276     <span class="keyword">inline</span> <span class="keywordtype">bool</span> __TBB_false() { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
-<a name="l00277"></a>00277 <span class="preprocessor">    #define __TBB_TRY</span>
-<a name="l00278"></a>00278 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CATCH(e) if ( tbb::internal::__TBB_false() )</span>
-<a name="l00279"></a>00279 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_THROW(e) ((void)0)</span>
-<a name="l00280"></a>00280 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_RETHROW() ((void)0)</span>
-<a name="l00281"></a>00281 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
-<a name="l00282"></a>00282 
-<a name="l00284"></a>00284 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC runtime_warning( <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ... );
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 <span class="preprocessor">#if TBB_USE_ASSERT</span>
-<a name="l00287"></a>00287 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span>* <span class="keyword">const</span> poisoned_ptr = reinterpret_cast<void*>(-1);
-<a name="l00288"></a>00288 
-<a name="l00290"></a>00290 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00291"></a>00291 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T*& p ) { p = reinterpret_cast<T*>(poisoned_ptr); }
-<a name="l00292"></a>00292 
-<a name="l00294"></a>00294 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00295"></a>00295 <span class="keyword">inline</span> <span class="keywordtype">bool</span> is_poisoned( T* p ) { <span class="keywordflow">return</span> p == reinterpret_cast<T*>(poisoned_ptr); }
-<a name="l00296"></a>00296 <span class="preprocessor">#else</span>
-<a name="l00297"></a>00297 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00298"></a>00298 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* ) {<span class="comment">/*do nothing*/</span>}
-<a name="l00299"></a>00299 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_ASSERT */</span>
-<a name="l00300"></a>00300 
-<a name="l00302"></a>00302 
-<a name="l00304"></a>00304 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U> 
-<a name="l00305"></a>00305 <span class="keyword">inline</span> T punned_cast( U* ptr ) {
-<a name="l00306"></a>00306     uintptr_t x = reinterpret_cast<uintptr_t>(ptr);
-<a name="l00307"></a>00307     <span class="keywordflow">return</span> reinterpret_cast<T>(x);
-<a name="l00308"></a>00308 }
-<a name="l00309"></a>00309 
-<a name="l00311"></a>00311 <span class="keyword">class </span>no_assign {
-<a name="l00312"></a>00312     <span class="comment">// Deny assignment</span>
-<a name="l00313"></a>00313     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> no_assign& );
-<a name="l00314"></a>00314 <span class="keyword">public</span>:
-<a name="l00315"></a>00315 <span class="preprocessor">#if __GNUC__</span>
-<a name="l00317"></a>00317 <span class="preprocessor">    no_assign() {}</span>
-<a name="l00318"></a>00318 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
-<a name="l00319"></a>00319 };
-<a name="l00320"></a>00320 
-<a name="l00322"></a>00322 <span class="keyword">class </span>no_copy: no_assign {
-<a name="l00324"></a>00324     no_copy( <span class="keyword">const</span> no_copy& );
-<a name="l00325"></a>00325 <span class="keyword">public</span>:
-<a name="l00327"></a>00327     no_copy() {}
-<a name="l00328"></a>00328 };
-<a name="l00329"></a>00329 
-<a name="l00331"></a>00331 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00332"></a>00332 <span class="keyword">struct </span>allocator_type {
-<a name="l00333"></a>00333     <span class="keyword">typedef</span> T value_type;
-<a name="l00334"></a>00334 };
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00338"></a>00338 <span class="preprocessor">template<typename T></span>
-<a name="l00339"></a>00339 <span class="preprocessor"></span><span class="keyword">struct </span>allocator_type<const T> {
-<a name="l00340"></a>00340     <span class="keyword">typedef</span> T value_type;
-<a name="l00341"></a>00341 };
-<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="comment">// Struct to be used as a version tag for inline functions.</span>
-<a name="l00347"></a>00347 <span class="comment"></span><span class="keyword">struct </span>version_tag_v3 {};
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349 <span class="keyword">typedef</span> version_tag_v3 version_tag;
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351 } <span class="comment">// internal</span>
-<a name="l00353"></a>00353 <span class="comment"></span>
-<a name="l00354"></a>00354 } <span class="comment">// tbb</span>
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356 <span class="preprocessor">#endif </span><span class="comment">/* RC_INVOKED */</span>
-<a name="l00357"></a>00357 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_stddef_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00603.html b/doc/html/a00603.html
new file mode 100644
index 0000000..08d218c
--- /dev/null
+++ b/doc/html/a00603.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>queuing_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<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>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-2012 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_queuing_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_queuing_mutex_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_config.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
+<a name="l00028"></a>00028 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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">#include <cstring></span>
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="keyword">namespace </span>tbb {
+<a name="l00042"></a>00042 
+<a name="l00044"></a>00044 
+<a name="l00045"></a><a class="code" href="a00314.html">00045</a> <span class="keyword">class </span><a class="code" href="a00314.html">queuing_mutex</a> {
+<a name="l00046"></a>00046 <span class="keyword">public</span>:
+<a name="l00048"></a><a class="code" href="a00314.html#b389ad9c4db7293e4bdb5b8cda69ec04">00048</a>     <a class="code" href="a00314.html#b389ad9c4db7293e4bdb5b8cda69ec04">queuing_mutex</a>() {
+<a name="l00049"></a>00049         q_tail = NULL;
+<a name="l00050"></a>00050 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span>        internal_construct();
+<a name="l00052"></a>00052 <span class="preprocessor">#endif</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span>    }
+<a name="l00054"></a>00054 
+<a name="l00056"></a>00056 
+<a name="l00058"></a><a class="code" href="a00315.html">00058</a>     <span class="keyword">class </span><a class="code" href="a00315.html">scoped_lock</a>: internal::no_copy {
+<a name="l00060"></a>00060         <span class="keywordtype">void</span> initialize() {
+<a name="l00061"></a>00061             <a class="code" href="a00301.html">mutex</a> = NULL;
+<a name="l00062"></a>00062 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span>            internal::poison_pointer(next);
+<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     <span class="keyword">public</span>:
+<a name="l00069"></a>00069 
+<a name="l00070"></a><a class="code" href="a00315.html#db0fa3967491014572e24d6607bdc971">00070</a>         <a class="code" href="a00315.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>() {initialize();}
+<a name="l00071"></a>00071 
+<a name="l00073"></a><a class="code" href="a00315.html#9b51ef972f5618ac17caadb58841ab6d">00073</a>         <a class="code" href="a00315.html#db0fa3967491014572e24d6607bdc971">scoped_lock</a>( <a class="code" href="a00314.html">queuing_mutex</a>& m ) {
+<a name="l00074"></a>00074             initialize();
+<a name="l00075"></a>00075             <a class="code" href="a00315.html#533e4fc8355ee321206a0609c42d909d">acquire</a>(m);
+<a name="l00076"></a>00076         }
+<a name="l00077"></a>00077 
+<a name="l00079"></a><a class="code" href="a00315.html#ac2c576a93570957d694192a5f491443">00079</a>         <a class="code" href="a00315.html#ac2c576a93570957d694192a5f491443">~scoped_lock</a>() {
+<a name="l00080"></a>00080             <span class="keywordflow">if</span>( <a class="code" href="a00301.html">mutex</a> ) <a class="code" href="a00315.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>();
+<a name="l00081"></a>00081         }
+<a name="l00082"></a>00082 
+<a name="l00084"></a>00084         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00315.html#533e4fc8355ee321206a0609c42d909d">acquire</a>( <a class="code" href="a00314.html">queuing_mutex</a>& m );
+<a name="l00085"></a>00085 
+<a name="l00087"></a>00087         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00315.html#e5a014fb817599386a87170cf2cf51a9">try_acquire</a>( <a class="code" href="a00314.html">queuing_mutex</a>& m );
+<a name="l00088"></a>00088 
+<a name="l00090"></a>00090         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00315.html#3bf2b8c87ff22115be9b2eac179f2d30">release</a>();
+<a name="l00091"></a>00091 
+<a name="l00092"></a>00092     <span class="keyword">private</span>:
+<a name="l00094"></a>00094         <a class="code" href="a00314.html">queuing_mutex</a>* <a class="code" href="a00301.html">mutex</a>;
+<a name="l00095"></a>00095 
+<a name="l00097"></a>00097         <a class="code" href="a00315.html">scoped_lock</a> *next;
+<a name="l00098"></a>00098 
+<a name="l00100"></a>00100 
+<a name="l00103"></a>00103         uintptr_t going;
+<a name="l00104"></a>00104     };
+<a name="l00105"></a>00105 
+<a name="l00106"></a>00106     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00107"></a>00107 
+<a name="l00108"></a>00108     <span class="comment">// Mutex traits</span>
+<a name="l00109"></a>00109     <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="l00110"></a>00110     <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="l00111"></a>00111     <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="l00112"></a>00112 
+<a name="l00113"></a>00113 <span class="keyword">private</span>:
+<a name="l00115"></a>00115     <a class="code" href="a00254.html">atomic<scoped_lock*></a> q_tail;
+<a name="l00116"></a>00116 
+<a name="l00117"></a>00117 };
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119 __TBB_DEFINE_PROFILING_SET_NAME(queuing_mutex)
+<a name="l00120"></a>00120 
+<a name="l00121"></a>00121 } <span class="comment">// namespace tbb</span>
+<a name="l00122"></a>00122 
+<a name="l00123"></a>00123 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_queuing_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00604.html b/doc/html/a00604.html
new file mode 100644
index 0000000..c7351ca
--- /dev/null
+++ b/doc/html/a00604.html
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>queuing_rw_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<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>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-2012 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_queuing_rw_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_queuing_rw_mutex_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_config.h"</span>
+<a name="l00025"></a>00025 
+<a name="l00026"></a>00026 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
+<a name="l00028"></a>00028 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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">#include <cstring></span>
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="keyword">namespace </span>tbb {
+<a name="l00042"></a>00042 
+<a name="l00044"></a>00044 
+<a name="l00047"></a><a class="code" href="a00316.html">00047</a> <span class="keyword">class </span><a class="code" href="a00316.html">queuing_rw_mutex</a> {
+<a name="l00048"></a>00048 <span class="keyword">public</span>:
+<a name="l00050"></a><a class="code" href="a00316.html#85c90877c3447690ac4e2ac4ff8dea5e">00050</a>     <a class="code" href="a00316.html#85c90877c3447690ac4e2ac4ff8dea5e">queuing_rw_mutex</a>() {
+<a name="l00051"></a>00051         q_tail = NULL;
+<a name="l00052"></a>00052 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span>        internal_construct();
+<a name="l00054"></a>00054 <span class="preprocessor">#endif</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span>    }
+<a name="l00056"></a>00056 
+<a name="l00058"></a><a class="code" href="a00316.html#1ba73e3d95cfdf8323880bc623af9099">00058</a>     <a class="code" href="a00316.html#1ba73e3d95cfdf8323880bc623af9099">~queuing_rw_mutex</a>() {
+<a name="l00059"></a>00059 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>        __TBB_ASSERT( !q_tail, <span class="stringliteral">"destruction of an acquired mutex"</span>);
+<a name="l00061"></a>00061 <span class="preprocessor">#endif</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>    }
+<a name="l00063"></a>00063 
+<a name="l00065"></a>00065 
+<a name="l00067"></a><a class="code" href="a00317.html">00067</a>     <span class="keyword">class </span><a class="code" href="a00317.html">scoped_lock</a>: internal::no_copy {
+<a name="l00069"></a>00069         <span class="keywordtype">void</span> initialize() {
+<a name="l00070"></a>00070             my_mutex = NULL;
+<a name="l00071"></a>00071 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span>            my_state = 0xFF; <span class="comment">// Set to invalid state</span>
+<a name="l00073"></a>00073             internal::poison_pointer(my_next);
+<a name="l00074"></a>00074             internal::poison_pointer(my_prev);
+<a name="l00075"></a>00075 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00076"></a>00076         }
+<a name="l00077"></a>00077 
+<a name="l00078"></a>00078     <span class="keyword">public</span>:
+<a name="l00080"></a>00080 
+<a name="l00081"></a><a class="code" href="a00317.html#c62e365be7bcbba091c9ea7454a4d22c">00081</a>         <a class="code" href="a00317.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>() {initialize();}
+<a name="l00082"></a>00082 
+<a name="l00084"></a><a class="code" href="a00317.html#fbb8798792d3aebb136c46fc63d2529e">00084</a>         <a class="code" href="a00317.html#c62e365be7bcbba091c9ea7454a4d22c">scoped_lock</a>( <a class="code" href="a00316.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> ) {
+<a name="l00085"></a>00085             initialize();
+<a name="l00086"></a>00086             <a class="code" href="a00317.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>(m,write);
+<a name="l00087"></a>00087         }
+<a name="l00088"></a>00088 
+<a name="l00090"></a><a class="code" href="a00317.html#32c7d67a660d23ebbaab1a1d2826d31a">00090</a>         <a class="code" href="a00317.html#32c7d67a660d23ebbaab1a1d2826d31a">~scoped_lock</a>() {
+<a name="l00091"></a>00091             <span class="keywordflow">if</span>( my_mutex ) <a class="code" href="a00317.html#67ae221109ddc69510ab593874e435d4">release</a>();
+<a name="l00092"></a>00092         }
+<a name="l00093"></a>00093 
+<a name="l00095"></a>00095         <span class="keywordtype">void</span> <a class="code" href="a00317.html#a8dd5ab8686e76de21587544dbb681e0">acquire</a>( <a class="code" href="a00316.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
+<a name="l00096"></a>00096 
+<a name="l00098"></a>00098         <span class="keywordtype">bool</span> <a class="code" href="a00317.html#2e4ff6c9ec2fee6682f95290d1f42baa">try_acquire</a>( <a class="code" href="a00316.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
+<a name="l00099"></a>00099 
+<a name="l00101"></a>00101         <span class="keywordtype">void</span> <a class="code" href="a00317.html#67ae221109ddc69510ab593874e435d4">release</a>();
+<a name="l00102"></a>00102 
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105         <span class="keywordtype">bool</span> <a class="code" href="a00317.html#11ba1da4a722c9e6f73339a52c487e82">upgrade_to_writer</a>();
+<a name="l00106"></a>00106 
+<a name="l00108"></a>00108         <span class="keywordtype">bool</span> <a class="code" href="a00317.html#0d2f93edf7b15ec4bcee138823220c52">downgrade_to_reader</a>();
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110     <span class="keyword">private</span>:
+<a name="l00112"></a>00112         <a class="code" href="a00316.html">queuing_rw_mutex</a>* my_mutex;
+<a name="l00113"></a>00113 
+<a name="l00115"></a>00115         <a class="code" href="a00317.html">scoped_lock</a> *__TBB_atomic my_prev, *__TBB_atomic my_next;
+<a name="l00116"></a>00116 
+<a name="l00117"></a>00117         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state_t;
+<a name="l00118"></a>00118 
+<a name="l00120"></a>00120         <a class="code" href="a00254.html">atomic<state_t></a> my_state;
+<a name="l00121"></a>00121 
+<a name="l00123"></a>00123 
+<a name="l00124"></a>00124         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> __TBB_atomic my_going;
+<a name="l00125"></a>00125 
+<a name="l00127"></a>00127         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> my_internal_lock;
+<a name="l00128"></a>00128 
+<a name="l00130"></a>00130         <span class="keywordtype">void</span> acquire_internal_lock();
+<a name="l00131"></a>00131 
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134         <span class="keywordtype">bool</span> try_acquire_internal_lock();
+<a name="l00135"></a>00135 
+<a name="l00137"></a>00137         <span class="keywordtype">void</span> release_internal_lock();
+<a name="l00138"></a>00138 
+<a name="l00140"></a>00140         <span class="keywordtype">void</span> wait_for_release_of_internal_lock();
+<a name="l00141"></a>00141 
+<a name="l00143"></a>00143         <span class="keywordtype">void</span> unblock_or_wait_on_internal_lock( uintptr_t );
+<a name="l00144"></a>00144     };
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148     <span class="comment">// Mutex traits</span>
+<a name="l00149"></a>00149     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;
+<a name="l00150"></a>00150     <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="l00151"></a>00151     <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="l00152"></a>00152 
+<a name="l00153"></a>00153 <span class="keyword">private</span>:
+<a name="l00155"></a>00155     <a class="code" href="a00254.html">atomic<scoped_lock*></a> q_tail;
+<a name="l00156"></a>00156 
+<a name="l00157"></a>00157 };
+<a name="l00158"></a>00158 
+<a name="l00159"></a>00159 __TBB_DEFINE_PROFILING_SET_NAME(queuing_rw_mutex)
+<a name="l00160"></a>00160 
+<a name="l00161"></a>00161 } <span class="comment">// namespace tbb</span>
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_queuing_rw_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00605.html b/doc/html/a00605.html
new file mode 100644
index 0000000..af7240d
--- /dev/null
+++ b/doc/html/a00605.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>reader_writer_lock.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>reader_writer_lock.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-2012 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_reader_writer_lock_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_reader_writer_lock_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "tbb_thread.h"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "tbb_allocator.h"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00029"></a>00029 <span class="keyword">namespace </span>interface5 {
+<a name="l00031"></a>00031 
+<a name="l00034"></a><a class="code" href="a00318.html">00034</a>     <span class="keyword">class </span><a class="code" href="a00318.html">reader_writer_lock</a> : tbb::internal::no_copy {
+<a name="l00035"></a>00035  <span class="keyword">public</span>:
+<a name="l00036"></a>00036     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00319.html">scoped_lock</a>;
+<a name="l00037"></a>00037     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00320.html">scoped_lock_read</a>;
+<a name="l00039"></a>00039 
+<a name="l00074"></a><a class="code" href="a00318.html#6f921f0d7c1812ceb5674418c8b6ccaf">00074</a>     <span class="keyword">enum</span> <a class="code" href="a00318.html#6f921f0d7c1812ceb5674418c8b6ccaf">status_t</a> { waiting_nonblocking, waiting, active, invalid };
+<a name="l00075"></a>00075 
+<a name="l00077"></a><a class="code" href="a00318.html#c1431c4293e777efd9aab9a95c2a46e1">00077</a>     <a class="code" href="a00318.html#c1431c4293e777efd9aab9a95c2a46e1">reader_writer_lock</a>() {
+<a name="l00078"></a>00078         internal_construct();
+<a name="l00079"></a>00079     }
+<a name="l00080"></a>00080 
+<a name="l00082"></a><a class="code" href="a00318.html#5135f64f7b7339017f33d956445edbee">00082</a>     <a class="code" href="a00318.html#5135f64f7b7339017f33d956445edbee">~reader_writer_lock</a>() {
+<a name="l00083"></a>00083         internal_destroy();
+<a name="l00084"></a>00084     }
+<a name="l00085"></a>00085 
+<a name="l00087"></a>00087 
+<a name="l00089"></a><a class="code" href="a00319.html">00089</a>     <span class="keyword">class </span><a class="code" href="a00319.html">scoped_lock</a> : tbb::internal::no_copy {
+<a name="l00090"></a>00090     <span class="keyword">public</span>:
+<a name="l00091"></a>00091         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00318.html">reader_writer_lock</a>;
+<a name="l00092"></a>00092 
+<a name="l00094"></a><a class="code" href="a00319.html#cf19f20e082887c1bb0ba6b0911c3583">00094</a>         <a class="code" href="a00319.html">scoped_lock</a>(<a class="code" href="a00318.html">reader_writer_lock</a>& <a class="code" href="a00318.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>) {
+<a name="l00095"></a>00095             internal_construct(<a class="code" href="a00318.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>);
+<a name="l00096"></a>00096         }
+<a name="l00097"></a>00097 
+<a name="l00099"></a><a class="code" href="a00319.html#70246e0260493625ff956fa5926fc71f">00099</a>         <a class="code" href="a00319.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a>() {
+<a name="l00100"></a>00100             internal_destroy();
+<a name="l00101"></a>00101         }
+<a name="l00102"></a>00102 
+<a name="l00103"></a>00103         <span class="keywordtype">void</span>* operator new(size_t s) {
+<a name="l00104"></a>00104             <span class="keywordflow">return</span> tbb::internal::allocate_via_handler_v3(s);
+<a name="l00105"></a>00105         }
+<a name="l00106"></a>00106         <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span>* p) {
+<a name="l00107"></a>00107             tbb::internal::deallocate_via_handler_v3(p);
+<a name="l00108"></a>00108         }
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110     <span class="keyword">private</span>:
+<a name="l00112"></a>00112         <a class="code" href="a00318.html">reader_writer_lock</a> *<a class="code" href="a00301.html">mutex</a>;
+<a name="l00114"></a>00114         scoped_lock* next;
+<a name="l00116"></a>00116         <a class="code" href="a00254.html">atomic<status_t></a> status;
+<a name="l00117"></a>00117 
+<a name="l00119"></a>00119         scoped_lock();
+<a name="l00120"></a>00120 
+<a name="l00121"></a>00121         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct(<a class="code" href="a00318.html">reader_writer_lock</a>&);
+<a name="l00122"></a>00122         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
+<a name="l00123"></a>00123    };
+<a name="l00124"></a>00124 
+<a name="l00126"></a><a class="code" href="a00320.html">00126</a>     <span class="keyword">class </span><a class="code" href="a00320.html">scoped_lock_read</a> : tbb::internal::no_copy {
+<a name="l00127"></a>00127     <span class="keyword">public</span>:
+<a name="l00128"></a>00128         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00318.html">reader_writer_lock</a>;
+<a name="l00129"></a>00129 
+<a name="l00131"></a><a class="code" href="a00320.html#87ab0dc8f7216e6ba0f7acd6aec33064">00131</a>         <a class="code" href="a00320.html">scoped_lock_read</a>(<a class="code" href="a00318.html">reader_writer_lock</a>& <a class="code" href="a00318.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>) {
+<a name="l00132"></a>00132             internal_construct(<a class="code" href="a00318.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>);
+<a name="l00133"></a>00133         }
+<a name="l00134"></a>00134 
+<a name="l00136"></a><a class="code" href="a00320.html#bd21c5f3d555d64d1de8658e15bf4966">00136</a>         <a class="code" href="a00320.html#bd21c5f3d555d64d1de8658e15bf4966">~scoped_lock_read</a>() {
+<a name="l00137"></a>00137             internal_destroy();
+<a name="l00138"></a>00138         }
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140         <span class="keywordtype">void</span>* operator new(size_t s) {
+<a name="l00141"></a>00141             <span class="keywordflow">return</span> tbb::internal::allocate_via_handler_v3(s);
+<a name="l00142"></a>00142         }
+<a name="l00143"></a>00143         <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span>* p) {
+<a name="l00144"></a>00144             tbb::internal::deallocate_via_handler_v3(p);
+<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="a00318.html">reader_writer_lock</a> *<a class="code" href="a00301.html">mutex</a>;
+<a name="l00151"></a>00151         scoped_lock_read *next;
+<a name="l00153"></a>00153         <a class="code" href="a00254.html">atomic<status_t></a> status;
+<a name="l00154"></a>00154 
+<a name="l00156"></a>00156         scoped_lock_read();
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct(<a class="code" href="a00318.html">reader_writer_lock</a>&);
+<a name="l00159"></a>00159         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
+<a name="l00160"></a>00160     };
+<a name="l00161"></a>00161 
+<a name="l00163"></a>00163 
+<a name="l00168"></a>00168     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00318.html#2653d1a2d560059a51219a8ceab3ade9">lock</a>();
+<a name="l00169"></a>00169 
+<a name="l00171"></a>00171 
+<a name="l00175"></a>00175     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00318.html#721eb173e154ab38292273e9266a9b07">try_lock</a>();
+<a name="l00176"></a>00176 
+<a name="l00178"></a>00178 
+<a name="l00182"></a>00182     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00318.html#d9d16a24d9f6c3dada73c6b9ff214f5b">lock_read</a>();
+<a name="l00183"></a>00183 
+<a name="l00185"></a>00185 
+<a name="l00187"></a>00187     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD <a class="code" href="a00318.html#595fb23952e3b89426b1f7938dea9b11">try_lock_read</a>();
+<a name="l00188"></a>00188 
+<a name="l00190"></a>00190     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00318.html#5113b32689305599b2c36b5831547704">unlock</a>();
+<a name="l00191"></a>00191 
+<a name="l00192"></a>00192  <span class="keyword">private</span>:
+<a name="l00193"></a>00193     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00194"></a>00194     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
+<a name="l00195"></a>00195 
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198     <span class="keywordtype">bool</span> start_write(scoped_lock *);
+<a name="l00200"></a>00200     <span class="keywordtype">void</span> set_next_writer(scoped_lock *w);
+<a name="l00202"></a>00202     <span class="keywordtype">void</span> end_write(scoped_lock *);
+<a name="l00204"></a>00204     <span class="keywordtype">bool</span> is_current_writer();
+<a name="l00205"></a>00205 
+<a name="l00207"></a>00207 
+<a name="l00208"></a>00208     <span class="keywordtype">void</span> start_read(scoped_lock_read *);
+<a name="l00210"></a>00210     <span class="keywordtype">void</span> unblock_readers();
+<a name="l00212"></a>00212     <span class="keywordtype">void</span> end_read();
+<a name="l00213"></a>00213 
+<a name="l00215"></a>00215     atomic<scoped_lock_read*> reader_head;
+<a name="l00217"></a>00217     atomic<scoped_lock*> writer_head;
+<a name="l00219"></a>00219     atomic<scoped_lock*> writer_tail;
+<a name="l00221"></a>00221     tbb_thread::id my_current_writer;
+<a name="l00223"></a>00223     atomic<uintptr_t> rdr_count_and_flags; <span class="comment">// used with __TBB_AtomicOR, which assumes uintptr_t</span>
+<a name="l00224"></a>00224 };
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226 } <span class="comment">// namespace interface5</span>
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228 <span class="keyword">using</span> interface5::reader_writer_lock;
+<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_reader_writer_lock_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00606.html b/doc/html/a00606.html
new file mode 100644
index 0000000..ee3dea0
--- /dev/null
+++ b/doc/html/a00606.html
@@ -0,0 +1,241 @@
+<!DOCTYPE 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-2012 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><span class="preprocessor">#include "machine/windows_api.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">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="preprocessor">#include <new></span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "tbb_profiling.h"</span>
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="keyword">namespace </span>tbb {
+<a name="l00037"></a>00037 
+<a name="l00039"></a><a class="code" href="a00322.html">00039</a> <span class="keyword">class </span><a class="code" href="a00322.html">recursive_mutex</a> {
+<a name="l00040"></a>00040 <span class="keyword">public</span>:
+<a name="l00042"></a><a class="code" href="a00322.html#d2fceb7f95c24a8cd1457d4527e4b8c6">00042</a>     <a class="code" href="a00322.html#d2fceb7f95c24a8cd1457d4527e4b8c6">recursive_mutex</a>() {
+<a name="l00043"></a>00043 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span>        internal_construct();
+<a name="l00045"></a>00045 <span class="preprocessor">#else</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>        InitializeCriticalSection(&impl);
+<a name="l00048"></a>00048 <span class="preprocessor">  #else</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>        pthread_mutexattr_t mtx_attr;
+<a name="l00050"></a>00050         <span class="keywordtype">int</span> error_code = pthread_mutexattr_init( &mtx_attr );
+<a name="l00051"></a>00051         <span class="keywordflow">if</span>( error_code )
+<a name="l00052"></a>00052             tbb::internal::handle_perror(error_code,<span class="stringliteral">"recursive_mutex: pthread_mutexattr_init failed"</span>);
+<a name="l00053"></a>00053 
+<a name="l00054"></a>00054         pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );
+<a name="l00055"></a>00055         error_code = pthread_mutex_init( &impl, &mtx_attr );
+<a name="l00056"></a>00056         <span class="keywordflow">if</span>( error_code )
+<a name="l00057"></a>00057             tbb::internal::handle_perror(error_code,<span class="stringliteral">"recursive_mutex: pthread_mutex_init failed"</span>);
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059         pthread_mutexattr_destroy( &mtx_attr );
+<a name="l00060"></a>00060 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
+<a name="l00061"></a>00061 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00062"></a>00062     };
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064     ~<a class="code" href="a00322.html">recursive_mutex</a>() {
+<a name="l00065"></a>00065 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span>        internal_destroy();
+<a name="l00067"></a>00067 <span class="preprocessor">#else</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span>        DeleteCriticalSection(&impl);
+<a name="l00070"></a>00070 <span class="preprocessor">  #else</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>        pthread_mutex_destroy(&impl); 
+<a name="l00072"></a>00072 
+<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     <span class="keyword">class </span>scoped_lock;
+<a name="l00078"></a>00078     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+<a name="l00079"></a>00079 
+<a name="l00081"></a>00081 
+<a name="l00083"></a><a class="code" href="a00323.html">00083</a>     <span class="keyword">class </span><a class="code" href="a00323.html">scoped_lock</a>: internal::no_copy {
+<a name="l00084"></a>00084     <span class="keyword">public</span>:
+<a name="l00086"></a><a class="code" href="a00323.html#d82d4d36fbf9727a493d26ae50855fe7">00086</a>         <a class="code" href="a00323.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>() : my_mutex(NULL) {};
+<a name="l00087"></a>00087 
+<a name="l00089"></a><a class="code" href="a00323.html#dec17713c4c1321ac8fec66816d0c602">00089</a>         <a class="code" href="a00323.html#d82d4d36fbf9727a493d26ae50855fe7">scoped_lock</a>( <a class="code" href="a00322.html">recursive_mutex</a>& <a class="code" href="a00301.html">mutex</a> ) {
+<a name="l00090"></a>00090 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span>            my_mutex = &mutex; 
+<a name="l00092"></a>00092 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00093"></a>00093             <a class="code" href="a00323.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( mutex );
+<a name="l00094"></a>00094         }
+<a name="l00095"></a>00095 
+<a name="l00097"></a><a class="code" href="a00323.html#c1197ffb8f3cd9d4fed71d7e06265b7c">00097</a>         <a class="code" href="a00323.html#c1197ffb8f3cd9d4fed71d7e06265b7c">~scoped_lock</a>() {
+<a name="l00098"></a>00098             <span class="keywordflow">if</span>( my_mutex ) 
+<a name="l00099"></a>00099                 <a class="code" href="a00323.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>();
+<a name="l00100"></a>00100         }
+<a name="l00101"></a>00101 
+<a name="l00103"></a><a class="code" href="a00323.html#7fb04da37cccf8c99b1f9102d9074f9a">00103</a>         <span class="keywordtype">void</span> <a class="code" href="a00323.html#7fb04da37cccf8c99b1f9102d9074f9a">acquire</a>( <a class="code" href="a00322.html">recursive_mutex</a>& <a class="code" href="a00301.html">mutex</a> ) {
+<a name="l00104"></a>00104 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span>            internal_acquire( mutex );
+<a name="l00106"></a>00106 <span class="preprocessor">#else</span>
+<a name="l00107"></a>00107 <span class="preprocessor"></span>            my_mutex = &mutex;
+<a name="l00108"></a>00108             mutex.<a class="code" href="a00322.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>();
+<a name="l00109"></a>00109 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00110"></a>00110         }
+<a name="l00111"></a>00111 
+<a name="l00113"></a><a class="code" href="a00323.html#36bfc3e93e3ef6340abef4901444d340">00113</a>         <span class="keywordtype">bool</span> <a class="code" href="a00323.html#36bfc3e93e3ef6340abef4901444d340">try_acquire</a>( <a class="code" href="a00322.html">recursive_mutex</a>& <a class="code" href="a00301.html">mutex</a> ) {
+<a name="l00114"></a>00114 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span>            <span class="keywordflow">return</span> internal_try_acquire( mutex );
+<a name="l00116"></a>00116 <span class="preprocessor">#else</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span>            <span class="keywordtype">bool</span> result = mutex.<a class="code" href="a00322.html#86e719b0afee25704af11ab97694d240">try_lock</a>();
+<a name="l00118"></a>00118             <span class="keywordflow">if</span>( result )
+<a name="l00119"></a>00119                 my_mutex = &mutex;
+<a name="l00120"></a>00120             <span class="keywordflow">return</span> result;
+<a name="l00121"></a>00121 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00122"></a>00122         }
+<a name="l00123"></a>00123 
+<a name="l00125"></a><a class="code" href="a00323.html#ac480ea0e9d5ea0345a67d57008b6263">00125</a>         <span class="keywordtype">void</span> <a class="code" href="a00323.html#ac480ea0e9d5ea0345a67d57008b6263">release</a>() {
+<a name="l00126"></a>00126 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00127"></a>00127 <span class="preprocessor"></span>            internal_release();
+<a name="l00128"></a>00128 <span class="preprocessor">#else</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span>            my_mutex-><a class="code" href="a00322.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>();
+<a name="l00130"></a>00130             my_mutex = NULL;
+<a name="l00131"></a>00131 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00132"></a>00132         }
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134     <span class="keyword">private</span>:
+<a name="l00136"></a>00136         <a class="code" href="a00322.html">recursive_mutex</a>* my_mutex;
+<a name="l00137"></a>00137 
+<a name="l00139"></a>00139         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00322.html">recursive_mutex</a>& m );
+<a name="l00140"></a>00140 
+<a name="l00142"></a>00142         <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00322.html">recursive_mutex</a>& m );
+<a name="l00143"></a>00143 
+<a name="l00145"></a>00145         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
+<a name="l00146"></a>00146 
+<a name="l00147"></a>00147         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00322.html">recursive_mutex</a>;
+<a name="l00148"></a>00148     };
+<a name="l00149"></a>00149 
+<a name="l00150"></a>00150     <span class="comment">// Mutex traits</span>
+<a name="l00151"></a>00151     <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="l00152"></a>00152     <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="l00153"></a>00153     <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="l00154"></a>00154 
+<a name="l00155"></a>00155     <span class="comment">// C++0x compatibility interface</span>
+<a name="l00156"></a>00156     
+<a name="l00158"></a><a class="code" href="a00322.html#4c342c69d47f4bb0b393535dee4015d6">00158</a>     <span class="keywordtype">void</span> <a class="code" href="a00322.html#4c342c69d47f4bb0b393535dee4015d6">lock</a>() {
+<a name="l00159"></a>00159 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00160"></a>00160 <span class="preprocessor"></span>        <a class="code" href="a00253.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00161"></a>00161         <span class="keyword">new</span>(tmp.<a class="code" href="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00323.html">scoped_lock</a>(*<span class="keyword">this</span>);
+<a name="l00162"></a>00162 <span class="preprocessor">#else</span>
+<a name="l00163"></a>00163 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00164"></a>00164 <span class="preprocessor"></span>        EnterCriticalSection(&impl);
+<a name="l00165"></a>00165 <span class="preprocessor">  #else</span>
+<a name="l00166"></a>00166 <span class="preprocessor"></span>        pthread_mutex_lock(&impl);
+<a name="l00167"></a>00167 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00168"></a>00168 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00169"></a>00169     }
+<a name="l00170"></a>00170 
+<a name="l00172"></a>00172 
+<a name="l00173"></a><a class="code" href="a00322.html#86e719b0afee25704af11ab97694d240">00173</a>     <span class="keywordtype">bool</span> <a class="code" href="a00322.html#86e719b0afee25704af11ab97694d240">try_lock</a>() {
+<a name="l00174"></a>00174 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00175"></a>00175 <span class="preprocessor"></span>        <a class="code" href="a00253.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00176"></a>00176         <span class="keywordflow">return</span> (<span class="keyword">new</span>(tmp.<a class="code" href="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00323.html">scoped_lock</a>)->internal_try_acquire(*<span class="keyword">this</span>);
+<a name="l00177"></a>00177 <span class="preprocessor">#else        </span>
+<a name="l00178"></a>00178 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00179"></a>00179 <span class="preprocessor"></span>        <span class="keywordflow">return</span> TryEnterCriticalSection(&impl)!=0;
+<a name="l00180"></a>00180 <span class="preprocessor">  #else</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span>        <span class="keywordflow">return</span> pthread_mutex_trylock(&impl)==0;
+<a name="l00182"></a>00182 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00183"></a>00183 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00184"></a>00184     }
+<a name="l00185"></a>00185 
+<a name="l00187"></a><a class="code" href="a00322.html#f0a96e26b7f074588dc31e32524856ae">00187</a>     <span class="keywordtype">void</span> <a class="code" href="a00322.html#f0a96e26b7f074588dc31e32524856ae">unlock</a>() {
+<a name="l00188"></a>00188 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00189"></a>00189 <span class="preprocessor"></span>        <a class="code" href="a00253.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00190"></a>00190         <a class="code" href="a00323.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00191"></a>00191         s.<a class="code" href="a00323.html#3efd10a49e2435ea5215b49907f93ba2">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00192"></a>00192         s.<a class="code" href="a00323.html#43ed37cec508072e53a52113c8040137">internal_release</a>();
+<a name="l00193"></a>00193 <span class="preprocessor">#else</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span><span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00195"></a>00195 <span class="preprocessor"></span>        LeaveCriticalSection(&impl);
+<a name="l00196"></a>00196 <span class="preprocessor">  #else</span>
+<a name="l00197"></a>00197 <span class="preprocessor"></span>        pthread_mutex_unlock(&impl);
+<a name="l00198"></a>00198 <span class="preprocessor">  #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00199"></a>00199 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00200"></a>00200     }
+<a name="l00201"></a>00201 
+<a name="l00203"></a>00203 <span class="preprocessor">  #if _WIN32||_WIN64</span>
+<a name="l00204"></a><a class="code" href="a00322.html#889fa8cc32dd707eef7c0f52dda09c0d">00204</a> <span class="preprocessor"></span>    <span class="keyword">typedef</span> LPCRITICAL_SECTION <a class="code" href="a00322.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a>;
+<a name="l00205"></a>00205 <span class="preprocessor">  #else</span>
+<a name="l00206"></a>00206 <span class="preprocessor"></span>    <span class="keyword">typedef</span> pthread_mutex_t* <a class="code" href="a00322.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a>;
+<a name="l00207"></a>00207 <span class="preprocessor">  #endif</span>
+<a name="l00208"></a>00208 <span class="preprocessor"></span>    <a class="code" href="a00322.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a> native_handle() { <span class="keywordflow">return</span> (<a class="code" href="a00322.html#889fa8cc32dd707eef7c0f52dda09c0d">native_handle_type</a>) &impl; }
+<a name="l00209"></a>00209 
+<a name="l00210"></a>00210 <span class="keyword">private</span>:
+<a name="l00211"></a>00211 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00212"></a>00212 <span class="preprocessor"></span>    CRITICAL_SECTION impl;
+<a name="l00213"></a>00213     <span class="keyword">enum</span> state_t {
+<a name="l00214"></a>00214         INITIALIZED=0x1234,
+<a name="l00215"></a>00215         DESTROYED=0x789A,
+<a name="l00216"></a>00216     } state;
+<a name="l00217"></a>00217 <span class="preprocessor">#else</span>
+<a name="l00218"></a>00218 <span class="preprocessor"></span>    pthread_mutex_t impl;
+<a name="l00219"></a>00219 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00220"></a>00220 
+<a name="l00222"></a>00222     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00223"></a>00223 
+<a name="l00225"></a>00225     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
+<a name="l00226"></a>00226 };
+<a name="l00227"></a>00227 
+<a name="l00228"></a>00228 __TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)
+<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_recursive_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00607.html b/doc/html/a00607.html
new file mode 100644
index 0000000..b4b9673
--- /dev/null
+++ b/doc/html/a00607.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>runtime_loader.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>runtime_loader.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-2012 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_runtime_loader_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_runtime_loader_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#if ! TBB_PREVIEW_RUNTIME_LOADER</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">    #error Set TBB_PREVIEW_RUNTIME_LOADER to include runtime_loader.h</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="l00028"></a>00028 <span class="preprocessor">#include "tbb/tbb_stddef.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include <climits></span>
+<a name="l00030"></a>00030 
+<a name="l00031"></a>00031 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">    #if ! __TBB_NO_IMPLICIT_LINKAGE</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment( linker, "/nodefaultlib:tbb_debug.lib" )</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment( linker, "/defaultlib:tbbproxy_debug.lib" )</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">            #pragma comment( linker, "/nodefaultlib:tbb.lib" )</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment( linker, "/defaultlib:tbbproxy.lib" )</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>
+<a name="l00043"></a>00043 <span class="keyword">namespace </span>tbb {
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045 <span class="keyword">namespace </span>interface6 {
+<a name="l00046"></a>00046 
+<a name="l00048"></a>00048 
+<a name="l00085"></a><a class="code" href="a00324.html">00085</a> <span class="keyword">class </span><a class="code" href="a00324.html">runtime_loader</a> : tbb::internal::no_copy {
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087     <span class="keyword">public</span>:
+<a name="l00088"></a>00088 
+<a name="l00090"></a><a class="code" href="a00324.html#bb0130fe0f596399707e61431231ebcb">00090</a>         <span class="keyword">enum</span> <a class="code" href="a00324.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> {
+<a name="l00091"></a>00091             <a class="code" href="a00324.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">em_status</a>,     
+<a name="l00092"></a>00092             <a class="code" href="a00324.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">em_throw</a>,      
+<a name="l00093"></a><a class="code" href="a00324.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">00093</a>             <a class="code" href="a00324.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a>       
+<a name="l00094"></a>00094         }; <span class="comment">// error_mode</span>
+<a name="l00095"></a>00095 
+<a name="l00097"></a><a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde018789">00097</a>         <span class="keyword">enum</span> <a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde018789">error_code</a> {
+<a name="l00098"></a>00098             <a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">ec_ok</a>,         
+<a name="l00099"></a>00099             <a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">ec_bad_call</a>,   
+<a name="l00100"></a>00100             <a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">ec_bad_arg</a>,    
+<a name="l00101"></a>00101             <a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">ec_bad_lib</a>,    
+<a name="l00102"></a>00102             <a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">ec_bad_ver</a>,    
+<a name="l00103"></a><a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">00103</a>             <a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">ec_no_lib</a>      
+<a name="l00104"></a>00104         }; <span class="comment">// error_code</span>
+<a name="l00105"></a>00105 
+<a name="l00107"></a>00107         <a class="code" href="a00324.html#7caa4ff6e44c2348e67f601cc5d97c34">runtime_loader</a>( <a class="code" href="a00324.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> mode = <a class="code" href="a00324.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a> );
+<a name="l00108"></a>00108 
+<a name="l00110"></a>00110 
+<a name="l00115"></a>00115         <a class="code" href="a00324.html#7caa4ff6e44c2348e67f601cc5d97c34">runtime_loader</a>(
+<a name="l00116"></a>00116             <span class="keywordtype">char</span> <span class="keyword">const</span> * path[],                           
+<a name="l00117"></a>00117             <span class="keywordtype">int</span>          min_ver = TBB_INTERFACE_VERSION,  
+<a name="l00118"></a>00118             <span class="keywordtype">int</span>          max_ver = INT_MAX,                
+<a name="l00119"></a>00119             <a class="code" href="a00324.html#bb0130fe0f596399707e61431231ebcb">error_mode</a>   mode    = <a class="code" href="a00324.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">em_abort</a>                
+<a name="l00120"></a>00120         );
+<a name="l00121"></a>00121 
+<a name="l00123"></a>00123         <a class="code" href="a00324.html#c25fec923a751a3e03f5cbe969f1f0c5">~runtime_loader</a>();
+<a name="l00124"></a>00124 
+<a name="l00126"></a>00126 
+<a name="l00150"></a>00150         <a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde018789">error_code</a>
+<a name="l00151"></a>00151         <a class="code" href="a00324.html#5f3f6f1683386705a6931acae45f0862">load</a>(
+<a name="l00152"></a>00152             <span class="keywordtype">char</span> <span class="keyword">const</span> * path[],                           
+<a name="l00153"></a>00153             <span class="keywordtype">int</span>          min_ver = TBB_INTERFACE_VERSION,  
+<a name="l00154"></a>00154             <span class="keywordtype">int</span>          max_ver = INT_MAX                 
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156         );
+<a name="l00157"></a>00157 
+<a name="l00158"></a>00158 
+<a name="l00160"></a>00160 
+<a name="l00163"></a>00163         <a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde018789">error_code</a> <a class="code" href="a00324.html#78d938ed2e54d38dd38d6609e6c60389">status</a>();
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165     <span class="keyword">private</span>:
+<a name="l00166"></a>00166 
+<a name="l00167"></a>00167         <a class="code" href="a00324.html#bb0130fe0f596399707e61431231ebcb">error_mode</a> <span class="keyword">const</span> my_mode;
+<a name="l00168"></a>00168         <a class="code" href="a00324.html#6831be91cdc64e57e565ce0dde018789">error_code</a>       my_status;
+<a name="l00169"></a>00169         <span class="keywordtype">bool</span>             my_loaded;
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171 }; <span class="comment">// class runtime_loader</span>
+<a name="l00172"></a>00172 
+<a name="l00173"></a>00173 } <span class="comment">// namespace interface6</span>
+<a name="l00174"></a>00174 
+<a name="l00175"></a>00175 <span class="keyword">using</span> interface6::runtime_loader;
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177 } <span class="comment">// namespace tbb</span>
+<a name="l00178"></a>00178 
+<a name="l00179"></a>00179 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_runtime_loader_H */</span>
+<a name="l00180"></a>00180 
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00608.html b/doc/html/a00608.html
index 48bded1..bac772f 100644
--- a/doc/html/a00608.html
+++ b/doc/html/a00608.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>scalable_allocator.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-2011 Intel Corporation.  All Rights Reserved.</span>
+<h1>scalable_allocator.h</h1><a href="a00392.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-2012 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,257 +39,234 @@
 <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_scalable_allocator_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_scalable_allocator_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 "machine/windows_api.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 "tbb_stddef.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "tick_count.h"</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
-<a name="l00039"></a>00039 <span class="preprocessor">    #pragma warning (push)</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <iosfwd></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span>
-<a name="l00049"></a>00049 <span class="keyword">namespace </span>tbb {
-<a name="l00050"></a>00050 
-<a name="l00052"></a>00052 <span class="keyword">namespace </span>internal {
-<a name="l00053"></a>00053     
-<a name="l00054"></a>00054     <span class="keyword">class </span>tbb_thread_v3;
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 } <span class="comment">// namespace internal</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ); 
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="keyword">namespace </span>internal {
-<a name="l00061"></a>00061 
-<a name="l00063"></a>00063     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC allocate_closure_v3( size_t size );
-<a name="l00065"></a>00065     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free_closure_v3( <span class="keywordtype">void</span>* );
-<a name="l00066"></a>00066    
-<a name="l00067"></a>00067     <span class="keyword">struct </span>thread_closure_base {
-<a name="l00068"></a>00068         <span class="keywordtype">void</span>* operator new( size_t size ) {<span class="keywordflow">return</span> allocate_closure_v3(size);}
-<a name="l00069"></a>00069         <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* ptr ) {free_closure_v3(ptr);}
-<a name="l00070"></a>00070     };
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072     <span class="keyword">template</span><<span class="keyword">class</span> F> <span class="keyword">struct </span>thread_closure_0: thread_closure_base {
-<a name="l00073"></a>00073         F function;
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
-<a name="l00076"></a>00076             thread_closure_0 *<span class="keyword">self</span> = static_cast<thread_closure_0*>(c);
-<a name="l00077"></a>00077             <span class="keyword">self</span>->function();
-<a name="l00078"></a>00078             <span class="keyword">delete</span> <span class="keyword">self</span>;
-<a name="l00079"></a>00079             <span class="keywordflow">return</span> 0;
-<a name="l00080"></a>00080         }
-<a name="l00081"></a>00081         thread_closure_0( <span class="keyword">const</span> F& f ) : function(f) {}
-<a name="l00082"></a>00082     };
-<a name="l00084"></a>00084     <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="l00085"></a>00085         F function;
-<a name="l00086"></a>00086         X arg1;
-<a name="l00088"></a>00088         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
-<a name="l00089"></a>00089             thread_closure_1 *<span class="keyword">self</span> = static_cast<thread_closure_1*>(c);
-<a name="l00090"></a>00090             <span class="keyword">self</span>->function(self->arg1);
-<a name="l00091"></a>00091             <span class="keyword">delete</span> <span class="keyword">self</span>;
-<a name="l00092"></a>00092             <span class="keywordflow">return</span> 0;
-<a name="l00093"></a>00093         }
-<a name="l00094"></a>00094         thread_closure_1( <span class="keyword">const</span> F& f, <span class="keyword">const</span> X& x ) : function(f), arg1(x) {}
-<a name="l00095"></a>00095     };
-<a name="l00096"></a>00096     <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="l00097"></a>00097         F function;
-<a name="l00098"></a>00098         X arg1;
-<a name="l00099"></a>00099         Y arg2;
-<a name="l00101"></a>00101         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
-<a name="l00102"></a>00102             thread_closure_2 *<span class="keyword">self</span> = static_cast<thread_closure_2*>(c);
-<a name="l00103"></a>00103             <span class="keyword">self</span>->function(self->arg1, self->arg2);
-<a name="l00104"></a>00104             <span class="keyword">delete</span> <span class="keyword">self</span>;
-<a name="l00105"></a>00105             <span class="keywordflow">return</span> 0;
-<a name="l00106"></a>00106         }
-<a name="l00107"></a>00107         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="l00025"></a>00025 <span class="preprocessor">#include <stddef.h></span> <span class="comment">/* Need ptrdiff_t and size_t from here. */</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#if !_MSC_VER</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include <stdint.h></span> <span class="comment">/* Need intptr_t from here. */</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00030"></a>00030 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 991)</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span>
+<a name="l00035"></a>00035 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00037"></a>00037 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039 <span class="preprocessor">#if _MSC_VER >= 1400</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC   __cdecl</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span>
+<a name="l00047"></a>00047 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00428.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a> (size_t size);
+<a name="l00048"></a>00048 
+<a name="l00051"></a>00051 <span class="keywordtype">void</span>   __TBB_EXPORTED_FUNC <a class="code" href="a00428.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00052"></a>00052 
+<a name="l00055"></a>00055 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00428.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size);
+<a name="l00056"></a>00056 
+<a name="l00059"></a>00059 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00428.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_calloc</a> (size_t nobj, size_t size);
+<a name="l00060"></a>00060 
+<a name="l00063"></a>00063 <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00428.html#g05dcec987480bb2c82ecdead6a085899">scalable_posix_memalign</a> (<span class="keywordtype">void</span>** memptr, size_t alignment, size_t size);
+<a name="l00064"></a>00064 
+<a name="l00067"></a>00067 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00428.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_aligned_malloc</a> (size_t size, size_t alignment);
+<a name="l00068"></a>00068 
+<a name="l00071"></a>00071 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00428.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_aligned_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size, size_t alignment);
+<a name="l00072"></a>00072 
+<a name="l00075"></a>00075 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00428.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_aligned_free</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00076"></a>00076 
+<a name="l00081"></a>00081 size_t __TBB_EXPORTED_FUNC <a class="code" href="a00428.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_msize</a> (<span class="keywordtype">void</span>* ptr);
+<a name="l00082"></a>00082 
+<a name="l00083"></a>00083 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span>
+<a name="l00085"></a>00085 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span>
+<a name="l00089"></a><a class="code" href="a00411.html">00089</a> <span class="keyword">namespace </span>rml {
+<a name="l00090"></a>00090 <span class="keyword">class </span>MemoryPool;
+<a name="l00091"></a>00091 
+<a name="l00092"></a>00092 <span class="keyword">typedef</span> <span class="keywordtype">void</span> *(*rawAllocType)(intptr_t pool_id, size_t &bytes);
+<a name="l00093"></a>00093 <span class="keyword">typedef</span> int   (*rawFreeType)(intptr_t pool_id, <span class="keywordtype">void</span>* raw_ptr, size_t raw_bytes);
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095 <span class="comment">/*</span>
+<a name="l00096"></a>00096 <span class="comment">MemPoolPolicy extension must be compatible with such structure fields layout</span>
+<a name="l00097"></a>00097 <span class="comment"></span>
+<a name="l00098"></a>00098 <span class="comment">struct MemPoolPolicy {</span>
+<a name="l00099"></a>00099 <span class="comment">    rawAllocType pAlloc;</span>
+<a name="l00100"></a>00100 <span class="comment">    rawFreeType  pFree;</span>
+<a name="l00101"></a>00101 <span class="comment">    size_t       granularity;   // granularity of pAlloc allocations</span>
+<a name="l00102"></a>00102 <span class="comment">};</span>
+<a name="l00103"></a>00103 <span class="comment">*/</span>
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105 <span class="keyword">struct </span>MemPoolPolicy {
+<a name="l00106"></a>00106     <span class="keyword">enum</span> {
+<a name="l00107"></a>00107         VERSION = 1
 <a name="l00108"></a>00108     };
 <a name="l00109"></a>00109 
-<a name="l00111"></a>00111     <span class="keyword">class </span>tbb_thread_v3 {
-<a name="l00112"></a>00112         tbb_thread_v3(<span class="keyword">const</span> tbb_thread_v3&); <span class="comment">// = delete;   // Deny access</span>
-<a name="l00113"></a>00113     <span class="keyword">public</span>:
-<a name="l00114"></a>00114 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span>        <span class="keyword">typedef</span> HANDLE native_handle_type; 
-<a name="l00116"></a>00116 <span class="preprocessor">#else</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span>        <span class="keyword">typedef</span> pthread_t native_handle_type; 
-<a name="l00118"></a>00118 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span>
-<a name="l00120"></a>00120         <span class="keyword">class </span>id;
-<a name="l00122"></a>00122         tbb_thread_v3() : my_handle(0)
-<a name="l00123"></a>00123 #if _WIN32||_WIN64
-<a name="l00124"></a>00124             , my_thread_id(0)
-<a name="l00125"></a>00125 #endif <span class="comment">// _WIN32||_WIN64</span>
-<a name="l00126"></a>00126         {}
-<a name="l00127"></a>00127         
-<a name="l00129"></a>00129         <span class="keyword">template</span> <<span class="keyword">class</span> F> <span class="keyword">explicit</span> tbb_thread_v3(F f) {
-<a name="l00130"></a>00130             <span class="keyword">typedef</span> internal::thread_closure_0<F> closure_type;
-<a name="l00131"></a>00131             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f));
-<a name="l00132"></a>00132         }
-<a name="l00134"></a>00134         <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="l00135"></a>00135             <span class="keyword">typedef</span> internal::thread_closure_1<F,X> closure_type;
-<a name="l00136"></a>00136             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x));
-<a name="l00137"></a>00137         }
-<a name="l00139"></a>00139         <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="l00140"></a>00140             <span class="keyword">typedef</span> internal::thread_closure_2<F,X,Y> closure_type;
-<a name="l00141"></a>00141             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x,y));
-<a name="l00142"></a>00142         }
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144         tbb_thread_v3& operator=(tbb_thread_v3& x) {
-<a name="l00145"></a>00145             <span class="keywordflow">if</span> (joinable()) detach();
-<a name="l00146"></a>00146             my_handle = x.my_handle;
-<a name="l00147"></a>00147             x.my_handle = 0;
-<a name="l00148"></a>00148 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00149"></a>00149 <span class="preprocessor"></span>            my_thread_id = x.my_thread_id;
-<a name="l00150"></a>00150             x.my_thread_id = 0;
-<a name="l00151"></a>00151 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00152"></a>00152 <span class="preprocessor"></span>            <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-<a name="l00153"></a>00153         }
-<a name="l00154"></a>00154         <span class="keywordtype">void</span> swap( tbb_thread_v3& t ) {tbb::swap( *<span class="keyword">this</span>, t );}
-<a name="l00155"></a>00155         <span class="keywordtype">bool</span> joinable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_handle!=0; }
-<a name="l00157"></a>00157         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD join();
-<a name="l00159"></a>00159         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD detach();
-<a name="l00160"></a>00160         ~tbb_thread_v3() {<span class="keywordflow">if</span>( joinable() ) detach();}
-<a name="l00161"></a>00161         <span class="keyword">inline</span> <span class="keywordtype">id</span> get_id() <span class="keyword">const</span>;
-<a name="l00162"></a>00162         native_handle_type native_handle() { <span class="keywordflow">return</span> my_handle; }
-<a name="l00163"></a>00163     
+<a name="l00110"></a>00110     rawAllocType pAlloc;
+<a name="l00111"></a>00111     rawFreeType  pFree;
+<a name="l00112"></a>00112                  <span class="comment">// granularity of pAlloc allocations. 0 means default used.</span>
+<a name="l00113"></a>00113     size_t       granularity;
+<a name="l00114"></a>00114     <span class="keywordtype">int</span>          version;
+<a name="l00115"></a>00115                  <span class="comment">// all memory consumed at 1st pAlloc call and never returned,</span>
+<a name="l00116"></a>00116                  <span class="comment">// no more pAlloc calls after 1st</span>
+<a name="l00117"></a>00117     <span class="keywordtype">unsigned</span>     fixedPool : 1,
+<a name="l00118"></a>00118                  <span class="comment">// memory consumed but returned only at pool termination</span>
+<a name="l00119"></a>00119                  keepAllMemory : 1,
+<a name="l00120"></a>00120                  reserved : 30;
+<a name="l00121"></a>00121 
+<a name="l00122"></a>00122     MemPoolPolicy(rawAllocType pAlloc_, rawFreeType pFree_,
+<a name="l00123"></a>00123                   size_t granularity_ = 0, <span class="keywordtype">bool</span> fixedPool_ = <span class="keyword">false</span>,
+<a name="l00124"></a>00124                   <span class="keywordtype">bool</span> keepAllMemory_ = <span class="keyword">false</span>) :
+<a name="l00125"></a>00125         pAlloc(pAlloc_), pFree(pFree_), granularity(granularity_), version(VERSION),
+<a name="l00126"></a>00126         fixedPool(fixedPool_), keepAllMemory(keepAllMemory_),
+<a name="l00127"></a>00127         reserved(0) {}
+<a name="l00128"></a>00128 };
+<a name="l00129"></a>00129 
+<a name="l00130"></a>00130 <span class="keyword">enum</span> MemPoolError {
+<a name="l00131"></a>00131     POOL_OK,            <span class="comment">// pool created successfully</span>
+<a name="l00132"></a>00132     INVALID_POLICY,     <span class="comment">// invalid policy parameters found</span>
+<a name="l00133"></a>00133     UNSUPPORTED_POLICY, <span class="comment">// requested pool policy is not supported by allocator library</span>
+<a name="l00134"></a>00134     NO_MEMORY           <span class="comment">// lack of memory during pool creation</span>
+<a name="l00135"></a>00135 };
+<a name="l00136"></a>00136 
+<a name="l00137"></a>00137 MemPoolError pool_create_v1(intptr_t pool_id, <span class="keyword">const</span> MemPoolPolicy *policy,
+<a name="l00138"></a>00138                             rml::MemoryPool **pool);
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140 <span class="keywordtype">bool</span>  pool_destroy(MemoryPool* memPool);
+<a name="l00141"></a>00141 <span class="keywordtype">void</span> *pool_malloc(MemoryPool* memPool, size_t size);
+<a name="l00142"></a>00142 <span class="keywordtype">void</span> *pool_realloc(MemoryPool* memPool, <span class="keywordtype">void</span> *object, size_t size);
+<a name="l00143"></a>00143 <span class="keywordtype">void</span> *pool_aligned_malloc(MemoryPool* mPool, size_t size, size_t alignment);
+<a name="l00144"></a>00144 <span class="keywordtype">void</span> *pool_aligned_realloc(MemoryPool* mPool, <span class="keywordtype">void</span> *ptr, size_t size, size_t alignment);
+<a name="l00145"></a>00145 <span class="keywordtype">bool</span>  pool_reset(MemoryPool* memPool);
+<a name="l00146"></a>00146 <span class="keywordtype">bool</span>  pool_free(MemoryPool *memPool, <span class="keywordtype">void</span> *object);
+<a name="l00147"></a>00147 }
+<a name="l00148"></a>00148 
+<a name="l00149"></a>00149 <span class="preprocessor">#include <new></span>      <span class="comment">/* To use new with the placement argument */</span>
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151 <span class="comment">/* Ensure that including this header does not cause implicit linkage with TBB */</span>
+<a name="l00152"></a>00152 <span class="preprocessor">#ifndef __TBB_NO_IMPLICIT_LINKAGE</span>
+<a name="l00153"></a>00153 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00154"></a>00154 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</span>
+<a name="l00155"></a>00155 <span class="preprocessor">    #undef  __TBB_NO_IMPLICIT_LINKAGE</span>
+<a name="l00156"></a>00156 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00157"></a>00157 <span class="preprocessor"></span><span class="preprocessor">    #include "tbb_stddef.h"</span>
+<a name="l00158"></a>00158 <span class="preprocessor">#endif</span>
+<a name="l00159"></a>00159 <span class="preprocessor"></span>
+<a name="l00160"></a>00160 <span class="preprocessor">#if __TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_CPP11_STD_FORWARD_BROKEN</span>
+<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor"> #include <utility></span> <span class="comment">// std::forward</span>
+<a name="l00162"></a>00162 <span class="preprocessor">#endif</span>
+<a name="l00163"></a>00163 <span class="preprocessor"></span>
+<a name="l00164"></a>00164 <span class="keyword">namespace </span>tbb {
 <a name="l00165"></a>00165 
-<a name="l00174"></a>00174         <span class="keyword">static</span> <span class="keywordtype">unsigned</span> __TBB_EXPORTED_FUNC hardware_concurrency();
-<a name="l00175"></a>00175     <span class="keyword">private</span>:
-<a name="l00176"></a>00176         native_handle_type my_handle; 
-<a name="l00177"></a>00177 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span>        DWORD my_thread_id;
-<a name="l00179"></a>00179 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00180"></a>00180 <span class="preprocessor"></span>
-<a name="l00182"></a>00182         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine), 
-<a name="l00183"></a>00183                              <span class="keywordtype">void</span>* closure );
-<a name="l00184"></a>00184         <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="l00185"></a>00185         <span class="keyword">friend</span> <span class="keywordtype">void</span> tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 ); 
-<a name="l00186"></a>00186     };
-<a name="l00187"></a>00187         
-<a name="l00188"></a>00188     <span class="keyword">class </span>tbb_thread_v3::id { 
-<a name="l00189"></a>00189 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00190"></a>00190 <span class="preprocessor"></span>        DWORD my_id;
-<a name="l00191"></a>00191         id( DWORD id_ ) : my_id(id_) {}
-<a name="l00192"></a>00192 <span class="preprocessor">#else</span>
-<a name="l00193"></a>00193 <span class="preprocessor"></span>        pthread_t my_id;
-<a name="l00194"></a>00194         id( pthread_t id_ ) : my_id(id_) {}
-<a name="l00195"></a>00195 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00196"></a>00196 <span class="preprocessor"></span>        <span class="keyword">friend</span> <span class="keyword">class </span>tbb_thread_v3;
-<a name="l00197"></a>00197     <span class="keyword">public</span>:
-<a name="l00198"></a>00198         id() : my_id(0) {}
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00201"></a>00201         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00202"></a>00202         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00203"></a>00203         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00204"></a>00204         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00205"></a>00205         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-<a name="l00206"></a>00206         
-<a name="l00207"></a>00207         <span class="keyword">template</span><<span class="keyword">class</span> <span class="keywordtype">char</span>T, <span class="keyword">class</span> traits>
-<a name="l00208"></a>00208         <span class="keyword">friend</span> std::basic_ostream<charT, traits>&
-<a name="l00209"></a>00209         operator<< (std::basic_ostream<charT, traits> &out, 
-<a name="l00210"></a>00210                     tbb_thread_v3::id id)
-<a name="l00211"></a>00211         {
-<a name="l00212"></a>00212             out << <span class="keywordtype">id</span>.my_id;
-<a name="l00213"></a>00213             <span class="keywordflow">return</span> out;
-<a name="l00214"></a>00214         }
-<a name="l00215"></a>00215         <span class="keyword">friend</span> tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
-<a name="l00216"></a>00216     }; <span class="comment">// tbb_thread_v3::id</span>
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218     tbb_thread_v3::id tbb_thread_v3::get_id()<span class="keyword"> const </span>{
-<a name="l00219"></a>00219 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00220"></a>00220 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_thread_id);
-<a name="l00221"></a>00221 <span class="preprocessor">#else</span>
-<a name="l00222"></a>00222 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_handle);
-<a name="l00223"></a>00223 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-<a name="l00224"></a>00224 <span class="preprocessor"></span>    }
-<a name="l00225"></a>00225     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
-<a name="l00226"></a>00226     tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
-<a name="l00227"></a>00227     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_yield_v3();
-<a name="l00228"></a>00228     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_sleep_v3(<span class="keyword">const</span> tick_count::interval_t &i);
-<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     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00247"></a>00247     {
-<a name="l00248"></a>00248         <span class="keywordflow">return</span> x.my_id > y.my_id;
-<a name="l00249"></a>00249     }
-<a name="l00250"></a>00250     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y)
-<a name="l00251"></a>00251     {
-<a name="l00252"></a>00252         <span class="keywordflow">return</span> x.my_id >= y.my_id;
-<a name="l00253"></a>00253     }
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255 } <span class="comment">// namespace internal;</span>
-<a name="l00256"></a>00256 
-<a name="l00258"></a>00258 <span class="keyword">typedef</span> internal::tbb_thread_v3 tbb_thread;
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260 <span class="keyword">using</span> internal::operator==;
-<a name="l00261"></a>00261 <span class="keyword">using</span> internal::operator!=;
-<a name="l00262"></a>00262 <span class="keyword">using</span> internal::operator<;
-<a name="l00263"></a>00263 <span class="keyword">using</span> internal::operator>;
-<a name="l00264"></a>00264 <span class="keyword">using</span> internal::operator<=;
-<a name="l00265"></a>00265 <span class="keyword">using</span> internal::operator>=;
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267 <span class="keyword">inline</span> <span class="keywordtype">void</span> move( tbb_thread& t1, tbb_thread& t2 ) {
-<a name="l00268"></a>00268     internal::move_v3(t1, t2);
-<a name="l00269"></a>00269 }
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) {
-<a name="l00272"></a>00272     tbb::tbb_thread::native_handle_type h = t1.my_handle;
-<a name="l00273"></a>00273     t1.my_handle = t2.my_handle;
-<a name="l00274"></a>00274     t2.my_handle = h;
-<a name="l00275"></a>00275 <span class="preprocessor">#if _WIN32||_WIN64</span>
-<a name="l00276"></a>00276 <span class="preprocessor"></span>    DWORD i = t1.my_thread_id;
-<a name="l00277"></a>00277     t1.my_thread_id = t2.my_thread_id;
-<a name="l00278"></a>00278     t2.my_thread_id = i;
-<a name="l00279"></a>00279 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-<a name="l00280"></a>00280 }
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282 <span class="keyword">namespace </span>this_tbb_thread {
-<a name="l00283"></a>00283     <span class="keyword">inline</span> tbb_thread::id get_id() { <span class="keywordflow">return</span> internal::thread_get_id_v3(); }
-<a name="l00285"></a>00285     <span class="keyword">inline</span> <span class="keywordtype">void</span> yield() { internal::thread_yield_v3(); }
-<a name="l00287"></a>00287     <span class="keyword">inline</span> <span class="keywordtype">void</span> sleep(<span class="keyword">const</span> tick_count::interval_t &i) { 
-<a name="l00288"></a>00288         internal::thread_sleep_v3(i);  
-<a name="l00289"></a>00289     }
-<a name="l00290"></a>00290 }  <span class="comment">// namespace this_tbb_thread</span>
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292 } <span class="comment">// namespace tbb</span>
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_thread_H */</span>
+<a name="l00166"></a>00166 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00167"></a>00167 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
+<a name="l00168"></a>00168 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00169"></a>00169 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
+<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00171"></a>00171 <span class="preprocessor"></span>
+<a name="l00173"></a>00173 
+<a name="l00176"></a>00176 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00177"></a><a class="code" href="a00325.html">00177</a> <span class="keyword">class </span><a class="code" href="a00325.html">scalable_allocator</a> {
+<a name="l00178"></a>00178 <span class="keyword">public</span>:
+<a name="l00179"></a>00179     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type<T>::value_type value_type;
+<a name="l00180"></a>00180     <span class="keyword">typedef</span> value_type* pointer;
+<a name="l00181"></a>00181     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
+<a name="l00182"></a>00182     <span class="keyword">typedef</span> value_type& reference;
+<a name="l00183"></a>00183     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference;
+<a name="l00184"></a>00184     <span class="keyword">typedef</span> size_t size_type;
+<a name="l00185"></a>00185     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00186"></a>00186     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
+<a name="l00187"></a>00187         <span class="keyword">typedef</span> <a class="code" href="a00325.html">scalable_allocator<U></a> other;
+<a name="l00188"></a>00188     };
+<a name="l00189"></a>00189 
+<a name="l00190"></a>00190     <a class="code" href="a00325.html">scalable_allocator</a>() <span class="keywordflow">throw</span>() {}
+<a name="l00191"></a>00191     <a class="code" href="a00325.html">scalable_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00325.html">scalable_allocator</a>& ) <span class="keywordflow">throw</span>() {}
+<a name="l00192"></a>00192     <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00325.html">scalable_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00325.html">scalable_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
+<a name="l00193"></a>00193 
+<a name="l00194"></a>00194     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+<a name="l00195"></a>00195     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+<a name="l00196"></a>00196 
+<a name="l00198"></a><a class="code" href="a00325.html#726b1586d05d44665a36e1c7b2699bfd">00198</a>     pointer <a class="code" href="a00325.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="l00199"></a>00199         <span class="keywordflow">return</span> static_cast<pointer>( <a class="code" href="a00428.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_malloc</a>( n * <span class="keyword">sizeof</span>(value_type) ) );
+<a name="l00200"></a>00200     }
+<a name="l00201"></a>00201 
+<a name="l00203"></a><a class="code" href="a00325.html#f806a238c18cbcfb531e1e0a0d2ec59d">00203</a>     <span class="keywordtype">void</span> <a class="code" href="a00325.html#f806a238c18cbcfb531e1e0a0d2ec59d">deallocate</a>( pointer p, size_type ) {
+<a name="l00204"></a>00204         <a class="code" href="a00428.html#gca3579c21244dba9f0c351e5984d4565">scalable_free</a>( p );
+<a name="l00205"></a>00205     }
+<a name="l00206"></a>00206 
+<a name="l00208"></a><a class="code" href="a00325.html#880e766f1d913988c21973dbdd874fd5">00208</a>     size_type <a class="code" href="a00325.html#880e766f1d913988c21973dbdd874fd5">max_size</a>() const throw() {
+<a name="l00209"></a>00209         size_type absolutemax = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (value_type);
+<a name="l00210"></a>00210         <span class="keywordflow">return</span> (absolutemax > 0 ? absolutemax : 1);
+<a name="l00211"></a>00211     }
+<a name="l00212"></a>00212 <span class="preprocessor">#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00213"></a>00213 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span>... Args>
+<a name="l00214"></a>00214     <span class="keywordtype">void</span> construct(pointer p, Args&&... args)
+<a name="l00215"></a>00215  <span class="preprocessor">#if __TBB_CPP11_STD_FORWARD_BROKEN</span>
+<a name="l00216"></a>00216 <span class="preprocessor"></span>        { ::new((<span class="keywordtype">void</span> *)p) T((args)...); }
+<a name="l00217"></a>00217 <span class="preprocessor"> #else</span>
+<a name="l00218"></a>00218 <span class="preprocessor"></span>        { ::new((<span class="keywordtype">void</span> *)p) T(std::forward<Args>(args)...); }
+<a name="l00219"></a>00219  <span class="preprocessor">#endif</span>
+<a name="l00220"></a>00220 <span class="preprocessor"></span><span class="preprocessor">#else // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00221"></a>00221 <span class="preprocessor"></span>    <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="l00222"></a>00222 <span class="preprocessor">#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span>    <span class="keywordtype">void</span> destroy( pointer p ) {p->~value_type();}
+<a name="l00224"></a>00224 };
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00227"></a>00227 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00228"></a>00228 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
+<a name="l00229"></a>00229 <span class="preprocessor"></span>
+<a name="l00231"></a>00231 
+<a name="l00232"></a>00232 <span class="keyword">template</span><>
+<a name="l00233"></a><a class="code" href="a00326.html">00233</a> <span class="keyword">class </span><a class="code" href="a00325.html">scalable_allocator</a><void> {
+<a name="l00234"></a>00234 <span class="keyword">public</span>:
+<a name="l00235"></a>00235     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
+<a name="l00236"></a>00236     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
+<a name="l00237"></a>00237     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
+<a name="l00238"></a>00238     <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
+<a name="l00239"></a>00239         <span class="keyword">typedef</span> <a class="code" href="a00325.html">scalable_allocator<U></a> other;
+<a name="l00240"></a>00240     };
+<a name="l00241"></a>00241 };
+<a name="l00242"></a>00242 
+<a name="l00243"></a>00243 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00244"></a>00244 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00325.html">scalable_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00325.html">scalable_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+<a name="l00245"></a>00245 
+<a name="l00246"></a>00246 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00247"></a>00247 <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="l00248"></a>00248 
+<a name="l00249"></a>00249 } <span class="comment">// namespace tbb</span>
+<a name="l00250"></a>00250 
+<a name="l00251"></a>00251 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00252"></a>00252 <span class="preprocessor"></span><span class="preprocessor">    #if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)</span>
+<a name="l00253"></a>00253 <span class="preprocessor"></span><span class="preprocessor">        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00254"></a>00254 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00255"></a>00255 <span class="preprocessor"></span>
+<a name="l00256"></a>00256 <span class="preprocessor">    #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE</span>
+<a name="l00257"></a>00257 <span class="preprocessor"></span><span class="preprocessor">        #ifdef _DEBUG</span>
+<a name="l00258"></a>00258 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc_debug.lib")</span>
+<a name="l00259"></a>00259 <span class="preprocessor"></span><span class="preprocessor">        #else</span>
+<a name="l00260"></a>00260 <span class="preprocessor"></span><span class="preprocessor">            #pragma comment(lib, "tbbmalloc.lib")</span>
+<a name="l00261"></a>00261 <span class="preprocessor"></span><span class="preprocessor">        #endif</span>
+<a name="l00262"></a>00262 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00263"></a>00263 <span class="preprocessor"></span>
+<a name="l00264"></a>00264 
+<a name="l00265"></a>00265 <span class="preprocessor">#endif</span>
+<a name="l00266"></a>00266 <span class="preprocessor"></span>
+<a name="l00267"></a>00267 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+<a name="l00268"></a>00268 
+<a name="l00269"></a>00269 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
+<a name="l00270"></a>00270 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00271"></a>00271 <span class="preprocessor"></span><span class="preprocessor">#endif // ICC 11.0 warning 991 is back</span>
+<a name="l00272"></a>00272 <span class="preprocessor"></span>
+<a name="l00273"></a>00273 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_scalable_allocator_H */</span>
 </pre></div><hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00611.html b/doc/html/a00611.html
new file mode 100644
index 0000000..5a8b6e3
--- /dev/null
+++ b/doc/html/a00611.html
@@ -0,0 +1,192 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>spin_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<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>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-2012 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_spin_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_spin_mutex_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 <new></span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "tbb_machine.h"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "tbb_profiling.h"</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 
+<a name="l00039"></a><a class="code" href="a00331.html">00039</a> <span class="keyword">class </span><a class="code" href="a00331.html">spin_mutex</a> {
+<a name="l00041"></a>00041     __TBB_atomic_flag 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="a00331.html#3d8fb44644fd8d41ada1fbeba7409be3">00046</a>     <a class="code" href="a00331.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="a00332.html">00053</a>     <span class="keyword">class </span><a class="code" href="a00332.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="a00331.html">spin_mutex</a>* my_mutex; 
+<a name="l00057"></a>00057 
+<a name="l00059"></a>00059         __TBB_Flag 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="a00331.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="a00331.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="a00331.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="a00332.html#29ae680ae7f5e685c2e15535b9c855b3">00074</a>         <a class="code" href="a00332.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="a00332.html#5ce6807050a9e8f87bcb4a65dccb12ef">00077</a>         <a class="code" href="a00332.html#29ae680ae7f5e685c2e15535b9c855b3">scoped_lock</a>( <a class="code" href="a00331.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="a00331.html#0a6204153f18f3a7816faa95b2c1626d">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="a00332.html#3ee3c338732b1f64b0b32a757807a30d">00088</a>         <span class="keywordtype">void</span> <a class="code" href="a00332.html#3ee3c338732b1f64b0b32a757807a30d">acquire</a>( <a class="code" href="a00331.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="a00331.html#0a6204153f18f3a7816faa95b2c1626d">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="a00332.html#9297ec188534b45dc0ca48f2f39a0501">00099</a>         <span class="keywordtype">bool</span> <a class="code" href="a00332.html#9297ec188534b45dc0ca48f2f39a0501">try_acquire</a>( <a class="code" href="a00331.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="a00331.html#0a6204153f18f3a7816faa95b2c1626d">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;
+<a name="l00107"></a>00107             }
+<a name="l00108"></a>00108             <span class="keywordflow">return</span> result;
+<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="a00332.html#eeb615e68e963e6bf8d9c11402d0ce8e">00113</a>         <span class="keywordtype">void</span> <a class="code" href="a00332.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_UnlockByte(my_mutex-><a class="code" href="a00331.html#0a6204153f18f3a7816faa95b2c1626d">flag</a>, 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="a00332.html#ac6fa425d1f06c56d8b70abc51aac844">00123</a>         <a class="code" href="a00332.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_UnlockByte(my_mutex-><a class="code" href="a00331.html#0a6204153f18f3a7816faa95b2c1626d">flag</a>, 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         }
+<a name="l00132"></a>00132     };
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00135"></a>00135 
+<a name="l00136"></a>00136     <span class="comment">// Mutex traits</span>
+<a name="l00137"></a>00137     <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="l00138"></a>00138     <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="l00139"></a>00139     <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="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="a00331.html#4f748989e19b6045e3a2d2ee73626a28">00144</a>     <span class="keywordtype">void</span> <a class="code" href="a00331.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="a00253.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00147"></a>00147         <span class="keyword">new</span>(tmp.<a class="code" href="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00332.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="a00331.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">00155</a>     <span class="keywordtype">bool</span> <a class="code" href="a00331.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="a00253.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="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>()) <a class="code" href="a00332.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="a00331.html#0e843ee6265f57f27d228ba91e7308ef">00165</a>     <span class="keywordtype">void</span> <a class="code" href="a00331.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="a00253.html">aligned_space<scoped_lock,1></a> tmp;
+<a name="l00168"></a>00168         <a class="code" href="a00332.html">scoped_lock</a>& s = *tmp.<a class="code" href="a00253.html#0d702fc6b9e9d061ace3501b3c861cdf">begin</a>();
+<a name="l00169"></a>00169         s.<a class="code" href="a00332.html#d968921bed018503214f36e09007ee7b">my_mutex</a> = <span class="keyword">this</span>;
+<a name="l00170"></a>00170         s.<a class="code" href="a00332.html#96af1c1af58988d527102379c3d4c831">my_unlock_value</a> = 0;
+<a name="l00171"></a>00171         s.<a class="code" href="a00332.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>
+<a name="l00175"></a>00175     }
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177     <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+<a name="l00178"></a>00178 };
+<a name="l00179"></a>00179 
+<a name="l00180"></a>00180 __TBB_DEFINE_PROFILING_SET_NAME(spin_mutex)
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182 } <span class="comment">// namespace tbb</span>
+<a name="l00183"></a>00183 
+<a name="l00184"></a>00184 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_spin_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00612.html b/doc/html/a00612.html
new file mode 100644
index 0000000..19d61ed
--- /dev/null
+++ b/doc/html/a00612.html
@@ -0,0 +1,216 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>spin_rw_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<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>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-2012 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_spin_rw_mutex_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_spin_rw_mutex_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 "tbb_profiling.h"</span>
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="keyword">class </span>spin_rw_mutex_v3;
+<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="a00333.html">00035</a> <span class="keyword">class </span><a class="code" href="a00333.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 
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release_writer();
+<a name="l00044"></a>00044 
+<a name="l00046"></a>00046     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire_reader();
+<a name="l00047"></a>00047 
+<a name="l00049"></a>00049     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_upgrade();
+<a name="l00050"></a>00050 
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_downgrade();
+<a name="l00054"></a>00054 
+<a name="l00056"></a>00056     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release_reader();
+<a name="l00057"></a>00057 
+<a name="l00059"></a>00059     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire_writer();
+<a name="l00060"></a>00060 
+<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="a00333.html#61332b2756de89f3f5f69310cbb6e70c">00067</a>     <a class="code" href="a00333.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="a00333.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="a00334.html">00083</a>     <span class="keyword">class </span><a class="code" href="a00334.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="a00334.html#d6ea60dee5563f702379bf5e51aa8806">00087</a>         <a class="code" href="a00334.html">scoped_lock</a>() : <a class="code" href="a00301.html">mutex</a>(NULL), is_writer(false) {}
+<a name="l00088"></a>00088 
+<a name="l00090"></a><a class="code" href="a00334.html#42a92d4f8fdde425b111cfa8a9228071">00090</a>         <a class="code" href="a00334.html">scoped_lock</a>( <a class="code" href="a00333.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) : <a class="code" href="a00301.html">mutex</a>(NULL) {
+<a name="l00091"></a>00091             <a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>(m, write);
+<a name="l00092"></a>00092         }
+<a name="l00093"></a>00093 
+<a name="l00095"></a><a class="code" href="a00334.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">00095</a>         <a class="code" href="a00319.html#70246e0260493625ff956fa5926fc71f">~scoped_lock</a>() {
+<a name="l00096"></a>00096             <span class="keywordflow">if</span>( <a class="code" href="a00301.html">mutex</a> ) <a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>();
+<a name="l00097"></a>00097         }
+<a name="l00098"></a>00098 
+<a name="l00100"></a><a class="code" href="a00334.html#b0b646ec5be02a127d159bbb7ca65353">00100</a>         <span class="keywordtype">void</span> <a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">acquire</a>( <a class="code" href="a00333.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
+<a name="l00101"></a>00101             __TBB_ASSERT( !<a class="code" href="a00301.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
+<a name="l00102"></a>00102             is_writer = write;
+<a name="l00103"></a>00103             <a class="code" href="a00301.html">mutex</a> = &m;
+<a name="l00104"></a>00104             <span class="keywordflow">if</span>( write ) <a class="code" href="a00301.html">mutex</a>->internal_acquire_writer();
+<a name="l00105"></a>00105             <span class="keywordflow">else</span>        <a class="code" href="a00301.html">mutex</a>->internal_acquire_reader();
+<a name="l00106"></a>00106         }
+<a name="l00107"></a>00107 
+<a name="l00109"></a>00109 
+<a name="l00110"></a><a class="code" href="a00334.html#3f0b1e3f2efab63336400348bd070226">00110</a>         <span class="keywordtype">bool</span> upgrade_to_writer() {
+<a name="l00111"></a>00111             __TBB_ASSERT( <a class="code" href="a00301.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+<a name="l00112"></a>00112             __TBB_ASSERT( !is_writer, <span class="stringliteral">"not a reader"</span> );
+<a name="l00113"></a>00113             is_writer = <span class="keyword">true</span>;
+<a name="l00114"></a>00114             <span class="keywordflow">return</span> <a class="code" href="a00301.html">mutex</a>->internal_upgrade();
+<a name="l00115"></a>00115         }
+<a name="l00116"></a>00116 
+<a name="l00118"></a><a class="code" href="a00334.html#61b14d00a78185c9b2d206ebfc379124">00118</a>         <span class="keywordtype">void</span> <a class="code" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">release</a>() {
+<a name="l00119"></a>00119             __TBB_ASSERT( <a class="code" href="a00301.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+<a name="l00120"></a>00120             <a class="code" href="a00333.html">spin_rw_mutex</a> *m = <a class="code" href="a00301.html">mutex</a>; 
+<a name="l00121"></a>00121             <a class="code" href="a00301.html">mutex</a> = NULL;
+<a name="l00122"></a>00122 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( is_writer ) m->internal_release_writer();
+<a name="l00124"></a>00124             <span class="keywordflow">else</span>            m->internal_release_reader();
+<a name="l00125"></a>00125 <span class="preprocessor">#else</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( is_writer ) __TBB_AtomicAND( &m-><a class="code" href="a00333.html#621b900d5fef23d2e401aabcbb777c76">state</a>, READERS ); 
+<a name="l00127"></a>00127             <span class="keywordflow">else</span>            __TBB_FetchAndAddWrelease( &m-><a class="code" href="a00333.html#621b900d5fef23d2e401aabcbb777c76">state</a>, -(intptr_t)ONE_READER);
+<a name="l00128"></a>00128 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00129"></a>00129         }
+<a name="l00130"></a>00130 
+<a name="l00132"></a><a class="code" href="a00334.html#c2c2c38a08cb9080e87099fac3e5bc94">00132</a>         <span class="keywordtype">bool</span> downgrade_to_reader() {
+<a name="l00133"></a>00133             __TBB_ASSERT( <a class="code" href="a00301.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+<a name="l00134"></a>00134             __TBB_ASSERT( is_writer, <span class="stringliteral">"not a writer"</span> );
+<a name="l00135"></a>00135 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span>            <a class="code" href="a00301.html">mutex</a>->internal_downgrade();
+<a name="l00137"></a>00137 <span class="preprocessor">#else</span>
+<a name="l00138"></a>00138 <span class="preprocessor"></span>            __TBB_FetchAndAddW( &<a class="code" href="a00301.html">mutex</a>->state, ((intptr_t)ONE_READER-WRITER));
+<a name="l00139"></a>00139 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00140"></a>00140             is_writer = <span class="keyword">false</span>;
+<a name="l00141"></a>00141             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00142"></a>00142         }
+<a name="l00143"></a>00143 
+<a name="l00145"></a><a class="code" href="a00334.html#9879626968d9b9a04cd2ec0fb2e84ae1">00145</a>         <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00333.html">spin_rw_mutex</a>& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
+<a name="l00146"></a>00146             __TBB_ASSERT( !<a class="code" href="a00301.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
+<a name="l00147"></a>00147             <span class="keywordtype">bool</span> result;
+<a name="l00148"></a>00148             is_writer = write; 
+<a name="l00149"></a>00149             result = write? m.internal_try_acquire_writer()
+<a name="l00150"></a>00150                           : m.internal_try_acquire_reader();
+<a name="l00151"></a>00151             <span class="keywordflow">if</span>( result ) 
+<a name="l00152"></a>00152                 <a class="code" href="a00301.html">mutex</a> = &m;
+<a name="l00153"></a>00153             <span class="keywordflow">return</span> result;
+<a name="l00154"></a>00154         }
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156     <span class="keyword">protected</span>:
+<a name="l00158"></a><a class="code" href="a00334.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">00158</a>         <a class="code" href="a00333.html">spin_rw_mutex</a>* <a class="code" href="a00301.html">mutex</a>;
+<a name="l00159"></a>00159 
+<a name="l00161"></a>00161 
+<a name="l00162"></a><a class="code" href="a00334.html#6b5a7c3c67a36b05c4df8410d32627d8">00162</a>         <span class="keywordtype">bool</span> is_writer;
+<a name="l00163"></a>00163     };
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165     <span class="comment">// Mutex traits</span>
+<a name="l00166"></a>00166     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;
+<a name="l00167"></a>00167     <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="l00168"></a>00168     <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="l00169"></a>00169 
+<a name="l00170"></a>00170     <span class="comment">// ISO C++0x compatibility methods</span>
+<a name="l00171"></a>00171 
+<a name="l00173"></a><a class="code" href="a00333.html#4007d6e1523dbc3c2bb7f889ab789a8a">00173</a>     <span class="keywordtype">void</span> lock() {internal_acquire_writer();}
+<a name="l00174"></a>00174 
+<a name="l00176"></a>00176 
+<a name="l00177"></a><a class="code" href="a00333.html#088bb256be794cc47d3b83791632fdfc">00177</a>     <span class="keywordtype">bool</span> try_lock() {<span class="keywordflow">return</span> internal_try_acquire_writer();}
+<a name="l00178"></a>00178 
+<a name="l00180"></a><a class="code" href="a00333.html#f9f52ead2098eb5fb12da59d5ae53b55">00180</a>     <span class="keywordtype">void</span> unlock() {
+<a name="l00181"></a>00181 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( state&WRITER ) internal_release_writer();
+<a name="l00183"></a>00183         <span class="keywordflow">else</span>               internal_release_reader();
+<a name="l00184"></a>00184 <span class="preprocessor">#else</span>
+<a name="l00185"></a>00185 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( state&WRITER ) __TBB_AtomicAND( &state, READERS ); 
+<a name="l00186"></a>00186         <span class="keywordflow">else</span>               __TBB_FetchAndAddWrelease( &state, -(intptr_t)ONE_READER);
+<a name="l00187"></a>00187 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00188"></a>00188     }
+<a name="l00189"></a>00189 
+<a name="l00190"></a>00190     <span class="comment">// Methods for reader locks that resemble ISO C++0x compatibility methods.</span>
+<a name="l00191"></a>00191 
+<a name="l00193"></a><a class="code" href="a00333.html#13f799708ac4ca437a16be202e263e18">00193</a>     <span class="keywordtype">void</span> lock_read() {internal_acquire_reader();}
+<a name="l00194"></a>00194 
+<a name="l00196"></a>00196 
+<a name="l00197"></a><a class="code" href="a00333.html#b8667415869013f840d976aa406d385a">00197</a>     <span class="keywordtype">bool</span> try_lock_read() {<span class="keywordflow">return</span> internal_try_acquire_reader();}
+<a name="l00198"></a>00198 
+<a name="l00199"></a>00199 <span class="keyword">private</span>:
+<a name="l00200"></a>00200     <span class="keyword">typedef</span> intptr_t state_t;
+<a name="l00201"></a>00201     <span class="keyword">static</span> <span class="keyword">const</span> state_t WRITER = 1;
+<a name="l00202"></a>00202     <span class="keyword">static</span> <span class="keyword">const</span> state_t WRITER_PENDING = 2;
+<a name="l00203"></a>00203     <span class="keyword">static</span> <span class="keyword">const</span> state_t READERS = ~(WRITER | WRITER_PENDING);
+<a name="l00204"></a>00204     <span class="keyword">static</span> <span class="keyword">const</span> state_t ONE_READER = 4;
+<a name="l00205"></a>00205     <span class="keyword">static</span> <span class="keyword">const</span> state_t BUSY = WRITER | READERS;
+<a name="l00207"></a>00207 
+<a name="l00210"></a>00210     state_t state;
+<a name="l00211"></a>00211 
+<a name="l00212"></a>00212     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+<a name="l00213"></a>00213 };
+<a name="l00214"></a>00214 
+<a name="l00215"></a>00215 __TBB_DEFINE_PROFILING_SET_NAME(spin_rw_mutex)
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217 } <span class="comment">// namespace tbb</span>
+<a name="l00218"></a>00218 
+<a name="l00219"></a>00219 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_spin_rw_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00613.html b/doc/html/a00613.html
new file mode 100644
index 0000000..17b567e
--- /dev/null
+++ b/doc/html/a00613.html
@@ -0,0 +1,733 @@
+<!DOCTYPE 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-2012 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 <span class="preprocessor">#include <climits></span>
+<a name="l00027"></a>00027 
+<a name="l00028"></a>00028 <span class="keyword">typedef</span> <span class="keyword">struct </span>___itt_caller *__itt_caller;
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="keyword">namespace </span>tbb {
+<a name="l00031"></a>00031 
+<a name="l00032"></a>00032 <span class="keyword">class </span>task;
+<a name="l00033"></a>00033 <span class="keyword">class </span>task_list;
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="keyword">class </span>task_group_context;
+<a name="l00037"></a>00037 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039 <span class="comment">// MSVC does not allow taking the address of a member that was defined</span>
+<a name="l00040"></a>00040 <span class="comment">// privately in task_base and made public in class task via a using declaration.</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#if _MSC_VER || (__GNUC__==3 && __GNUC_MINOR__<3)</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TASK_BASE_ACCESS public</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TASK_BASE_ACCESS private</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a>00047 <span class="keyword">namespace </span>internal {
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049     <span class="keyword">class </span>allocate_additional_child_of_proxy: no_assign {
+<a name="l00051"></a>00051         task* <span class="keyword">self</span>;
+<a name="l00052"></a>00052         task& parent;
+<a name="l00053"></a>00053     <span class="keyword">public</span>:
+<a name="l00054"></a>00054         <span class="keyword">explicit</span> allocate_additional_child_of_proxy( task& parent_ ) : self(NULL), parent(parent_) {}
+<a name="l00055"></a>00055         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00056"></a>00056         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
+<a name="l00057"></a>00057     };
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 }
+<a name="l00060"></a>00060 
+<a name="l00061"></a>00061 <span class="keyword">namespace </span>interface5 {
+<a name="l00062"></a>00062     <span class="keyword">namespace </span>internal {
+<a name="l00064"></a>00064 
+<a name="l00069"></a><a class="code" href="a00338.html">00069</a>         <span class="keyword">class </span><a class="code" href="a00338.html">task_base</a>: tbb::internal::no_copy {
+<a name="l00070"></a>00070         __TBB_TASK_BASE_ACCESS:
+<a name="l00071"></a>00071             <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00337.html">tbb::task</a>;
+<a name="l00072"></a>00072 
+<a name="l00074"></a>00074             <span class="keyword">static</span> <span class="keywordtype">void</span> spawn( <a class="code" href="a00337.html">task</a>& t );
+<a name="l00075"></a>00075 
+<a name="l00077"></a>00077             <span class="keyword">static</span> <span class="keywordtype">void</span> spawn( <a class="code" href="a00341.html">task_list</a>& list );
+<a name="l00078"></a>00078 
+<a name="l00080"></a>00080 
+<a name="l00082"></a>00082             <span class="keyword">static</span> tbb::internal::allocate_additional_child_of_proxy allocate_additional_child_of( <a class="code" href="a00337.html">task</a>& t ) {
+<a name="l00083"></a>00083                 <span class="keywordflow">return</span> tbb::internal::allocate_additional_child_of_proxy(t);
+<a name="l00084"></a>00084             }
+<a name="l00085"></a>00085 
+<a name="l00087"></a>00087 
+<a name="l00091"></a>00091             <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a>( <a class="code" href="a00337.html">task</a>& victim );
+<a name="l00092"></a>00092         };
+<a name="l00093"></a>00093     } <span class="comment">// internal</span>
+<a name="l00094"></a>00094 } <span class="comment">// interface5</span>
+<a name="l00095"></a>00095 
+<a name="l00097"></a>00097 <span class="keyword">namespace </span>internal {
+<a name="l00098"></a>00098 
+<a name="l00099"></a>00099     <span class="keyword">class </span>scheduler: no_copy {
+<a name="l00100"></a>00100     <span class="keyword">public</span>:
+<a name="l00102"></a>00102         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn( <a class="code" href="a00337.html">task</a>& first, <a class="code" href="a00337.html">task</a>*& next ) = 0;
+<a name="l00103"></a>00103 
+<a name="l00105"></a>00105         <span class="keyword">virtual</span> <span class="keywordtype">void</span> wait_for_all( <a class="code" href="a00337.html">task</a>& parent, <a class="code" href="a00337.html">task</a>* child ) = 0;
+<a name="l00106"></a>00106 
+<a name="l00108"></a>00108         <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00337.html">task</a>& first, <a class="code" href="a00337.html">task</a>*& next ) = 0;
+<a name="l00109"></a>00109 
+<a name="l00111"></a>00111         <span class="comment">//  Have to have it just to shut up overzealous compilation warnings</span>
+<a name="l00112"></a>00112         <span class="keyword">virtual</span> ~scheduler() = 0;
+<a name="l00113"></a>00113 
+<a name="l00115"></a>00115         <span class="keyword">virtual</span> <span class="keywordtype">void</span> enqueue( <a class="code" href="a00337.html">task</a>& t, <span class="keywordtype">void</span>* reserved ) = 0;
+<a name="l00116"></a>00116     };
+<a name="l00117"></a>00117 
+<a name="l00119"></a>00119 
+<a name="l00120"></a>00120     <span class="keyword">typedef</span> intptr_t reference_count;
+<a name="l00121"></a>00121 
+<a name="l00123"></a>00123     <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> affinity_id;
+<a name="l00124"></a>00124 
+<a name="l00125"></a>00125 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span>    <span class="keyword">class </span>generic_scheduler;
+<a name="l00127"></a>00127 
+<a name="l00128"></a>00128     <span class="keyword">struct </span>context_list_node_t {
+<a name="l00129"></a>00129         context_list_node_t *my_prev,
+<a name="l00130"></a>00130                             *my_next;
+<a name="l00131"></a>00131     };
+<a name="l00132"></a>00132 
+<a name="l00133"></a>00133     <span class="keyword">class </span>allocate_root_with_context_proxy: no_assign {
+<a name="l00134"></a>00134         task_group_context& my_context;
+<a name="l00135"></a>00135     <span class="keyword">public</span>:
+<a name="l00136"></a>00136         allocate_root_with_context_proxy ( task_group_context& ctx ) : my_context(ctx) {}
+<a name="l00137"></a>00137         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00138"></a>00138         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
+<a name="l00139"></a>00139     };
+<a name="l00140"></a>00140 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00141"></a>00141 
+<a name="l00142"></a>00142     <span class="keyword">class </span>allocate_root_proxy: no_assign {
+<a name="l00143"></a>00143     <span class="keyword">public</span>:
+<a name="l00144"></a>00144         <span class="keyword">static</span> task& __TBB_EXPORTED_FUNC allocate( size_t size );
+<a name="l00145"></a>00145         <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free( task& );
+<a name="l00146"></a>00146     };
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148     <span class="keyword">class </span>allocate_continuation_proxy: no_assign {
+<a name="l00149"></a>00149     <span class="keyword">public</span>:
+<a name="l00150"></a>00150         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00151"></a>00151         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
+<a name="l00152"></a>00152     };
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154     <span class="keyword">class </span>allocate_child_proxy: no_assign {
+<a name="l00155"></a>00155     <span class="keyword">public</span>:
+<a name="l00156"></a>00156         task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+<a name="l00157"></a>00157         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
+<a name="l00158"></a>00158     };
+<a name="l00159"></a>00159 
+<a name="l00161"></a>00161 
+<a name="l00172"></a>00172     <span class="keyword">class </span>task_prefix {
+<a name="l00173"></a>00173     <span class="keyword">private</span>:
+<a name="l00174"></a>00174         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00337.html">tbb::task</a>;
+<a name="l00175"></a>00175         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00338.html">tbb::interface5::internal::task_base</a>;
+<a name="l00176"></a>00176         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00341.html">tbb::task_list</a>;
+<a name="l00177"></a>00177         <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
+<a name="l00178"></a>00178         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
+<a name="l00179"></a>00179         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
+<a name="l00180"></a>00180         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
+<a name="l00181"></a>00181         <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
+<a name="l00182"></a>00182 
+<a name="l00183"></a>00183 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00185"></a>00185 <span class="preprocessor"></span>
+<a name="l00188"></a>00188 <span class="preprocessor">        task_group_context  *context;</span>
+<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00190"></a>00190 
+<a name="l00192"></a>00192 
+<a name="l00197"></a>00197         scheduler* origin;
+<a name="l00198"></a>00198 
+<a name="l00199"></a>00199 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
+<a name="l00200"></a>00200 <span class="preprocessor"></span>        <span class="keyword">union </span>{
+<a name="l00201"></a>00201 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00203"></a>00203 
+<a name="l00205"></a>00205         scheduler* owner;
+<a name="l00206"></a>00206 
+<a name="l00207"></a>00207 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
+<a name="l00209"></a>00209 <span class="preprocessor"></span>
+<a name="l00210"></a>00210 <span class="preprocessor">        task* next_offloaded;</span>
+<a name="l00211"></a>00211 <span class="preprocessor"></span>        };
+<a name="l00212"></a>00212 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00213"></a>00213 
+<a name="l00215"></a>00215 
+<a name="l00218"></a>00218         <a class="code" href="a00337.html">tbb::task</a>* parent;
+<a name="l00219"></a>00219 
+<a name="l00221"></a>00221 
+<a name="l00225"></a>00225         __TBB_atomic reference_count ref_count;
+<a name="l00226"></a>00226 
+<a name="l00228"></a>00228 
+<a name="l00230"></a>00230         <span class="keywordtype">int</span> depth;
+<a name="l00231"></a>00231 
+<a name="l00233"></a>00233 
+<a name="l00234"></a>00234         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state;
+<a name="l00235"></a>00235 
+<a name="l00237"></a>00237 
+<a name="l00243"></a>00243         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> extra_state;
+<a name="l00244"></a>00244 
+<a name="l00245"></a>00245         affinity_id affinity;
+<a name="l00246"></a>00246 
+<a name="l00248"></a>00248         <a class="code" href="a00337.html">tbb::task</a>* next;
+<a name="l00249"></a>00249 
+<a name="l00251"></a>00251         <a class="code" href="a00337.html">tbb::task</a>& task() {<span class="keywordflow">return</span> *reinterpret_cast<tbb::task*>(<span class="keyword">this</span>+1);}
+<a name="l00252"></a>00252     };
+<a name="l00253"></a>00253 
+<a name="l00254"></a>00254 } <span class="comment">// namespace internal</span>
+<a name="l00256"></a>00256 <span class="comment"></span>
+<a name="l00257"></a>00257 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00258"></a>00258 <span class="preprocessor"></span>
+<a name="l00259"></a>00259 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
+<a name="l00260"></a>00260 <span class="preprocessor"></span><span class="keyword">namespace </span>internal {
+<a name="l00261"></a>00261     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> priority_stride_v4 = INT_MAX / 4;
+<a name="l00262"></a>00262 }
+<a name="l00263"></a>00263 
+<a name="l00264"></a>00264 <span class="keyword">enum</span> priority_t {
+<a name="l00265"></a>00265     priority_normal = internal::priority_stride_v4 * 2,
+<a name="l00266"></a>00266     priority_low = priority_normal - internal::priority_stride_v4,
+<a name="l00267"></a>00267     priority_high = priority_normal + internal::priority_stride_v4
+<a name="l00268"></a>00268 };
+<a name="l00269"></a>00269 
+<a name="l00270"></a>00270 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00271"></a>00271 
+<a name="l00272"></a>00272 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00273"></a>00273 <span class="preprocessor"></span>    <span class="keyword">class </span>tbb_exception;
+<a name="l00274"></a>00274 <span class="preprocessor">#else</span>
+<a name="l00275"></a>00275 <span class="preprocessor"></span>    <span class="keyword">namespace </span>internal {
+<a name="l00276"></a>00276         <span class="keyword">class </span>tbb_exception_ptr;
+<a name="l00277"></a>00277     }
+<a name="l00278"></a>00278 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00279"></a>00279 
+<a name="l00280"></a>00280 <span class="keyword">class </span>task_scheduler_init;
+<a name="l00281"></a>00281 
+<a name="l00283"></a>00283 
+<a name="l00303"></a><a class="code" href="a00340.html">00303</a> <span class="keyword">class </span><a class="code" href="a00339.html">task_group_context</a> : internal::no_copy {
+<a name="l00304"></a>00304 <span class="keyword">private</span>:
+<a name="l00305"></a>00305     <span class="keyword">friend</span> <span class="keyword">class </span>internal::generic_scheduler;
+<a name="l00306"></a>00306     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00342.html">task_scheduler_init</a>;
+<a name="l00307"></a>00307 
+<a name="l00308"></a>00308 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00309"></a>00309 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00345.html">tbb_exception</a> <a class="code" href="a00345.html">exception_container_type</a>;
+<a name="l00310"></a>00310 <span class="preprocessor">#else</span>
+<a name="l00311"></a>00311 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="a00346.html">internal::tbb_exception_ptr</a> <a class="code" href="a00345.html">exception_container_type</a>;
+<a name="l00312"></a>00312 <span class="preprocessor">#endif</span>
+<a name="l00313"></a>00313 <span class="preprocessor"></span>
+<a name="l00314"></a>00314     <span class="keyword">enum</span> version_traits_word_layout {
+<a name="l00315"></a>00315         traits_offset = 16,
+<a name="l00316"></a>00316         version_mask = 0xFFFF,
+<a name="l00317"></a>00317         traits_mask = 0xFFFFul << traits_offset
+<a name="l00318"></a>00318     };
+<a name="l00319"></a>00319 
+<a name="l00320"></a>00320 <span class="keyword">public</span>:
+<a name="l00321"></a>00321     <span class="keyword">enum</span> kind_type {
+<a name="l00322"></a>00322         isolated,
+<a name="l00323"></a>00323         bound
+<a name="l00324"></a>00324     };
+<a name="l00325"></a>00325 
+<a name="l00326"></a>00326     <span class="keyword">enum</span> traits_type {
+<a name="l00327"></a>00327         exact_exception = 0x0001ul << traits_offset,
+<a name="l00328"></a>00328         concurrent_wait = 0x0004ul << traits_offset,
+<a name="l00329"></a>00329 <span class="preprocessor">#if TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00330"></a>00330 <span class="preprocessor"></span>        default_traits = 0
+<a name="l00331"></a>00331 <span class="preprocessor">#else</span>
+<a name="l00332"></a>00332 <span class="preprocessor"></span>        default_traits = exact_exception
+<a name="l00333"></a>00333 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00334"></a>00334     };
+<a name="l00335"></a>00335 
+<a name="l00336"></a>00336 <span class="keyword">private</span>:
+<a name="l00337"></a>00337     <span class="keyword">enum</span> state {
+<a name="l00338"></a>00338         may_have_children = 1
+<a name="l00339"></a>00339     };
+<a name="l00340"></a>00340 
+<a name="l00341"></a>00341     <span class="keyword">union </span>{
+<a name="l00343"></a>00343         kind_type my_kind;
+<a name="l00344"></a>00344         uintptr_t _my_kind_aligner;
+<a name="l00345"></a>00345     };
+<a name="l00346"></a>00346 
+<a name="l00348"></a>00348     <a class="code" href="a00339.html">task_group_context</a> *my_parent;
+<a name="l00349"></a>00349 
+<a name="l00351"></a>00351 
+<a name="l00353"></a>00353     internal::context_list_node_t my_node;
+<a name="l00354"></a>00354 
+<a name="l00356"></a>00356     __itt_caller itt_caller;
+<a name="l00357"></a>00357 
+<a name="l00359"></a>00359 
+<a name="l00362"></a>00362     <span class="keywordtype">char</span> _leading_padding[internal::NFS_MaxLineSize
+<a name="l00363"></a>00363                           - 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="l00364"></a>00364                           - <span class="keyword">sizeof</span>(__itt_caller)];
+<a name="l00365"></a>00365 
+<a name="l00367"></a>00367     uintptr_t my_cancellation_requested;
+<a name="l00368"></a>00368 
+<a name="l00370"></a>00370 
+<a name="l00373"></a>00373     uintptr_t  my_version_and_traits;
+<a name="l00374"></a>00374 
+<a name="l00376"></a>00376     <a class="code" href="a00345.html">exception_container_type</a> *my_exception;
+<a name="l00377"></a>00377 
+<a name="l00379"></a>00379     internal::generic_scheduler *my_owner;
+<a name="l00380"></a>00380 
+<a name="l00382"></a>00382     uintptr_t my_state;
+<a name="l00383"></a>00383 
+<a name="l00384"></a>00384 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
+<a name="l00386"></a>00386 <span class="preprocessor">    intptr_t my_priority;</span>
+<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00388"></a>00388 
+<a name="l00390"></a>00390 
+<a name="l00391"></a>00391     <span class="keywordtype">char</span> _trailing_padding[internal::NFS_MaxLineSize - 2 * <span class="keyword">sizeof</span>(uintptr_t) - 2 * <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*)
+<a name="l00392"></a>00392 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
+<a name="l00393"></a>00393 <span class="preprocessor"></span>                            - <span class="keyword">sizeof</span>(intptr_t)
+<a name="l00394"></a>00394 #endif <span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00395"></a>00395                           ];
+<a name="l00396"></a>00396 
+<a name="l00397"></a>00397 <span class="keyword">public</span>:
+<a name="l00399"></a>00399 
+<a name="l00427"></a><a class="code" href="a00340.html#19fee08fb8ac98adccfe69c1aa63c491">00427</a>     <a class="code" href="a00339.html">task_group_context</a> ( kind_type relation_with_parent = bound,
+<a name="l00428"></a>00428                          uintptr_t traits = default_traits )
+<a name="l00429"></a>00429         : my_kind(relation_with_parent)
+<a name="l00430"></a>00430         , my_version_and_traits(1 | traits)
+<a name="l00431"></a>00431     {
+<a name="l00432"></a>00432         init();
+<a name="l00433"></a>00433     }
+<a name="l00434"></a>00434 
+<a name="l00435"></a>00435     __TBB_EXPORTED_METHOD ~<a class="code" href="a00339.html">task_group_context</a> ();
+<a name="l00436"></a>00436 
+<a name="l00438"></a>00438 
+<a name="l00445"></a>00445     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD reset ();
+<a name="l00446"></a>00446 
+<a name="l00448"></a>00448 
+<a name="l00455"></a>00455     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD cancel_group_execution ();
+<a name="l00456"></a>00456 
+<a name="l00458"></a>00458     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_group_execution_cancelled () <span class="keyword">const</span>;
+<a name="l00459"></a>00459 
+<a name="l00461"></a>00461 
+<a name="l00467"></a>00467     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD register_pending_exception ();
+<a name="l00468"></a>00468 
+<a name="l00469"></a>00469 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
+<a name="l00471"></a>00471 <span class="preprocessor">    void set_priority ( priority_t );</span>
+<a name="l00472"></a>00472 <span class="preprocessor"></span>
+<a name="l00474"></a>00474     priority_t priority () <span class="keyword">const</span>;
+<a name="l00475"></a>00475 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00476"></a>00476 
+<a name="l00477"></a>00477 <span class="keyword">protected</span>:
+<a name="l00479"></a>00479 
+<a name="l00480"></a>00480     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD init ();
+<a name="l00481"></a>00481 
+<a name="l00482"></a>00482 <span class="keyword">private</span>:
+<a name="l00483"></a>00483     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00337.html">task</a>;
+<a name="l00484"></a>00484     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
+<a name="l00485"></a>00485 
+<a name="l00486"></a>00486     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_required = bound;
+<a name="l00487"></a>00487     <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_completed = kind_type(bound+1);
+<a name="l00488"></a>00488     <span class="keyword">static</span> <span class="keyword">const</span> kind_type detached = kind_type(binding_completed+1);
+<a name="l00489"></a>00489     <span class="keyword">static</span> <span class="keyword">const</span> kind_type dying = kind_type(detached+1);
+<a name="l00490"></a>00490 
+<a name="l00492"></a>00492 
+<a name="l00494"></a>00494     <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00495"></a>00495     <span class="keywordtype">void</span> propagate_state_from_ancestors ( T <a class="code" href="a00339.html">task_group_context</a>::*mptr_state, T new_state );
+<a name="l00496"></a>00496 
+<a name="l00498"></a>00498     <span class="keyword">inline</span> <span class="keywordtype">void</span> finish_initialization ( internal::generic_scheduler *local_sched );
+<a name="l00499"></a>00499 
+<a name="l00501"></a>00501     <span class="keywordtype">void</span> bind_to ( internal::generic_scheduler *local_sched );
+<a name="l00502"></a>00502 
+<a name="l00504"></a>00504     <span class="keywordtype">void</span> register_with ( internal::generic_scheduler *local_sched );
+<a name="l00505"></a>00505 
+<a name="l00506"></a>00506 }; <span class="comment">// class task_group_context</span>
+<a name="l00507"></a>00507 
+<a name="l00508"></a>00508 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00509"></a>00509 
+<a name="l00511"></a>00511 
+<a name="l00512"></a><a class="code" href="a00337.html">00512</a> <span class="keyword">class </span><a class="code" href="a00337.html">task</a>: __TBB_TASK_BASE_ACCESS interface5::internal::task_base {
+<a name="l00513"></a>00513 
+<a name="l00515"></a>00515     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_ref_count( <span class="keywordtype">int</span> count );
+<a name="l00516"></a>00516 
+<a name="l00518"></a>00518     internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count();
+<a name="l00519"></a>00519 
+<a name="l00520"></a>00520 <span class="keyword">protected</span>:
+<a name="l00522"></a><a class="code" href="a00337.html#2bce8ec6e44706e70128f5cf91b76e67">00522</a>     <a class="code" href="a00337.html">task</a>() {prefix().extra_state=1;}
+<a name="l00523"></a>00523 
+<a name="l00524"></a>00524 <span class="keyword">public</span>:
+<a name="l00526"></a><a class="code" href="a00337.html#98245ee0473f84cb19dbbf8c81134908">00526</a>     <span class="keyword">virtual</span> ~<a class="code" href="a00337.html">task</a>() {}
+<a name="l00527"></a>00527 
+<a name="l00529"></a>00529     <span class="keyword">virtual</span> <a class="code" href="a00337.html">task</a>* execute() = 0;
+<a name="l00530"></a>00530 
+<a name="l00532"></a><a class="code" href="a00337.html#4a3c415562d17905390ea5b49d12293e">00532</a>     <span class="keyword">enum</span> <a class="code" href="a00337.html#4a3c415562d17905390ea5b49d12293e">state_type</a> {
+<a name="l00534"></a>00534         executing,
+<a name="l00536"></a>00536         reexecute,
+<a name="l00538"></a>00538         ready,
+<a name="l00540"></a>00540         allocated,
+<a name="l00542"></a>00542         freed,
+<a name="l00544"></a>00544         recycle
+<a name="l00545"></a>00545     };
+<a name="l00546"></a>00546 
+<a name="l00547"></a>00547     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00548"></a>00548     <span class="comment">// Allocating tasks</span>
+<a name="l00549"></a>00549     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00550"></a>00550 
+<a name="l00552"></a><a class="code" href="a00337.html#23acb0da0afd690da797f9f882027d34">00552</a>     <span class="keyword">static</span> internal::allocate_root_proxy allocate_root() {
+<a name="l00553"></a>00553         <span class="keywordflow">return</span> internal::allocate_root_proxy();
+<a name="l00554"></a>00554     }
+<a name="l00555"></a>00555 
+<a name="l00556"></a>00556 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00558"></a><a class="code" href="a00337.html#8ccc518caf31075a3e073996d2d240a4">00558</a> <span class="preprocessor">    static internal::allocate_root_with_context_proxy allocate_root( task_group_context& ctx ) {</span>
+<a name="l00559"></a>00559 <span class="preprocessor"></span>        <span class="keywordflow">return</span> internal::allocate_root_with_context_proxy(ctx);
+<a name="l00560"></a>00560     }
+<a name="l00561"></a>00561 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00562"></a>00562 
+<a name="l00564"></a>00564 
+<a name="l00565"></a><a class="code" href="a00337.html#1434c79a5138993269d034008bff7329">00565</a>     internal::allocate_continuation_proxy& allocate_continuation() {
+<a name="l00566"></a>00566         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_continuation_proxy*>(<span class="keyword">this</span>);
+<a name="l00567"></a>00567     }
+<a name="l00568"></a>00568 
+<a name="l00570"></a><a class="code" href="a00337.html#1ff794f7053cd9148d5f280fbf07377f">00570</a>     internal::allocate_child_proxy& allocate_child() {
+<a name="l00571"></a>00571         <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_child_proxy*>(<span class="keyword">this</span>);
+<a name="l00572"></a>00572     }
+<a name="l00573"></a>00573 
+<a name="l00575"></a>00575     <span class="keyword">using</span> task_base::allocate_additional_child_of;
+<a name="l00576"></a>00576 
+<a name="l00577"></a>00577 <span class="preprocessor">#if __TBB_DEPRECATED_TASK_INTERFACE</span>
+<a name="l00579"></a>00579 <span class="preprocessor"></span>
+<a name="l00583"></a>00583 <span class="preprocessor">    void __TBB_EXPORTED_METHOD destroy( task& t );</span>
+<a name="l00584"></a>00584 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !__TBB_DEPRECATED_TASK_INTERFACE */</span>
+<a name="l00586"></a>00586     using task_base::destroy;
+<a name="l00587"></a>00587 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_DEPRECATED_TASK_INTERFACE */</span>
+<a name="l00588"></a>00588 
+<a name="l00589"></a>00589     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00590"></a>00590     <span class="comment">// Recycling of tasks</span>
+<a name="l00591"></a>00591     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00592"></a>00592 
+<a name="l00594"></a>00594 
+<a name="l00600"></a><a class="code" href="a00337.html#a67a79e18f62b43a623a00cfbd76db4c">00600</a>     <span class="keywordtype">void</span> recycle_as_continuation() {
+<a name="l00601"></a>00601         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
+<a name="l00602"></a>00602         prefix().state = allocated;
+<a name="l00603"></a>00603     }
+<a name="l00604"></a>00604 
+<a name="l00606"></a>00606 
+<a name="l00608"></a><a class="code" href="a00337.html#3b290d14109704e2b69dc1ac980a7a76">00608</a>     <span class="keywordtype">void</span> recycle_as_safe_continuation() {
+<a name="l00609"></a>00609         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
+<a name="l00610"></a>00610         prefix().state = recycle;
+<a name="l00611"></a>00611     }
+<a name="l00612"></a>00612 
+<a name="l00614"></a><a class="code" href="a00337.html#db399855177438bbc9cc61d508dae8d2">00614</a>     <span class="keywordtype">void</span> recycle_as_child_of( <a class="code" href="a00337.html">task</a>& new_parent ) {
+<a name="l00615"></a>00615         internal::task_prefix& p = prefix();
+<a name="l00616"></a>00616         __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, <span class="stringliteral">"execute not running, or already recycled"</span> );
+<a name="l00617"></a>00617         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled as a child"</span> );
+<a name="l00618"></a>00618         __TBB_ASSERT( p.parent==NULL, <span class="stringliteral">"parent must be null"</span> );
+<a name="l00619"></a>00619         __TBB_ASSERT( new_parent.<a class="code" href="a00337.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state<=recycle, <span class="stringliteral">"corrupt parent's state"</span> );
+<a name="l00620"></a>00620         __TBB_ASSERT( new_parent.<a class="code" href="a00337.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().state!=freed, <span class="stringliteral">"parent already freed"</span> );
+<a name="l00621"></a>00621         p.state = allocated;
+<a name="l00622"></a>00622         p.parent = &new_parent;
+<a name="l00623"></a>00623 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00624"></a>00624 <span class="preprocessor"></span>        p.<a class="code" href="a00337.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> = new_parent.<a class="code" href="a00337.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().context;
+<a name="l00625"></a>00625 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00626"></a>00626     }
+<a name="l00627"></a>00627 
+<a name="l00629"></a>00629 
+<a name="l00630"></a><a class="code" href="a00337.html#4f1be9bbcdb487830dbe298b68d85144">00630</a>     <span class="keywordtype">void</span> recycle_to_reexecute() {
+<a name="l00631"></a>00631         __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running, or already recycled"</span> );
+<a name="l00632"></a>00632         __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled for reexecution"</span> );
+<a name="l00633"></a>00633         prefix().state = reexecute;
+<a name="l00634"></a>00634     }
+<a name="l00635"></a>00635 
+<a name="l00636"></a>00636     <span class="comment">// All depth-related methods are obsolete, and are retained for the sake</span>
+<a name="l00637"></a>00637     <span class="comment">// of backward source compatibility only</span>
+<a name="l00638"></a>00638     intptr_t depth()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 0;}
+<a name="l00639"></a>00639     <span class="keywordtype">void</span> set_depth( intptr_t ) {}
+<a name="l00640"></a>00640     <span class="keywordtype">void</span> add_to_depth( <span class="keywordtype">int</span> ) {}
+<a name="l00641"></a>00641 
+<a name="l00642"></a>00642 
+<a name="l00643"></a>00643     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00644"></a>00644     <span class="comment">// Spawning and blocking</span>
+<a name="l00645"></a>00645     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00646"></a>00646 
+<a name="l00648"></a><a class="code" href="a00337.html#06a4206a57e8e12a439b14d6d41cfd92">00648</a>     <span class="keywordtype">void</span> set_ref_count( <span class="keywordtype">int</span> count ) {
+<a name="l00649"></a>00649 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00650"></a>00650 <span class="preprocessor"></span>        internal_set_ref_count(count);
+<a name="l00651"></a>00651 <span class="preprocessor">#else</span>
+<a name="l00652"></a>00652 <span class="preprocessor"></span>        prefix().ref_count = count;
+<a name="l00653"></a>00653 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00654"></a>00654     }
+<a name="l00655"></a>00655 
+<a name="l00657"></a>00657 
+<a name="l00658"></a><a class="code" href="a00337.html#f5fb43c7ad0de5a4b95703cebc39e345">00658</a>     <span class="keywordtype">void</span> increment_ref_count() {
+<a name="l00659"></a>00659         __TBB_FetchAndIncrementWacquire( &prefix().ref_count );
+<a name="l00660"></a>00660     }
+<a name="l00661"></a>00661 
+<a name="l00663"></a>00663 
+<a name="l00664"></a><a class="code" href="a00337.html#ef4680f5c148020c5e7e43ddef44cd5d">00664</a>     <span class="keywordtype">int</span> decrement_ref_count() {
+<a name="l00665"></a>00665 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+<a name="l00666"></a>00666 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(internal_decrement_ref_count());
+<a name="l00667"></a>00667 <span class="preprocessor">#else</span>
+<a name="l00668"></a>00668 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(__TBB_FetchAndDecrementWrelease( &prefix().ref_count ))-1;
+<a name="l00669"></a>00669 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+<a name="l00670"></a>00670     }
+<a name="l00671"></a>00671 
+<a name="l00673"></a>00673     <span class="keyword">using</span> task_base::spawn;
+<a name="l00674"></a>00674 
+<a name="l00676"></a><a class="code" href="a00337.html#3ce28ca9baa771cfc37ecd72e69c4f3c">00676</a>     <span class="keywordtype">void</span> spawn_and_wait_for_all( <a class="code" href="a00337.html">task</a>& child ) {
+<a name="l00677"></a>00677         prefix().owner->wait_for_all( *<span class="keyword">this</span>, &child );
+<a name="l00678"></a>00678     }
+<a name="l00679"></a>00679 
+<a name="l00681"></a>00681     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD spawn_and_wait_for_all( <a class="code" href="a00341.html">task_list</a>& list );
+<a name="l00682"></a>00682 
+<a name="l00684"></a><a class="code" href="a00337.html#ce8ce689c26a4ddf343829bc3c73290a">00684</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00337.html">task</a>& root ) {
+<a name="l00685"></a>00685         root.<a class="code" href="a00337.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->spawn_root_and_wait( root, root.<a class="code" href="a00337.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next );
+<a name="l00686"></a>00686     }
+<a name="l00687"></a>00687 
+<a name="l00689"></a>00689 
+<a name="l00691"></a>00691     <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00341.html">task_list</a>& root_list );
+<a name="l00692"></a>00692 
+<a name="l00694"></a>00694 
+<a name="l00695"></a><a class="code" href="a00337.html#53d2615ad9c38859b4c8080936600283">00695</a>     <span class="keywordtype">void</span> wait_for_all() {
+<a name="l00696"></a>00696         prefix().owner->wait_for_all( *<span class="keyword">this</span>, NULL );
+<a name="l00697"></a>00697     }
+<a name="l00698"></a>00698 
+<a name="l00700"></a>00700 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
+<a name="l00701"></a>00701 <span class="preprocessor"></span>
+<a name="l00711"></a>00711 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00712"></a><a class="code" href="a00337.html#8365d063c0cc9d7bd616bca47256b93c">00712</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> enqueue( <a class="code" href="a00337.html">task</a>& t ) {
+<a name="l00713"></a>00713         t.<a class="code" href="a00337.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->enqueue( t, NULL );
+<a name="l00714"></a>00714     }
+<a name="l00715"></a>00715 
+<a name="l00716"></a>00716 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
+<a name="l00718"></a><a class="code" href="a00337.html#fe6bf6aaf84e664134fabb6c4f409ea9">00718</a> <span class="preprocessor">    static void enqueue( task& t, priority_t p ) {</span>
+<a name="l00719"></a>00719 <span class="preprocessor"></span>        __TBB_ASSERT( p == priority_low || p == priority_normal || p == priority_high, <span class="stringliteral">"Invalid priority level value"</span> );
+<a name="l00720"></a>00720         t.prefix().owner->enqueue( t, (<span class="keywordtype">void</span>*)p );
+<a name="l00721"></a>00721     }
+<a name="l00722"></a>00722 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00723"></a>00723 
+<a name="l00725"></a>00725     <span class="keyword">static</span> <a class="code" href="a00337.html">task</a>& __TBB_EXPORTED_FUNC <span class="keyword">self</span>();
+<a name="l00726"></a>00726 
+<a name="l00728"></a><a class="code" href="a00337.html#314e98ee4347ccec83efcb9ee22e8596">00728</a>     <a class="code" href="a00337.html">task</a>* parent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().parent;}
+<a name="l00729"></a>00729 
+<a name="l00731"></a><a class="code" href="a00337.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">00731</a>     <span class="keywordtype">void</span> set_parent(<a class="code" href="a00337.html">task</a>* p) {
+<a name="l00732"></a>00732 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00733"></a>00733 <span class="preprocessor"></span>        __TBB_ASSERT(prefix().context == p-><a class="code" href="a00337.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().context, <span class="stringliteral">"The tasks must be in the same context"</span>);
+<a name="l00734"></a>00734 <span class="preprocessor">#endif</span>
+<a name="l00735"></a>00735 <span class="preprocessor"></span>        prefix().parent = p;
+<a name="l00736"></a>00736     }
+<a name="l00737"></a>00737 
+<a name="l00738"></a>00738 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00740"></a>00740 <span class="preprocessor"></span>
+<a name="l00741"></a><a class="code" href="a00337.html#d8c36a93f3972590fbb65ff1cef3173b">00741</a> <span class="preprocessor">    task_group_context* context() {return prefix().context;}</span>
+<a name="l00742"></a>00742 <span class="preprocessor"></span>
+<a name="l00744"></a><a class="code" href="a00337.html#5987123486afca36ddebb9e2a8b7779a">00744</a>     <a class="code" href="a00339.html">task_group_context</a>* group () { <span class="keywordflow">return</span> prefix().<a class="code" href="a00337.html#d8c36a93f3972590fbb65ff1cef3173b">context</a>; }
+<a name="l00745"></a>00745 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00746"></a>00746 
+<a name="l00748"></a><a class="code" href="a00337.html#f9169402702f56bf519448aaf34450aa">00748</a>     <span class="keywordtype">bool</span> is_stolen_task()<span class="keyword"> const </span>{
+<a name="l00749"></a>00749         <span class="keywordflow">return</span> (prefix().extra_state & 0x80)!=0;
+<a name="l00750"></a>00750     }
+<a name="l00751"></a>00751 
+<a name="l00752"></a>00752     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00753"></a>00753     <span class="comment">// Debugging</span>
+<a name="l00754"></a>00754     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00755"></a>00755 
+<a name="l00757"></a><a class="code" href="a00337.html#0af7b2d7e6e8b4333b2accfce3dfb374">00757</a>     <a class="code" href="a00337.html#4a3c415562d17905390ea5b49d12293e">state_type</a> state()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00337.html#4a3c415562d17905390ea5b49d12293e">state_type</a>(prefix().state);}
+<a name="l00758"></a>00758 
+<a name="l00760"></a><a class="code" href="a00337.html#ad774f55eaec008ae02b236423209ced">00760</a>     <span class="keywordtype">int</span> ref_count()<span class="keyword"> const </span>{
+<a name="l00761"></a>00761 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00762"></a>00762 <span class="preprocessor"></span>        internal::reference_count ref_count_ = prefix().ref_count;
+<a name="l00763"></a>00763         __TBB_ASSERT( ref_count_==<span class="keywordtype">int</span>(ref_count_), <span class="stringliteral">"integer overflow error"</span>);
+<a name="l00764"></a>00764 <span class="preprocessor">#endif</span>
+<a name="l00765"></a>00765 <span class="preprocessor"></span>        <span class="keywordflow">return</span> int(prefix().ref_count);
+<a name="l00766"></a>00766     }
+<a name="l00767"></a>00767 
+<a name="l00769"></a>00769     <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_owned_by_current_thread() <span class="keyword">const</span>;
+<a name="l00770"></a>00770 
+<a name="l00771"></a>00771     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00772"></a>00772     <span class="comment">// Affinity</span>
+<a name="l00773"></a>00773     <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00774"></a>00774 
+<a name="l00776"></a>00776 
+<a name="l00777"></a><a class="code" href="a00337.html#d61bb32389d3857bf7511d69beaafb76">00777</a>     <span class="keyword">typedef</span> internal::affinity_id affinity_id;
+<a name="l00778"></a>00778 
+<a name="l00780"></a><a class="code" href="a00337.html#dca19d7a45487a7d67a0db517e2b57c9">00780</a>     <span class="keywordtype">void</span> set_affinity( affinity_id <span class="keywordtype">id</span> ) {prefix().affinity = id;}
+<a name="l00781"></a>00781 
+<a name="l00783"></a><a class="code" href="a00337.html#3a920a56b0bcf2801518fb45b2c9d2be">00783</a>     affinity_id affinity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().affinity;}
+<a name="l00784"></a>00784 
+<a name="l00786"></a>00786 
+<a name="l00790"></a>00790     <span class="keyword">virtual</span> <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD note_affinity( affinity_id <span class="keywordtype">id</span> );
+<a name="l00791"></a>00791 
+<a name="l00792"></a>00792 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00794"></a>00794 <span class="preprocessor"></span>
+<a name="l00804"></a>00804 <span class="preprocessor">    void __TBB_EXPORTED_METHOD change_group ( task_group_context& ctx );</span>
+<a name="l00805"></a>00805 <span class="preprocessor"></span>
+<a name="l00807"></a>00807 
+<a name="l00808"></a><a class="code" href="a00337.html#0f3fb4aac549ab642022450a4bd13326">00808</a>     <span class="keywordtype">bool</span> cancel_group_execution () { <span class="keywordflow">return</span> prefix().context->cancel_group_execution(); }
+<a name="l00809"></a>00809 
+<a name="l00811"></a><a class="code" href="a00337.html#025f18118c057c4c8db87ff2ce8df975">00811</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="l00812"></a>00812 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00813"></a>00813 
+<a name="l00814"></a>00814 <span class="preprocessor">#if __TBB_TASK_PRIORITY</span>
+<a name="l00816"></a><a class="code" href="a00337.html#9ac8d1542d67d9d80121ff986801ac26">00816</a> <span class="preprocessor">    void set_group_priority ( priority_t p ) {  prefix().context->set_priority(p); }</span>
+<a name="l00817"></a>00817 <span class="preprocessor"></span>
+<a name="l00819"></a><a class="code" href="a00337.html#e1d969a1ccab6796e3b8b2c1a5be33d2">00819</a>     priority_t group_priority ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> prefix().context->priority(); }
+<a name="l00820"></a>00820 
+<a name="l00821"></a>00821 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00822"></a>00822 
+<a name="l00823"></a>00823 <span class="keyword">private</span>:
+<a name="l00824"></a>00824     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00338.html">interface5::internal::task_base</a>;
+<a name="l00825"></a>00825     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00341.html">task_list</a>;
+<a name="l00826"></a>00826     <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
+<a name="l00827"></a>00827     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
+<a name="l00828"></a>00828 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00829"></a>00829 <span class="preprocessor"></span>    <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
+<a name="l00830"></a>00830 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00831"></a>00831     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_continuation_proxy;
+<a name="l00832"></a>00832     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
+<a name="l00833"></a>00833     <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
+<a name="l00834"></a>00834 
+<a name="l00836"></a>00836 
+<a name="l00837"></a>00837     internal::task_prefix& prefix( internal::version_tag* = NULL )<span class="keyword"> const </span>{
+<a name="l00838"></a>00838         <span class="keywordflow">return</span> reinterpret_cast<internal::task_prefix*>(const_cast<task*>(<span class="keyword">this</span>))[-1];
+<a name="l00839"></a>00839     }
+<a name="l00840"></a>00840 }; <span class="comment">// class task</span>
+<a name="l00841"></a>00841 
+<a name="l00843"></a>00843 
+<a name="l00844"></a><a class="code" href="a00280.html">00844</a> <span class="keyword">class </span><a class="code" href="a00280.html">empty_task</a>: <span class="keyword">public</span> <a class="code" href="a00337.html">task</a> {
+<a name="l00845"></a>00845     <span class="comment">/*override*/</span> <a class="code" href="a00337.html">task</a>* execute() {
+<a name="l00846"></a>00846         <span class="keywordflow">return</span> NULL;
+<a name="l00847"></a>00847     }
+<a name="l00848"></a>00848 };
+<a name="l00849"></a>00849 
+<a name="l00851"></a>00851 
+<a name="l00853"></a><a class="code" href="a00341.html">00853</a> <span class="keyword">class </span><a class="code" href="a00341.html">task_list</a>: internal::no_copy {
+<a name="l00854"></a>00854 <span class="keyword">private</span>:
+<a name="l00855"></a>00855     <a class="code" href="a00337.html">task</a>* first;
+<a name="l00856"></a>00856     <a class="code" href="a00337.html">task</a>** next_ptr;
+<a name="l00857"></a>00857     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00337.html">task</a>;
+<a name="l00858"></a>00858     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00338.html">interface5::internal::task_base</a>;
+<a name="l00859"></a>00859 <span class="keyword">public</span>:
+<a name="l00861"></a><a class="code" href="a00341.html#416341c2047eaef50417b41eaf7e9de6">00861</a>     <a class="code" href="a00341.html#416341c2047eaef50417b41eaf7e9de6">task_list</a>() : first(NULL), next_ptr(&first) {}
+<a name="l00862"></a>00862 
+<a name="l00864"></a><a class="code" href="a00341.html#6d438f1499a02db1e59c24ab6043e5ba">00864</a>     <a class="code" href="a00341.html#6d438f1499a02db1e59c24ab6043e5ba">~task_list</a>() {}
+<a name="l00865"></a>00865 
+<a name="l00867"></a><a class="code" href="a00341.html#f3ac31e092814b90929f81bb30441959">00867</a>     <span class="keywordtype">bool</span> <a class="code" href="a00341.html#f3ac31e092814b90929f81bb30441959">empty</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !first;}
+<a name="l00868"></a>00868 
+<a name="l00870"></a><a class="code" href="a00341.html#4cd34756bc4763dafb8c84838a0124ff">00870</a>     <span class="keywordtype">void</span> <a class="code" href="a00341.html#4cd34756bc4763dafb8c84838a0124ff">push_back</a>( <a class="code" href="a00337.html">task</a>& <a class="code" href="a00337.html">task</a> ) {
+<a name="l00871"></a>00871         task.<a class="code" href="a00337.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next = NULL;
+<a name="l00872"></a>00872         *next_ptr = &task;
+<a name="l00873"></a>00873         next_ptr = &task.<a class="code" href="a00337.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
+<a name="l00874"></a>00874     }
+<a name="l00875"></a>00875 
+<a name="l00877"></a><a class="code" href="a00341.html#5fe85df5ed524418389d34051750347d">00877</a>     <a class="code" href="a00337.html">task</a>& <a class="code" href="a00341.html#5fe85df5ed524418389d34051750347d">pop_front</a>() {
+<a name="l00878"></a>00878         __TBB_ASSERT( !<a class="code" href="a00341.html#f3ac31e092814b90929f81bb30441959">empty</a>(), <span class="stringliteral">"attempt to pop item from empty task_list"</span> );
+<a name="l00879"></a>00879         <a class="code" href="a00337.html">task</a>* result = first;
+<a name="l00880"></a>00880         first = result-><a class="code" href="a00337.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().next;
+<a name="l00881"></a>00881         <span class="keywordflow">if</span>( !first ) next_ptr = &first;
+<a name="l00882"></a>00882         <span class="keywordflow">return</span> *result;
+<a name="l00883"></a>00883     }
+<a name="l00884"></a>00884 
+<a name="l00886"></a><a class="code" href="a00341.html#fce446ee13e025969945328f3ff59b95">00886</a>     <span class="keywordtype">void</span> <a class="code" href="a00341.html#fce446ee13e025969945328f3ff59b95">clear</a>() {
+<a name="l00887"></a>00887         first=NULL;
+<a name="l00888"></a>00888         next_ptr=&first;
+<a name="l00889"></a>00889     }
+<a name="l00890"></a>00890 };
+<a name="l00891"></a>00891 
+<a name="l00892"></a>00892 <span class="keyword">inline</span> <span class="keywordtype">void</span> interface5::internal::task_base::spawn( task& t ) {
+<a name="l00893"></a>00893     t.<a class="code" href="a00337.html#ac578940848e9dc8b4f1f2bcf17b627d">prefix</a>().owner->spawn( t, t.prefix().next );
+<a name="l00894"></a>00894 }
+<a name="l00895"></a>00895 
+<a name="l00896"></a>00896 <span class="keyword">inline</span> <span class="keywordtype">void</span> interface5::internal::task_base::spawn( task_list& list ) {
+<a name="l00897"></a>00897     <span class="keywordflow">if</span>( task* t = list.first ) {
+<a name="l00898"></a>00898         t->prefix().owner->spawn( *t, *list.next_ptr );
+<a name="l00899"></a>00899         list.clear();
+<a name="l00900"></a>00900     }
+<a name="l00901"></a>00901 }
+<a name="l00902"></a>00902 
+<a name="l00903"></a><a class="code" href="a00337.html#c33c7edbaec67aa8a56f48986a9dc69f">00903</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00337.html#ce8ce689c26a4ddf343829bc3c73290a">task::spawn_root_and_wait</a>( <a class="code" href="a00341.html">task_list</a>& root_list ) {
+<a name="l00904"></a>00904     <span class="keywordflow">if</span>( <a class="code" href="a00337.html">task</a>* t = root_list.<a class="code" href="a00341.html#78fcc389819ee34427d510f7d8cb8b1e">first</a> ) {
+<a name="l00905"></a>00905         t->prefix().owner->spawn_root_and_wait( *t, *root_list.<a class="code" href="a00341.html#21553a32bcd08f980aa28f61254307da">next_ptr</a> );
+<a name="l00906"></a>00906         root_list.<a class="code" href="a00341.html#fce446ee13e025969945328f3ff59b95">clear</a>();
+<a name="l00907"></a>00907     }
+<a name="l00908"></a>00908 }
+<a name="l00909"></a>00909 
+<a name="l00910"></a>00910 } <span class="comment">// namespace tbb</span>
+<a name="l00911"></a>00911 
+<a name="l00912"></a>00912 <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="l00913"></a>00913     <span class="keywordflow">return</span> &tbb::internal::allocate_root_proxy::allocate(bytes);
+<a name="l00914"></a>00914 }
+<a name="l00915"></a>00915 
+<a name="l00916"></a>00916 <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="l00917"></a>00917     tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );
+<a name="l00918"></a>00918 }
+<a name="l00919"></a>00919 
+<a name="l00920"></a>00920 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00921"></a>00921 <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="l00922"></a>00922     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00923"></a>00923 }
+<a name="l00924"></a>00924 
+<a name="l00925"></a>00925 <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="l00926"></a>00926     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00927"></a>00927 }
+<a name="l00928"></a>00928 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00929"></a>00929 
+<a name="l00930"></a>00930 <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="l00931"></a>00931     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00932"></a>00932 }
+<a name="l00933"></a>00933 
+<a name="l00934"></a>00934 <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="l00935"></a>00935     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00936"></a>00936 }
+<a name="l00937"></a>00937 
+<a name="l00938"></a>00938 <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="l00939"></a>00939     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00940"></a>00940 }
+<a name="l00941"></a>00941 
+<a name="l00942"></a>00942 <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="l00943"></a>00943     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00944"></a>00944 }
+<a name="l00945"></a>00945 
+<a name="l00946"></a>00946 <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="l00947"></a>00947     <span class="keywordflow">return</span> &p.allocate(bytes);
+<a name="l00948"></a>00948 }
+<a name="l00949"></a>00949 
+<a name="l00950"></a>00950 <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="l00951"></a>00951     p.free( *static_cast<tbb::task*>(task) );
+<a name="l00952"></a>00952 }
+<a name="l00953"></a>00953 
+<a name="l00954"></a>00954 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00616.html b/doc/html/a00616.html
deleted file mode 100644
index c83d1a6..0000000
--- a/doc/html/a00616.html
+++ /dev/null
@@ -1,96 +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>tbbmalloc_proxy.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>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-2011 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="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment">Replacing the standard memory allocation routines in Microsoft* C/C++ RTL </span>
-<a name="l00023"></a>00023 <span class="comment">(malloc/free, global new/delete, etc.) with the TBB memory allocator. </span>
-<a name="l00024"></a>00024 <span class="comment"></span>
-<a name="l00025"></a>00025 <span class="comment">Include the following header to a source of any binary which is loaded during </span>
-<a name="l00026"></a>00026 <span class="comment">application startup</span>
-<a name="l00027"></a>00027 <span class="comment"></span>
-<a name="l00028"></a>00028 <span class="comment">#include "tbb/tbbmalloc_proxy.h"</span>
-<a name="l00029"></a>00029 <span class="comment"></span>
-<a name="l00030"></a>00030 <span class="comment">or add following parameters to the linker options for the binary which is </span>
-<a name="l00031"></a>00031 <span class="comment">loaded during application startup. It can be either exe-file or dll.</span>
-<a name="l00032"></a>00032 <span class="comment"></span>
-<a name="l00033"></a>00033 <span class="comment">For win32</span>
-<a name="l00034"></a>00034 <span class="comment">tbbmalloc_proxy.lib /INCLUDE:"___TBB_malloc_proxy"</span>
-<a name="l00035"></a>00035 <span class="comment">win64</span>
-<a name="l00036"></a>00036 <span class="comment">tbbmalloc_proxy.lib /INCLUDE:"__TBB_malloc_proxy"</span>
-<a name="l00037"></a>00037 <span class="comment">*/</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#ifndef __TBB_tbbmalloc_proxy_H</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbbmalloc_proxy_H</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#if _MSC_VER</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#ifdef _DEBUG</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">    #pragma comment(lib, "tbbmalloc_proxy_debug.lib")</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">    #pragma comment(lib, "tbbmalloc_proxy.lib")</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#if defined(_WIN64)</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">    #pragma comment(linker, "/include:__TBB_malloc_proxy")</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">    #pragma comment(linker, "/include:___TBB_malloc_proxy")</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#else</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="comment">/* Primarily to support MinGW */</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">void</span> __TBB_malloc_proxy();
-<a name="l00060"></a>00060 <span class="keyword">struct </span>__TBB_malloc_proxy_caller {
-<a name="l00061"></a>00061     __TBB_malloc_proxy_caller() { __TBB_malloc_proxy(); }
-<a name="l00062"></a>00062 } <span class="keyword">volatile</span> __TBB_malloc_proxy_helper_object;
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="preprocessor">#endif // _MSC_VER</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#endif //__TBB_tbbmalloc_proxy_H</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00618.html b/doc/html/a00618.html
deleted file mode 100644
index 6dbf540..0000000
--- a/doc/html/a00618.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tick_count.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<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>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-2011 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_tick_count_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tick_count_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 _WIN32||_WIN64</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_api.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#elif __linux__</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <ctime></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <sys/time.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#endif </span><span class="comment">/* (choice of OS) */</span>
-<a name="l00033"></a>00033 
-<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="a00323.html">00038</a> <span class="keyword">class </span><a class="code" href="a00323.html">tick_count</a> {
-<a name="l00039"></a>00039 <span class="keyword">public</span>:
-<a name="l00041"></a><a class="code" href="a00324.html">00041</a>     <span class="keyword">class </span><a class="code" href="a00324.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="a00324.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="a00324.html#75a9a0949f8a8a84d6758835f1b48dad">00046</a>         <a class="code" href="a00324.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="a00324.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="a00324.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="a00323.html">tbb::tick_count</a>;
-<a name="l00055"></a>00055 
-<a name="l00057"></a>00057         <span class="keyword">friend</span> <a class="code" href="a00324.html">interval_t</a> <a class="code" href="a00324.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00323.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00323.html">tick_count</a>& t0 );
-<a name="l00058"></a>00058 
-<a name="l00060"></a><a class="code" href="a00324.html#5871ead1ca230efbe52a5008470e6428">00060</a>         <span class="keyword">friend</span> <a class="code" href="a00324.html">interval_t</a> <a class="code" href="a00324.html#5871ead1ca230efbe52a5008470e6428">operator+</a>( <span class="keyword">const</span> <a class="code" href="a00324.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00324.html">interval_t</a>& j ) {
-<a name="l00061"></a>00061             <span class="keywordflow">return</span> <a class="code" href="a00324.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00324.html#beea71acda120af3e3e29f10e8cb5c10">value</a>+j.<a class="code" href="a00324.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
-<a name="l00062"></a>00062         }
-<a name="l00063"></a>00063 
-<a name="l00065"></a><a class="code" href="a00324.html#fa509691e1d689830931e36edd274f76">00065</a>         <span class="keyword">friend</span> <a class="code" href="a00324.html">interval_t</a> <a class="code" href="a00324.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00324.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00324.html">interval_t</a>& j ) {
-<a name="l00066"></a>00066             <span class="keywordflow">return</span> <a class="code" href="a00324.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00324.html#beea71acda120af3e3e29f10e8cb5c10">value</a>-j.<a class="code" href="a00324.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
-<a name="l00067"></a>00067         }
-<a name="l00068"></a>00068 
-<a name="l00070"></a><a class="code" href="a00324.html#cd9814947902e26463a69a111530f81b">00070</a>         <a class="code" href="a00324.html">interval_t</a>& <a class="code" href="a00324.html#cd9814947902e26463a69a111530f81b">operator+=</a>( <span class="keyword">const</span> <a class="code" href="a00324.html">interval_t</a>& i ) {value += i.<a class="code" href="a00324.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="a00324.html#35ff7eaf7c2031b4a991402ac9ecb940">00073</a>         <a class="code" href="a00324.html">interval_t</a>& <a class="code" href="a00324.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>( <span class="keyword">const</span> <a class="code" href="a00324.html">interval_t</a>& i ) {value -= i.<a class="code" href="a00324.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="a00323.html#34593326ae4191e02a13c7cbdab9de4c">00077</a>     <a class="code" href="a00323.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="a00323.html">tick_count</a> <a class="code" href="a00323.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="a00323.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00323.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00323.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="a00323.html#fb7f78ca61cf28398645ace66e284473">00089</a> <span class="keyword">inline</span> <a class="code" href="a00323.html">tick_count</a> <a class="code" href="a00323.html#fb7f78ca61cf28398645ace66e284473">tick_count::now</a>() {
-<a name="l00090"></a>00090     <a class="code" href="a00323.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="a00323.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>
-<a name="l00098"></a>00098 <span class="preprocessor"></span>    <span class="keywordtype">int</span> status = 
-<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="a00323.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>
-<a name="l00106"></a>00106 <span class="preprocessor"></span>    <span class="keywordtype">int</span> status = 
-<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="a00323.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="a00324.html#1a21a428e00cced2e6a49e0f5f2258bf">00115</a> <span class="keyword">inline</span> <a class="code" href="a00324.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;
-<a name="l00119"></a>00119     QueryPerformanceFrequency(&qpfreq);
-<a name="l00120"></a>00120     value = static_cast<long long>(sec*qpfreq.QuadPart);
-<a name="l00121"></a>00121 <span class="preprocessor">#elif __linux__</span>
-<a name="l00122"></a>00122 <span class="preprocessor"></span>    value = static_cast<long long>(sec*1E9);
-<a name="l00123"></a>00123 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
-<a name="l00124"></a>00124     value = static_cast<long long>(sec*1E6);
-<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="a00323.html#09dde78a4100800c11bb883d6204b586">00128</a> <span class="keyword">inline</span> <a class="code" href="a00324.html">tick_count::interval_t</a> <a class="code" href="a00323.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00323.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00323.html">tick_count</a>& t0 ) {
-<a name="l00129"></a>00129     <span class="keywordflow">return</span> <a class="code" href="a00324.html">tick_count::interval_t</a>( t1.<a class="code" href="a00323.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a>-t0.<a class="code" href="a00323.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> );
-<a name="l00130"></a>00130 }
-<a name="l00131"></a>00131 
-<a name="l00132"></a><a class="code" href="a00324.html#d5d8429c0bc59cf6131b2abc7929fa59">00132</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="a00324.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);
-<a name="l00136"></a>00136     <span class="keywordflow">return</span> value/(double)qpfreq.QuadPart;
-<a name="l00137"></a>00137 #elif __linux__
-<a name="l00138"></a>00138     <span class="keywordflow">return</span> value*1E-9;
-<a name="l00139"></a>00139 #<span class="keywordflow">else</span> <span class="comment">/* generic Unix */</span>
-<a name="l00140"></a>00140     <span class="keywordflow">return</span> value*1E-6;
-<a name="l00141"></a>00141 #endif <span class="comment">/* (choice of OS) */</span>
-<a name="l00142"></a>00142 }
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144 } <span class="comment">// namespace tbb</span>
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tick_count_H */</span>
-<a name="l00147"></a>00147 
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/a00623.html b/doc/html/a00623.html
new file mode 100644
index 0000000..4cb6f36
--- /dev/null
+++ b/doc/html/a00623.html
@@ -0,0 +1,274 @@
+<!DOCTYPE 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-2012 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="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span>
+<a name="l00029"></a>00029 <span class="keyword">namespace </span>tbb {
+<a name="l00030"></a>00030 
+<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> F> <span class="keyword">class </span>task_handle_task;
+<a name="l00033"></a>00033 }
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00036"></a>00036 <span class="keyword">class </span>task_handle : internal::no_assign {
+<a name="l00037"></a>00037     <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="l00038"></a>00038 
+<a name="l00039"></a>00039     <span class="keyword">static</span> <span class="keyword">const</span> intptr_t scheduled = 0x1;
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041     F my_func;
+<a name="l00042"></a>00042     intptr_t my_state;
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044     <span class="keywordtype">void</span> mark_scheduled () {
+<a name="l00045"></a>00045         <span class="comment">// The check here is intentionally lax to avoid the impact of interlocked operation</span>
+<a name="l00046"></a>00046         <span class="keywordflow">if</span> ( my_state & scheduled )
+<a name="l00047"></a>00047             internal::throw_exception( internal::eid_invalid_multiple_scheduling );
+<a name="l00048"></a>00048         my_state |= scheduled;
+<a name="l00049"></a>00049     }
+<a name="l00050"></a>00050 <span class="keyword">public</span>:
+<a name="l00051"></a>00051     task_handle( <span class="keyword">const</span> F& f ) : my_func(f), my_state(0) {}
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053     <span class="keywordtype">void</span> operator() ()<span class="keyword"> const </span>{ my_func(); }
+<a name="l00054"></a>00054 };
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 <span class="keyword">enum</span> task_group_status {
+<a name="l00057"></a>00057     not_complete,
+<a name="l00058"></a>00058     complete,
+<a name="l00059"></a>00059     canceled
+<a name="l00060"></a>00060 };
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062 <span class="keyword">namespace </span>internal {
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="comment">// Suppress gratuitous warnings from icc 11.0 when lambda expressions are used in instances of function_task.</span>
+<a name="l00065"></a>00065 <span class="comment">//#pragma warning(disable: 588)</span>
+<a name="l00066"></a>00066 
+<a name="l00067"></a>00067 <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00068"></a>00068 <span class="keyword">class </span>function_task : <span class="keyword">public</span> task {
+<a name="l00069"></a>00069     F my_func;
+<a name="l00070"></a>00070     <span class="comment">/*override*/</span> <a class="code" href="a00337.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
+<a name="l00071"></a>00071         my_func();
+<a name="l00072"></a>00072         <span class="keywordflow">return</span> NULL;
+<a name="l00073"></a>00073     }
+<a name="l00074"></a>00074 <span class="keyword">public</span>:
+<a name="l00075"></a>00075     function_task( <span class="keyword">const</span> F& f ) : my_func(f) {}
+<a name="l00076"></a>00076 };
+<a name="l00077"></a>00077 
+<a name="l00078"></a>00078 <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00079"></a>00079 <span class="keyword">class </span>task_handle_task : <span class="keyword">public</span> task {
+<a name="l00080"></a>00080     task_handle<F>& my_handle;
+<a name="l00081"></a>00081     <span class="comment">/*override*/</span> <a class="code" href="a00337.html#2bce8ec6e44706e70128f5cf91b76e67">task</a>* execute() {
+<a name="l00082"></a>00082         my_handle();
+<a name="l00083"></a>00083         <span class="keywordflow">return</span> NULL;
+<a name="l00084"></a>00084     }
+<a name="l00085"></a>00085 <span class="keyword">public</span>:
+<a name="l00086"></a>00086     task_handle_task( task_handle<F>& h ) : my_handle(h) { h.mark_scheduled(); }
+<a name="l00087"></a>00087 };
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089 <span class="keyword">class </span>task_group_base : internal::no_copy {
+<a name="l00090"></a>00090 <span class="keyword">protected</span>:
+<a name="l00091"></a>00091     empty_task* my_root;
+<a name="l00092"></a>00092     task_group_context my_context;
+<a name="l00093"></a>00093 
+<a name="l00094"></a>00094     task& owner () { <span class="keywordflow">return</span> *my_root; }
+<a name="l00095"></a>00095 
+<a name="l00096"></a>00096     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00097"></a>00097     task_group_status internal_run_and_wait( F& f ) {
+<a name="l00098"></a>00098         __TBB_TRY {
+<a name="l00099"></a>00099             <span class="keywordflow">if</span> ( !my_context.is_group_execution_cancelled() )
+<a name="l00100"></a>00100                 f();
+<a name="l00101"></a>00101         } __TBB_CATCH( ... ) {
+<a name="l00102"></a>00102             my_context.register_pending_exception();
+<a name="l00103"></a>00103         }
+<a name="l00104"></a>00104         <span class="keywordflow">return</span> wait();
+<a name="l00105"></a>00105     }
+<a name="l00106"></a>00106 
+<a name="l00107"></a>00107     <span class="keyword">template</span><<span class="keyword">typename</span> F, <span class="keyword">typename</span> Task>
+<a name="l00108"></a>00108     <span class="keywordtype">void</span> internal_run( F& f ) {
+<a name="l00109"></a>00109         owner().spawn( *<span class="keyword">new</span>( owner().allocate_additional_child_of(*my_root) ) Task(f) );
+<a name="l00110"></a>00110     }
+<a name="l00111"></a>00111 
+<a name="l00112"></a>00112 <span class="keyword">public</span>:
+<a name="l00113"></a>00113     task_group_base( uintptr_t traits = 0 )
+<a name="l00114"></a>00114         : my_context(task_group_context::bound, task_group_context::default_traits | traits)
+<a name="l00115"></a>00115     {
+<a name="l00116"></a>00116         my_root = <span class="keyword">new</span>( <a class="code" href="a00337.html#23acb0da0afd690da797f9f882027d34">task::allocate_root</a>(my_context) ) empty_task;
+<a name="l00117"></a>00117         my_root->set_ref_count(1);
+<a name="l00118"></a>00118     }
+<a name="l00119"></a>00119 
+<a name="l00120"></a>00120     ~task_group_base() {
+<a name="l00121"></a>00121         <span class="keywordflow">if</span>( my_root->ref_count() > 1 ) {
+<a name="l00122"></a>00122             <span class="keywordtype">bool</span> stack_unwinding_in_progress = std::uncaught_exception();
+<a name="l00123"></a>00123             <span class="comment">// Always attempt to do proper cleanup to avoid inevitable memory corruption </span>
+<a name="l00124"></a>00124             <span class="comment">// in case of missing wait (for the sake of better testability & debuggability)</span>
+<a name="l00125"></a>00125             <span class="keywordflow">if</span> ( !is_canceling() )
+<a name="l00126"></a>00126                 cancel();
+<a name="l00127"></a>00127             __TBB_TRY {
+<a name="l00128"></a>00128                 my_root->wait_for_all();
+<a name="l00129"></a>00129             } __TBB_CATCH (...) {
+<a name="l00130"></a>00130                 <a class="code" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
+<a name="l00131"></a>00131                 __TBB_RETHROW();
+<a name="l00132"></a>00132             }
+<a name="l00133"></a>00133             <a class="code" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
+<a name="l00134"></a>00134             <span class="keywordflow">if</span> ( !stack_unwinding_in_progress )
+<a name="l00135"></a>00135                 internal::throw_exception( internal::eid_missing_wait );
+<a name="l00136"></a>00136         }
+<a name="l00137"></a>00137         <span class="keywordflow">else</span> {
+<a name="l00138"></a>00138             <a class="code" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
+<a name="l00139"></a>00139         }
+<a name="l00140"></a>00140     }
+<a name="l00141"></a>00141 
+<a name="l00142"></a>00142     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00143"></a>00143     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
+<a name="l00144"></a>00144         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
+<a name="l00145"></a>00145     }
+<a name="l00146"></a>00146 
+<a name="l00147"></a>00147     task_group_status wait() {
+<a name="l00148"></a>00148         __TBB_TRY {
+<a name="l00149"></a>00149             my_root->wait_for_all();
+<a name="l00150"></a>00150         } __TBB_CATCH( ... ) {
+<a name="l00151"></a>00151             my_context.reset();
+<a name="l00152"></a>00152             __TBB_RETHROW();
+<a name="l00153"></a>00153         }
+<a name="l00154"></a>00154         <span class="keywordflow">if</span> ( my_context.is_group_execution_cancelled() ) {
+<a name="l00155"></a>00155             my_context.reset();
+<a name="l00156"></a>00156             <span class="keywordflow">return</span> canceled;
+<a name="l00157"></a>00157         }
+<a name="l00158"></a>00158         <span class="keywordflow">return</span> complete;
+<a name="l00159"></a>00159     }
+<a name="l00160"></a>00160 
+<a name="l00161"></a>00161     <span class="keywordtype">bool</span> is_canceling() {
+<a name="l00162"></a>00162         <span class="keywordflow">return</span> my_context.is_group_execution_cancelled();
+<a name="l00163"></a>00163     }
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165     <span class="keywordtype">void</span> cancel() {
+<a name="l00166"></a>00166         my_context.cancel_group_execution();
+<a name="l00167"></a>00167     }
+<a name="l00168"></a>00168 }; <span class="comment">// class task_group_base</span>
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170 } <span class="comment">// namespace internal</span>
+<a name="l00171"></a>00171 
+<a name="l00172"></a>00172 <span class="keyword">class </span>task_group : <span class="keyword">public</span> internal::task_group_base {
+<a name="l00173"></a>00173 <span class="keyword">public</span>:
+<a name="l00174"></a>00174     task_group () : task_group_base( task_group_context::concurrent_wait ) {}
+<a name="l00175"></a>00175 
+<a name="l00176"></a>00176 <span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00177"></a>00177 <span class="preprocessor"></span>    ~task_group() __TBB_TRY {
+<a name="l00178"></a>00178         __TBB_ASSERT( my_root->ref_count() != 0, NULL );
+<a name="l00179"></a>00179         <span class="keywordflow">if</span>( my_root->ref_count() > 1 )
+<a name="l00180"></a>00180             my_root->wait_for_all();
+<a name="l00181"></a>00181     }
+<a name="l00182"></a>00182 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
+<a name="l00183"></a>00183 <span class="preprocessor"></span>    <span class="keywordflow">catch</span> (...) {
+<a name="l00184"></a>00184         <span class="comment">// Have to destroy my_root here as the base class destructor won't be called</span>
+<a name="l00185"></a>00185         <a class="code" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">task::destroy</a>(*my_root);
+<a name="l00186"></a>00186         <span class="keywordflow">throw</span>;
+<a name="l00187"></a>00187     }
+<a name="l00188"></a>00188 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_EXCEPTIONS */</span>
+<a name="l00189"></a>00189 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DEPRECATED */</span>
+<a name="l00190"></a>00190 
+<a name="l00191"></a>00191 <span class="preprocessor">#if __SUNPRO_CC</span>
+<a name="l00192"></a>00192 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00193"></a>00193     <span class="keywordtype">void</span> run( task_handle<F>& h ) {
+<a name="l00194"></a>00194         internal_run< task_handle<F>, internal::task_handle_task<F> >( h );
+<a name="l00195"></a>00195     }
+<a name="l00196"></a>00196 <span class="preprocessor">#else</span>
+<a name="l00197"></a>00197 <span class="preprocessor"></span>    <span class="keyword">using</span> task_group_base::run;
+<a name="l00198"></a>00198 <span class="preprocessor">#endif</span>
+<a name="l00199"></a>00199 <span class="preprocessor"></span>
+<a name="l00200"></a>00200     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00201"></a>00201     <span class="keywordtype">void</span> run( <span class="keyword">const</span> F& f ) {
+<a name="l00202"></a>00202         internal_run< const F, internal::function_task<F> >( f );
+<a name="l00203"></a>00203     }
+<a name="l00204"></a>00204 
+<a name="l00205"></a>00205     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00206"></a>00206     task_group_status run_and_wait( <span class="keyword">const</span> F& f ) {
+<a name="l00207"></a>00207         <span class="keywordflow">return</span> internal_run_and_wait<const F>( f );
+<a name="l00208"></a>00208     }
+<a name="l00209"></a>00209 
+<a name="l00210"></a>00210     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00211"></a>00211     task_group_status run_and_wait( task_handle<F>& h ) {
+<a name="l00212"></a>00212       <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
+<a name="l00213"></a>00213     }
+<a name="l00214"></a>00214 }; <span class="comment">// class task_group</span>
+<a name="l00215"></a>00215 
+<a name="l00216"></a>00216 <span class="keyword">class </span>structured_task_group : <span class="keyword">public</span> internal::task_group_base {
+<a name="l00217"></a>00217 <span class="keyword">public</span>:
+<a name="l00218"></a>00218     <span class="keyword">template</span><<span class="keyword">typename</span> F>
+<a name="l00219"></a>00219     task_group_status run_and_wait ( task_handle<F>& h ) {
+<a name="l00220"></a>00220         <span class="keywordflow">return</span> internal_run_and_wait< task_handle<F> >( h );
+<a name="l00221"></a>00221     }
+<a name="l00222"></a>00222 
+<a name="l00223"></a>00223     task_group_status wait() {
+<a name="l00224"></a>00224         task_group_status res = task_group_base::wait();
+<a name="l00225"></a>00225         my_root->set_ref_count(1);
+<a name="l00226"></a>00226         <span class="keywordflow">return</span> res;
+<a name="l00227"></a>00227     }
+<a name="l00228"></a>00228 }; <span class="comment">// class structured_task_group</span>
+<a name="l00229"></a>00229 
+<a name="l00230"></a>00230 <span class="keyword">inline</span> 
+<a name="l00231"></a>00231 <span class="keywordtype">bool</span> is_current_task_group_canceling() {
+<a name="l00232"></a>00232     <span class="keywordflow">return</span> <a class="code" href="a00337.html#bd43e8d6249738efafd12d6a4c72c5e3">task::self</a>().<a class="code" href="a00337.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a>();
+<a name="l00233"></a>00233 }
+<a name="l00234"></a>00234 
+<a name="l00235"></a>00235 <span class="keyword">template</span><<span class="keyword">class</span> F>
+<a name="l00236"></a>00236 task_handle<F> make_task( <span class="keyword">const</span> F& f ) {
+<a name="l00237"></a>00237     <span class="keywordflow">return</span> task_handle<F>( f );
+<a name="l00238"></a>00238 }
+<a name="l00239"></a>00239 
+<a name="l00240"></a>00240 } <span class="comment">// namespace tbb</span>
+<a name="l00241"></a>00241 
+<a name="l00242"></a>00242 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00243"></a>00243 
+<a name="l00244"></a>00244 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_group_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00630.html b/doc/html/a00630.html
new file mode 100644
index 0000000..5fe9a9e
--- /dev/null
+++ b/doc/html/a00630.html
@@ -0,0 +1,117 @@
+<!DOCTYPE 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_scheduler_init.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_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-2012 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_scheduler_init_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_scheduler_init_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 "limits.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">typedef</span> std::size_t stack_size_type;
+<a name="l00030"></a>00030 
+<a name="l00032"></a>00032 <span class="keyword">namespace </span>internal {
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035     <span class="keyword">class </span>scheduler;
+<a name="l00036"></a>00036 } <span class="comment">// namespace internal</span>
+<a name="l00038"></a>00038 <span class="comment"></span>
+<a name="l00040"></a>00040 
+<a name="l00053"></a><a class="code" href="a00342.html">00053</a> <span class="keyword">class </span><a class="code" href="a00342.html">task_scheduler_init</a>: internal::no_copy {
+<a name="l00054"></a>00054     <span class="keyword">enum</span> ExceptionPropagationMode {
+<a name="l00055"></a>00055         propagation_mode_exact = 1u,
+<a name="l00056"></a>00056         propagation_mode_captured = 2u,
+<a name="l00057"></a>00057         propagation_mode_mask = propagation_mode_exact | propagation_mode_captured
+<a name="l00058"></a>00058     };
+<a name="l00059"></a>00059 
+<a name="l00061"></a>00061     internal::scheduler* my_scheduler;
+<a name="l00062"></a>00062 <span class="keyword">public</span>:
+<a name="l00063"></a>00063 
+<a name="l00065"></a><a class="code" href="a00342.html#8f5988e2b0fbb2d533fcbb7f2583743f">00065</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00342.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> = -1;
+<a name="l00066"></a>00066 
+<a name="l00068"></a><a class="code" href="a00342.html#e6c860f1e559026ff3ef4599c0d6c514">00068</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a00342.html#e6c860f1e559026ff3ef4599c0d6c514">deferred</a> = -2;
+<a name="l00069"></a>00069 
+<a name="l00071"></a>00071 
+<a name="l00082"></a>00082     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00342.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00342.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a> );
+<a name="l00083"></a>00083 
+<a name="l00085"></a>00085 
+<a name="l00086"></a>00086     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00342.html#d476053cc712e572554823492a5229ce">initialize</a>( <span class="keywordtype">int</span> number_of_threads, stack_size_type thread_stack_size );
+<a name="l00087"></a>00087 
+<a name="l00089"></a>00089     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00342.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
+<a name="l00090"></a>00090 
+<a name="l00092"></a><a class="code" href="a00342.html#421600bf9bf9338bcf937063f2ff0e90">00092</a>     <a class="code" href="a00342.html#421600bf9bf9338bcf937063f2ff0e90">task_scheduler_init</a>( <span class="keywordtype">int</span> number_of_threads=<a class="code" href="a00342.html#8f5988e2b0fbb2d533fcbb7f2583743f">automatic</a>, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL)  {
+<a name="l00093"></a>00093         <span class="comment">// Two lowest order bits of the stack size argument may be taken to communicate</span>
+<a name="l00094"></a>00094         <span class="comment">// default exception propagation mode of the client to be used when the</span>
+<a name="l00095"></a>00095         <span class="comment">// client manually creates tasks in the master thread and does not use</span>
+<a name="l00096"></a>00096         <span class="comment">// explicit task group context object. This is necessary because newer </span>
+<a name="l00097"></a>00097         <span class="comment">// TBB binaries with exact propagation enabled by default may be used </span>
+<a name="l00098"></a>00098         <span class="comment">// by older clients that expect tbb::captured_exception wrapper.</span>
+<a name="l00099"></a>00099         <span class="comment">// All zeros mean old client - no preference. </span>
+<a name="l00100"></a>00100         __TBB_ASSERT( !(thread_stack_size & propagation_mode_mask), <span class="stringliteral">"Requested stack size is not aligned"</span> );
+<a name="l00101"></a>00101 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span>        thread_stack_size |= TBB_USE_CAPTURED_EXCEPTION ? propagation_mode_captured : propagation_mode_exact;
+<a name="l00103"></a>00103 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_EXCEPTIONS */</span>
+<a name="l00104"></a>00104         <a class="code" href="a00342.html#d476053cc712e572554823492a5229ce">initialize</a>( number_of_threads, thread_stack_size );
+<a name="l00105"></a>00105     }
+<a name="l00106"></a>00106 
+<a name="l00108"></a><a class="code" href="a00342.html#4da6c86292d80c703a66c1f6f5299488">00108</a>     <a class="code" href="a00342.html#4da6c86292d80c703a66c1f6f5299488">~task_scheduler_init</a>() {
+<a name="l00109"></a>00109         <span class="keywordflow">if</span>( my_scheduler ) 
+<a name="l00110"></a>00110             <a class="code" href="a00342.html#f73257e04cb7fb9bd5be2b635d9016f1">terminate</a>();
+<a name="l00111"></a>00111         internal::poison_pointer( my_scheduler );
+<a name="l00112"></a>00112     }
+<a name="l00114"></a>00114 
+<a name="l00131"></a>00131     <span class="keyword">static</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00342.html#ba00714c33a41a3c2216f48613971cab">default_num_threads</a> ();
+<a name="l00132"></a>00132 
+<a name="l00134"></a><a class="code" href="a00342.html#12752282977029f23416642bc03e8b74">00134</a>     <span class="keywordtype">bool</span> <a class="code" href="a00342.html#12752282977029f23416642bc03e8b74">is_active</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_scheduler != NULL; }
+<a name="l00135"></a>00135 };
+<a name="l00136"></a>00136 
+<a name="l00137"></a>00137 } <span class="comment">// namespace tbb</span>
+<a name="l00138"></a>00138 
+<a name="l00139"></a>00139 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_scheduler_init_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00631.html b/doc/html/a00631.html
new file mode 100644
index 0000000..e4b06b7
--- /dev/null
+++ b/doc/html/a00631.html
@@ -0,0 +1,90 @@
+<!DOCTYPE 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_scheduler_observer.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_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-2012 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_scheduler_observer_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_task_scheduler_observer_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 
+<a name="l00026"></a>00026 <span class="preprocessor">#if __TBB_SCHEDULER_OBSERVER</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a>00028 <span class="keyword">namespace </span>tbb {
+<a name="l00029"></a>00029 
+<a name="l00030"></a>00030 <span class="keyword">namespace </span>internal {
+<a name="l00031"></a>00031 
+<a name="l00032"></a>00032 <span class="keyword">class </span>observer_proxy;
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034 <span class="keyword">class </span>task_scheduler_observer_v3 {
+<a name="l00035"></a>00035     <span class="keyword">friend</span> <span class="keyword">class </span>observer_proxy;
+<a name="l00036"></a>00036     observer_proxy* my_proxy;
+<a name="l00037"></a>00037     atomic<intptr_t> my_busy_count;
+<a name="l00038"></a>00038 <span class="keyword">public</span>:
+<a name="l00040"></a>00040     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD observe( <span class="keywordtype">bool</span> state=<span class="keyword">true</span> );
+<a name="l00041"></a>00041 
+<a name="l00043"></a>00043     <span class="keywordtype">bool</span> is_observing()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_proxy!=NULL;}
+<a name="l00044"></a>00044 
+<a name="l00046"></a>00046     task_scheduler_observer_v3() : my_proxy(NULL) {my_busy_count=0;}
+<a name="l00047"></a>00047 
+<a name="l00049"></a>00049     <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_scheduler_entry( <span class="keywordtype">bool</span> <span class="comment">/*is_worker*/</span> ) {} 
+<a name="l00050"></a>00050 
+<a name="l00052"></a>00052     <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_scheduler_exit( <span class="keywordtype">bool</span> <span class="comment">/*is_worker*/</span> ) {}
+<a name="l00053"></a>00053 
+<a name="l00055"></a>00055     <span class="keyword">virtual</span> ~task_scheduler_observer_v3() {observe(<span class="keyword">false</span>);}
+<a name="l00056"></a>00056 };
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058 } <span class="comment">// namespace internal</span>
+<a name="l00059"></a>00059 
+<a name="l00060"></a>00060 <span class="keyword">typedef</span> internal::task_scheduler_observer_v3 task_scheduler_observer;
+<a name="l00061"></a>00061 
+<a name="l00062"></a>00062 } <span class="comment">// namespace tbb</span>
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
+<a name="l00065"></a>00065 
+<a name="l00066"></a>00066 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_scheduler_observer_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00633.html b/doc/html/a00633.html
new file mode 100644
index 0000000..0415691
--- /dev/null
+++ b/doc/html/a00633.html
@@ -0,0 +1,98 @@
+<!DOCTYPE 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-2012 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">#if TBB_PREVIEW_AGGREGATOR</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include "aggregator.h"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#include "aligned_space.h"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "blocked_range.h"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "blocked_range2d.h"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "blocked_range3d.h"</span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include "combinable.h"</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include "concurrent_unordered_map.h"</span>
+<a name="l00043"></a>00043 <span class="preprocessor">#include "concurrent_hash_map.h"</span>
+<a name="l00044"></a>00044 <span class="preprocessor">#include "concurrent_queue.h"</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#include "concurrent_vector.h"</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include "critical_section.h"</span>
+<a name="l00047"></a>00047 <span class="preprocessor">#include "enumerable_thread_specific.h"</span>
+<a name="l00048"></a>00048 <span class="preprocessor">#include "mutex.h"</span>
+<a name="l00049"></a>00049 <span class="preprocessor">#include "null_mutex.h"</span>
+<a name="l00050"></a>00050 <span class="preprocessor">#include "null_rw_mutex.h"</span>
+<a name="l00051"></a>00051 <span class="preprocessor">#include "parallel_do.h"</span>
+<a name="l00052"></a>00052 <span class="preprocessor">#include "parallel_for.h"</span>
+<a name="l00053"></a>00053 <span class="preprocessor">#include "parallel_for_each.h"</span>
+<a name="l00054"></a>00054 <span class="preprocessor">#include "parallel_invoke.h"</span>
+<a name="l00055"></a>00055 <span class="preprocessor">#include "parallel_reduce.h"</span>
+<a name="l00056"></a>00056 <span class="preprocessor">#include "parallel_scan.h"</span>
+<a name="l00057"></a>00057 <span class="preprocessor">#include "parallel_sort.h"</span>
+<a name="l00058"></a>00058 <span class="preprocessor">#include "partitioner.h"</span>
+<a name="l00059"></a>00059 <span class="preprocessor">#include "pipeline.h"</span>
+<a name="l00060"></a>00060 <span class="preprocessor">#include "queuing_mutex.h"</span>
+<a name="l00061"></a>00061 <span class="preprocessor">#include "queuing_rw_mutex.h"</span>
+<a name="l00062"></a>00062 <span class="preprocessor">#include "reader_writer_lock.h"</span>
+<a name="l00063"></a>00063 <span class="preprocessor">#include "concurrent_priority_queue.h"</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#include "recursive_mutex.h"</span>
+<a name="l00065"></a>00065 <span class="preprocessor">#include "spin_mutex.h"</span>
+<a name="l00066"></a>00066 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
+<a name="l00067"></a>00067 <span class="preprocessor">#include "task.h"</span>
+<a name="l00068"></a>00068 <span class="preprocessor">#include "task_group.h"</span>
+<a name="l00069"></a>00069 <span class="preprocessor">#include "task_scheduler_init.h"</span>
+<a name="l00070"></a>00070 <span class="preprocessor">#include "task_scheduler_observer.h"</span>
+<a name="l00071"></a>00071 <span class="preprocessor">#include "tbb_allocator.h"</span>
+<a name="l00072"></a>00072 <span class="preprocessor">#include "tbb_exception.h"</span>
+<a name="l00073"></a>00073 <span class="preprocessor">#include "tbb_thread.h"</span>
+<a name="l00074"></a>00074 <span class="preprocessor">#include "tick_count.h"</span>
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00634.html b/doc/html/a00634.html
new file mode 100644
index 0000000..db5d1fc
--- /dev/null
+++ b/doc/html/a00634.html
@@ -0,0 +1,225 @@
+<!DOCTYPE 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_allocator.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_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-2012 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_allocator_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_allocator_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 <new></span>
+<a name="l00026"></a>00026 <span class="preprocessor">#if __TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_CPP11_STD_FORWARD_BROKEN</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor"> #include <utility></span> <span class="comment">// std::forward</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00030"></a>00030 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
+<a name="l00032"></a>00032 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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="preprocessor">#include <cstring></span>
+<a name="l00037"></a>00037 
+<a name="l00038"></a>00038 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</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="l00042"></a>00042 <span class="keyword">namespace </span>tbb {
+<a name="l00043"></a>00043 
+<a name="l00045"></a>00045 <span class="keyword">namespace </span>internal {
+<a name="l00046"></a>00046 
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC deallocate_via_handler_v3( <span class="keywordtype">void</span> *p );
+<a name="l00050"></a>00050 
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n );
+<a name="l00054"></a>00054 
+<a name="l00056"></a>00056     <span class="keywordtype">bool</span> __TBB_EXPORTED_FUNC is_malloc_used_v3();
+<a name="l00057"></a>00057 }
+<a name="l00059"></a>00059 
+<a name="l00060"></a>00060 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span>    <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
+<a name="l00062"></a>00062 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4100)</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00067"></a>00067 
+<a name="l00072"></a>00072 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00073"></a><a class="code" href="a00343.html">00073</a> <span class="keyword">class </span><a class="code" href="a00343.html">tbb_allocator</a> {
+<a name="l00074"></a>00074 <span class="keyword">public</span>:
+<a name="l00075"></a>00075     <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_type<T>::value_type value_type;
+<a name="l00076"></a>00076     <span class="keyword">typedef</span> value_type* pointer;
+<a name="l00077"></a>00077     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_pointer;
+<a name="l00078"></a>00078     <span class="keyword">typedef</span> value_type& reference;
+<a name="l00079"></a>00079     <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference;
+<a name="l00080"></a>00080     <span class="keyword">typedef</span> size_t size_type;
+<a name="l00081"></a>00081     <span class="keyword">typedef</span> ptrdiff_t difference_type;
+<a name="l00082"></a>00082     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
+<a name="l00083"></a>00083         <span class="keyword">typedef</span> <a class="code" href="a00343.html">tbb_allocator<U></a> other;
+<a name="l00084"></a>00084     };
+<a name="l00085"></a>00085 
+<a name="l00087"></a><a class="code" href="a00343.html#09a7f81fb2c3055aaecf058b11538544">00087</a>     <span class="keyword">enum</span> <a class="code" href="a00343.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> {
+<a name="l00088"></a>00088         scalable, 
+<a name="l00089"></a>00089         standard
+<a name="l00090"></a>00090     };
+<a name="l00091"></a>00091 
+<a name="l00092"></a>00092     <a class="code" href="a00343.html">tbb_allocator</a>() throw() {}
+<a name="l00093"></a>00093     tbb_allocator( <span class="keyword">const</span> tbb_allocator& ) throw() {}
+<a name="l00094"></a>00094     <span class="keyword">template</span><<span class="keyword">typename</span> U> tbb_allocator(<span class="keyword">const</span> tbb_allocator<U>&) throw() {}
+<a name="l00095"></a>00095 
+<a name="l00096"></a>00096     pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+<a name="l00097"></a>00097     const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+<a name="l00098"></a>00098     
+<a name="l00100"></a><a class="code" href="a00343.html#f6cb487b1bdce0b581f265a77dca6d53">00100</a>     pointer <a class="code" href="a00343.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="l00101"></a>00101         <span class="keywordflow">return</span> pointer(internal::allocate_via_handler_v3( n * <span class="keyword">sizeof</span>(value_type) ));
+<a name="l00102"></a>00102     }
+<a name="l00103"></a>00103 
+<a name="l00105"></a><a class="code" href="a00343.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">00105</a>     <span class="keywordtype">void</span> <a class="code" href="a00343.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">deallocate</a>( pointer p, size_type ) {
+<a name="l00106"></a>00106         internal::deallocate_via_handler_v3(p);        
+<a name="l00107"></a>00107     }
+<a name="l00108"></a>00108 
+<a name="l00110"></a><a class="code" href="a00343.html#f059ca2c96243024f0d562ee3a87a3a5">00110</a>     size_type <a class="code" href="a00343.html#f059ca2c96243024f0d562ee3a87a3a5">max_size</a>() const throw() {
+<a name="l00111"></a>00111         size_type max = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (value_type);
+<a name="l00112"></a>00112         <span class="keywordflow">return</span> (max > 0 ? max : 1);
+<a name="l00113"></a>00113     }
+<a name="l00114"></a>00114     
+<a name="l00116"></a>00116 <span class="preprocessor">#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span>... Args>
+<a name="l00118"></a><a class="code" href="a00343.html#15c431ccb5ccc5a30e5d496edad4c143">00118</a>     <span class="keywordtype">void</span> <a class="code" href="a00343.html#15c431ccb5ccc5a30e5d496edad4c143">construct</a>(pointer p, Args&&... args)
+<a name="l00119"></a>00119  <span class="preprocessor">#if __TBB_CPP11_STD_FORWARD_BROKEN</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span>        { ::new((<span class="keywordtype">void</span> *)p) T((args)...); }
+<a name="l00121"></a>00121 <span class="preprocessor"> #else</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span>        { ::new((<span class="keywordtype">void</span> *)p) T(std::forward<Args>(args)...); }
+<a name="l00123"></a>00123  <span class="preprocessor">#endif</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#else // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span>    <span class="keywordtype">void</span> <a class="code" href="a00343.html#15c431ccb5ccc5a30e5d496edad4c143">construct</a>( pointer p, <span class="keyword">const</span> value_type& value ) {::new((<span class="keywordtype">void</span>*)(p)) value_type(value);}
+<a name="l00126"></a>00126 <span class="preprocessor">#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT</span>
+<a name="l00127"></a>00127 <span class="preprocessor"></span>
+<a name="l00129"></a>00129     <span class="keywordtype">void</span> destroy( pointer p ) {p->~value_type();}
+<a name="l00130"></a>00130 
+<a name="l00132"></a>00132     <span class="keyword">static</span> <a class="code" href="a00343.html#09a7f81fb2c3055aaecf058b11538544">malloc_type</a> allocator_type() {
+<a name="l00133"></a>00133         <span class="keywordflow">return</span> internal::is_malloc_used_v3() ? standard : scalable;
+<a name="l00134"></a>00134     }
+<a name="l00135"></a>00135 };
+<a name="l00136"></a>00136 
+<a name="l00137"></a>00137 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+<a name="l00138"></a>00138 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span>
+<a name="l00142"></a>00142 
+<a name="l00143"></a>00143 <span class="keyword">template</span><> 
+<a name="l00144"></a><a class="code" href="a00344.html">00144</a> <span class="keyword">class </span><a class="code" href="a00343.html">tbb_allocator</a><void> {
+<a name="l00145"></a>00145 <span class="keyword">public</span>:
+<a name="l00146"></a>00146     <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
+<a name="l00147"></a>00147     <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
+<a name="l00148"></a>00148     <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
+<a name="l00149"></a>00149     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
+<a name="l00150"></a>00150         <span class="keyword">typedef</span> <a class="code" href="a00343.html">tbb_allocator<U></a> other;
+<a name="l00151"></a>00151     };
+<a name="l00152"></a>00152 };
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00155"></a>00155 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00343.html">tbb_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00343.html">tbb_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+<a name="l00156"></a>00156 
+<a name="l00157"></a>00157 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00158"></a>00158 <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="l00159"></a>00159 
+<a name="l00161"></a>00161 
+<a name="l00166"></a>00166 <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="l00167"></a><a class="code" href="a00353.html">00167</a> <span class="keyword">class </span><a class="code" href="a00353.html">zero_allocator</a> : <span class="keyword">public</span> Allocator<T>
+<a name="l00168"></a>00168 {
+<a name="l00169"></a>00169 <span class="keyword">public</span>:
+<a name="l00170"></a>00170     <span class="keyword">typedef</span> Allocator<T> base_allocator_type;
+<a name="l00171"></a>00171     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::value_type value_type;
+<a name="l00172"></a>00172     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::pointer pointer;
+<a name="l00173"></a>00173     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::const_pointer const_pointer;
+<a name="l00174"></a>00174     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::reference reference;
+<a name="l00175"></a>00175     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::const_reference const_reference;
+<a name="l00176"></a>00176     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::size_type size_type;
+<a name="l00177"></a>00177     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::difference_type difference_type;
+<a name="l00178"></a>00178     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
+<a name="l00179"></a>00179         <span class="keyword">typedef</span> <a class="code" href="a00353.html">zero_allocator<U, Allocator></a> other;
+<a name="l00180"></a>00180     };
+<a name="l00181"></a>00181 
+<a name="l00182"></a>00182     <a class="code" href="a00353.html">zero_allocator</a>() <span class="keywordflow">throw</span>() { }
+<a name="l00183"></a>00183     <a class="code" href="a00353.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00353.html">zero_allocator</a> &a) <span class="keywordflow">throw</span>() : base_allocator_type( a ) { }
+<a name="l00184"></a>00184     <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00185"></a>00185     <a class="code" href="a00353.html">zero_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00353.html">zero_allocator<U></a> &a) <span class="keywordflow">throw</span>() : base_allocator_type( Allocator<U>( a ) ) { }
+<a name="l00186"></a>00186 
+<a name="l00187"></a>00187     pointer <a class="code" href="a00343.html#f6cb487b1bdce0b581f265a77dca6d53">allocate</a>(<span class="keyword">const</span> size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span> *hint = 0 ) {
+<a name="l00188"></a>00188         pointer ptr = base_allocator_type::allocate( n, hint );
+<a name="l00189"></a>00189         std::memset( ptr, 0, n * <span class="keyword">sizeof</span>(value_type) );
+<a name="l00190"></a>00190         <span class="keywordflow">return</span> ptr;
+<a name="l00191"></a>00191     }
+<a name="l00192"></a>00192 };
+<a name="l00193"></a>00193 
+<a name="l00195"></a>00195 
+<a name="l00196"></a>00196 <span class="keyword">template</span><<span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span>Allocator> 
+<a name="l00197"></a><a class="code" href="a00354.html">00197</a> <span class="keyword">class </span><a class="code" href="a00353.html">zero_allocator</a><void, Allocator> : <span class="keyword">public</span> Allocator<void> {
+<a name="l00198"></a>00198 <span class="keyword">public</span>:
+<a name="l00199"></a>00199     <span class="keyword">typedef</span> Allocator<void> base_allocator_type;
+<a name="l00200"></a>00200     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::value_type value_type;
+<a name="l00201"></a>00201     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::pointer pointer;
+<a name="l00202"></a>00202     <span class="keyword">typedef</span> <span class="keyword">typename</span> base_allocator_type::const_pointer const_pointer;
+<a name="l00203"></a>00203     <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
+<a name="l00204"></a>00204         <span class="keyword">typedef</span> <a class="code" href="a00353.html">zero_allocator<U, Allocator></a> other;
+<a name="l00205"></a>00205     };
+<a name="l00206"></a>00206 };
+<a name="l00207"></a>00207 
+<a name="l00208"></a>00208 <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="l00209"></a>00209 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00353.html">zero_allocator<T1,B1></a> &a, <span class="keyword">const</span> <a class="code" href="a00353.html">zero_allocator<T2,B2></a> &b) {
+<a name="l00210"></a>00210     <span class="keywordflow">return</span> static_cast< B1<T1> >(a) == <span class="keyword">static_cast</span>< B2<T2> >(b);
+<a name="l00211"></a>00211 }
+<a name="l00212"></a>00212 <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="l00213"></a>00213 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> zero_allocator<T1,B1> &a, <span class="keyword">const</span> zero_allocator<T2,B2> &b) {
+<a name="l00214"></a>00214     <span class="keywordflow">return</span> static_cast< B1<T1> >(a) != <span class="keyword">static_cast</span>< B2<T2> >(b);
+<a name="l00215"></a>00215 }
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217 } <span class="comment">// namespace tbb </span>
+<a name="l00218"></a>00218 
+<a name="l00219"></a>00219 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_allocator_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00638.html b/doc/html/a00638.html
new file mode 100644
index 0000000..ba7c842
--- /dev/null
+++ b/doc/html/a00638.html
@@ -0,0 +1,323 @@
+<!DOCTYPE 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-2012 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="l00032"></a>00032 <span class="preprocessor">#define __TBB_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#if __clang__</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>
+<a name="l00039"></a>00039 <span class="preprocessor">#if (__TBB_GCC_VERSION >= 40400) && !defined(__INTEL_COMPILER)</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>
+<a name="l00041"></a>00041 <span class="preprocessor">    #define __TBB_GCC_WARNING_SUPPRESSION_PRESENT 1</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045 <span class="comment">/* Select particular features of C++11 based on compiler version.</span>
+<a name="l00046"></a>00046 <span class="comment">   ICC 12.1 (Linux), GCC 4.3 and higher, clang 2.9 and higher</span>
+<a name="l00047"></a>00047 <span class="comment">   set __GXX_EXPERIMENTAL_CXX0X__ in c++11 mode.</span>
+<a name="l00048"></a>00048 <span class="comment"></span>
+<a name="l00049"></a>00049 <span class="comment">   Compilers that mimics other compilers (ICC, clang) must be processed before</span>
+<a name="l00050"></a>00050 <span class="comment">   compilers they mimic.</span>
+<a name="l00051"></a>00051 <span class="comment"></span>
+<a name="l00052"></a>00052 <span class="comment">   TODO: The following conditions should be extended when new compilers/runtimes</span>
+<a name="l00053"></a>00053 <span class="comment">   support added.</span>
+<a name="l00054"></a>00054 <span class="comment"> */</span>
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 <span class="preprocessor">#if __INTEL_COMPILER</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT __GXX_EXPERIMENTAL_CXX0X__ && __VARIADIC_TEMPLATES</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CPP11_RVALUE_REF_PRESENT (__GXX_EXPERIMENTAL_CXX0X__ || _MSC_VER >= 1600) && (__INTEL_COMPILER >= 1200)</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXCEPTION_PTR_PRESENT 0</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#elif __clang__</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_CLANG_VERSION >= 20900)</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CPP11_RVALUE_REF_PRESENT (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_CLANG_VERSION >= 20900)</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXCEPTION_PTR_PRESENT __GXX_EXPERIMENTAL_CXX0X__</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#elif __GNUC__</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT __GXX_EXPERIMENTAL_CXX0X__</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CPP11_RVALUE_REF_PRESENT __GXX_EXPERIMENTAL_CXX0X__</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXCEPTION_PTR_PRESENT __GXX_EXPERIMENTAL_CXX0X__</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#elif _MSC_VER</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 0</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CPP11_RVALUE_REF_PRESENT 0</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXCEPTION_PTR_PRESENT (_MSC_VER >= 1600)</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">    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 0</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CPP11_RVALUE_REF_PRESENT 0</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXCEPTION_PTR_PRESENT 0</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span>
+<a name="l00078"></a>00078 <span class="comment">// Work around a bug in MinGW32</span>
+<a name="l00079"></a>00079 <span class="preprocessor">#if __MINGW32__ && __TBB_EXCEPTION_PTR_PRESENT && !defined(_GLIBCXX_ATOMIC_BUILTINS_4)</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">    #define _GLIBCXX_ATOMIC_BUILTINS_4</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span>
+<a name="l00083"></a>00083 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC || __IBMCPP__</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span>    <span class="comment">/* ICC defines __GNUC__ and so is covered */</span>
+<a name="l00085"></a>00085 <span class="preprocessor">    #define __TBB_ATTRIBUTE_ALIGNED_PRESENT 1</span>
+<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#elif _MSC_VER && (_MSC_VER >= 1300 || __INTEL_COMPILER)</span>
+<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DECLSPEC_ALIGN_PRESENT 1</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00089"></a>00089 <span class="preprocessor"></span>
+<a name="l00090"></a>00090 <span class="comment">/* TODO: change the version back to 4.1.2 once macro __TBB_WORD_SIZE become optional */</span>
+<a name="l00091"></a>00091 <span class="preprocessor">#if (__TBB_GCC_VERSION >= 40306) && !defined(__INTEL_COMPILER)</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span>
+<a name="l00093"></a>00093 <span class="preprocessor">    #define __TBB_GCC_BUILTIN_ATOMICS_PRESENT 1</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00095"></a>00095 <span class="preprocessor"></span>
+<a name="l00098"></a>00098 <span class="preprocessor">#ifndef TBB_USE_DEBUG</span>
+<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
+<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG TBB_DO_ASSERT</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#ifdef _DEBUG</span>
+<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG _DEBUG</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG 0</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">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+<a name="l00108"></a>00108 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
+<a name="l00109"></a>00109 
+<a name="l00110"></a>00110 <span class="preprocessor">#ifndef TBB_USE_ASSERT</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_DO_ASSERT</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_USE_ASSERT TBB_USE_DEBUG</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+<a name="l00116"></a>00116 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+<a name="l00117"></a>00117 
+<a name="l00118"></a>00118 <span class="preprocessor">#ifndef TBB_USE_THREADING_TOOLS</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_THREADING_TOOLS</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_DO_THREADING_TOOLS</span>
+<a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS */</span>
+<a name="l00124"></a>00124 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+<a name="l00125"></a>00125 
+<a name="l00126"></a>00126 <span class="preprocessor">#ifndef TBB_USE_PERFORMANCE_WARNINGS</span>
+<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_PERFORMANCE_WARNINGS</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG</span>
+<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_PEFORMANCE_WARNINGS */</span>
+<a name="l00132"></a>00132 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_PERFORMANCE_WARNINGS */</span>
+<a name="l00133"></a>00133 
+<a name="l00134"></a>00134 <span class="preprocessor">#if __MIC__ || __MIC2__</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_DEFINE_MIC 1</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00137"></a>00137 <span class="preprocessor"></span>
+<a name="l00138"></a>00138 <span class="preprocessor">#if !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC) || defined(_XBOX)</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">    #if TBB_USE_EXCEPTIONS</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="preprocessor">        #error Compilation settings do not support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.</span>
+<a name="l00141"></a>00141 <span class="preprocessor"></span><span class="preprocessor">    #elif !defined(TBB_USE_EXCEPTIONS)</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_EXCEPTIONS 0</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00144"></a>00144 <span class="preprocessor"></span><span class="preprocessor">#elif !defined(TBB_USE_EXCEPTIONS)</span>
+<a name="l00145"></a>00145 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_DEFINE_MIC</span>
+<a name="l00146"></a>00146 <span class="preprocessor"></span><span class="preprocessor">    #define TBB_USE_EXCEPTIONS 0</span>
+<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
+<a name="l00148"></a>00148 <span class="preprocessor"></span><span class="preprocessor">    #define TBB_USE_EXCEPTIONS 1</span>
+<a name="l00149"></a>00149 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#elif TBB_USE_EXCEPTIONS && __TBB_DEFINE_MIC</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="preprocessor">    #error Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.</span>
+<a name="l00152"></a>00152 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00153"></a>00153 <span class="preprocessor"></span>
+<a name="l00154"></a>00154 <span class="preprocessor">#ifndef TBB_IMPLEMENT_CPP0X</span>
+<a name="l00155"></a>00155 <span class="preprocessor"></span>
+<a name="l00156"></a>00156 <span class="preprocessor">    #if __GNUC__==4 && __GNUC_MINOR__>=4 && __GXX_EXPERIMENTAL_CXX0X__</span>
+<a name="l00157"></a>00157 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_IMPLEMENT_CPP0X 0</span>
+<a name="l00158"></a>00158 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
+<a name="l00159"></a>00159 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_IMPLEMENT_CPP0X 1</span>
+<a name="l00160"></a>00160 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_IMPLEMENT_CPP0X */</span>
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163 <span class="preprocessor">#ifndef TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00164"></a>00164 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_EXCEPTION_PTR_PRESENT</span>
+<a name="l00165"></a>00165 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 0</span>
+<a name="l00166"></a>00166 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
+<a name="l00167"></a>00167 <span class="preprocessor"></span><span class="preprocessor">        #define TBB_USE_CAPTURED_EXCEPTION 1</span>
+<a name="l00168"></a>00168 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00169"></a>00169 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00170"></a>00170 <span class="preprocessor">    #if !TBB_USE_CAPTURED_EXCEPTION && !__TBB_EXCEPTION_PTR_PRESENT</span>
+<a name="l00171"></a>00171 <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="l00172"></a>00172 <span class="preprocessor"></span><span class="preprocessor">    #endif</span>
+<a name="l00173"></a>00173 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* defined TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00174"></a>00174 
+<a name="l00176"></a>00176 <span class="preprocessor">#if (TBB_USE_GCC_BUILTINS && !__TBB_GCC_BUILTIN_ATOMICS_PRESENT)</span>
+<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">    #error "GCC atomic built-ins are not supported."</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="l00187"></a>00187 <span class="preprocessor">#ifndef __TBB_DYNAMIC_LOAD_ENABLED</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DYNAMIC_LOAD_ENABLED 1</span>
+<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">#elif !(_WIN32||_WIN64) && !__TBB_DYNAMIC_LOAD_ENABLED</span>
+<a name="l00190"></a>00190 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_WEAK_SYMBOLS 1</span>
+<a name="l00191"></a>00191 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00192"></a>00192 <span class="preprocessor"></span>
+<a name="l00193"></a>00193 <span class="preprocessor">#if (_WIN32||_WIN64) && __TBB_SOURCE_DIRECTLY_INCLUDED</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00195"></a>00195 <span class="preprocessor"></span><span class="preprocessor">    #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1</span>
+<a name="l00196"></a>00196 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00197"></a>00197 <span class="preprocessor"></span>
+<a name="l00198"></a>00198 <span class="preprocessor">#ifndef __TBB_COUNT_TASK_NODES</span>
+<a name="l00199"></a>00199 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_COUNT_TASK_NODES TBB_USE_ASSERT</span>
+<a name="l00200"></a>00200 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00201"></a>00201 <span class="preprocessor"></span>
+<a name="l00202"></a>00202 <span class="preprocessor">#ifndef __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00203"></a>00203 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_TASK_GROUP_CONTEXT 1</span>
+<a name="l00204"></a>00204 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00205"></a>00205 
+<a name="l00206"></a>00206 <span class="preprocessor">#if TBB_USE_EXCEPTIONS && !__TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00207"></a>00207 <span class="preprocessor"></span><span class="preprocessor">    #error TBB_USE_EXCEPTIONS requires __TBB_TASK_GROUP_CONTEXT to be enabled</span>
+<a name="l00208"></a>00208 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00209"></a>00209 <span class="preprocessor"></span>
+<a name="l00210"></a>00210 <span class="preprocessor">#ifndef __TBB_SCHEDULER_OBSERVER</span>
+<a name="l00211"></a>00211 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_SCHEDULER_OBSERVER 1</span>
+<a name="l00212"></a>00212 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
+<a name="l00213"></a>00213 
+<a name="l00214"></a>00214 <span class="preprocessor">#ifndef __TBB_TASK_PRIORITY</span>
+<a name="l00215"></a>00215 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_TASK_PRIORITY __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00216"></a>00216 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_PRIORITY */</span>
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218 <span class="preprocessor">#if __TBB_TASK_PRIORITY && !__TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00219"></a>00219 <span class="preprocessor"></span><span class="preprocessor">    #error __TBB_TASK_PRIORITY requires __TBB_TASK_GROUP_CONTEXT to be enabled</span>
+<a name="l00220"></a>00220 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00221"></a>00221 <span class="preprocessor"></span>
+<a name="l00222"></a>00222 <span class="preprocessor">#if !defined(__TBB_SURVIVE_THREAD_SWITCH) && (_WIN32 || _WIN64 || __linux__)</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_SURVIVE_THREAD_SWITCH 1</span>
+<a name="l00224"></a>00224 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SURVIVE_THREAD_SWITCH */</span>
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226 <span class="preprocessor">#ifndef __TBB_DEFAULT_PARTITIONER</span>
+<a name="l00227"></a>00227 <span class="preprocessor"></span><span class="preprocessor">#if TBB_DEPRECATED</span>
+<a name="l00228"></a>00228 <span class="preprocessor"></span>
+<a name="l00229"></a>00229 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::simple_partitioner</span>
+<a name="l00230"></a>00230 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00231"></a>00231 <span class="preprocessor"></span>
+<a name="l00232"></a>00232 <span class="preprocessor">#define __TBB_DEFAULT_PARTITIONER tbb::auto_partitioner</span>
+<a name="l00233"></a>00233 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DEPRECATED */</span>
+<a name="l00234"></a>00234 <span class="preprocessor">#endif </span><span class="comment">/* !defined(__TBB_DEFAULT_PARTITIONER */</span>
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236 <span class="preprocessor">#ifdef _VARIADIC_MAX</span>
+<a name="l00237"></a>00237 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_VARIADIC_MAX _VARIADIC_MAX</span>
+<a name="l00238"></a>00238 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00239"></a>00239 <span class="preprocessor"></span><span class="preprocessor">#if _MSC_VER >= 1700</span>
+<a name="l00240"></a>00240 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_VARIADIC_MAX 5  // current VS11 setting, may change.</span>
+<a name="l00241"></a>00241 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00242"></a>00242 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_VARIADIC_MAX 10</span>
+<a name="l00243"></a>00243 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00244"></a>00244 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00245"></a>00245 <span class="preprocessor"></span>
+<a name="l00252"></a>00252 <span class="preprocessor">#if __GNUC__ && __TBB_x86_64 && __INTEL_COMPILER == 1200</span>
+<a name="l00253"></a>00253 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_ICC_12_0_INL_ASM_FSTCW_BROKEN 1</span>
+<a name="l00254"></a>00254 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00255"></a>00255 <span class="preprocessor"></span>
+<a name="l00256"></a>00256 <span class="preprocessor">#if _MSC_VER && __INTEL_COMPILER && (__INTEL_COMPILER<1110 || __INTEL_COMPILER==1110 && __INTEL_COMPILER_BUILD_DATE < 20091012)</span>
+<a name="l00257"></a>00257 <span class="preprocessor"></span>
+<a name="l00260"></a>00260 <span class="preprocessor">    #define __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN 1</span>
+<a name="l00261"></a>00261 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00262"></a>00262 <span class="preprocessor"></span>
+<a name="l00263"></a>00263 <span class="preprocessor">#if defined(_MSC_VER) && _MSC_VER < 1500 && !defined(__INTEL_COMPILER)</span>
+<a name="l00264"></a>00264 <span class="preprocessor"></span>
+<a name="l00266"></a>00266 <span class="preprocessor">    #define __TBB_TEMPLATE_FRIENDS_BROKEN 1</span>
+<a name="l00267"></a>00267 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00268"></a>00268 <span class="preprocessor"></span>
+<a name="l00269"></a>00269 <span class="preprocessor">#if __GLIBC__==2 && __GLIBC_MINOR__==3 || __MINGW32__ || (__APPLE__ && __INTEL_COMPILER==1200 && !TBB_USE_DEBUG)</span>
+<a name="l00271"></a>00271 <span class="preprocessor"></span>
+<a name="l00272"></a>00272 <span class="preprocessor">    #define __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN 1</span>
+<a name="l00273"></a>00273 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00274"></a>00274 <span class="preprocessor"></span>
+<a name="l00275"></a>00275 <span class="preprocessor">#if (_WIN32||_WIN64) && __INTEL_COMPILER == 1110</span>
+<a name="l00276"></a>00276 <span class="preprocessor"></span>
+<a name="l00277"></a>00277 <span class="preprocessor">    #define __TBB_ICL_11_1_CODE_GEN_BROKEN 1</span>
+<a name="l00278"></a>00278 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00279"></a>00279 <span class="preprocessor"></span>
+<a name="l00280"></a>00280 <span class="preprocessor">#if __clang__ || (__GNUC__==3 && __GNUC_MINOR__==3 && !defined(__INTEL_COMPILER))</span>
+<a name="l00281"></a>00281 <span class="preprocessor"></span>
+<a name="l00282"></a>00282 <span class="preprocessor">    #define __TBB_PROTECTED_NESTED_CLASS_BROKEN 1</span>
+<a name="l00283"></a>00283 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00284"></a>00284 <span class="preprocessor"></span>
+<a name="l00285"></a>00285 <span class="preprocessor">#if __MINGW32__ && (__GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<2)</span>
+<a name="l00286"></a>00286 <span class="preprocessor"></span>
+<a name="l00288"></a>00288 <span class="preprocessor">    #define __TBB_SSE_STACK_ALIGNMENT_BROKEN 1</span>
+<a name="l00289"></a>00289 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00290"></a>00290 <span class="preprocessor"></span>
+<a name="l00291"></a>00291 <span class="preprocessor">#if __GNUC__==4 && __GNUC_MINOR__==3 && __GNUC_PATCHLEVEL__==0</span>
+<a name="l00292"></a>00292 <span class="preprocessor"></span>    <span class="comment">// GCC of this version may rashly ignore control dependencies</span>
+<a name="l00293"></a>00293 <span class="preprocessor">    #define __TBB_GCC_OPTIMIZER_ORDERING_BROKEN 1</span>
+<a name="l00294"></a>00294 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00295"></a>00295 <span class="preprocessor"></span>
+<a name="l00296"></a>00296 <span class="preprocessor">#if __FreeBSD__</span>
+<a name="l00297"></a>00297 <span class="preprocessor"></span>
+<a name="l00299"></a>00299 <span class="preprocessor">    #define __TBB_PRIO_INHERIT_BROKEN 1</span>
+<a name="l00300"></a>00300 <span class="preprocessor"></span>
+<a name="l00303"></a>00303 <span class="preprocessor">    #define __TBB_PLACEMENT_NEW_EXCEPTION_SAFETY_BROKEN 1</span>
+<a name="l00304"></a>00304 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __FreeBSD__ */</span>
+<a name="l00305"></a>00305 
+<a name="l00306"></a>00306 <span class="preprocessor">#if (__linux__ || __APPLE__) && __i386__ && defined(__INTEL_COMPILER)</span>
+<a name="l00307"></a>00307 <span class="preprocessor"></span>
+<a name="l00309"></a>00309 <span class="preprocessor">    #define __TBB_ICC_ASM_VOLATILE_BROKEN 1</span>
+<a name="l00310"></a>00310 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00311"></a>00311 <span class="preprocessor"></span>
+<a name="l00312"></a>00312 <span class="preprocessor">#if !__INTEL_COMPILER && (_MSC_VER || __GNUC__==3 && __GNUC_MINOR__<=2)</span>
+<a name="l00313"></a>00313 <span class="preprocessor"></span>
+<a name="l00315"></a>00315 <span class="preprocessor">    #define __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN 1</span>
+<a name="l00316"></a>00316 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00317"></a>00317 <span class="preprocessor"></span>
+<a name="l00318"></a>00318 <span class="preprocessor">#if __INTEL_COMPILER</span>
+<a name="l00319"></a>00319 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CPP11_STD_FORWARD_BROKEN 1</span>
+<a name="l00320"></a>00320 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00321"></a>00321 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CPP11_STD_FORWARD_BROKEN 0</span>
+<a name="l00322"></a>00322 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00323"></a>00323 <span class="preprocessor"></span>
+<a name="l00324"></a>00324 <span class="preprocessor">#if __TBB_DEFINE_MIC</span>
+<a name="l00325"></a>00325 <span class="preprocessor"></span>
+<a name="l00326"></a>00326 <span class="preprocessor">    #define __TBB_MAIN_THREAD_AFFINITY_BROKEN 1</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">#endif </span><span class="comment">/* __TBB_tbb_config_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00639.html b/doc/html/a00639.html
new file mode 100644
index 0000000..7c36f8b
--- /dev/null
+++ b/doc/html/a00639.html
@@ -0,0 +1,322 @@
+<!DOCTYPE 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-2012 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_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
+<a name="l00028"></a>00028 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</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">#include <stdexcept></span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include <string></span> <span class="comment">// required to construct std exception classes</span>
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</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="keyword">namespace </span>tbb {
+<a name="l00040"></a>00040 
+<a name="l00042"></a><a class="code" href="a00258.html">00042</a> <span class="keyword">class </span><a class="code" href="a00258.html">bad_last_alloc</a> : <span class="keyword">public</span> std::bad_alloc {
+<a name="l00043"></a>00043 <span class="keyword">public</span>:
+<a name="l00044"></a>00044     <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="l00045"></a>00045 <span class="preprocessor">#if __TBB_DEFAULT_DTOR_THROW_SPEC_BROKEN</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>    <span class="comment">/*override*/</span> ~<a class="code" href="a00258.html">bad_last_alloc</a>() <span class="keywordflow">throw</span>() {}
+<a name="l00047"></a>00047 <span class="preprocessor">#endif</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>};
+<a name="l00049"></a>00049 
+<a name="l00051"></a><a class="code" href="a00290.html">00051</a> <span class="keyword">class </span><a class="code" href="a00290.html">improper_lock</a> : <span class="keyword">public</span> std::exception {
+<a name="l00052"></a>00052 <span class="keyword">public</span>:
+<a name="l00053"></a>00053     <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="l00054"></a>00054 };
+<a name="l00055"></a>00055 
+<a name="l00057"></a><a class="code" href="a00351.html">00057</a> <span class="keyword">class </span><a class="code" href="a00351.html">user_abort</a> : <span class="keyword">public</span> std::exception {
+<a name="l00058"></a>00058 <span class="keyword">public</span>:
+<a name="l00059"></a>00059     <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="l00060"></a>00060 };
+<a name="l00061"></a>00061 
+<a name="l00063"></a><a class="code" href="a00298.html">00063</a> <span class="keyword">class </span><a class="code" href="a00298.html">missing_wait</a> : <span class="keyword">public</span> std::exception {
+<a name="l00064"></a>00064 <span class="keyword">public</span>:
+<a name="l00065"></a>00065     <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="l00066"></a>00066 };
+<a name="l00067"></a>00067 
+<a name="l00069"></a><a class="code" href="a00291.html">00069</a> <span class="keyword">class </span><a class="code" href="a00291.html">invalid_multiple_scheduling</a> : <span class="keyword">public</span> std::exception {
+<a name="l00070"></a>00070 <span class="keyword">public</span>:
+<a name="l00071"></a>00071     <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="l00072"></a>00072 };
+<a name="l00073"></a>00073 
+<a name="l00074"></a>00074 <span class="keyword">namespace </span>internal {
+<a name="l00076"></a>00076 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC throw_bad_last_alloc_exception_v4();
+<a name="l00077"></a>00077 
+<a name="l00078"></a>00078 <span class="keyword">enum</span> exception_id {
+<a name="l00079"></a>00079     eid_bad_alloc = 1,
+<a name="l00080"></a>00080     eid_bad_last_alloc,
+<a name="l00081"></a>00081     eid_nonpositive_step,
+<a name="l00082"></a>00082     eid_out_of_range,
+<a name="l00083"></a>00083     eid_segment_range_error,
+<a name="l00084"></a>00084     eid_index_range_error,
+<a name="l00085"></a>00085     eid_missing_wait,
+<a name="l00086"></a>00086     eid_invalid_multiple_scheduling,
+<a name="l00087"></a>00087     eid_improper_lock,
+<a name="l00088"></a>00088     eid_possible_deadlock,
+<a name="l00089"></a>00089     eid_operation_not_permitted,
+<a name="l00090"></a>00090     eid_condvar_wait_failed,
+<a name="l00091"></a>00091     eid_invalid_load_factor,
+<a name="l00092"></a>00092     eid_reserved, <span class="comment">// free slot for backward compatibility, can be reused.</span>
+<a name="l00093"></a>00093     eid_invalid_swap,
+<a name="l00094"></a>00094     eid_reservation_length_error,
+<a name="l00095"></a>00095     eid_invalid_key,
+<a name="l00096"></a>00096     eid_user_abort,
+<a name="l00098"></a>00098 
+<a name="l00100"></a>00100     eid_max
+<a name="l00101"></a>00101 };
+<a name="l00102"></a>00102 
+<a name="l00104"></a>00104 
+<a name="l00106"></a>00106 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC throw_exception_v4 ( exception_id );
+<a name="l00107"></a>00107 
+<a name="l00109"></a>00109 <span class="keyword">inline</span> <span class="keywordtype">void</span> throw_exception ( exception_id eid ) { throw_exception_v4(eid); }
+<a name="l00110"></a>00110 
+<a name="l00111"></a>00111 } <span class="comment">// namespace internal</span>
+<a name="l00112"></a>00112 } <span class="comment">// namespace tbb</span>
+<a name="l00113"></a>00113 
+<a name="l00114"></a>00114 <span class="preprocessor">#if __TBB_TASK_GROUP_CONTEXT</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_allocator.h"</span>
+<a name="l00116"></a>00116 <span class="preprocessor">#include <exception></span>
+<a name="l00117"></a>00117 <span class="preprocessor">#include <typeinfo></span>
+<a name="l00118"></a>00118 <span class="preprocessor">#include <new></span>
+<a name="l00119"></a>00119 
+<a name="l00120"></a>00120 <span class="keyword">namespace </span>tbb {
+<a name="l00121"></a>00121 
+<a name="l00123"></a>00123 
+<a name="l00143"></a><a class="code" href="a00345.html">00143</a> <span class="keyword">class </span><a class="code" href="a00345.html">tbb_exception</a> : <span class="keyword">public</span> std::exception
+<a name="l00144"></a>00144 {
+<a name="l00148"></a>00148     <span class="keywordtype">void</span>* operator new ( size_t );
+<a name="l00149"></a>00149 
+<a name="l00150"></a>00150 <span class="keyword">public</span>:
+<a name="l00152"></a>00152 
+<a name="l00153"></a>00153     <span class="keyword">virtual</span> <a class="code" href="a00345.html">tbb_exception</a>* <a class="code" href="a00345.html#3e3482bf264d4ca4dde046cd9c02c766">move</a> () <span class="keywordflow">throw</span>() = 0;
+<a name="l00154"></a>00154 
+<a name="l00156"></a>00156 
+<a name="l00158"></a>00158     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00345.html#66c94938eca8bf88b76f3eccaaf215d8">destroy</a> () <span class="keywordflow">throw</span>() = 0;
+<a name="l00159"></a>00159 
+<a name="l00161"></a>00161 
+<a name="l00165"></a>00165     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="a00345.html#8588e07fa49692f4d734e4f2e4f048f4">throw_self</a> () = 0;
+<a name="l00166"></a>00166 
+<a name="l00168"></a>00168     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00345.html#d00f6497e552fee978a02bfcbebf46e2">name</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
+<a name="l00169"></a>00169 
+<a name="l00171"></a>00171     <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00345.html#e8157689ecb66bc6c72d3618bf3cc371">what</a>() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
+<a name="l00172"></a>00172 
+<a name="l00179"></a><a class="code" href="a00345.html#3f2da7f3d8a6e4c1df522af1213afb5a">00179</a>     <span class="keywordtype">void</span> <a class="code" href="a00345.html#3f2da7f3d8a6e4c1df522af1213afb5a">operator delete </a>( <span class="keywordtype">void</span>* p ) {
+<a name="l00180"></a>00180         internal::deallocate_via_handler_v3(p);
+<a name="l00181"></a>00181     }
+<a name="l00182"></a>00182 };
+<a name="l00183"></a>00183 
+<a name="l00185"></a>00185 
+<a name="l00189"></a><a class="code" href="a00266.html">00189</a> <span class="keyword">class </span><a class="code" href="a00266.html">captured_exception</a> : <span class="keyword">public</span> <a class="code" href="a00345.html">tbb_exception</a>
+<a name="l00190"></a>00190 {
+<a name="l00191"></a>00191 <span class="keyword">public</span>:
+<a name="l00192"></a>00192     <a class="code" href="a00266.html">captured_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00266.html">captured_exception</a>& src )
+<a name="l00193"></a>00193         : <a class="code" href="a00345.html">tbb_exception</a>(src), my_dynamic(<span class="keyword">false</span>)
+<a name="l00194"></a>00194     {
+<a name="l00195"></a>00195         set(src.<a class="code" href="a00266.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00266.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
+<a name="l00196"></a>00196     }
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198     <a class="code" href="a00266.html">captured_exception</a> ( <span class="keyword">const</span> <span class="keywordtype">char</span>* name_, <span class="keyword">const</span> <span class="keywordtype">char</span>* info )
+<a name="l00199"></a>00199         : my_dynamic(<span class="keyword">false</span>)
+<a name="l00200"></a>00200     {
+<a name="l00201"></a>00201         set(name_, info);
+<a name="l00202"></a>00202     }
+<a name="l00203"></a>00203 
+<a name="l00204"></a>00204     __TBB_EXPORTED_METHOD ~<a class="code" href="a00266.html">captured_exception</a> () <span class="keywordflow">throw</span>();
+<a name="l00205"></a>00205 
+<a name="l00206"></a>00206     <a class="code" href="a00266.html">captured_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00266.html">captured_exception</a>& src ) {
+<a name="l00207"></a>00207         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
+<a name="l00208"></a>00208             clear();
+<a name="l00209"></a>00209             set(src.<a class="code" href="a00266.html#6a57f9aa0bce72392492d109b9e1d941">my_exception_name</a>, src.<a class="code" href="a00266.html#788adf4e55cdad7abc178a48a1d47e69">my_exception_info</a>);
+<a name="l00210"></a>00210         }
+<a name="l00211"></a>00211         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00212"></a>00212     }
+<a name="l00213"></a>00213 
+<a name="l00214"></a>00214     <span class="comment">/*override*/</span>
+<a name="l00215"></a>00215     <a class="code" href="a00266.html">captured_exception</a>* __TBB_EXPORTED_METHOD <a class="code" href="a00266.html#837a50b8f6a800bda225c39d1699643f">move</a> () <span class="keywordflow">throw</span>();
+<a name="l00216"></a>00216 
+<a name="l00217"></a>00217     <span class="comment">/*override*/</span>
+<a name="l00218"></a>00218     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00266.html#93d875d3555502ff6f18513525de204c">destroy</a> () <span class="keywordflow">throw</span>();
+<a name="l00219"></a>00219 
+<a name="l00220"></a>00220     <span class="comment">/*override*/</span>
+<a name="l00221"></a><a class="code" href="a00266.html#2dd1be66ab32fa27e0ddef5707fa67ef">00221</a>     <span class="keywordtype">void</span> <a class="code" href="a00266.html#2dd1be66ab32fa27e0ddef5707fa67ef">throw_self</a> () { __TBB_THROW(*<span class="keyword">this</span>); }
+<a name="l00222"></a>00222 
+<a name="l00223"></a>00223     <span class="comment">/*override*/</span>
+<a name="l00224"></a>00224     <span class="keyword">const</span> <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00266.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>() const throw();
+<a name="l00225"></a>00225 
+<a name="l00226"></a>00226     <span class="comment">/*override*/</span>
+<a name="l00227"></a>00227     const <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD <a class="code" href="a00266.html#6b5988ef74a1fe2a58998d110b3633e0">what</a>() const throw();
+<a name="l00228"></a>00228 
+<a name="l00229"></a>00229     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD set ( const <span class="keywordtype">char</span>* <a class="code" href="a00266.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>, const <span class="keywordtype">char</span>* info ) throw();
+<a name="l00230"></a>00230     <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD clear () throw();
+<a name="l00231"></a>00231 
+<a name="l00232"></a>00232 private:
+<a name="l00234"></a>00234     <a class="code" href="a00266.html">captured_exception</a>() {}
+<a name="l00235"></a>00235 
+<a name="l00237"></a>00237     <span class="keyword">static</span> captured_exception* allocate ( <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00266.html#5af82fd677449c5ca727fa1d7e16f9f5">name</a>, <span class="keyword">const</span> <span class="keywordtype">char</span>* info );
+<a name="l00238"></a>00238 
+<a name="l00239"></a>00239     <span class="keywordtype">bool</span> my_dynamic;
+<a name="l00240"></a>00240     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_name;
+<a name="l00241"></a>00241     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_info;
+<a name="l00242"></a>00242 };
+<a name="l00243"></a>00243 
+<a name="l00245"></a>00245 
+<a name="l00249"></a>00249 <span class="keyword">template</span><<span class="keyword">typename</span> ExceptionData>
+<a name="l00250"></a><a class="code" href="a00299.html">00250</a> <span class="keyword">class </span><a class="code" href="a00299.html">movable_exception</a> : <span class="keyword">public</span> <a class="code" href="a00345.html">tbb_exception</a>
+<a name="l00251"></a>00251 {
+<a name="l00252"></a>00252     <span class="keyword">typedef</span> <a class="code" href="a00299.html">movable_exception<ExceptionData></a> <a class="code" href="a00299.html">self_type</a>;
+<a name="l00253"></a>00253 
+<a name="l00254"></a>00254 <span class="keyword">public</span>:
+<a name="l00255"></a>00255     <a class="code" href="a00299.html">movable_exception</a> ( <span class="keyword">const</span> ExceptionData& data_ )
+<a name="l00256"></a>00256         : <a class="code" href="a00299.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>(data_)
+<a name="l00257"></a>00257         , my_dynamic(<span class="keyword">false</span>)
+<a name="l00258"></a>00258         , my_exception_name(
+<a name="l00259"></a>00259 #<span class="keywordflow">if</span> TBB_USE_EXCEPTIONS
+<a name="l00260"></a>00260         <span class="keyword">typeid</span>(<a class="code" href="a00299.html">self_type</a>).<a class="code" href="a00299.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a>()
+<a name="l00261"></a>00261 #<span class="keywordflow">else</span> <span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
+<a name="l00262"></a>00262         <span class="stringliteral">"movable_exception"</span>
+<a name="l00263"></a>00263 #endif <span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
+<a name="l00264"></a>00264         )
+<a name="l00265"></a>00265     {}
+<a name="l00266"></a>00266 
+<a name="l00267"></a>00267     <a class="code" href="a00299.html">movable_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00299.html">movable_exception</a>& src ) <span class="keywordflow">throw</span> ()
+<a name="l00268"></a>00268         : <a class="code" href="a00345.html">tbb_exception</a>(src)
+<a name="l00269"></a>00269         , <a class="code" href="a00299.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>(src.<a class="code" href="a00299.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>)
+<a name="l00270"></a>00270         , my_dynamic(<span class="keyword">false</span>)
+<a name="l00271"></a>00271         , my_exception_name(src.<a class="code" href="a00299.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>)
+<a name="l00272"></a>00272     {}
+<a name="l00273"></a>00273 
+<a name="l00274"></a>00274     ~<a class="code" href="a00299.html">movable_exception</a> () <span class="keywordflow">throw</span>() {}
+<a name="l00275"></a>00275 
+<a name="l00276"></a>00276     <span class="keyword">const</span> <a class="code" href="a00299.html">movable_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00299.html">movable_exception</a>& src ) {
+<a name="l00277"></a>00277         <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
+<a name="l00278"></a>00278             <a class="code" href="a00299.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a> = src.<a class="code" href="a00299.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
+<a name="l00279"></a>00279             my_exception_name = src.<a class="code" href="a00299.html#5f5843b501829ff824c9c8d28c8283eb">my_exception_name</a>;
+<a name="l00280"></a>00280         }
+<a name="l00281"></a>00281         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00282"></a>00282     }
+<a name="l00283"></a>00283 
+<a name="l00284"></a>00284     ExceptionData& data () <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> <a class="code" href="a00299.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>; }
+<a name="l00285"></a>00285 
+<a name="l00286"></a>00286     <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="a00299.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>; }
+<a name="l00287"></a>00287 
+<a name="l00288"></a><a class="code" href="a00299.html#bc5f5c4739b17ac5211ac58226c2f5a5">00288</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00299.html#bc5f5c4739b17ac5211ac58226c2f5a5">name</a> () const throw() { <span class="keywordflow">return</span> my_exception_name; }
+<a name="l00289"></a>00289 
+<a name="l00290"></a><a class="code" href="a00299.html#b33a89bccf0c63106f1270c7bfaaf54f">00290</a>     <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="a00299.html#b33a89bccf0c63106f1270c7bfaaf54f">what</a> () const throw() { <span class="keywordflow">return</span> <span class="stringliteral">"tbb::movable_exception"</span>; }
+<a name="l00291"></a>00291 
+<a name="l00292"></a>00292     <span class="comment">/*override*/</span>
+<a name="l00293"></a><a class="code" href="a00299.html#1aea0ad179d6f0481fe7f3495f66adf9">00293</a>     <a class="code" href="a00299.html">movable_exception</a>* <a class="code" href="a00299.html#1aea0ad179d6f0481fe7f3495f66adf9">move</a> () throw() {
+<a name="l00294"></a>00294         <span class="keywordtype">void</span>* e = internal::allocate_via_handler_v3(<span class="keyword">sizeof</span>(<a class="code" href="a00299.html">movable_exception</a>));
+<a name="l00295"></a>00295         <span class="keywordflow">if</span> ( e ) {
+<a name="l00296"></a>00296             ::new (e) movable_exception(*<span class="keyword">this</span>);
+<a name="l00297"></a>00297             ((movable_exception*)e)->my_dynamic = <span class="keyword">true</span>;
+<a name="l00298"></a>00298         }
+<a name="l00299"></a>00299         <span class="keywordflow">return</span> (movable_exception*)e;
+<a name="l00300"></a>00300     }
+<a name="l00301"></a>00301     <span class="comment">/*override*/</span>
+<a name="l00302"></a><a class="code" href="a00299.html#7a46873119d9f85a7b0009c13e41a258">00302</a>     <span class="keywordtype">void</span> <a class="code" href="a00299.html#7a46873119d9f85a7b0009c13e41a258">destroy</a> () throw() {
+<a name="l00303"></a>00303         __TBB_ASSERT ( my_dynamic, <span class="stringliteral">"Method destroy can be called only on dynamically allocated movable_exceptions"</span> );
+<a name="l00304"></a>00304         <span class="keywordflow">if</span> ( my_dynamic ) {
+<a name="l00305"></a>00305             this->~<a class="code" href="a00299.html">movable_exception</a>();
+<a name="l00306"></a>00306             internal::deallocate_via_handler_v3(<span class="keyword">this</span>);
+<a name="l00307"></a>00307         }
+<a name="l00308"></a>00308     }
+<a name="l00309"></a>00309     <span class="comment">/*override*/</span>
+<a name="l00310"></a><a class="code" href="a00299.html#17cffba35811c92b7e65d63506b69602">00310</a>     <span class="keywordtype">void</span> <a class="code" href="a00299.html#17cffba35811c92b7e65d63506b69602">throw_self</a> () { __TBB_THROW( *<span class="keyword">this</span> ); }
+<a name="l00311"></a>00311 
+<a name="l00312"></a>00312 <span class="keyword">protected</span>:
+<a name="l00314"></a><a class="code" href="a00299.html#a8c0ae2089ae784b28907cf748b89416">00314</a>     ExceptionData  <a class="code" href="a00299.html#a8c0ae2089ae784b28907cf748b89416">my_exception_data</a>;
+<a name="l00315"></a>00315 
+<a name="l00316"></a>00316 <span class="keyword">private</span>:
+<a name="l00318"></a>00318     <span class="keywordtype">bool</span> my_dynamic;
+<a name="l00319"></a>00319 
+<a name="l00321"></a>00321 
+<a name="l00322"></a>00322     <span class="keyword">const</span> <span class="keywordtype">char</span>* my_exception_name;
+<a name="l00323"></a>00323 };
+<a name="l00324"></a>00324 
+<a name="l00325"></a>00325 <span class="preprocessor">#if !TBB_USE_CAPTURED_EXCEPTION</span>
+<a name="l00326"></a>00326 <span class="preprocessor"></span><span class="keyword">namespace </span>internal {
+<a name="l00327"></a>00327 
+<a name="l00329"></a>00329 
+<a name="l00331"></a><a class="code" href="a00346.html">00331</a> <span class="keyword">class </span><a class="code" href="a00346.html">tbb_exception_ptr</a> {
+<a name="l00332"></a>00332     std::exception_ptr  my_ptr;
+<a name="l00333"></a>00333 
+<a name="l00334"></a>00334 <span class="keyword">public</span>:
+<a name="l00335"></a>00335     <span class="keyword">static</span> <a class="code" href="a00346.html">tbb_exception_ptr</a>* allocate ();
+<a name="l00336"></a>00336     <span class="keyword">static</span> <a class="code" href="a00346.html">tbb_exception_ptr</a>* allocate ( <span class="keyword">const</span> <a class="code" href="a00345.html">tbb_exception</a>& tag );
+<a name="l00338"></a>00338     <span class="keyword">static</span> <a class="code" href="a00346.html">tbb_exception_ptr</a>* allocate ( <a class="code" href="a00266.html">captured_exception</a>& src );
+<a name="l00339"></a>00339 
+<a name="l00341"></a>00341 
+<a name="l00342"></a>00342     <span class="keywordtype">void</span> <a class="code" href="a00346.html#921875bbacd2c8a5f324c7da7a415262">destroy</a> () <span class="keywordflow">throw</span>();
+<a name="l00343"></a>00343 
+<a name="l00345"></a><a class="code" href="a00346.html#292832fd5c523e3d8081a22247840a1d">00345</a>     <span class="keywordtype">void</span> <a class="code" href="a00346.html#292832fd5c523e3d8081a22247840a1d">throw_self</a> () { std::rethrow_exception(my_ptr); }
+<a name="l00346"></a>00346 
+<a name="l00347"></a>00347 <span class="keyword">private</span>:
+<a name="l00348"></a>00348     <a class="code" href="a00346.html">tbb_exception_ptr</a> ( <span class="keyword">const</span> std::exception_ptr& src ) : my_ptr(src) {}
+<a name="l00349"></a>00349     tbb_exception_ptr ( <span class="keyword">const</span> <a class="code" href="a00266.html">captured_exception</a>& src ) : my_ptr(std::copy_exception(src)) {}
+<a name="l00350"></a>00350 }; <span class="comment">// class tbb::internal::tbb_exception_ptr</span>
+<a name="l00351"></a>00351 
+<a name="l00352"></a>00352 } <span class="comment">// namespace internal</span>
+<a name="l00353"></a>00353 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_CAPTURED_EXCEPTION */</span>
+<a name="l00354"></a>00354 
+<a name="l00355"></a>00355 } <span class="comment">// namespace tbb</span>
+<a name="l00356"></a>00356 
+<a name="l00357"></a>00357 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_TASK_GROUP_CONTEXT */</span>
+<a name="l00358"></a>00358 
+<a name="l00359"></a>00359 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_exception_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00640.html b/doc/html/a00640.html
new file mode 100644
index 0000000..618adc7
--- /dev/null
+++ b/doc/html/a00640.html
@@ -0,0 +1,782 @@
+<!DOCTYPE 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_machine.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_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-2012 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_machine_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00116"></a>00116 <span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00117"></a>00117 
+<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="l00122"></a>00122 <span class="comment">// Overridable helpers declarations</span>
+<a name="l00123"></a>00123 <span class="comment">//</span>
+<a name="l00124"></a>00124 <span class="comment">// A machine/*.h file may choose to define these templates, otherwise it must</span>
+<a name="l00125"></a>00125 <span class="comment">// request default implementation by setting appropriate __TBB_USE_GENERIC_XXX macro(s).</span>
+<a name="l00126"></a>00126 <span class="comment">//</span>
+<a name="l00127"></a>00127 <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::size_t S>
+<a name="l00128"></a>00128 <span class="keyword">struct </span>machine_load_store;
+<a name="l00129"></a>00129 
+<a name="l00130"></a>00130 <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::size_t S>
+<a name="l00131"></a>00131 <span class="keyword">struct </span>machine_load_store_relaxed;
+<a name="l00132"></a>00132 
+<a name="l00133"></a>00133 <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::size_t S>
+<a name="l00134"></a>00134 <span class="keyword">struct </span>machine_load_store_seq_cst;
+<a name="l00135"></a>00135 <span class="comment">//</span>
+<a name="l00136"></a>00136 <span class="comment">// End of overridable helpers declarations</span>
+<a name="l00138"></a>00138 <span class="comment"></span>
+<a name="l00139"></a>00139 <span class="keyword">template</span><size_t S> <span class="keyword">struct </span>atomic_selector;
+<a name="l00140"></a>00140 
+<a name="l00141"></a>00141 <span class="keyword">template</span><> <span class="keyword">struct </span>atomic_selector<1> {
+<a name="l00142"></a>00142     <span class="keyword">typedef</span> int8_t word;
+<a name="l00143"></a>00143     <span class="keyword">inline</span> <span class="keyword">static</span> word fetch_store ( <span class="keyword">volatile</span> <span class="keywordtype">void</span>* location, word value );
+<a name="l00144"></a>00144 };
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146 <span class="keyword">template</span><> <span class="keyword">struct </span>atomic_selector<2> {
+<a name="l00147"></a>00147     <span class="keyword">typedef</span> int16_t word;
+<a name="l00148"></a>00148     <span class="keyword">inline</span> <span class="keyword">static</span> word fetch_store ( <span class="keyword">volatile</span> <span class="keywordtype">void</span>* location, word value );
+<a name="l00149"></a>00149 };
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151 <span class="keyword">template</span><> <span class="keyword">struct </span>atomic_selector<4> {
+<a name="l00152"></a>00152 <span class="preprocessor">#if _MSC_VER && !_WIN64</span>
+<a name="l00153"></a>00153 <span class="preprocessor"></span>    <span class="comment">// Work-around that avoids spurious /Wp64 warnings</span>
+<a name="l00154"></a>00154     <span class="keyword">typedef</span> intptr_t word;
+<a name="l00155"></a>00155 <span class="preprocessor">#else</span>
+<a name="l00156"></a>00156 <span class="preprocessor"></span>    <span class="keyword">typedef</span> int32_t word;
+<a name="l00157"></a>00157 <span class="preprocessor">#endif</span>
+<a name="l00158"></a>00158 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keyword">static</span> word fetch_store ( <span class="keyword">volatile</span> <span class="keywordtype">void</span>* location, word value );
+<a name="l00159"></a>00159 };
+<a name="l00160"></a>00160 
+<a name="l00161"></a>00161 <span class="keyword">template</span><> <span class="keyword">struct </span>atomic_selector<8> {
+<a name="l00162"></a>00162     <span class="keyword">typedef</span> int64_t word;
+<a name="l00163"></a>00163     <span class="keyword">inline</span> <span class="keyword">static</span> word fetch_store ( <span class="keyword">volatile</span> <span class="keywordtype">void</span>* location, word value );
+<a name="l00164"></a>00164 };
+<a name="l00165"></a>00165 
+<a name="l00166"></a>00166 }} <span class="comment">// namespaces internal, tbb</span>
+<a name="l00167"></a>00167 
+<a name="l00168"></a>00168 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00169"></a>00169 <span class="preprocessor"></span>
+<a name="l00170"></a>00170 <span class="preprocessor">#ifdef _MANAGED</span>
+<a name="l00171"></a>00171 <span class="preprocessor"></span><span class="preprocessor">#pragma managed(push, off)</span>
+<a name="l00172"></a>00172 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00173"></a>00173 <span class="preprocessor"></span>
+<a name="l00174"></a>00174 <span class="preprocessor">    #if __MINGW64__ || __MINGW32__</span>
+<a name="l00175"></a>00175 <span class="preprocessor"></span>        <span class="keyword">extern</span> <span class="stringliteral">"C"</span> __declspec(dllimport) int __stdcall SwitchToThread( <span class="keywordtype">void</span> );
+<a name="l00176"></a>00176         <span class="preprocessor">#define __TBB_Yield()  SwitchToThread()</span>
+<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">        #if (TBB_USE_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT)</span>
+<a name="l00178"></a>00178 <span class="preprocessor"></span><span class="preprocessor">            #include "machine/gcc_generic.h"</span>
+<a name="l00179"></a>00179 <span class="preprocessor">        #elif __MINGW64__</span>
+<a name="l00180"></a>00180 <span class="preprocessor"></span><span class="preprocessor">            #include "machine/linux_intel64.h"</span>
+<a name="l00181"></a>00181 <span class="preprocessor">        #elif __MINGW32__</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span><span class="preprocessor">            #include "machine/linux_ia32.h"</span>
+<a name="l00183"></a>00183 <span class="preprocessor">        #endif</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span><span class="preprocessor">    #elif defined(_M_IX86)</span>
+<a name="l00185"></a>00185 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/windows_ia32.h"</span>
+<a name="l00186"></a>00186 <span class="preprocessor">    #elif defined(_M_X64) </span>
+<a name="l00187"></a>00187 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/windows_intel64.h"</span>
+<a name="l00188"></a>00188 <span class="preprocessor">    #elif _XBOX</span>
+<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/xbox360_ppc.h"</span>
+<a name="l00190"></a>00190 <span class="preprocessor">    #endif</span>
+<a name="l00191"></a>00191 <span class="preprocessor"></span>
+<a name="l00192"></a>00192 <span class="preprocessor">#ifdef _MANAGED</span>
+<a name="l00193"></a>00193 <span class="preprocessor"></span><span class="preprocessor">#pragma managed(pop)</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00195"></a>00195 <span class="preprocessor"></span>
+<a name="l00196"></a>00196 <span class="preprocessor">#elif __TBB_DEFINE_MIC</span>
+<a name="l00197"></a>00197 <span class="preprocessor"></span>
+<a name="l00198"></a>00198 <span class="preprocessor">    #include "machine/mic_common.h"</span>
+<a name="l00199"></a>00199 <span class="preprocessor">    #include "machine/linux_intel64.h"</span>
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201 <span class="preprocessor">#elif __linux__ || __FreeBSD__ || __NetBSD__</span>
+<a name="l00202"></a>00202 <span class="preprocessor"></span>
+<a name="l00203"></a>00203 <span class="preprocessor">    #if (TBB_USE_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT)</span>
+<a name="l00204"></a>00204 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/gcc_generic.h"</span>
+<a name="l00205"></a>00205 <span class="preprocessor">    #elif __i386__</span>
+<a name="l00206"></a>00206 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_ia32.h"</span>
+<a name="l00207"></a>00207 <span class="preprocessor">    #elif __x86_64__</span>
+<a name="l00208"></a>00208 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_intel64.h"</span>
+<a name="l00209"></a>00209 <span class="preprocessor">    #elif __ia64__</span>
+<a name="l00210"></a>00210 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_ia64.h"</span>
+<a name="l00211"></a>00211 <span class="preprocessor">    #elif __powerpc__</span>
+<a name="l00212"></a>00212 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/mac_ppc.h"</span>
+<a name="l00213"></a>00213 <span class="preprocessor">    #elif __TBB_GCC_BUILTIN_ATOMICS_PRESENT</span>
+<a name="l00214"></a>00214 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/gcc_generic.h"</span>
+<a name="l00215"></a>00215 <span class="preprocessor">    #endif</span>
+<a name="l00216"></a>00216 <span class="preprocessor"></span><span class="preprocessor">    #include "machine/linux_common.h"</span>
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218 <span class="preprocessor">#elif __APPLE__</span>
+<a name="l00219"></a>00219 <span class="preprocessor"></span>
+<a name="l00220"></a>00220 <span class="preprocessor">    #if __i386__</span>
+<a name="l00221"></a>00221 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_ia32.h"</span>
+<a name="l00222"></a>00222 <span class="preprocessor">    #elif __x86_64__</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_intel64.h"</span>
+<a name="l00224"></a>00224 <span class="preprocessor">    #elif __POWERPC__</span>
+<a name="l00225"></a>00225 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/mac_ppc.h"</span>
+<a name="l00226"></a>00226 <span class="preprocessor">    #endif</span>
+<a name="l00227"></a>00227 <span class="preprocessor"></span><span class="preprocessor">    #include "machine/macos_common.h"</span>
+<a name="l00228"></a>00228 
+<a name="l00229"></a>00229 <span class="preprocessor">#elif _AIX</span>
+<a name="l00230"></a>00230 <span class="preprocessor"></span>
+<a name="l00231"></a>00231 <span class="preprocessor">    #include "machine/ibm_aix51.h"</span>
+<a name="l00232"></a>00232 
+<a name="l00233"></a>00233 <span class="preprocessor">#elif __sun || __SUNPRO_CC</span>
+<a name="l00234"></a>00234 <span class="preprocessor"></span>
+<a name="l00235"></a>00235 <span class="preprocessor">    #define __asm__ asm</span>
+<a name="l00236"></a>00236 <span class="preprocessor"></span><span class="preprocessor">    #define __volatile__ volatile</span>
+<a name="l00237"></a>00237 <span class="preprocessor"></span>
+<a name="l00238"></a>00238 <span class="preprocessor">    #if __i386  || __i386__</span>
+<a name="l00239"></a>00239 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_ia32.h"</span>
+<a name="l00240"></a>00240 <span class="preprocessor">    #elif __x86_64__</span>
+<a name="l00241"></a>00241 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/linux_intel64.h"</span>
+<a name="l00242"></a>00242 <span class="preprocessor">    #elif __sparc</span>
+<a name="l00243"></a>00243 <span class="preprocessor"></span><span class="preprocessor">        #include "machine/sunos_sparc.h"</span>
+<a name="l00244"></a>00244 <span class="preprocessor">    #endif</span>
+<a name="l00245"></a>00245 <span class="preprocessor"></span><span class="preprocessor">    #include <sched.h></span>
+<a name="l00246"></a>00246 
+<a name="l00247"></a>00247 <span class="preprocessor">    #define __TBB_Yield() sched_yield()</span>
+<a name="l00248"></a>00248 <span class="preprocessor"></span>
+<a name="l00249"></a>00249 <span class="preprocessor">#endif </span><span class="comment">/* OS selection */</span>
+<a name="l00250"></a>00250 
+<a name="l00251"></a>00251 <span class="preprocessor">#ifndef __TBB_64BIT_ATOMICS</span>
+<a name="l00252"></a>00252 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_64BIT_ATOMICS 1</span>
+<a name="l00253"></a>00253 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00254"></a>00254 <span class="preprocessor"></span>
+<a name="l00255"></a>00255 <span class="comment">// Special atomic functions</span>
+<a name="l00256"></a>00256 <span class="preprocessor">#if __TBB_USE_FENCED_ATOMICS</span>
+<a name="l00257"></a>00257 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_machine_cmpswp1   __TBB_machine_cmpswp1full_fence</span>
+<a name="l00258"></a>00258 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_machine_cmpswp2   __TBB_machine_cmpswp2full_fence</span>
+<a name="l00259"></a>00259 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_machine_cmpswp4   __TBB_machine_cmpswp4full_fence</span>
+<a name="l00260"></a>00260 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_machine_cmpswp8   __TBB_machine_cmpswp8full_fence</span>
+<a name="l00261"></a>00261 <span class="preprocessor"></span>
+<a name="l00262"></a>00262 <span class="preprocessor">    #if __TBB_WORDSIZE==8</span>
+<a name="l00263"></a>00263 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_machine_fetchadd8             __TBB_machine_fetchadd8full_fence</span>
+<a name="l00264"></a>00264 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_machine_fetchstore8           __TBB_machine_fetchstore8full_fence</span>
+<a name="l00265"></a>00265 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_FetchAndAddWrelease(P,V)      __TBB_machine_fetchadd8release(P,V)</span>
+<a name="l00266"></a>00266 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_FetchAndIncrementWacquire(P)  __TBB_machine_fetchadd8acquire(P,1)</span>
+<a name="l00267"></a>00267 <span class="preprocessor"></span><span class="preprocessor">        #define __TBB_FetchAndDecrementWrelease(P)  __TBB_machine_fetchadd8release(P,(-1))</span>
+<a name="l00268"></a>00268 <span class="preprocessor"></span><span class="preprocessor">    #else</span>
+<a name="l00269"></a>00269 <span class="preprocessor"></span><span class="preprocessor">        #error Define macros for 4-byte word, similarly to the above __TBB_WORDSIZE==8 branch.</span>
+<a name="l00270"></a>00270 <span class="preprocessor"></span><span class="preprocessor">    #endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
+<a name="l00271"></a>00271 <span class="preprocessor">#else </span><span class="comment">/* !__TBB_USE_FENCED_ATOMICS */</span>
+<a name="l00272"></a>00272 <span class="preprocessor">    #define __TBB_FetchAndAddWrelease(P,V)      __TBB_FetchAndAddW(P,V)</span>
+<a name="l00273"></a>00273 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndIncrementWacquire(P)  __TBB_FetchAndAddW(P,1)</span>
+<a name="l00274"></a>00274 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndDecrementWrelease(P)  __TBB_FetchAndAddW(P,(-1))</span>
+<a name="l00275"></a>00275 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !__TBB_USE_FENCED_ATOMICS */</span>
+<a name="l00276"></a>00276 
+<a name="l00277"></a>00277 <span class="preprocessor">#if __TBB_WORDSIZE==4</span>
+<a name="l00278"></a>00278 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CompareAndSwapW(P,V,C)    __TBB_machine_cmpswp4(P,V,C)</span>
+<a name="l00279"></a>00279 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndAddW(P,V)         __TBB_machine_fetchadd4(P,V)</span>
+<a name="l00280"></a>00280 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndStoreW(P,V)       __TBB_machine_fetchstore4(P,V)</span>
+<a name="l00281"></a>00281 <span class="preprocessor"></span><span class="preprocessor">#elif  __TBB_WORDSIZE==8</span>
+<a name="l00282"></a>00282 <span class="preprocessor"></span><span class="preprocessor">    #if __TBB_USE_GENERIC_DWORD_LOAD_STORE || __TBB_USE_GENERIC_DWORD_FETCH_ADD || __TBB_USE_GENERIC_DWORD_FETCH_STORE</span>
+<a name="l00283"></a>00283 <span class="preprocessor"></span><span class="preprocessor">        #error These macros should only be used on 32-bit platforms.</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="preprocessor">    #define __TBB_CompareAndSwapW(P,V,C)    __TBB_machine_cmpswp8(P,V,C)</span>
+<a name="l00287"></a>00287 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndAddW(P,V)         __TBB_machine_fetchadd8(P,V)</span>
+<a name="l00288"></a>00288 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_FetchAndStoreW(P,V)       __TBB_machine_fetchstore8(P,V)</span>
+<a name="l00289"></a>00289 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* __TBB_WORDSIZE != 8 */</span>
+<a name="l00290"></a>00290 <span class="preprocessor">    #error Unsupported machine word size.</span>
+<a name="l00291"></a>00291 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE */</span>
+<a name="l00292"></a>00292 
+<a name="l00293"></a>00293 <span class="preprocessor">#ifndef __TBB_Pause</span>
+<a name="l00294"></a>00294 <span class="preprocessor"></span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Pause(int32_t) {
+<a name="l00295"></a>00295         __TBB_Yield();
+<a name="l00296"></a>00296     }
+<a name="l00297"></a>00297 <span class="preprocessor">#endif</span>
+<a name="l00298"></a>00298 <span class="preprocessor"></span>
+<a name="l00299"></a>00299 <span class="keyword">namespace </span>tbb {
+<a name="l00300"></a>00300 
+<a name="l00302"></a><a class="code" href="a00414.html#250275615f10d5b5de6ad466ae2f54de">00302</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00414.html#250275615f10d5b5de6ad466ae2f54de">atomic_fence</a> () { __TBB_full_memory_fence(); }
+<a name="l00303"></a>00303 
+<a name="l00304"></a>00304 <span class="keyword">namespace </span>internal {
+<a name="l00305"></a>00305 
+<a name="l00307"></a>00307 
+<a name="l00308"></a><a class="code" href="a00256.html">00308</a> <span class="keyword">class </span><a class="code" href="a00256.html">atomic_backoff</a> : no_copy {
+<a name="l00310"></a>00310 
+<a name="l00312"></a>00312     <span class="keyword">static</span> <span class="keyword">const</span> int32_t LOOPS_BEFORE_YIELD = 16;
+<a name="l00313"></a>00313     int32_t count;
+<a name="l00314"></a>00314 <span class="keyword">public</span>:
+<a name="l00315"></a>00315     <a class="code" href="a00256.html">atomic_backoff</a>() : count(1) {}
+<a name="l00316"></a>00316 
+<a name="l00318"></a><a class="code" href="a00256.html#a174ea93e3bd3d5cce82389c2f28d037">00318</a>     <span class="keywordtype">void</span> <a class="code" href="a00256.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>() {
+<a name="l00319"></a>00319         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
+<a name="l00320"></a>00320             __TBB_Pause(count);
+<a name="l00321"></a>00321             <span class="comment">// Pause twice as long the next time.</span>
+<a name="l00322"></a>00322             count*=2;
+<a name="l00323"></a>00323         } <span class="keywordflow">else</span> {
+<a name="l00324"></a>00324             <span class="comment">// Pause is so long that we might as well yield CPU to scheduler.</span>
+<a name="l00325"></a>00325             __TBB_Yield();
+<a name="l00326"></a>00326         }
+<a name="l00327"></a>00327     }
+<a name="l00328"></a>00328 
+<a name="l00329"></a>00329     <span class="comment">// pause for a few times and then return false immediately.</span>
+<a name="l00330"></a>00330     <span class="keywordtype">bool</span> bounded_pause() {
+<a name="l00331"></a>00331         <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
+<a name="l00332"></a>00332             __TBB_Pause(count);
+<a name="l00333"></a>00333             <span class="comment">// Pause twice as long the next time.</span>
+<a name="l00334"></a>00334             count*=2;
+<a name="l00335"></a>00335             <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00336"></a>00336         } <span class="keywordflow">else</span> {
+<a name="l00337"></a>00337             <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00338"></a>00338         }
+<a name="l00339"></a>00339     }
+<a name="l00340"></a>00340 
+<a name="l00341"></a>00341     <span class="keywordtype">void</span> reset() {
+<a name="l00342"></a>00342         count = 1;
+<a name="l00343"></a>00343     }
+<a name="l00344"></a>00344 };
+<a name="l00345"></a>00345 
+<a name="l00347"></a>00347 
+<a name="l00348"></a>00348 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00349"></a>00349 <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="l00350"></a>00350     atomic_backoff backoff;
+<a name="l00351"></a>00351     <span class="keywordflow">while</span>( location==value ) backoff.pause();
+<a name="l00352"></a>00352 }
+<a name="l00353"></a>00353 
+<a name="l00355"></a>00355 
+<a name="l00356"></a>00356 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00357"></a>00357 <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="l00358"></a>00358     atomic_backoff backoff;
+<a name="l00359"></a>00359     <span class="keywordflow">while</span>( location!=value ) backoff.pause();
+<a name="l00360"></a>00360 }
+<a name="l00361"></a>00361 
+<a name="l00362"></a>00362 <span class="comment">//TODO: add static_assert for the requirements stated below</span>
+<a name="l00363"></a>00363 <span class="comment">//TODO: check if it works with signed types</span>
+<a name="l00364"></a>00364 
+<a name="l00365"></a>00365 <span class="comment">// there are following restrictions/limitations for this operation:</span>
+<a name="l00366"></a>00366 <span class="comment">//  - T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.</span>
+<a name="l00367"></a>00367 <span class="comment">//  - T should be integer type of at most 4 bytes, for the casts and calculations to work.</span>
+<a name="l00368"></a>00368 <span class="comment">//      (Together, these rules limit applicability of Masked CAS to uint8_t and uint16_t only,</span>
+<a name="l00369"></a>00369 <span class="comment">//      as it does nothing useful for 4 bytes).</span>
+<a name="l00370"></a>00370 <span class="comment">//  - The operation assumes that the architecture consistently uses either little-endian or big-endian:</span>
+<a name="l00371"></a>00371 <span class="comment">//      it does not support mixed-endian or page-specific bi-endian architectures.</span>
+<a name="l00372"></a>00372 <span class="comment">// This function is the only use of __TBB_BIG_ENDIAN.</span>
+<a name="l00373"></a>00373 <span class="preprocessor">#if (__TBB_BIG_ENDIAN!=-1)</span>
+<a name="l00374"></a>00374 <span class="preprocessor"></span><span class="preprocessor">    #if ( __TBB_USE_GENERIC_PART_WORD_CAS)</span>
+<a name="l00375"></a>00375 <span class="preprocessor"></span><span class="preprocessor">        #error generic implementation of part-word CAS was explicitly disabled for this configuration</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="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00378"></a>00378 <span class="keyword">inline</span> T __TBB_MaskedCompareAndSwap (<span class="keyword">volatile</span> T * <span class="keyword">const</span> ptr, <span class="keyword">const</span> T value, <span class="keyword">const</span> T comparand ) {
+<a name="l00379"></a>00379     <span class="keyword">struct </span>endianness{ <span class="keyword">static</span> <span class="keywordtype">bool</span> is_big_endian(){
+<a name="l00380"></a>00380 <span class="preprocessor">        #ifndef __TBB_BIG_ENDIAN</span>
+<a name="l00381"></a>00381 <span class="preprocessor"></span>            <span class="keyword">const</span> uint32_t probe = 0x03020100;
+<a name="l00382"></a>00382             <span class="keywordflow">return</span> (((<span class="keyword">const</span> <span class="keywordtype">char</span>*)(&probe))[0]==0x03);
+<a name="l00383"></a>00383 <span class="preprocessor">        #elif (__TBB_BIG_ENDIAN==0) || (__TBB_BIG_ENDIAN==1)</span>
+<a name="l00384"></a>00384 <span class="preprocessor"></span>            <span class="keywordflow">return</span> __TBB_BIG_ENDIAN;
+<a name="l00385"></a>00385 <span class="preprocessor">        #else</span>
+<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">            #error unexpected value of __TBB_BIG_ENDIAN</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 
+<a name="l00390"></a>00390     <span class="keyword">const</span> uint32_t byte_offset            = (uint32_t) ((uintptr_t)ptr & 0x3);
+<a name="l00391"></a>00391     <span class="keyword">volatile</span> uint32_t * <span class="keyword">const</span> aligned_ptr = (uint32_t*)((uintptr_t)ptr - byte_offset );
+<a name="l00392"></a>00392 
+<a name="l00393"></a>00393     <span class="comment">// location of T within uint32_t for a C++ shift operation</span>
+<a name="l00394"></a>00394     <span class="keyword">const</span> uint32_t bits_to_shift     = 8*(endianness::is_big_endian() ? (4 - <span class="keyword">sizeof</span>(T) - (byte_offset)) : byte_offset);
+<a name="l00395"></a>00395     <span class="keyword">const</span> uint32_t mask              = (((uint32_t)1<<(<span class="keyword">sizeof</span>(T)*8)) - 1 )<<bits_to_shift;
+<a name="l00396"></a>00396     <span class="keyword">const</span> uint32_t shifted_comparand = ((uint32_t)comparand << bits_to_shift)&mask;
+<a name="l00397"></a>00397     <span class="keyword">const</span> uint32_t shifted_value     = ((uint32_t)value     << bits_to_shift)&mask;
+<a name="l00398"></a>00398 
+<a name="l00399"></a>00399     <span class="keywordflow">for</span>(atomic_backoff b;;b.pause()) {
+<a name="l00400"></a>00400         <span class="keyword">const</span> uint32_t surroundings  = *aligned_ptr & ~mask ; <span class="comment">// reload the aligned_ptr value which might change during the pause</span>
+<a name="l00401"></a>00401         <span class="keyword">const</span> uint32_t big_comparand = surroundings | shifted_comparand ;
+<a name="l00402"></a>00402         <span class="keyword">const</span> uint32_t big_value     = surroundings | shifted_value     ;
+<a name="l00403"></a>00403         <span class="comment">// __TBB_machine_cmpswp4 presumed to have full fence.</span>
+<a name="l00404"></a>00404         <span class="comment">// Cast shuts up /Wp64 warning</span>
+<a name="l00405"></a>00405         <span class="keyword">const</span> uint32_t big_result = (uint32_t)__TBB_machine_cmpswp4( aligned_ptr, big_value, big_comparand );
+<a name="l00406"></a>00406         <span class="keywordflow">if</span>( big_result == big_comparand                    <span class="comment">// CAS succeeded</span>
+<a name="l00407"></a>00407           || ((big_result ^ big_comparand) & mask) != 0)   <span class="comment">// CAS failed and the bits of interest have changed</span>
+<a name="l00408"></a>00408         {
+<a name="l00409"></a>00409             <span class="keywordflow">return</span> T((big_result & mask) >> bits_to_shift);
+<a name="l00410"></a>00410         }
+<a name="l00411"></a>00411         <span class="keywordflow">else</span> <span class="keywordflow">continue</span>;                                     <span class="comment">// CAS failed but the bits of interest left unchanged</span>
+<a name="l00412"></a>00412     }
+<a name="l00413"></a>00413 }
+<a name="l00414"></a>00414 <span class="preprocessor">#endif</span>
+<a name="l00415"></a>00415 <span class="preprocessor"></span><span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+<a name="l00416"></a>00416 <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="l00417"></a>00417 
+<a name="l00418"></a>00418 <span class="keyword">template</span><>
+<a name="l00419"></a>00419 <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="l00420"></a>00420 #<span class="keywordflow">if</span> __TBB_USE_GENERIC_PART_WORD_CAS
+<a name="l00421"></a>00421     <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<uint8_t>((<span class="keyword">volatile</span> uint8_t *)ptr,value,comparand);
+<a name="l00422"></a>00422 <span class="preprocessor">#else</span>
+<a name="l00423"></a>00423 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_machine_cmpswp1(ptr,value,comparand);
+<a name="l00424"></a>00424 <span class="preprocessor">#endif</span>
+<a name="l00425"></a>00425 <span class="preprocessor"></span>}
+<a name="l00426"></a>00426 
+<a name="l00427"></a>00427 <span class="keyword">template</span><>
+<a name="l00428"></a>00428 <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="l00429"></a>00429 #<span class="keywordflow">if</span> __TBB_USE_GENERIC_PART_WORD_CAS
+<a name="l00430"></a>00430     <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<uint16_t>((<span class="keyword">volatile</span> uint16_t *)ptr,value,comparand);
+<a name="l00431"></a>00431 <span class="preprocessor">#else</span>
+<a name="l00432"></a>00432 <span class="preprocessor"></span>    <span class="keywordflow">return</span> __TBB_machine_cmpswp2(ptr,value,comparand);
+<a name="l00433"></a>00433 <span class="preprocessor">#endif</span>
+<a name="l00434"></a>00434 <span class="preprocessor"></span>}
+<a name="l00435"></a>00435 
+<a name="l00436"></a>00436 <span class="keyword">template</span><>
+<a name="l00437"></a>00437 <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="l00438"></a>00438     <span class="comment">// Cast shuts up /Wp64 warning</span>
+<a name="l00439"></a>00439     <span class="keywordflow">return</span> (uint32_t)__TBB_machine_cmpswp4(ptr,value,comparand);
+<a name="l00440"></a>00440 }
+<a name="l00441"></a>00441 
+<a name="l00442"></a>00442 <span class="preprocessor">#if __TBB_64BIT_ATOMICS</span>
+<a name="l00443"></a>00443 <span class="preprocessor"></span><span class="keyword">template</span><>
+<a name="l00444"></a>00444 <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="l00445"></a>00445     <span class="keywordflow">return</span> __TBB_machine_cmpswp8(ptr,value,comparand);
+<a name="l00446"></a>00446 }
+<a name="l00447"></a>00447 <span class="preprocessor">#endif</span>
+<a name="l00448"></a>00448 <span class="preprocessor"></span>
+<a name="l00449"></a>00449 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+<a name="l00450"></a>00450 <span class="keyword">inline</span> T __TBB_FetchAndAddGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T addend) {
+<a name="l00451"></a>00451     atomic_backoff b;
+<a name="l00452"></a>00452     T result;
+<a name="l00453"></a>00453     <span class="keywordflow">for</span>(;;) {
+<a name="l00454"></a>00454         result = *reinterpret_cast<volatile T *>(ptr);
+<a name="l00455"></a>00455         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence.</span>
+<a name="l00456"></a>00456         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result )
+<a name="l00457"></a>00457             <span class="keywordflow">break</span>;
+<a name="l00458"></a>00458         b.pause();
+<a name="l00459"></a>00459     }
+<a name="l00460"></a>00460     <span class="keywordflow">return</span> result;
+<a name="l00461"></a>00461 }
+<a name="l00462"></a>00462 
+<a name="l00463"></a>00463 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+<a name="l00464"></a>00464 <span class="keyword">inline</span> T __TBB_FetchAndStoreGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value) {
+<a name="l00465"></a>00465     atomic_backoff b;
+<a name="l00466"></a>00466     T result;
+<a name="l00467"></a>00467     <span class="keywordflow">for</span>(;;) {
+<a name="l00468"></a>00468         result = *reinterpret_cast<volatile T *>(ptr);
+<a name="l00469"></a>00469         <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence.</span>
+<a name="l00470"></a>00470         <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result )
+<a name="l00471"></a>00471             <span class="keywordflow">break</span>;
+<a name="l00472"></a>00472         b.pause();
+<a name="l00473"></a>00473     }
+<a name="l00474"></a>00474     <span class="keywordflow">return</span> result;
+<a name="l00475"></a>00475 }
+<a name="l00476"></a>00476 
+<a name="l00477"></a>00477 <span class="preprocessor">#if __TBB_USE_GENERIC_PART_WORD_CAS</span>
+<a name="l00478"></a>00478 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_cmpswp1 tbb::internal::__TBB_CompareAndSwapGeneric<1,uint8_t></span>
+<a name="l00479"></a>00479 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_cmpswp2 tbb::internal::__TBB_CompareAndSwapGeneric<2,uint16_t></span>
+<a name="l00480"></a>00480 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00481"></a>00481 <span class="preprocessor"></span>
+<a name="l00482"></a>00482 <span class="preprocessor">#if __TBB_USE_GENERIC_FETCH_ADD || __TBB_USE_GENERIC_PART_WORD_FETCH_ADD</span>
+<a name="l00483"></a>00483 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchadd1 tbb::internal::__TBB_FetchAndAddGeneric<1,uint8_t></span>
+<a name="l00484"></a>00484 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchadd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t></span>
+<a name="l00485"></a>00485 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00486"></a>00486 <span class="preprocessor"></span>
+<a name="l00487"></a>00487 <span class="preprocessor">#if __TBB_USE_GENERIC_FETCH_ADD</span>
+<a name="l00488"></a>00488 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchadd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t></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="preprocessor">#if __TBB_USE_GENERIC_FETCH_ADD || __TBB_USE_GENERIC_DWORD_FETCH_ADD</span>
+<a name="l00492"></a>00492 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchadd8 tbb::internal::__TBB_FetchAndAddGeneric<8,uint64_t></span>
+<a name="l00493"></a>00493 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00494"></a>00494 <span class="preprocessor"></span>
+<a name="l00495"></a>00495 <span class="preprocessor">#if __TBB_USE_GENERIC_FETCH_STORE || __TBB_USE_GENERIC_PART_WORD_FETCH_STORE</span>
+<a name="l00496"></a>00496 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchstore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,uint8_t></span>
+<a name="l00497"></a>00497 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchstore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t></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">#if __TBB_USE_GENERIC_FETCH_STORE</span>
+<a name="l00501"></a>00501 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchstore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t></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_USE_GENERIC_FETCH_STORE || __TBB_USE_GENERIC_DWORD_FETCH_STORE</span>
+<a name="l00505"></a>00505 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_fetchstore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,uint64_t></span>
+<a name="l00506"></a>00506 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00507"></a>00507 <span class="preprocessor"></span>
+<a name="l00508"></a>00508 <span class="preprocessor">#if __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE</span>
+<a name="l00509"></a>00509 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(S)                                             \</span>
+<a name="l00510"></a>00510 <span class="preprocessor">    atomic_selector<S>::word atomic_selector<S>::fetch_store ( volatile void* location, word value ) {  \</span>
+<a name="l00511"></a>00511 <span class="preprocessor">        return __TBB_machine_fetchstore##S( location, value );                                          \</span>
+<a name="l00512"></a>00512 <span class="preprocessor">    }</span>
+<a name="l00513"></a>00513 <span class="preprocessor"></span>
+<a name="l00514"></a>00514 __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(1)
+<a name="l00515"></a>00515 __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(2)
+<a name="l00516"></a>00516 __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(4)
+<a name="l00517"></a>00517 __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE(8)
+<a name="l00518"></a>00518 
+<a name="l00519"></a>00519 <span class="preprocessor">#undef __TBB_MACHINE_DEFINE_ATOMIC_SELECTOR_FETCH_STORE</span>
+<a name="l00520"></a>00520 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */</span>
+<a name="l00521"></a>00521 
+<a name="l00522"></a>00522 <span class="preprocessor">#if __TBB_USE_GENERIC_DWORD_LOAD_STORE</span>
+<a name="l00523"></a>00523 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_machine_store8 (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, int64_t value) {
+<a name="l00524"></a>00524     <span class="keywordflow">for</span>(;;) {
+<a name="l00525"></a>00525         int64_t result = *(int64_t *)ptr;
+<a name="l00526"></a>00526         <span class="keywordflow">if</span>( __TBB_machine_cmpswp8(ptr,value,result)==result ) <span class="keywordflow">break</span>;
+<a name="l00527"></a>00527     }
+<a name="l00528"></a>00528 }
+<a name="l00529"></a>00529 
+<a name="l00530"></a>00530 <span class="keyword">inline</span> int64_t __TBB_machine_load8 (<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr) {
+<a name="l00531"></a>00531     <span class="comment">// Comparand and new value may be anything, they only must be equal, and</span>
+<a name="l00532"></a>00532     <span class="comment">// the value should have a low probability to be actually found in 'location'.</span>
+<a name="l00533"></a>00533     <span class="keyword">const</span> int64_t anyvalue = 2305843009213693951LL;
+<a name="l00534"></a>00534     <span class="keywordflow">return</span> __TBB_machine_cmpswp8(const_cast<volatile void *>(ptr),anyvalue,anyvalue);
+<a name="l00535"></a>00535 }
+<a name="l00536"></a>00536 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_USE_GENERIC_DWORD_LOAD_STORE */</span>
+<a name="l00537"></a>00537 
+<a name="l00538"></a>00538 <span class="preprocessor">#if __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE</span>
+<a name="l00539"></a>00539 <span class="preprocessor"></span>
+<a name="l00545"></a>00545 <span class="keyword">template</span> <<span class="keyword">typename</span> T, size_t S>
+<a name="l00546"></a>00546 <span class="keyword">struct </span>machine_load_store {
+<a name="l00547"></a>00547     <span class="keyword">static</span> T load_with_acquire ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
+<a name="l00548"></a>00548         T to_return = location;
+<a name="l00549"></a>00549         __TBB_acquire_consistency_helper();
+<a name="l00550"></a>00550         <span class="keywordflow">return</span> to_return;
+<a name="l00551"></a>00551     }
+<a name="l00552"></a>00552     <span class="keyword">static</span> <span class="keywordtype">void</span> store_with_release ( <span class="keyword">volatile</span> T &location, T value ) {
+<a name="l00553"></a>00553         __TBB_release_consistency_helper();
+<a name="l00554"></a>00554         location = value;
+<a name="l00555"></a>00555     }
+<a name="l00556"></a>00556 };
+<a name="l00557"></a>00557 
+<a name="l00558"></a>00558 <span class="comment">//in general, plain load and store of 32bit compiler is not atomic for 64bit types</span>
+<a name="l00559"></a>00559 <span class="preprocessor">#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS</span>
+<a name="l00560"></a>00560 <span class="preprocessor"></span><span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00561"></a>00561 <span class="keyword">struct </span>machine_load_store<T,8> {
+<a name="l00562"></a>00562     <span class="keyword">static</span> T load_with_acquire ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
+<a name="l00563"></a>00563         <span class="keywordflow">return</span> (T)__TBB_machine_load8( (<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location );
+<a name="l00564"></a>00564     }
+<a name="l00565"></a>00565     <span class="keyword">static</span> <span class="keywordtype">void</span> store_with_release ( <span class="keyword">volatile</span> T& location, T value ) {
+<a name="l00566"></a>00566         __TBB_machine_store8( (<span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location, (int64_t)value );
+<a name="l00567"></a>00567     }
+<a name="l00568"></a>00568 };
+<a name="l00569"></a>00569 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */</span>
+<a name="l00570"></a>00570 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE */</span>
+<a name="l00571"></a>00571 
+<a name="l00572"></a>00572 <span class="preprocessor">#if __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE</span>
+<a name="l00573"></a>00573 <span class="preprocessor"></span><span class="keyword">template</span> <<span class="keyword">typename</span> T, size_t S>
+<a name="l00574"></a>00574 <span class="keyword">struct </span>machine_load_store_seq_cst {
+<a name="l00575"></a>00575     <span class="keyword">static</span> T load ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
+<a name="l00576"></a>00576         __TBB_full_memory_fence();
+<a name="l00577"></a>00577         <span class="keywordflow">return</span> machine_load_store<T,S>::load_with_acquire( location );
+<a name="l00578"></a>00578     }
+<a name="l00579"></a>00579 <span class="preprocessor">#if __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE</span>
+<a name="l00580"></a>00580 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keywordtype">void</span> store ( <span class="keyword">volatile</span> T &location, T value ) {
+<a name="l00581"></a>00581         atomic_selector<S>::fetch_store( (<span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location, (<span class="keyword">typename</span> atomic_selector<S>::word)value );
+<a name="l00582"></a>00582     }
+<a name="l00583"></a>00583 <span class="preprocessor">#else </span><span class="comment">/* !__TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */</span>
+<a name="l00584"></a>00584     <span class="keyword">static</span> <span class="keywordtype">void</span> store ( <span class="keyword">volatile</span> T &location, T value ) {
+<a name="l00585"></a>00585         machine_load_store<T,S>::store_with_release( location, value );
+<a name="l00586"></a>00586         __TBB_full_memory_fence();
+<a name="l00587"></a>00587     }
+<a name="l00588"></a>00588 <span class="preprocessor">#endif </span><span class="comment">/* !__TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE */</span>
+<a name="l00589"></a>00589 };
+<a name="l00590"></a>00590 
+<a name="l00591"></a>00591 <span class="preprocessor">#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS</span>
+<a name="l00592"></a>00592 <span class="preprocessor"></span>
+<a name="l00594"></a>00594 <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00595"></a><a class="code" href="a00294.html">00595</a> <span class="keyword">struct </span>machine_load_store_seq_cst<T,8> {
+<a name="l00596"></a>00596     <span class="keyword">static</span> T load ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
+<a name="l00597"></a>00597         <span class="comment">// Comparand and new value may be anything, they only must be equal, and</span>
+<a name="l00598"></a>00598         <span class="comment">// the value should have a low probability to be actually found in 'location'.</span>
+<a name="l00599"></a>00599         <span class="keyword">const</span> int64_t anyvalue = 2305843009213693951LL;
+<a name="l00600"></a>00600         <span class="keywordflow">return</span> __TBB_machine_cmpswp8( (<span class="keyword">volatile</span> <span class="keywordtype">void</span>*)const_cast<volatile T*>(&location), anyvalue, anyvalue );
+<a name="l00601"></a>00601     }
+<a name="l00602"></a>00602     <span class="keyword">static</span> <span class="keywordtype">void</span> store ( <span class="keyword">volatile</span> T &location, T value ) {
+<a name="l00603"></a>00603         int64_t result = (<span class="keyword">volatile</span> int64_t&)location;
+<a name="l00604"></a>00604         <span class="keywordflow">while</span> ( __TBB_machine_cmpswp8((<span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location, (int64_t)value, result) != result )
+<a name="l00605"></a>00605             result = (<span class="keyword">volatile</span> int64_t&)location;
+<a name="l00606"></a>00606     }
+<a name="l00607"></a>00607 };
+<a name="l00608"></a>00608 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */</span>
+<a name="l00609"></a>00609 <span class="preprocessor">#endif </span><span class="comment">/*__TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE */</span>
+<a name="l00610"></a>00610 
+<a name="l00611"></a>00611 <span class="preprocessor">#if __TBB_USE_GENERIC_RELAXED_LOAD_STORE</span>
+<a name="l00612"></a>00612 <span class="preprocessor"></span><span class="comment">// Relaxed operations add volatile qualifier to prevent compiler from optimizing them out.</span>
+<a name="l00616"></a>00616 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">typename</span> T, size_t S>
+<a name="l00617"></a><a class="code" href="a00293.html">00617</a> <span class="keyword">struct </span><a class="code" href="a00293.html">machine_load_store_relaxed</a> {
+<a name="l00618"></a>00618     <span class="keyword">static</span> <span class="keyword">inline</span> T load ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
+<a name="l00619"></a>00619         <span class="keywordflow">return</span> location;
+<a name="l00620"></a>00620     }
+<a name="l00621"></a>00621     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> store ( <span class="keyword">volatile</span> T& location, T value ) {
+<a name="l00622"></a>00622         location = value;
+<a name="l00623"></a>00623     }
+<a name="l00624"></a>00624 };
+<a name="l00625"></a>00625 
+<a name="l00626"></a>00626 <span class="preprocessor">#if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS</span>
+<a name="l00627"></a>00627 <span class="preprocessor"></span><span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00628"></a>00628 <span class="keyword">struct </span><a class="code" href="a00293.html">machine_load_store_relaxed</a><T,8> {
+<a name="l00629"></a>00629     <span class="keyword">static</span> <span class="keyword">inline</span> T load ( <span class="keyword">const</span> <span class="keyword">volatile</span> T& location ) {
+<a name="l00630"></a>00630         <span class="keywordflow">return</span> (T)__TBB_machine_load8( (<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location );
+<a name="l00631"></a>00631     }
+<a name="l00632"></a>00632     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> store ( <span class="keyword">volatile</span> T& location, T value ) {
+<a name="l00633"></a>00633         __TBB_machine_store8( (<span class="keyword">volatile</span> <span class="keywordtype">void</span>*)&location, (int64_t)value );
+<a name="l00634"></a>00634     }
+<a name="l00635"></a>00635 };
+<a name="l00636"></a>00636 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */</span>
+<a name="l00637"></a>00637 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_USE_GENERIC_RELAXED_LOAD_STORE */</span>
+<a name="l00638"></a>00638 
+<a name="l00639"></a>00639 <span class="preprocessor">#undef __TBB_WORDSIZE //this macro is forbidden to use outside of atomic machinery</span>
+<a name="l00640"></a>00640 <span class="preprocessor"></span>
+<a name="l00641"></a>00641 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00642"></a>00642 <span class="keyword">inline</span> T __TBB_load_with_acquire(<span class="keyword">const</span> <span class="keyword">volatile</span> T &location) {
+<a name="l00643"></a>00643     <span class="keywordflow">return</span> machine_load_store<T,sizeof(T)>::load_with_acquire( location );
+<a name="l00644"></a>00644 }
+<a name="l00645"></a>00645 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> V>
+<a name="l00646"></a>00646 <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="l00647"></a>00647     machine_load_store<T,sizeof(T)>::store_with_release( location, T(value) );
+<a name="l00648"></a>00648 }
+<a name="l00650"></a>00650 <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_with_release(<span class="keyword">volatile</span> size_t& location, size_t value) {
+<a name="l00651"></a>00651     machine_load_store<size_t,sizeof(size_t)>::store_with_release( location, value );
+<a name="l00652"></a>00652 }
+<a name="l00653"></a>00653 
+<a name="l00654"></a>00654 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00655"></a>00655 <span class="keyword">inline</span> T __TBB_load_full_fence(<span class="keyword">const</span> <span class="keyword">volatile</span> T &location) {
+<a name="l00656"></a>00656     <span class="keywordflow">return</span> machine_load_store_seq_cst<T,sizeof(T)>::load( location );
+<a name="l00657"></a>00657 }
+<a name="l00658"></a>00658 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> V>
+<a name="l00659"></a>00659 <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_full_fence(<span class="keyword">volatile</span> T& location, V value) {
+<a name="l00660"></a>00660     machine_load_store_seq_cst<T,sizeof(T)>::store( location, T(value) );
+<a name="l00661"></a>00661 }
+<a name="l00663"></a>00663 <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_full_fence(<span class="keyword">volatile</span> size_t& location, size_t value) {
+<a name="l00664"></a>00664     machine_load_store_seq_cst<size_t,sizeof(size_t)>::store( location, value );
+<a name="l00665"></a>00665 }
+<a name="l00666"></a>00666 
+<a name="l00667"></a>00667 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00668"></a>00668 <span class="keyword">inline</span> T __TBB_load_relaxed (<span class="keyword">const</span> <span class="keyword">volatile</span> T& location) {
+<a name="l00669"></a>00669     <span class="keywordflow">return</span> machine_load_store_relaxed<T,sizeof(T)>::load( const_cast<T&>(location) );
+<a name="l00670"></a>00670 }
+<a name="l00671"></a>00671 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> V>
+<a name="l00672"></a>00672 <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_relaxed ( <span class="keyword">volatile</span> T& location, V value ) {
+<a name="l00673"></a>00673     machine_load_store_relaxed<T,sizeof(T)>::store( const_cast<T&>(location), T(value) );
+<a name="l00674"></a>00674 }
+<a name="l00676"></a>00676 <span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_store_relaxed ( <span class="keyword">volatile</span> size_t& location, size_t value ) {
+<a name="l00677"></a>00677     machine_load_store_relaxed<size_t,sizeof(size_t)>::store( const_cast<size_t&>(location), value );
+<a name="l00678"></a>00678 }
+<a name="l00679"></a>00679 
+<a name="l00680"></a>00680 <span class="comment">// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as</span>
+<a name="l00681"></a>00681 <span class="comment">// strict as type T.  The type should have a trivial default constructor and destructor, so that</span>
+<a name="l00682"></a>00682 <span class="comment">// arrays of that type can be declared without initializers.</span>
+<a name="l00683"></a>00683 <span class="comment">// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands</span>
+<a name="l00684"></a>00684 <span class="comment">// to a type bigger than T.</span>
+<a name="l00685"></a>00685 <span class="comment">// The default definition here works on machines where integers are naturally aligned and the</span>
+<a name="l00686"></a>00686 <span class="comment">// strictest alignment is 64.</span>
+<a name="l00687"></a>00687 <span class="preprocessor">#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict</span>
+<a name="l00688"></a>00688 <span class="preprocessor"></span>
+<a name="l00689"></a>00689 <span class="preprocessor">#if __TBB_ATTRIBUTE_ALIGNED_PRESENT</span>
+<a name="l00690"></a>00690 <span class="preprocessor"></span>
+<a name="l00691"></a>00691 <span class="preprocessor">#define __TBB_DefineTypeWithAlignment(PowerOf2)       \</span>
+<a name="l00692"></a>00692 <span class="preprocessor">struct __TBB_machine_type_with_alignment_##PowerOf2 { \</span>
+<a name="l00693"></a>00693 <span class="preprocessor">    uint32_t member[PowerOf2/sizeof(uint32_t)];       \</span>
+<a name="l00694"></a>00694 <span class="preprocessor">} __attribute__((aligned(PowerOf2)));</span>
+<a name="l00695"></a>00695 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_alignof(T) __alignof__(T)</span>
+<a name="l00696"></a>00696 <span class="preprocessor"></span>
+<a name="l00697"></a>00697 <span class="preprocessor">#elif __TBB_DECLSPEC_ALIGN_PRESENT</span>
+<a name="l00698"></a>00698 <span class="preprocessor"></span>
+<a name="l00699"></a>00699 <span class="preprocessor">#define __TBB_DefineTypeWithAlignment(PowerOf2)       \</span>
+<a name="l00700"></a>00700 <span class="preprocessor">__declspec(align(PowerOf2))                           \</span>
+<a name="l00701"></a>00701 <span class="preprocessor">struct __TBB_machine_type_with_alignment_##PowerOf2 { \</span>
+<a name="l00702"></a>00702 <span class="preprocessor">    uint32_t member[PowerOf2/sizeof(uint32_t)];       \</span>
+<a name="l00703"></a>00703 <span class="preprocessor">};</span>
+<a name="l00704"></a>00704 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_alignof(T) __alignof(T)</span>
+<a name="l00705"></a>00705 <span class="preprocessor"></span>
+<a name="l00706"></a>00706 <span class="preprocessor">#else </span><span class="comment">/* A compiler with unknown syntax for data alignment */</span>
+<a name="l00707"></a>00707 <span class="preprocessor">#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T)</span>
+<a name="l00708"></a>00708 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00709"></a>00709 <span class="preprocessor"></span>
+<a name="l00710"></a>00710 <span class="comment">/* Now declare types aligned to useful powers of two */</span>
+<a name="l00711"></a>00711 <span class="comment">// TODO: Is __TBB_DefineTypeWithAlignment(8) needed on 32 bit platforms?</span>
+<a name="l00712"></a>00712 __TBB_DefineTypeWithAlignment(16)
+<a name="l00713"></a>00713 __TBB_DefineTypeWithAlignment(32)
+<a name="l00714"></a>00714 __TBB_DefineTypeWithAlignment(64)
+<a name="l00715"></a>00715 
+<a name="l00716"></a>00716 typedef __TBB_machine_type_with_alignment_64 __TBB_machine_type_with_strictest_alignment;
+<a name="l00717"></a>00717 
+<a name="l00718"></a>00718 <span class="comment">// Primary template is a declaration of incomplete type so that it fails with unknown alignments</span>
+<a name="l00719"></a>00719 template<size_t N> struct type_with_alignment;
+<a name="l00720"></a>00720 
+<a name="l00721"></a>00721 <span class="comment">// Specializations for allowed alignments</span>
+<a name="l00722"></a>00722 template<> struct type_with_alignment<1> { <span class="keywordtype">char</span> member; };
+<a name="l00723"></a>00723 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<2> { uint16_t member; };
+<a name="l00724"></a>00724 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<4> { uint32_t member; };
+<a name="l00725"></a>00725 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<8> { uint64_t member; };
+<a name="l00726"></a>00726 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<16> {__TBB_machine_type_with_alignment_16 member; };
+<a name="l00727"></a>00727 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<32> {__TBB_machine_type_with_alignment_32 member; };
+<a name="l00728"></a>00728 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<64> {__TBB_machine_type_with_alignment_64 member; };
+<a name="l00729"></a>00729 
+<a name="l00730"></a>00730 <span class="preprocessor">#if __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN</span>
+<a name="l00732"></a>00732 <span class="preprocessor"></span>
+<a name="l00734"></a>00734 <span class="preprocessor">template<size_t Size, typename T></span>
+<a name="l00735"></a><a class="code" href="a00352.html">00735</a> <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00352.html">work_around_alignment_bug</a> {
+<a name="l00736"></a>00736     <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __TBB_alignof(T);
+<a name="l00737"></a>00737 };
+<a name="l00738"></a>00738 <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="l00739"></a>00739 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00740"></a>00740 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__TBB_alignof(T)></span>
+<a name="l00741"></a>00741 <span class="preprocessor"></span><span class="preprocessor">#endif  </span><span class="comment">/* __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN */</span>
+<a name="l00742"></a>00742 
+<a name="l00743"></a>00743 <span class="preprocessor">#endif  </span><span class="comment">/* __TBB_TypeWithAlignmentAtLeastAsStrict */</span>
+<a name="l00744"></a>00744 
+<a name="l00745"></a>00745 <span class="comment">// Template class here is to avoid instantiation of the static data for modules that don't use it</span>
+<a name="l00746"></a>00746 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00747"></a>00747 <span class="keyword">struct </span>reverse {
+<a name="l00748"></a>00748     <span class="keyword">static</span> <span class="keyword">const</span> T byte_table[256];
+<a name="l00749"></a>00749 };
+<a name="l00750"></a>00750 <span class="comment">// An efficient implementation of the reverse function utilizes a 2^8 lookup table holding the bit-reversed</span>
+<a name="l00751"></a>00751 <span class="comment">// values of [0..2^8 - 1]. Those values can also be computed on the fly at a slightly higher cost.</span>
+<a name="l00752"></a>00752 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00753"></a>00753 <span class="keyword">const</span> T reverse<T>::byte_table[256] = {
+<a name="l00754"></a>00754     0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
+<a name="l00755"></a>00755     0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
+<a name="l00756"></a>00756     0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
+<a name="l00757"></a>00757     0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
+<a name="l00758"></a>00758     0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
+<a name="l00759"></a>00759     0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
+<a name="l00760"></a>00760     0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
+<a name="l00761"></a>00761     0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
+<a name="l00762"></a>00762     0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
+<a name="l00763"></a>00763     0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
+<a name="l00764"></a>00764     0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
+<a name="l00765"></a>00765     0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
+<a name="l00766"></a>00766     0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
+<a name="l00767"></a>00767     0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
+<a name="l00768"></a>00768     0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
+<a name="l00769"></a>00769     0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
+<a name="l00770"></a>00770 };
+<a name="l00771"></a>00771 
+<a name="l00772"></a>00772 } <span class="comment">// namespace internal</span>
+<a name="l00773"></a>00773 } <span class="comment">// namespace tbb</span>
+<a name="l00774"></a>00774 
+<a name="l00775"></a>00775 <span class="comment">// Preserving access to legacy APIs</span>
+<a name="l00776"></a>00776 <span class="keyword">using</span> tbb::internal::__TBB_load_with_acquire;
+<a name="l00777"></a>00777 <span class="keyword">using</span> tbb::internal::__TBB_store_with_release;
+<a name="l00778"></a>00778 
+<a name="l00779"></a>00779 <span class="comment">// Mapping historically used names to the ones expected by atomic_load_store_traits</span>
+<a name="l00780"></a>00780 <span class="preprocessor">#define __TBB_load_acquire  __TBB_load_with_acquire</span>
+<a name="l00781"></a>00781 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_store_release __TBB_store_with_release</span>
+<a name="l00782"></a>00782 <span class="preprocessor"></span>
+<a name="l00783"></a>00783 <span class="preprocessor">#ifndef __TBB_Log2</span>
+<a name="l00784"></a>00784 <span class="preprocessor"></span><span class="keyword">inline</span> intptr_t __TBB_Log2( uintptr_t x ) {
+<a name="l00785"></a>00785     <span class="keywordflow">if</span>( x==0 ) <span class="keywordflow">return</span> -1;
+<a name="l00786"></a>00786     intptr_t result = 0;
+<a name="l00787"></a>00787     uintptr_t tmp;
+<a name="l00788"></a>00788 
+<a name="l00789"></a>00789     <span class="keywordflow">if</span>( <span class="keyword">sizeof</span>(x)>4 && (tmp = ((uint64_t)x)>>32)) { x=tmp; result += 32; }
+<a name="l00790"></a>00790     <span class="keywordflow">if</span>( (tmp = x>>16) ) { x=tmp; result += 16; }
+<a name="l00791"></a>00791     <span class="keywordflow">if</span>( (tmp = x>>8) )  { x=tmp; result += 8; }
+<a name="l00792"></a>00792     <span class="keywordflow">if</span>( (tmp = x>>4) )  { x=tmp; result += 4; }
+<a name="l00793"></a>00793     <span class="keywordflow">if</span>( (tmp = x>>2) )  { x=tmp; result += 2; }
+<a name="l00794"></a>00794     <span class="keywordflow">return</span> (x&2)? result+1: result;
+<a name="l00795"></a>00795 }
+<a name="l00796"></a>00796 <span class="preprocessor">#endif</span>
+<a name="l00797"></a>00797 <span class="preprocessor"></span>
+<a name="l00798"></a>00798 <span class="preprocessor">#ifndef __TBB_AtomicOR</span>
+<a name="l00799"></a>00799 <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="l00800"></a>00800     <a class="code" href="a00256.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00801"></a>00801     <span class="keywordflow">for</span>(;;) {
+<a name="l00802"></a>00802         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
+<a name="l00803"></a>00803         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
+<a name="l00804"></a>00804         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
+<a name="l00805"></a>00805         b.<a class="code" href="a00256.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00806"></a>00806     }
+<a name="l00807"></a>00807 }
+<a name="l00808"></a>00808 <span class="preprocessor">#endif</span>
+<a name="l00809"></a>00809 <span class="preprocessor"></span>
+<a name="l00810"></a>00810 <span class="preprocessor">#ifndef __TBB_AtomicAND</span>
+<a name="l00811"></a>00811 <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="l00812"></a>00812     <a class="code" href="a00256.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00813"></a>00813     <span class="keywordflow">for</span>(;;) {
+<a name="l00814"></a>00814         uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
+<a name="l00815"></a>00815         uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);
+<a name="l00816"></a>00816         <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
+<a name="l00817"></a>00817         b.<a class="code" href="a00256.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00818"></a>00818     }
+<a name="l00819"></a>00819 }
+<a name="l00820"></a>00820 <span class="preprocessor">#endif</span>
+<a name="l00821"></a>00821 <span class="preprocessor"></span>
+<a name="l00822"></a>00822 <span class="preprocessor">#ifndef __TBB_Flag</span>
+<a name="l00823"></a>00823 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> __TBB_Flag;
+<a name="l00824"></a>00824 <span class="preprocessor">#endif</span>
+<a name="l00825"></a>00825 <span class="preprocessor"></span><span class="keyword">typedef</span> __TBB_atomic __TBB_Flag __TBB_atomic_flag;
+<a name="l00826"></a>00826 
+<a name="l00827"></a>00827 <span class="preprocessor">#ifndef __TBB_TryLockByte</span>
+<a name="l00828"></a>00828 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> __TBB_TryLockByte( __TBB_atomic_flag &flag ) {
+<a name="l00829"></a>00829     <span class="keywordflow">return</span> __TBB_machine_cmpswp1(&flag,1,0)==0;
+<a name="l00830"></a>00830 }
+<a name="l00831"></a>00831 <span class="preprocessor">#endif</span>
+<a name="l00832"></a>00832 <span class="preprocessor"></span>
+<a name="l00833"></a>00833 <span class="preprocessor">#ifndef __TBB_LockByte</span>
+<a name="l00834"></a>00834 <span class="preprocessor"></span><span class="keyword">inline</span> __TBB_Flag __TBB_LockByte( __TBB_atomic_flag& flag ) {
+<a name="l00835"></a>00835     <span class="keywordflow">if</span> ( !__TBB_TryLockByte(flag) ) {
+<a name="l00836"></a>00836         <a class="code" href="a00256.html">tbb::internal::atomic_backoff</a> b;
+<a name="l00837"></a>00837         <span class="keywordflow">do</span> {
+<a name="l00838"></a>00838             b.<a class="code" href="a00256.html#a174ea93e3bd3d5cce82389c2f28d037">pause</a>();
+<a name="l00839"></a>00839         } <span class="keywordflow">while</span> ( !__TBB_TryLockByte(flag) );
+<a name="l00840"></a>00840     }
+<a name="l00841"></a>00841     <span class="keywordflow">return</span> 0;
+<a name="l00842"></a>00842 }
+<a name="l00843"></a>00843 <span class="preprocessor">#endif</span>
+<a name="l00844"></a>00844 <span class="preprocessor"></span>
+<a name="l00845"></a>00845 <span class="preprocessor">#ifndef  __TBB_UnlockByte</span>
+<a name="l00846"></a>00846 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_UnlockByte __TBB_store_with_release</span>
+<a name="l00847"></a>00847 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00848"></a>00848 <span class="preprocessor"></span>
+<a name="l00849"></a>00849 <span class="preprocessor">#ifndef __TBB_ReverseByte</span>
+<a name="l00850"></a>00850 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> __TBB_ReverseByte(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> src) {
+<a name="l00851"></a>00851     <span class="keywordflow">return</span> tbb::internal::reverse<unsigned char>::byte_table[src];
+<a name="l00852"></a>00852 }
+<a name="l00853"></a>00853 <span class="preprocessor">#endif</span>
+<a name="l00854"></a>00854 <span class="preprocessor"></span>
+<a name="l00855"></a>00855 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00856"></a>00856 T __TBB_ReverseBits(T src) {
+<a name="l00857"></a>00857     T dst;
+<a name="l00858"></a>00858     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *original = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &src;
+<a name="l00859"></a>00859     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *reversed = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) &dst;
+<a name="l00860"></a>00860 
+<a name="l00861"></a>00861     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = <span class="keyword">sizeof</span>(T)-1; i >= 0; i-- )
+<a name="l00862"></a>00862         reversed[i] = __TBB_ReverseByte( original[<span class="keyword">sizeof</span>(T)-i-1] );
+<a name="l00863"></a>00863 
+<a name="l00864"></a>00864     <span class="keywordflow">return</span> dst;
+<a name="l00865"></a>00865 }
+<a name="l00866"></a>00866 
+<a name="l00867"></a>00867 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_machine_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00647.html b/doc/html/a00647.html
new file mode 100644
index 0000000..b343b15
--- /dev/null
+++ b/doc/html/a00647.html
@@ -0,0 +1,225 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb_profiling.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<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_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-2012 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_profiling_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_profiling_H</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="comment">// Check if the tools support is enabled</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#if (_WIN32||_WIN64||__linux__) && !__MINGW32__ && TBB_USE_THREADING_TOOLS</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#include <stdlib.h></span>  <span class="comment">/* mbstowcs_s */</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_stddef.h"</span>
+<a name="l00031"></a>00031 
+<a name="l00032"></a>00032 <span class="keyword">namespace </span>tbb {
+<a name="l00033"></a>00033     <span class="keyword">namespace </span>internal {
+<a name="l00034"></a>00034 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>        <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_set_sync_name_v3( <span class="keywordtype">void</span> *obj, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* name );
+<a name="l00036"></a>00036         <span class="keyword">inline</span> size_t multibyte_to_widechar( <span class="keywordtype">wchar_t</span>* wcs, <span class="keyword">const</span> <span class="keywordtype">char</span>* mbs, size_t bufsize) {
+<a name="l00037"></a>00037 <span class="preprocessor">#if _MSC_VER>=1400</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>            size_t len;
+<a name="l00039"></a>00039             mbstowcs_s( &len, wcs, bufsize, mbs, _TRUNCATE );
+<a name="l00040"></a>00040             <span class="keywordflow">return</span> len;   <span class="comment">// mbstowcs_s counts null terminator</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#else</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>            size_t len = mbstowcs( wcs, mbs, bufsize );
+<a name="l00043"></a>00043             <span class="keywordflow">if</span>(wcs && len!=size_t(-1) )
+<a name="l00044"></a>00044                 wcs[len<bufsize-1? len: bufsize-1] = wchar_t(<span class="charliteral">'\0'</span>);
+<a name="l00045"></a>00045             <span class="keywordflow">return</span> len+1; <span class="comment">// mbstowcs does not count null terminator</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>        }
+<a name="l00048"></a>00048 <span class="preprocessor">#else</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>        <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_set_sync_name_v3( <span class="keywordtype">void</span> *obj, <span class="keyword">const</span> <span class="keywordtype">char</span>* name );
+<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span>    } <span class="comment">// namespace internal</span>
+<a name="l00052"></a>00052 } <span class="comment">// namespace tbb</span>
+<a name="l00053"></a>00053 
+<a name="l00055"></a>00055 
+<a name="l00057"></a>00057 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
+<a name="l00059"></a>00059 <span class="preprocessor">        namespace profiling {                                                       \</span>
+<a name="l00060"></a>00060 <span class="preprocessor">            inline void set_name( sync_object_type& obj, const wchar_t* name ) {    \</span>
+<a name="l00061"></a>00061 <span class="preprocessor">                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \</span>
+<a name="l00062"></a>00062 <span class="preprocessor">            }                                                                       \</span>
+<a name="l00063"></a>00063 <span class="preprocessor">            inline void set_name( sync_object_type& obj, const char* name ) {       \</span>
+<a name="l00064"></a>00064 <span class="preprocessor">                size_t len = tbb::internal::multibyte_to_widechar(NULL, name, 0);   \</span>
+<a name="l00065"></a>00065 <span class="preprocessor">                wchar_t *wname = new wchar_t[len];                                  \</span>
+<a name="l00066"></a>00066 <span class="preprocessor">                tbb::internal::multibyte_to_widechar(wname, name, len);             \</span>
+<a name="l00067"></a>00067 <span class="preprocessor">                set_name( obj, wname );                                             \</span>
+<a name="l00068"></a>00068 <span class="preprocessor">                delete[] wname;                                                     \</span>
+<a name="l00069"></a>00069 <span class="preprocessor">            }                                                                       \</span>
+<a name="l00070"></a>00070 <span class="preprocessor">        }</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !WIN */</span>
+<a name="l00072"></a>00072 <span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
+<a name="l00073"></a>00073 <span class="preprocessor">        namespace profiling {                                                       \</span>
+<a name="l00074"></a>00074 <span class="preprocessor">            inline void set_name( sync_object_type& obj, const char* name ) {       \</span>
+<a name="l00075"></a>00075 <span class="preprocessor">                tbb::internal::itt_set_sync_name_v3( &obj, name );                  \</span>
+<a name="l00076"></a>00076 <span class="preprocessor">            }                                                                       \</span>
+<a name="l00077"></a>00077 <span class="preprocessor">        }</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !WIN */</span>
+<a name="l00079"></a>00079 
+<a name="l00080"></a>00080 <span class="preprocessor">#else </span><span class="comment">/* no tools support */</span>
+<a name="l00081"></a>00081 
+<a name="l00082"></a>00082 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
+<a name="l00084"></a>00084 <span class="preprocessor">        namespace profiling {                                               \</span>
+<a name="l00085"></a>00085 <span class="preprocessor">            inline void set_name( sync_object_type&, const wchar_t* ) {}    \</span>
+<a name="l00086"></a>00086 <span class="preprocessor">            inline void set_name( sync_object_type&, const char* ) {}       \</span>
+<a name="l00087"></a>00087 <span class="preprocessor">        }</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !WIN */</span>
+<a name="l00089"></a>00089 <span class="preprocessor">    #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \</span>
+<a name="l00090"></a>00090 <span class="preprocessor">        namespace profiling {                                               \</span>
+<a name="l00091"></a>00091 <span class="preprocessor">            inline void set_name( sync_object_type&, const char* ) {}       \</span>
+<a name="l00092"></a>00092 <span class="preprocessor">        }</span>
+<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !WIN */</span>
+<a name="l00094"></a>00094 
+<a name="l00095"></a>00095 <span class="preprocessor">#endif </span><span class="comment">/* no tools support */</span>
+<a name="l00096"></a>00096 
+<a name="l00097"></a>00097 <span class="preprocessor">#include "atomic.h"</span>
+<a name="l00098"></a>00098 <span class="comment">// Need these to work regardless of tools support</span>
+<a name="l00099"></a>00099 <span class="keyword">namespace </span>tbb {
+<a name="l00100"></a>00100     <span class="keyword">namespace </span>internal {
+<a name="l00101"></a>00101 
+<a name="l00102"></a>00102         <span class="keyword">enum</span> notify_type {prepare=0, cancel, acquired, releasing};
+<a name="l00103"></a>00103         <span class="keyword">const</span> uintptr_t NUM_NOTIFY_TYPES = 4; <span class="comment">// set to # elements in enum above</span>
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105         <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC call_itt_notify_v5(<span class="keywordtype">int</span> t, <span class="keywordtype">void</span> *ptr);
+<a name="l00106"></a>00106         <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="l00107"></a>00107         <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="l00108"></a>00108         <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="l00109"></a>00109 
+<a name="l00110"></a>00110         <span class="comment">// two template arguments are to workaround /Wp64 warning with tbb::atomic specialized for unsigned type</span>
+<a name="l00111"></a>00111         <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+<a name="l00112"></a>00112         <span class="keyword">inline</span> <span class="keywordtype">void</span> itt_store_word_with_release(<a class="code" href="a00254.html">tbb::atomic<T></a>& dst, U src) {
+<a name="l00113"></a>00113 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00114"></a>00114 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
+<a name="l00115"></a>00115             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized."</span>);
+<a name="l00116"></a>00116             itt_store_pointer_with_release_v3(&dst, (<span class="keywordtype">void</span> *)uintptr_t(src));
+<a name="l00117"></a>00117 <span class="preprocessor">#else</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span>            dst = src;
+<a name="l00119"></a>00119 <span class="preprocessor">#endif // TBB_USE_THREADING_TOOLS</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span>        }
+<a name="l00121"></a>00121 
+<a name="l00122"></a>00122         <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00123"></a>00123         <span class="keyword">inline</span> T itt_load_word_with_acquire(<span class="keyword">const</span> <a class="code" href="a00254.html">tbb::atomic<T></a>& src) {
+<a name="l00124"></a>00124 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
+<a name="l00126"></a>00126             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized."</span>);
+<a name="l00127"></a>00127 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>            <span class="comment">// Workaround for overzealous compiler warnings</span>
+<a name="l00129"></a>00129 <span class="preprocessor">            #pragma warning (push)</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span><span class="preprocessor">            #pragma warning (disable: 4311)</span>
+<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00132"></a>00132 <span class="preprocessor"></span>            T result = (T)itt_load_pointer_with_acquire_v3(&src);
+<a name="l00133"></a>00133 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor">            #pragma warning (pop)</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span>            <span class="keywordflow">return</span> result;
+<a name="l00137"></a>00137 <span class="preprocessor">#else</span>
+<a name="l00138"></a>00138 <span class="preprocessor"></span>            <span class="keywordflow">return</span> src;
+<a name="l00139"></a>00139 <span class="preprocessor">#endif // TBB_USE_THREADING_TOOLS</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span>        }
+<a name="l00141"></a>00141 
+<a name="l00142"></a>00142         <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00143"></a>00143         <span class="keyword">inline</span> <span class="keywordtype">void</span> itt_store_word_with_release(T& dst, T src) {
+<a name="l00144"></a>00144 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00145"></a>00145 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
+<a name="l00146"></a>00146             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized."</span>);
+<a name="l00147"></a>00147             itt_store_pointer_with_release_v3(&dst, (<span class="keywordtype">void</span> *)src);
+<a name="l00148"></a>00148 <span class="preprocessor">#else</span>
+<a name="l00149"></a>00149 <span class="preprocessor"></span>            __TBB_store_with_release(dst, src); 
+<a name="l00150"></a>00150 <span class="preprocessor">#endif // TBB_USE_THREADING_TOOLS</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span>        }
+<a name="l00152"></a>00152 
+<a name="l00153"></a>00153         <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00154"></a>00154         <span class="keyword">inline</span> T itt_load_word_with_acquire(<span class="keyword">const</span> T& src) {
+<a name="l00155"></a>00155 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00156"></a>00156 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
+<a name="l00157"></a>00157             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized"</span>);
+<a name="l00158"></a>00158             <span class="keywordflow">return</span> (T)itt_load_pointer_with_acquire_v3(&src);
+<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_load_with_acquire(src);
+<a name="l00161"></a>00161 <span class="preprocessor">#endif // TBB_USE_THREADING_TOOLS</span>
+<a name="l00162"></a>00162 <span class="preprocessor"></span>        }
+<a name="l00163"></a>00163 
+<a name="l00164"></a>00164         <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00165"></a>00165         <span class="keyword">inline</span> <span class="keywordtype">void</span> itt_hide_store_word(T& dst, T src) {
+<a name="l00166"></a>00166 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00167"></a>00167 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
+<a name="l00168"></a>00168             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized"</span>);
+<a name="l00169"></a>00169             itt_store_pointer_with_release_v3(&dst, (<span class="keywordtype">void</span> *)src);
+<a name="l00170"></a>00170 <span class="preprocessor">#else</span>
+<a name="l00171"></a>00171 <span class="preprocessor"></span>            dst = src;
+<a name="l00172"></a>00172 <span class="preprocessor">#endif</span>
+<a name="l00173"></a>00173 <span class="preprocessor"></span>        }
+<a name="l00174"></a>00174 
+<a name="l00175"></a>00175         <span class="keyword">template</span> <<span class="keyword">typename</span> T>
+<a name="l00176"></a>00176         <span class="keyword">inline</span> T itt_hide_load_word(<span class="keyword">const</span> T& src) {
+<a name="l00177"></a>00177 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00178"></a>00178 <span class="preprocessor"></span>            <span class="comment">// This assertion should be replaced with static_assert</span>
+<a name="l00179"></a>00179             __TBB_ASSERT(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(<span class="keywordtype">void</span> *), <span class="stringliteral">"Type must be word-sized."</span>);
+<a name="l00180"></a>00180             <span class="keywordflow">return</span> (T)itt_load_pointer_v3(&src);
+<a name="l00181"></a>00181 <span class="preprocessor">#else</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span>            <span class="keywordflow">return</span> src;
+<a name="l00183"></a>00183 <span class="preprocessor">#endif</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span>        }
+<a name="l00185"></a>00185 
+<a name="l00186"></a>00186 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+<a name="l00187"></a>00187 <span class="preprocessor"></span>        <span class="keyword">inline</span> <span class="keywordtype">void</span> call_itt_notify(notify_type t, <span class="keywordtype">void</span> *ptr) {
+<a name="l00188"></a>00188             call_itt_notify_v5((<span class="keywordtype">int</span>)t, ptr);
+<a name="l00189"></a>00189         }
+<a name="l00190"></a>00190 <span class="preprocessor">#else</span>
+<a name="l00191"></a>00191 <span class="preprocessor"></span>        <span class="keyword">inline</span> <span class="keywordtype">void</span> call_itt_notify(notify_type <span class="comment">/*t*/</span>, <span class="keywordtype">void</span> * <span class="comment">/*ptr*/</span>) {}
+<a name="l00192"></a>00192 <span class="preprocessor">#endif // TBB_USE_THREADING_TOOLS</span>
+<a name="l00193"></a>00193 <span class="preprocessor"></span>
+<a name="l00194"></a>00194     } <span class="comment">// namespace internal</span>
+<a name="l00195"></a>00195 } <span class="comment">// namespace tbb</span>
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_profiling_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00648.html b/doc/html/a00648.html
new file mode 100644
index 0000000..81b0e16
--- /dev/null
+++ b/doc/html/a00648.html
@@ -0,0 +1,302 @@
+<!DOCTYPE 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>
+<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_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-2012 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_stddef_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_stddef_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 4</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define TBB_VERSION_MINOR 0</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 6005</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_X64)||defined(__x86_64__)  // the latter for MinGW support</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="comment">// tbb_config.h should be included the first since it contains macro definitions used in other headers</span>
+<a name="l00119"></a>00119 <span class="preprocessor">#include "tbb_config.h"</span>
+<a name="l00120"></a>00120 
+<a name="l00121"></a>00121 <span class="preprocessor">#if _MSC_VER >=1400</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXPORTED_FUNC   __cdecl</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXPORTED_METHOD __thiscall</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXPORTED_FUNC</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_EXPORTED_METHOD</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 __INTEL_COMPILER || _MSC_VER</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NOINLINE(decl) __declspec(noinline) decl</span>
+<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor">#elif __GNUC__</span>
+<a name="l00132"></a>00132 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NOINLINE(decl) decl __attribute__ ((noinline))</span>
+<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NOINLINE(decl) decl</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span>
+<a name="l00137"></a>00137 <span class="preprocessor">#include <cstddef></span>      <span class="comment">/* Need size_t and ptrdiff_t */</span>
+<a name="l00138"></a>00138 
+<a name="l00139"></a>00139 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_tbb_windef_H</span>
+<a name="l00141"></a>00141 <span class="preprocessor"></span><span class="preprocessor">    #include "internal/_tbb_windef.h"</span>
+<a name="l00142"></a>00142 <span class="preprocessor">    #undef __TBB_tbb_windef_H</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00144"></a>00144 <span class="preprocessor"></span><span class="preprocessor">#if !defined(_MSC_VER) || _MSC_VER>=1600</span>
+<a name="l00145"></a>00145 <span class="preprocessor"></span><span class="preprocessor">    #include <stdint.h></span>
+<a name="l00146"></a>00146 <span class="preprocessor">#endif</span>
+<a name="l00147"></a>00147 <span class="preprocessor"></span>
+<a name="l00149"></a>00149 <span class="keyword">typedef</span> void(*assertion_handler_type)( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* expression, <span class="keyword">const</span> <span class="keywordtype">char</span> * comment );
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00152"></a>00152 <span class="preprocessor"></span>
+<a name="l00153"></a>00153 <span class="preprocessor">     #define __TBB_ASSERT_NS(predicate,message,ns) ((predicate)?((void)0) : ns::assertion_failure(__FILE__,__LINE__,#predicate,message))</span>
+<a name="l00155"></a>00155 <span class="preprocessor"></span>
+<a name="l00158"></a>00158 <span class="preprocessor">#if __TBBMALLOC_BUILD</span>
+<a name="l00159"></a>00159 <span class="preprocessor"></span><span class="keyword">namespace </span>rml { <span class="keyword">namespace </span>internal {
+<a name="l00160"></a>00160 <span class="preprocessor">    #define __TBB_ASSERT(predicate,message) __TBB_ASSERT_NS(predicate,message,rml::internal)</span>
+<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00162"></a>00162 <span class="preprocessor"></span><span class="keyword">namespace </span>tbb {
+<a name="l00163"></a>00163 <span class="preprocessor">    #define __TBB_ASSERT(predicate,message) __TBB_ASSERT_NS(predicate,message,tbb)</span>
+<a name="l00164"></a>00164 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00165"></a>00165 <span class="preprocessor"></span>
+<a name="l00166"></a>00166 <span class="preprocessor">    #define __TBB_ASSERT_EX __TBB_ASSERT</span>
+<a name="l00167"></a>00167 <span class="preprocessor"></span>
+<a name="l00169"></a>00169     assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler );
+<a name="l00170"></a>00170 
+<a name="l00172"></a>00172 
+<a name="l00175"></a>00175     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC assertion_failure( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* expression, <span class="keyword">const</span> <span class="keywordtype">char</span>* comment );
+<a name="l00176"></a>00176 
+<a name="l00177"></a>00177 <span class="preprocessor">#if __TBBMALLOC_BUILD</span>
+<a name="l00178"></a>00178 <span class="preprocessor"></span>}}  <span class="comment">// namespace rml::internal</span>
+<a name="l00179"></a>00179 <span class="preprocessor">#else</span>
+<a name="l00180"></a>00180 <span class="preprocessor"></span>} <span class="comment">// namespace tbb</span>
+<a name="l00181"></a>00181 <span class="preprocessor">#endif</span>
+<a name="l00182"></a>00182 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !TBB_USE_ASSERT */</span>
+<a name="l00183"></a>00183 
+<a name="l00185"></a>00185 <span class="preprocessor">    #define __TBB_ASSERT(predicate,comment) ((void)0)</span>
+<a name="l00187"></a>00187 <span class="preprocessor">    #define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span>
+<a name="l00189"></a>00189 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_ASSERT */</span>
+<a name="l00190"></a>00190 
+<a name="l00192"></a>00192 <span class="keyword">namespace </span>tbb {
+<a name="l00193"></a>00193 
+<a name="l00194"></a>00194 <span class="preprocessor">#if _MSC_VER && _MSC_VER<1600</span>
+<a name="l00195"></a>00195 <span class="preprocessor"></span>    <span class="keyword">namespace </span>internal {
+<a name="l00196"></a>00196         <span class="keyword">typedef</span> __int8 int8_t;
+<a name="l00197"></a>00197         <span class="keyword">typedef</span> __int16 int16_t;
+<a name="l00198"></a>00198         <span class="keyword">typedef</span> __int32 int32_t;
+<a name="l00199"></a>00199         <span class="keyword">typedef</span> __int64 int64_t;
+<a name="l00200"></a>00200         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int8 uint8_t;
+<a name="l00201"></a>00201         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int16 uint16_t;
+<a name="l00202"></a>00202         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int32 uint32_t;
+<a name="l00203"></a>00203         <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 uint64_t;
+<a name="l00204"></a>00204     } <span class="comment">// namespace internal</span>
+<a name="l00205"></a>00205 <span class="preprocessor">#else </span><span class="comment">/* Posix */</span>
+<a name="l00206"></a>00206     <span class="keyword">namespace </span>internal {
+<a name="l00207"></a>00207         using ::int8_t;
+<a name="l00208"></a>00208         using ::int16_t;
+<a name="l00209"></a>00209         using ::int32_t;
+<a name="l00210"></a>00210         using ::int64_t;
+<a name="l00211"></a>00211         using ::uint8_t;
+<a name="l00212"></a>00212         using ::uint16_t;
+<a name="l00213"></a>00213         using ::uint32_t;
+<a name="l00214"></a>00214         using ::uint64_t;
+<a name="l00215"></a>00215     } <span class="comment">// namespace internal</span>
+<a name="l00216"></a>00216 <span class="preprocessor">#endif </span><span class="comment">/* Posix */</span>
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218     <span class="keyword">using</span> std::size_t;
+<a name="l00219"></a>00219     <span class="keyword">using</span> std::ptrdiff_t;
+<a name="l00220"></a>00220 
+<a name="l00222"></a>00222 
+<a name="l00226"></a>00226 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00414.html#a6858b22e90041c9c4669674ff39b056">TBB_runtime_interface_version</a>();
+<a name="l00227"></a>00227 
+<a name="l00229"></a>00229 
+<a name="l00233"></a><a class="code" href="a00335.html">00233</a> <span class="keyword">class </span><a class="code" href="a00335.html">split</a> {
+<a name="l00234"></a>00234 };
+<a name="l00235"></a>00235 
+<a name="l00240"></a>00240 <span class="keyword">namespace </span>internal {
+<a name="l00241"></a>00241 
+<a name="l00243"></a>00243 
+<a name="l00246"></a>00246 <span class="keyword">const</span> size_t NFS_MaxLineSize = 128;
+<a name="l00247"></a>00247 
+<a name="l00267"></a>00267 <span class="preprocessor">#define __TBB_atomic // intentionally empty, see above</span>
+<a name="l00268"></a>00268 <span class="preprocessor"></span>
+<a name="l00269"></a>00269 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keywordtype">int</span> S>
+<a name="l00270"></a>00270 <span class="keyword">struct </span>padded_base : T {
+<a name="l00271"></a>00271     <span class="keywordtype">char</span> pad[NFS_MaxLineSize - <span class="keyword">sizeof</span>(T) % NFS_MaxLineSize];
+<a name="l00272"></a>00272 };
+<a name="l00273"></a>00273 <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">struct </span>padded_base<T, 0> : T {};
+<a name="l00274"></a>00274 
+<a name="l00276"></a>00276 <span class="keyword">template</span><<span class="keyword">class</span> T>
+<a name="l00277"></a>00277 <span class="keyword">struct </span>padded : padded_base<T, sizeof(T)> {};
+<a name="l00278"></a>00278 
+<a name="l00280"></a>00280 
+<a name="l00282"></a>00282 <span class="preprocessor">#define __TBB_offsetof(class_name, member_name) \</span>
+<a name="l00283"></a>00283 <span class="preprocessor">    ((ptrdiff_t)&(reinterpret_cast<class_name*>(0x1000)->member_name) - 0x1000)</span>
+<a name="l00284"></a>00284 <span class="preprocessor"></span>
+<a name="l00286"></a>00286 <span class="preprocessor">#define __TBB_get_object_ref(class_name, member_name, member_addr) \</span>
+<a name="l00287"></a>00287 <span class="preprocessor">    (*reinterpret_cast<class_name*>((char*)member_addr - __TBB_offsetof(class_name, member_name)))</span>
+<a name="l00288"></a>00288 <span class="preprocessor"></span>
+<a name="l00290"></a>00290 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC handle_perror( <span class="keywordtype">int</span> error_code, <span class="keyword">const</span> <span class="keywordtype">char</span>* aux_info );
+<a name="l00291"></a>00291 
+<a name="l00292"></a>00292 <span class="preprocessor">#if TBB_USE_EXCEPTIONS</span>
+<a name="l00293"></a>00293 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_TRY try</span>
+<a name="l00294"></a>00294 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CATCH(e) catch(e)</span>
+<a name="l00295"></a>00295 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_THROW(e) throw e</span>
+<a name="l00296"></a>00296 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_RETHROW() throw</span>
+<a name="l00297"></a>00297 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
+<a name="l00298"></a>00298     <span class="keyword">inline</span> <span class="keywordtype">bool</span> __TBB_false() { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00299"></a>00299 <span class="preprocessor">    #define __TBB_TRY</span>
+<a name="l00300"></a>00300 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_CATCH(e) if ( tbb::internal::__TBB_false() )</span>
+<a name="l00301"></a>00301 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_THROW(e) ((void)0)</span>
+<a name="l00302"></a>00302 <span class="preprocessor"></span><span class="preprocessor">    #define __TBB_RETHROW() ((void)0)</span>
+<a name="l00303"></a>00303 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_EXCEPTIONS */</span>
+<a name="l00304"></a>00304 
+<a name="l00306"></a>00306 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC runtime_warning( <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ... );
+<a name="l00307"></a>00307 
+<a name="l00308"></a>00308 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+<a name="l00309"></a>00309 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span>* <span class="keyword">const</span> poisoned_ptr = reinterpret_cast<void*>(-1);
+<a name="l00310"></a>00310 
+<a name="l00312"></a>00312 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00313"></a>00313 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T*& p ) { p = reinterpret_cast<T*>(poisoned_ptr); }
+<a name="l00314"></a>00314 
+<a name="l00316"></a>00316 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00317"></a>00317 <span class="keyword">inline</span> <span class="keywordtype">bool</span> is_poisoned( T* p ) { <span class="keywordflow">return</span> p == reinterpret_cast<T*>(poisoned_ptr); }
+<a name="l00318"></a>00318 <span class="preprocessor">#else</span>
+<a name="l00319"></a>00319 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00320"></a>00320 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* ) {<span class="comment">/*do nothing*/</span>}
+<a name="l00321"></a>00321 <span class="preprocessor">#endif </span><span class="comment">/* !TBB_USE_ASSERT */</span>
+<a name="l00322"></a>00322 
+<a name="l00324"></a>00324 
+<a name="l00326"></a>00326 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U> 
+<a name="l00327"></a>00327 <span class="keyword">inline</span> T punned_cast( U* ptr ) {
+<a name="l00328"></a>00328     uintptr_t x = reinterpret_cast<uintptr_t>(ptr);
+<a name="l00329"></a>00329     <span class="keywordflow">return</span> reinterpret_cast<T>(x);
+<a name="l00330"></a>00330 }
+<a name="l00331"></a>00331 
+<a name="l00333"></a>00333 <span class="keyword">class </span>no_assign {
+<a name="l00334"></a>00334     <span class="comment">// Deny assignment</span>
+<a name="l00335"></a>00335     <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> no_assign& );
+<a name="l00336"></a>00336 <span class="keyword">public</span>:
+<a name="l00337"></a>00337 <span class="preprocessor">#if __GNUC__</span>
+<a name="l00339"></a>00339 <span class="preprocessor">    no_assign() {}</span>
+<a name="l00340"></a>00340 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
+<a name="l00341"></a>00341 };
+<a name="l00342"></a>00342 
+<a name="l00344"></a>00344 <span class="keyword">class </span>no_copy: no_assign {
+<a name="l00346"></a>00346     no_copy( <span class="keyword">const</span> no_copy& );
+<a name="l00347"></a>00347 <span class="keyword">public</span>:
+<a name="l00349"></a>00349     no_copy() {}
+<a name="l00350"></a>00350 };
+<a name="l00351"></a>00351 
+<a name="l00353"></a>00353 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00354"></a>00354 <span class="keyword">struct </span>allocator_type {
+<a name="l00355"></a>00355     <span class="keyword">typedef</span> T value_type;
+<a name="l00356"></a>00356 };
+<a name="l00357"></a>00357 
+<a name="l00358"></a>00358 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00360"></a>00360 <span class="preprocessor">template<typename T></span>
+<a name="l00361"></a>00361 <span class="preprocessor"></span><span class="keyword">struct </span>allocator_type<const T> {
+<a name="l00362"></a>00362     <span class="keyword">typedef</span> T value_type;
+<a name="l00363"></a>00363 };
+<a name="l00364"></a>00364 <span class="preprocessor">#endif</span>
+<a name="l00365"></a>00365 <span class="preprocessor"></span>
+<a name="l00367"></a>00367 <span class="keyword">inline</span> size_t size_t_select( <span class="keywordtype">unsigned</span> u, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ull ) {
+<a name="l00368"></a>00368     <span class="comment">/* Explicit cast of the arguments to size_t is done to avoid compiler warnings</span>
+<a name="l00369"></a>00369 <span class="comment">       (e.g. by Clang and MSVC) about possible truncation. The value of the right size,</span>
+<a name="l00370"></a>00370 <span class="comment">       which is selected by ?:, is anyway not truncated or promoted.</span>
+<a name="l00371"></a>00371 <span class="comment">       MSVC still warns if this trick is applied directly to constants, hence this function. */</span>
+<a name="l00372"></a>00372     <span class="keywordflow">return</span> (<span class="keyword">sizeof</span>(size_t)==<span class="keyword">sizeof</span>(u)) ? size_t(u) : size_t(ull);
+<a name="l00373"></a>00373 }
+<a name="l00374"></a>00374 
+<a name="l00375"></a>00375 <span class="comment">// Struct to be used as a version tag for inline functions.</span>
+<a name="l00378"></a>00378 <span class="comment"></span><span class="keyword">struct </span>version_tag_v3 {};
+<a name="l00379"></a>00379 
+<a name="l00380"></a>00380 <span class="keyword">typedef</span> version_tag_v3 version_tag;
+<a name="l00381"></a>00381 
+<a name="l00382"></a>00382 } <span class="comment">// internal</span>
+<a name="l00384"></a>00384 <span class="comment"></span>
+<a name="l00385"></a>00385 } <span class="comment">// tbb</span>
+<a name="l00386"></a>00386 
+<a name="l00387"></a>00387 <span class="preprocessor">#endif </span><span class="comment">/* RC_INVOKED */</span>
+<a name="l00388"></a>00388 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_stddef_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00655.html b/doc/html/a00655.html
new file mode 100644
index 0000000..baea25f
--- /dev/null
+++ b/doc/html/a00655.html
@@ -0,0 +1,298 @@
+<!DOCTYPE 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>
+<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_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-2012 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_thread_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_thread_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 "machine/windows_api.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 "tbb_stddef.h"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "tick_count.h"</span>
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>    <span class="comment">// Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers</span>
+<a name="l00039"></a>00039 <span class="preprocessor">    #pragma warning (push)</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (disable: 4530)</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>
+<a name="l00043"></a>00043 <span class="preprocessor">#include <iosfwd></span>
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045 <span class="preprocessor">#if !TBB_USE_EXCEPTIONS && _MSC_VER</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">    #pragma warning (pop)</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>
+<a name="l00049"></a>00049 <span class="keyword">namespace </span>tbb {
+<a name="l00050"></a>00050 
+<a name="l00052"></a>00052 <span class="keyword">namespace </span>internal {
+<a name="l00053"></a>00053     
+<a name="l00054"></a>00054     <span class="keyword">class </span>tbb_thread_v3;
+<a name="l00055"></a>00055 
+<a name="l00056"></a>00056 } <span class="comment">// namespace internal</span>
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ); 
+<a name="l00059"></a>00059 
+<a name="l00060"></a>00060 <span class="keyword">namespace </span>internal {
+<a name="l00061"></a>00061 
+<a name="l00063"></a>00063     <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC allocate_closure_v3( size_t size );
+<a name="l00065"></a>00065     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free_closure_v3( <span class="keywordtype">void</span>* );
+<a name="l00066"></a>00066    
+<a name="l00067"></a>00067     <span class="keyword">struct </span>thread_closure_base {
+<a name="l00068"></a>00068         <span class="keywordtype">void</span>* operator new( size_t size ) {<span class="keywordflow">return</span> allocate_closure_v3(size);}
+<a name="l00069"></a>00069         <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* ptr ) {free_closure_v3(ptr);}
+<a name="l00070"></a>00070     };
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072     <span class="keyword">template</span><<span class="keyword">class</span> F> <span class="keyword">struct </span>thread_closure_0: thread_closure_base {
+<a name="l00073"></a>00073         F function;
+<a name="l00074"></a>00074 
+<a name="l00075"></a>00075         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
+<a name="l00076"></a>00076             thread_closure_0 *<span class="keyword">self</span> = static_cast<thread_closure_0*>(c);
+<a name="l00077"></a>00077             <span class="keyword">self</span>->function();
+<a name="l00078"></a>00078             <span class="keyword">delete</span> <span class="keyword">self</span>;
+<a name="l00079"></a>00079             <span class="keywordflow">return</span> 0;
+<a name="l00080"></a>00080         }
+<a name="l00081"></a>00081         thread_closure_0( <span class="keyword">const</span> F& f ) : function(f) {}
+<a name="l00082"></a>00082     };
+<a name="l00084"></a>00084     <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="l00085"></a>00085         F function;
+<a name="l00086"></a>00086         X arg1;
+<a name="l00088"></a>00088         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
+<a name="l00089"></a>00089             thread_closure_1 *<span class="keyword">self</span> = static_cast<thread_closure_1*>(c);
+<a name="l00090"></a>00090             <span class="keyword">self</span>->function(self->arg1);
+<a name="l00091"></a>00091             <span class="keyword">delete</span> <span class="keyword">self</span>;
+<a name="l00092"></a>00092             <span class="keywordflow">return</span> 0;
+<a name="l00093"></a>00093         }
+<a name="l00094"></a>00094         thread_closure_1( <span class="keyword">const</span> F& f, <span class="keyword">const</span> X& x ) : function(f), arg1(x) {}
+<a name="l00095"></a>00095     };
+<a name="l00096"></a>00096     <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="l00097"></a>00097         F function;
+<a name="l00098"></a>00098         X arg1;
+<a name="l00099"></a>00099         Y arg2;
+<a name="l00101"></a>00101         <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
+<a name="l00102"></a>00102             thread_closure_2 *<span class="keyword">self</span> = static_cast<thread_closure_2*>(c);
+<a name="l00103"></a>00103             <span class="keyword">self</span>->function(self->arg1, self->arg2);
+<a name="l00104"></a>00104             <span class="keyword">delete</span> <span class="keyword">self</span>;
+<a name="l00105"></a>00105             <span class="keywordflow">return</span> 0;
+<a name="l00106"></a>00106         }
+<a name="l00107"></a>00107         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="l00108"></a>00108     };
+<a name="l00109"></a>00109 
+<a name="l00111"></a>00111     <span class="keyword">class </span>tbb_thread_v3 {
+<a name="l00112"></a>00112         tbb_thread_v3(<span class="keyword">const</span> tbb_thread_v3&); <span class="comment">// = delete;   // Deny access</span>
+<a name="l00113"></a>00113     <span class="keyword">public</span>:
+<a name="l00114"></a>00114 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span>        <span class="keyword">typedef</span> HANDLE native_handle_type; 
+<a name="l00116"></a>00116 <span class="preprocessor">#else</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span>        <span class="keyword">typedef</span> pthread_t native_handle_type; 
+<a name="l00118"></a>00118 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span>
+<a name="l00120"></a>00120         <span class="keyword">class </span>id;
+<a name="l00122"></a>00122         tbb_thread_v3() : my_handle(0)
+<a name="l00123"></a>00123 #if _WIN32||_WIN64
+<a name="l00124"></a>00124             , my_thread_id(0)
+<a name="l00125"></a>00125 #endif <span class="comment">// _WIN32||_WIN64</span>
+<a name="l00126"></a>00126         {}
+<a name="l00127"></a>00127         
+<a name="l00129"></a>00129         <span class="keyword">template</span> <<span class="keyword">class</span> F> <span class="keyword">explicit</span> tbb_thread_v3(F f) {
+<a name="l00130"></a>00130             <span class="keyword">typedef</span> internal::thread_closure_0<F> closure_type;
+<a name="l00131"></a>00131             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f));
+<a name="l00132"></a>00132         }
+<a name="l00134"></a>00134         <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="l00135"></a>00135             <span class="keyword">typedef</span> internal::thread_closure_1<F,X> closure_type;
+<a name="l00136"></a>00136             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x));
+<a name="l00137"></a>00137         }
+<a name="l00139"></a>00139         <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="l00140"></a>00140             <span class="keyword">typedef</span> internal::thread_closure_2<F,X,Y> closure_type;
+<a name="l00141"></a>00141             internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x,y));
+<a name="l00142"></a>00142         }
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144         tbb_thread_v3& operator=(tbb_thread_v3& x) {
+<a name="l00145"></a>00145             <span class="keywordflow">if</span> (joinable()) detach();
+<a name="l00146"></a>00146             my_handle = x.my_handle;
+<a name="l00147"></a>00147             x.my_handle = 0;
+<a name="l00148"></a>00148 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00149"></a>00149 <span class="preprocessor"></span>            my_thread_id = x.my_thread_id;
+<a name="l00150"></a>00150             x.my_thread_id = 0;
+<a name="l00151"></a>00151 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00152"></a>00152 <span class="preprocessor"></span>            <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00153"></a>00153         }
+<a name="l00154"></a>00154         <span class="keywordtype">void</span> swap( tbb_thread_v3& t ) {tbb::swap( *<span class="keyword">this</span>, t );}
+<a name="l00155"></a>00155         <span class="keywordtype">bool</span> joinable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_handle!=0; }
+<a name="l00157"></a>00157         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD join();
+<a name="l00159"></a>00159         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD detach();
+<a name="l00160"></a>00160         ~tbb_thread_v3() {<span class="keywordflow">if</span>( joinable() ) detach();}
+<a name="l00161"></a>00161         <span class="keyword">inline</span> <span class="keywordtype">id</span> get_id() <span class="keyword">const</span>;
+<a name="l00162"></a>00162         native_handle_type native_handle() { <span class="keywordflow">return</span> my_handle; }
+<a name="l00163"></a>00163     
+<a name="l00165"></a>00165 
+<a name="l00174"></a>00174         <span class="keyword">static</span> <span class="keywordtype">unsigned</span> __TBB_EXPORTED_FUNC hardware_concurrency();
+<a name="l00175"></a>00175     <span class="keyword">private</span>:
+<a name="l00176"></a>00176         native_handle_type my_handle; 
+<a name="l00177"></a>00177 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00178"></a>00178 <span class="preprocessor"></span>        DWORD my_thread_id;
+<a name="l00179"></a>00179 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00180"></a>00180 <span class="preprocessor"></span>
+<a name="l00182"></a>00182         <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine), 
+<a name="l00183"></a>00183                              <span class="keywordtype">void</span>* closure );
+<a name="l00184"></a>00184         <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="l00185"></a>00185         <span class="keyword">friend</span> <span class="keywordtype">void</span> tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 ); 
+<a name="l00186"></a>00186     };
+<a name="l00187"></a>00187         
+<a name="l00188"></a>00188     <span class="keyword">class </span>tbb_thread_v3::id { 
+<a name="l00189"></a>00189 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00190"></a>00190 <span class="preprocessor"></span>        DWORD my_id;
+<a name="l00191"></a>00191         id( DWORD id_ ) : my_id(id_) {}
+<a name="l00192"></a>00192 <span class="preprocessor">#else</span>
+<a name="l00193"></a>00193 <span class="preprocessor"></span>        pthread_t my_id;
+<a name="l00194"></a>00194         id( pthread_t id_ ) : my_id(id_) {}
+<a name="l00195"></a>00195 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00196"></a>00196 <span class="preprocessor"></span>        <span class="keyword">friend</span> <span class="keyword">class </span>tbb_thread_v3;
+<a name="l00197"></a>00197     <span class="keyword">public</span>:
+<a name="l00198"></a>00198         id() : my_id(0) {}
+<a name="l00199"></a>00199 
+<a name="l00200"></a>00200         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00201"></a>00201         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00202"></a>00202         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00203"></a>00203         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00204"></a>00204         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00205"></a>00205         <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+<a name="l00206"></a>00206         
+<a name="l00207"></a>00207         <span class="keyword">template</span><<span class="keyword">class</span> <span class="keywordtype">char</span>T, <span class="keyword">class</span> traits>
+<a name="l00208"></a>00208         <span class="keyword">friend</span> std::basic_ostream<charT, traits>&
+<a name="l00209"></a>00209         operator<< (std::basic_ostream<charT, traits> &out, 
+<a name="l00210"></a>00210                     tbb_thread_v3::id id)
+<a name="l00211"></a>00211         {
+<a name="l00212"></a>00212             out << <span class="keywordtype">id</span>.my_id;
+<a name="l00213"></a>00213             <span class="keywordflow">return</span> out;
+<a name="l00214"></a>00214         }
+<a name="l00215"></a>00215         <span class="keyword">friend</span> tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+<a name="l00216"></a>00216     }; <span class="comment">// tbb_thread_v3::id</span>
+<a name="l00217"></a>00217 
+<a name="l00218"></a>00218     tbb_thread_v3::id tbb_thread_v3::get_id()<span class="keyword"> const </span>{
+<a name="l00219"></a>00219 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00220"></a>00220 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_thread_id);
+<a name="l00221"></a>00221 <span class="preprocessor">#else</span>
+<a name="l00222"></a>00222 <span class="preprocessor"></span>        <span class="keywordflow">return</span> id(my_handle);
+<a name="l00223"></a>00223 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+<a name="l00224"></a>00224 <span class="preprocessor"></span>    }
+<a name="l00225"></a>00225     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
+<a name="l00226"></a>00226     tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+<a name="l00227"></a>00227     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_yield_v3();
+<a name="l00228"></a>00228     <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_sleep_v3(<span class="keyword">const</span> tick_count::interval_t &i);
+<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     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00247"></a>00247     {
+<a name="l00248"></a>00248         <span class="keywordflow">return</span> x.my_id > y.my_id;
+<a name="l00249"></a>00249     }
+<a name="l00250"></a>00250     <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+<a name="l00251"></a>00251     {
+<a name="l00252"></a>00252         <span class="keywordflow">return</span> x.my_id >= y.my_id;
+<a name="l00253"></a>00253     }
+<a name="l00254"></a>00254 
+<a name="l00255"></a>00255 } <span class="comment">// namespace internal;</span>
+<a name="l00256"></a>00256 
+<a name="l00258"></a>00258 <span class="keyword">typedef</span> internal::tbb_thread_v3 tbb_thread;
+<a name="l00259"></a>00259 
+<a name="l00260"></a>00260 <span class="keyword">using</span> internal::operator==;
+<a name="l00261"></a>00261 <span class="keyword">using</span> internal::operator!=;
+<a name="l00262"></a>00262 <span class="keyword">using</span> internal::operator<;
+<a name="l00263"></a>00263 <span class="keyword">using</span> internal::operator>;
+<a name="l00264"></a>00264 <span class="keyword">using</span> internal::operator<=;
+<a name="l00265"></a>00265 <span class="keyword">using</span> internal::operator>=;
+<a name="l00266"></a>00266 
+<a name="l00267"></a>00267 <span class="keyword">inline</span> <span class="keywordtype">void</span> move( tbb_thread& t1, tbb_thread& t2 ) {
+<a name="l00268"></a>00268     internal::move_v3(t1, t2);
+<a name="l00269"></a>00269 }
+<a name="l00270"></a>00270 
+<a name="l00271"></a>00271 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) {
+<a name="l00272"></a>00272     tbb::tbb_thread::native_handle_type h = t1.my_handle;
+<a name="l00273"></a>00273     t1.my_handle = t2.my_handle;
+<a name="l00274"></a>00274     t2.my_handle = h;
+<a name="l00275"></a>00275 <span class="preprocessor">#if _WIN32||_WIN64</span>
+<a name="l00276"></a>00276 <span class="preprocessor"></span>    DWORD i = t1.my_thread_id;
+<a name="l00277"></a>00277     t1.my_thread_id = t2.my_thread_id;
+<a name="l00278"></a>00278     t2.my_thread_id = i;
+<a name="l00279"></a>00279 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+<a name="l00280"></a>00280 }
+<a name="l00281"></a>00281 
+<a name="l00282"></a>00282 <span class="keyword">namespace </span>this_tbb_thread {
+<a name="l00283"></a>00283     <span class="keyword">inline</span> tbb_thread::id get_id() { <span class="keywordflow">return</span> internal::thread_get_id_v3(); }
+<a name="l00285"></a>00285     <span class="keyword">inline</span> <span class="keywordtype">void</span> yield() { internal::thread_yield_v3(); }
+<a name="l00287"></a>00287     <span class="keyword">inline</span> <span class="keywordtype">void</span> sleep(<span class="keyword">const</span> tick_count::interval_t &i) { 
+<a name="l00288"></a>00288         internal::thread_sleep_v3(i);  
+<a name="l00289"></a>00289     }
+<a name="l00290"></a>00290 }  <span class="comment">// namespace this_tbb_thread</span>
+<a name="l00291"></a>00291 
+<a name="l00292"></a>00292 } <span class="comment">// namespace tbb</span>
+<a name="l00293"></a>00293 
+<a name="l00294"></a>00294 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_thread_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00663.html b/doc/html/a00663.html
new file mode 100644
index 0000000..ad2e389
--- /dev/null
+++ b/doc/html/a00663.html
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbbmalloc_proxy.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>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-2012 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="comment">/*</span>
+<a name="l00022"></a>00022 <span class="comment">Replacing the standard memory allocation routines in Microsoft* C/C++ RTL </span>
+<a name="l00023"></a>00023 <span class="comment">(malloc/free, global new/delete, etc.) with the TBB memory allocator. </span>
+<a name="l00024"></a>00024 <span class="comment"></span>
+<a name="l00025"></a>00025 <span class="comment">Include the following header to a source of any binary which is loaded during </span>
+<a name="l00026"></a>00026 <span class="comment">application startup</span>
+<a name="l00027"></a>00027 <span class="comment"></span>
+<a name="l00028"></a>00028 <span class="comment">#include "tbb/tbbmalloc_proxy.h"</span>
+<a name="l00029"></a>00029 <span class="comment"></span>
+<a name="l00030"></a>00030 <span class="comment">or add following parameters to the linker options for the binary which is </span>
+<a name="l00031"></a>00031 <span class="comment">loaded during application startup. It can be either exe-file or dll.</span>
+<a name="l00032"></a>00032 <span class="comment"></span>
+<a name="l00033"></a>00033 <span class="comment">For win32</span>
+<a name="l00034"></a>00034 <span class="comment">tbbmalloc_proxy.lib /INCLUDE:"___TBB_malloc_proxy"</span>
+<a name="l00035"></a>00035 <span class="comment">win64</span>
+<a name="l00036"></a>00036 <span class="comment">tbbmalloc_proxy.lib /INCLUDE:"__TBB_malloc_proxy"</span>
+<a name="l00037"></a>00037 <span class="comment">*/</span>
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039 <span class="preprocessor">#ifndef __TBB_tbbmalloc_proxy_H</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbbmalloc_proxy_H</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a>00042 <span class="preprocessor">#if _MSC_VER</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="preprocessor">#ifdef _DEBUG</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">    #pragma comment(lib, "tbbmalloc_proxy_debug.lib")</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">    #pragma comment(lib, "tbbmalloc_proxy.lib")</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>
+<a name="l00050"></a>00050 <span class="preprocessor">#if defined(_WIN64)</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">    #pragma comment(linker, "/include:__TBB_malloc_proxy")</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">    #pragma comment(linker, "/include:___TBB_malloc_proxy")</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span>
+<a name="l00056"></a>00056 <span class="preprocessor">#else</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="comment">/* Primarily to support MinGW */</span>
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">void</span> __TBB_malloc_proxy();
+<a name="l00060"></a>00060 <span class="keyword">struct </span>__TBB_malloc_proxy_caller {
+<a name="l00061"></a>00061     __TBB_malloc_proxy_caller() { __TBB_malloc_proxy(); }
+<a name="l00062"></a>00062 } <span class="keyword">volatile</span> __TBB_malloc_proxy_helper_object;
+<a name="l00063"></a>00063 
+<a name="l00064"></a>00064 <span class="preprocessor">#endif // _MSC_VER</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a>00066 <span class="preprocessor">#endif //__TBB_tbbmalloc_proxy_H</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  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/a00665.html b/doc/html/a00665.html
new file mode 100644
index 0000000..e6ecab1
--- /dev/null
+++ b/doc/html/a00665.html
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tick_count.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<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>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-2012 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_tick_count_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tick_count_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 _WIN32||_WIN64</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_api.h"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#elif __linux__</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <ctime></span>
+<a name="l00030"></a>00030 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include <sys/time.h></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#endif </span><span class="comment">/* (choice of OS) */</span>
+<a name="l00033"></a>00033 
+<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="a00349.html">00038</a> <span class="keyword">class </span><a class="code" href="a00349.html">tick_count</a> {
+<a name="l00039"></a>00039 <span class="keyword">public</span>:
+<a name="l00041"></a><a class="code" href="a00350.html">00041</a>     <span class="keyword">class </span><a class="code" href="a00350.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="a00350.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="a00350.html#75a9a0949f8a8a84d6758835f1b48dad">00046</a>         <a class="code" href="a00350.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="a00350.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="a00350.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="a00349.html">tbb::tick_count</a>;
+<a name="l00055"></a>00055 
+<a name="l00057"></a>00057         <span class="keyword">friend</span> <a class="code" href="a00350.html">interval_t</a> <a class="code" href="a00350.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00349.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00349.html">tick_count</a>& t0 );
+<a name="l00058"></a>00058 
+<a name="l00060"></a><a class="code" href="a00350.html#5871ead1ca230efbe52a5008470e6428">00060</a>         <span class="keyword">friend</span> <a class="code" href="a00350.html">interval_t</a> <a class="code" href="a00350.html#5871ead1ca230efbe52a5008470e6428">operator+</a>( <span class="keyword">const</span> <a class="code" href="a00350.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00350.html">interval_t</a>& j ) {
+<a name="l00061"></a>00061             <span class="keywordflow">return</span> <a class="code" href="a00350.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00350.html#beea71acda120af3e3e29f10e8cb5c10">value</a>+j.<a class="code" href="a00350.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
+<a name="l00062"></a>00062         }
+<a name="l00063"></a>00063 
+<a name="l00065"></a><a class="code" href="a00350.html#fa509691e1d689830931e36edd274f76">00065</a>         <span class="keyword">friend</span> <a class="code" href="a00350.html">interval_t</a> <a class="code" href="a00350.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00350.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00350.html">interval_t</a>& j ) {
+<a name="l00066"></a>00066             <span class="keywordflow">return</span> <a class="code" href="a00350.html#75a9a0949f8a8a84d6758835f1b48dad">interval_t</a>(i.<a class="code" href="a00350.html#beea71acda120af3e3e29f10e8cb5c10">value</a>-j.<a class="code" href="a00350.html#beea71acda120af3e3e29f10e8cb5c10">value</a>);
+<a name="l00067"></a>00067         }
+<a name="l00068"></a>00068 
+<a name="l00070"></a><a class="code" href="a00350.html#cd9814947902e26463a69a111530f81b">00070</a>         <a class="code" href="a00350.html">interval_t</a>& <a class="code" href="a00350.html#cd9814947902e26463a69a111530f81b">operator+=</a>( <span class="keyword">const</span> <a class="code" href="a00350.html">interval_t</a>& i ) {value += i.<a class="code" href="a00350.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="a00350.html#35ff7eaf7c2031b4a991402ac9ecb940">00073</a>         <a class="code" href="a00350.html">interval_t</a>& <a class="code" href="a00350.html#35ff7eaf7c2031b4a991402ac9ecb940">operator-=</a>( <span class="keyword">const</span> <a class="code" href="a00350.html">interval_t</a>& i ) {value -= i.<a class="code" href="a00350.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="a00349.html#34593326ae4191e02a13c7cbdab9de4c">00077</a>     <a class="code" href="a00349.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="a00349.html">tick_count</a> <a class="code" href="a00349.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="a00349.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00349.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00349.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="a00349.html#fb7f78ca61cf28398645ace66e284473">00089</a> <span class="keyword">inline</span> <a class="code" href="a00349.html">tick_count</a> <a class="code" href="a00349.html#fb7f78ca61cf28398645ace66e284473">tick_count::now</a>() {
+<a name="l00090"></a>00090     <a class="code" href="a00349.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="a00349.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>
+<a name="l00098"></a>00098 <span class="preprocessor"></span>    <span class="keywordtype">int</span> status = 
+<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="a00349.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>
+<a name="l00106"></a>00106 <span class="preprocessor"></span>    <span class="keywordtype">int</span> status = 
+<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="a00349.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="a00350.html#1a21a428e00cced2e6a49e0f5f2258bf">00115</a> <span class="keyword">inline</span> <a class="code" href="a00350.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;
+<a name="l00119"></a>00119     QueryPerformanceFrequency(&qpfreq);
+<a name="l00120"></a>00120     value = static_cast<long long>(sec*qpfreq.QuadPart);
+<a name="l00121"></a>00121 <span class="preprocessor">#elif __linux__</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span>    value = static_cast<long long>(sec*1E9);
+<a name="l00123"></a>00123 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
+<a name="l00124"></a>00124     value = static_cast<long long>(sec*1E6);
+<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="a00349.html#09dde78a4100800c11bb883d6204b586">00128</a> <span class="keyword">inline</span> <a class="code" href="a00350.html">tick_count::interval_t</a> <a class="code" href="a00349.html#09dde78a4100800c11bb883d6204b586">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00349.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00349.html">tick_count</a>& t0 ) {
+<a name="l00129"></a>00129     <span class="keywordflow">return</span> <a class="code" href="a00350.html">tick_count::interval_t</a>( t1.<a class="code" href="a00349.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a>-t0.<a class="code" href="a00349.html#1ba05ad46dc08bc1bf34bd6cc94e36ec">my_count</a> );
+<a name="l00130"></a>00130 }
+<a name="l00131"></a>00131 
+<a name="l00132"></a><a class="code" href="a00350.html#d5d8429c0bc59cf6131b2abc7929fa59">00132</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="a00350.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);
+<a name="l00136"></a>00136     <span class="keywordflow">return</span> value/(double)qpfreq.QuadPart;
+<a name="l00137"></a>00137 #elif __linux__
+<a name="l00138"></a>00138     <span class="keywordflow">return</span> value*1E-9;
+<a name="l00139"></a>00139 #<span class="keywordflow">else</span> <span class="comment">/* generic Unix */</span>
+<a name="l00140"></a>00140     <span class="keywordflow">return</span> value*1E-6;
+<a name="l00141"></a>00141 #endif <span class="comment">/* (choice of OS) */</span>
+<a name="l00142"></a>00142 }
+<a name="l00143"></a>00143 
+<a name="l00144"></a>00144 } <span class="comment">// namespace tbb</span>
+<a name="l00145"></a>00145 
+<a name="l00146"></a>00146 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tick_count_H */</span>
+<a name="l00147"></a>00147 
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/annotated.html b/doc/html/annotated.html
index 0af9bd7..2293f51 100644
--- a/doc/html/annotated.html
+++ b/doc/html/annotated.html
@@ -21,113 +21,116 @@
     <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="a00225.html">tbb::affinity_partitioner</a></td><td class="indexvalue">An affinity partitioner </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00226.html">tbb::internal::affinity_partitioner_base_v3</a></td><td class="indexvalue">Defines entry point for affinity partitioner into tbb run-time library </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00227.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="a00228.html">tbb::atomic< T ></a></td><td class="indexvalue">Primary template for atomic </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00229.html">tbb::atomic< void * ></a></td><td class="indexvalue">Specialization for <a class="el" href="a00229.html">atomic<void*></a>, for sake of not allowing arithmetic or operator-> </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00230.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="a00231.html">tbb::auto_partitioner</a></td><td class="indexvalue">An auto partitioner </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00232.html">tbb::bad_last_alloc</a></td><td class="indexvalue">Exception for concurrent containers </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00233.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="a00234.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="a00235.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="a00236.html">tbb::flow::interface6::broadcast_node< T ></a></td><td class="indexvalue">Forwards messages of type T to all successors </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td class="indexvalue">Forwards messages in arbitrary order </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00238.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="a00239.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="a00240.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="a00241.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="a00242.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="a00243.html">tbb::interface5::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="a00244.html">tbb::interface5::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="a00245.html">tbb::interface5::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="a00246.html">tbb::interface5::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="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="indexvalue">Concurrent priority queue </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00248.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="a00249.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="a00250.html">tbb::concurrent_vector< T, A ></a></td><td class="indexvalue">Concurrent vector container </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00251.html">tbb::flow::interface6::continue_msg</a></td><td class="indexvalue">An empty class used for messages that mean "I'm done" </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a></td><td class="indexvalue">Implements an executable node that supports <a class="el" href="a00251.html">continue_msg</a> -> Output </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a></td><td class="indexvalue">Base class for receivers of completion messages </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00254.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="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="indexvalue">The <a class="el" href="a00255.html">enumerable_thread_specific</a> container </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00256.html">tbb::filter</a></td><td class="indexvalue">A stage in a pipeline </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a></td><td class="indexvalue">Class representing a chain of type-safe pipeline filters </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00258.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="a00259.html">tbb::interface6::flow_control</a></td><td class="indexvalue">Input_filter control to signal end-of-input for parallel_pipeline </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td class="indexvalue">Implements a function node that supports Input -> Output </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td class="indexvalue">Implements a function node that supports Input -> Output </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00262.html">tbb::flow::interface6::graph</a></td><td class="indexvalue">The graph class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a></td><td class="indexvalue">The base of all graph nodes. Allows them to be stored in a collection for deletion </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00264.html">tbb::improper_lock</a></td><td class="indexvalue">Exception for PPL locks </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00265.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="a00266.html">tbb::flow::interface6::limiter_node< T ></a></td><td class="indexvalue">Forwards messages only if the threshold has not been reached </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00267.html">tbb::internal::machine_load_store_relaxed< T, S ></a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00268.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00269.html">tbb::interface6::memory_pool< Alloc ></a></td><td class="indexvalue">Thread-safe growable pool allocator for variable-size requests </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></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="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></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="a00272.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="a00273.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="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a></td><td class="indexvalue">Implements a function node that supports Input -> (set of outputs) </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00275.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="a00276.html">tbb::mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00277.html">tbb::null_mutex</a></td><td class="indexvalue">A mutex which does nothing </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00278.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="a00279.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="a00280.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="a00281.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="a00282.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="a00283.html">tbb::internal::partition_type_base</a></td><td class="indexvalue">Provides backward-compatible methods for partition objects without affinity </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00284.html">tbb::pipeline</a></td><td class="indexvalue">A processing pipeline that applies filters to items </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00285.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="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td class="indexvalue">Forwards messages in priority order </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a></td><td class="indexvalue">Forwards messages in FIFO order </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00288.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="a00289.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="a00290.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="a00291.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="a00292.html">tbb::interface5::reader_writer_lock</a></td><td class="indexvalue">Writer-preference reader-writer lock with local-only spinning on readers </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00293.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="indexvalue">The scoped lock pattern for write locks </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00294.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="indexvalue">The scoped lock pattern for read locks </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a></td><td class="indexvalue">Pure virtual template class that defines a receiver of messages of type T </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00296.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="a00297.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="a00298.html">tbb::interface6::runtime_loader</a></td><td class="indexvalue">Load TBB at runtime </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00299.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="a00300.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="a00301.html">tbb::flow::interface6::sender< T ></a></td><td class="indexvalue">Pure virtual template class that defines a sender of messages of type T </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td class="indexvalue">Forwards messages in sequence order </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00303.html">tbb::simple_partitioner</a></td><td class="indexvalue">A simple partitioner </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a></td><td class="indexvalue">An executable node that acts as a source, i.e. it has no predecessors </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00305.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="a00306.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="a00307.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="a00308.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="a00309.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="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td class="indexvalue">Split_node: accepts a tuple as input, forwards each element of the tuple to its </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00311.html">tbb::task</a></td><td class="indexvalue">Base class for user-defined tasks </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00312.html">tbb::interface5::internal::task_base</a></td><td class="indexvalue">Base class for methods that became static in TBB 3.0 </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00313.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="a00314.html">tbb::task_group_context</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00315.html">tbb::task_list</a></td><td class="indexvalue">A list of children </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00316.html">tbb::task_scheduler_init</a></td><td class="indexvalue">Class delimiting the scope of task scheduler activity </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00317.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="a00318.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="a00319.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="a00320.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="a00321.html">tbb::tbb_hash_compare< Key ></a></td><td class="indexvalue">Hash_compare that is default argument for concurrent_hash_map </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00322.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="a00323.html">tbb::tick_count</a></td><td class="indexvalue">Absolute timestamp </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00324.html">tbb::tick_count::interval_t</a></td><td class="indexvalue">Relative time interval </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00325.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="a00326.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="a00327.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="a00249.html">tbb::affinity_partitioner</a></td><td class="indexvalue">An affinity partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a></td><td class="indexvalue">Defines entry point for affinity partitioner into tbb run-time library </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00251.html">tbb::interface6::aggregator</a></td><td class="indexvalue">Basic aggregator interface </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00252.html">tbb::interface6::aggregator_ext< handler_type ></a></td><td class="indexvalue">Aggregator base class and expert interface </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00253.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="a00254.html">tbb::atomic< T ></a></td><td class="indexvalue">Primary template for atomic </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00255.html">tbb::atomic< void * ></a></td><td class="indexvalue">Specialization for <a class="el" href="a00255.html">atomic<void*></a>, for sake of not allowing arithmetic or operator-> </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00256.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="a00257.html">tbb::auto_partitioner</a></td><td class="indexvalue">An auto partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00258.html">tbb::bad_last_alloc</a></td><td class="indexvalue">Exception for concurrent containers </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00259.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="a00260.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="a00261.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="a00262.html">tbb::flow::interface6::broadcast_node< T ></a></td><td class="indexvalue">Forwards messages of type T to all successors </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a></td><td class="indexvalue">Forwards messages in arbitrary order </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00264.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="a00265.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="a00266.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="a00267.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="a00268.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="a00269.html">tbb::interface5::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="a00270.html">tbb::interface5::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="a00271.html">tbb::interface5::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="a00272.html">tbb::interface5::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="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a></td><td class="indexvalue">Concurrent priority queue </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00274.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="a00275.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="a00276.html">tbb::concurrent_vector< T, A ></a></td><td class="indexvalue">Concurrent vector container </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00277.html">tbb::flow::interface6::continue_msg</a></td><td class="indexvalue">An empty class used for messages that mean "I'm done" </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a></td><td class="indexvalue">Implements an executable node that supports <a class="el" href="a00277.html">continue_msg</a> -> Output </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a></td><td class="indexvalue">Base class for receivers of completion messages </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00280.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="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a></td><td class="indexvalue">The <a class="el" href="a00281.html">enumerable_thread_specific</a> container </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00282.html">tbb::filter</a></td><td class="indexvalue">A stage in a pipeline </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a></td><td class="indexvalue">Class representing a chain of type-safe pipeline filters </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00284.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="a00285.html">tbb::interface6::flow_control</a></td><td class="indexvalue">Input_filter control to signal end-of-input for parallel_pipeline </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></td><td class="indexvalue">Implements a function node that supports Input -> Output </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a></td><td class="indexvalue">Implements a function node that supports Input -> Output </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00288.html">tbb::flow::interface6::graph</a></td><td class="indexvalue">The graph class </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a></td><td class="indexvalue">The base of all graph nodes </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00290.html">tbb::improper_lock</a></td><td class="indexvalue">Exception for PPL locks </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00291.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="a00292.html">tbb::flow::interface6::limiter_node< T ></a></td><td class="indexvalue">Forwards messages only if the threshold has not been reached </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00293.html">tbb::internal::machine_load_store_relaxed< T, S ></a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00294.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00295.html">tbb::interface6::memory_pool< Alloc ></a></td><td class="indexvalue">Thread-safe growable pool allocator for variable-size requests </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></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="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></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="a00298.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="a00299.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="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a></td><td class="indexvalue">Implements a function node that supports Input -> (set of outputs) </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00301.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="a00302.html">tbb::mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00303.html">tbb::null_mutex</a></td><td class="indexvalue">A mutex which does nothing </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00304.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="a00305.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="a00306.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="a00307.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="a00308.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="a00309.html">tbb::internal::partition_type_base</a></td><td class="indexvalue">Provides backward-compatible methods for partition objects without affinity </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00310.html">tbb::pipeline</a></td><td class="indexvalue">A processing pipeline that applies filters to items </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00311.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="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a></td><td class="indexvalue">Forwards messages in priority order </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a></td><td class="indexvalue">Forwards messages in FIFO order </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00314.html">tbb::queuing_mutex</a></td><td class="indexvalue">Queuing mutex with local-only spinning </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00315.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="a00316.html">tbb::queuing_rw_mutex</a></td><td class="indexvalue">Queuing reader-writer mutex with local-only spinning </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00317.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="a00318.html">tbb::interface5::reader_writer_lock</a></td><td class="indexvalue">Writer-preference reader-writer lock with local-only spinning on readers </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00319.html">tbb::interface5::reader_writer_lock::scoped_lock</a></td><td class="indexvalue">The scoped lock pattern for write locks </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00320.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a></td><td class="indexvalue">The scoped lock pattern for read locks </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a></td><td class="indexvalue">Pure virtual template class that defines a receiver of messages of type T </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00322.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="a00323.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="a00324.html">tbb::interface6::runtime_loader</a></td><td class="indexvalue">Load TBB at runtime </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00325.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="a00326.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="a00327.html">tbb::flow::interface6::sender< T ></a></td><td class="indexvalue">Pure virtual template class that defines a sender of messages of type T </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a></td><td class="indexvalue">Forwards messages in sequence order </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00329.html">tbb::simple_partitioner</a></td><td class="indexvalue">A simple partitioner </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a></td><td class="indexvalue">An executable node that acts as a source, i.e. it has no predecessors </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00331.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="a00332.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="a00333.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="a00334.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="a00335.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="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a></td><td class="indexvalue">Split_node: accepts a tuple as input, forwards each element of the tuple to its </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00337.html">tbb::task</a></td><td class="indexvalue">Base class for user-defined tasks </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00338.html">tbb::interface5::internal::task_base</a></td><td class="indexvalue">Base class for methods that became static in TBB 3.0 </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00339.html">tbb::task_group_context</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00340.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="a00341.html">tbb::task_list</a></td><td class="indexvalue">A list of children </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00342.html">tbb::task_scheduler_init</a></td><td class="indexvalue">Class delimiting the scope of task scheduler activity </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00343.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="a00344.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="a00345.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="a00346.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="a00347.html">tbb::tbb_hash_compare< Key ></a></td><td class="indexvalue">Hash_compare that is default argument for concurrent_hash_map </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00348.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="a00349.html">tbb::tick_count</a></td><td class="indexvalue">Absolute timestamp </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00350.html">tbb::tick_count::interval_t</a></td><td class="indexvalue">Relative time interval </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00351.html">tbb::user_abort</a></td><td class="indexvalue">Exception for user-initiated abort </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00352.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="a00353.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="a00354.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>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/concepts.html b/doc/html/concepts.html
index 7403edb..75a2bf9 100644
--- a/doc/html/concepts.html
+++ b/doc/html/concepts.html
@@ -22,7 +22,7 @@ TBB defines a set of minimal requirements each concept must conform to. Here is
 <li><a class="el" href="range_req.html">Requirements on range concept</a></li><li><a class="el" href="parallel_do_body_req.html">Requirements on parallel_do body</a></li><li><a class="el" href="parallel_for_body_req.html">Requirements on parallel_for body</a></li><li><a class="el" href="parallel_reduce_body_req.html">Requirements on parallel_reduce body</a></li><li><a class="el" href="parallel_scan_body_req.html">Requirements on parallel_scan body</a></li><li><a class="el" href="parallel [...]
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/deprecated.html b/doc/html/deprecated.html
index bd1303f..66a2611 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="a00249.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue::pop_if_present</a> (T &destination) </dt>
+<dt>Member <a class="el" href="a00275.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue::pop_if_present</a> (T &destination) </dt>
 <dd>Use try_pop() </dd>
 </dl>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/files.html b/doc/html/files.html
index 9f603c7..2013158 100644
--- a/doc/html/files.html
+++ b/doc/html/files.html
@@ -20,62 +20,64 @@
     <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>aligned_space.h</b> <a href="a00401.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>atomic.h</b> <a href="a00403.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range.h</b> <a href="a00412.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range2d.h</b> <a href="a00413.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>blocked_range3d.h</b> <a href="a00414.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>cache_aligned_allocator.h</b> <a href="a00415.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>combinable.h</b> <a href="a00417.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_hash_map.h</b> <a href="a00418.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_priority_queue.h</b> <a href="a00429.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_queue.h</b> <a href="a00432.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_unordered_map.h</b> <a href="a00436.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_unordered_set.h</b> <a href="a00440.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>concurrent_vector.h</b> <a href="a00443.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>critical_section.h</b> <a href="a00452.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>enumerable_thread_specific.h</b> <a href="a00455.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00343.html">flow_graph.h</a> <a href="a00468.html">[code]</a></td><td class="indexvalue">The graph related classes and functions </td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00344.html">memory_pool.h</a> <a href="a00480.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>mutex.h</b> <a href="a00487.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>null_mutex.h</b> <a href="a00489.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>null_rw_mutex.h</b> <a href="a00490.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_do.h</b> <a href="a00491.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_for.h</b> <a href="a00500.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_for_each.h</b> <a href="a00504.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_invoke.h</b> <a href="a00506.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_reduce.h</b> <a href="a00512.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_scan.h</b> <a href="a00518.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_sort.h</b> <a href="a00523.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>parallel_while.h</b> <a href="a00527.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>partitioner.h</b> <a href="a00531.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>pipeline.h</b> <a href="a00543.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>queuing_mutex.h</b> <a href="a00557.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>queuing_rw_mutex.h</b> <a href="a00558.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>reader_writer_lock.h</b> <a href="a00559.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>recursive_mutex.h</b> <a href="a00560.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>runtime_loader.h</b> <a href="a00561.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="a00363.html">scalable_allocator.h</a> <a href="a00562.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>spin_mutex.h</b> <a href="a00565.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>spin_rw_mutex.h</b> <a href="a00566.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task.h</b> <a href="a00567.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_group.h</b> <a href="a00577.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_scheduler_init.h</b> <a href="a00584.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>task_scheduler_observer.h</b> <a href="a00585.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb.h</b> <a href="a00587.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_allocator.h</b> <a href="a00588.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_config.h</b> <a href="a00592.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_exception.h</b> <a href="a00593.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_machine.h</b> <a href="a00594.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_profiling.h</b> <a href="a00600.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_stddef.h</b> <a href="a00601.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbb_thread.h</b> <a href="a00608.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tbbmalloc_proxy.h</b> <a href="a00616.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>tick_count.h</b> <a href="a00618.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>aggregator.h</b> <a href="a00432.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>aligned_space.h</b> <a href="a00440.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>atomic.h</b> <a href="a00441.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range.h</b> <a href="a00449.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range2d.h</b> <a href="a00450.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>blocked_range3d.h</b> <a href="a00451.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>cache_aligned_allocator.h</b> <a href="a00452.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>combinable.h</b> <a href="a00454.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_hash_map.h</b> <a href="a00455.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_lru_cache.h</b> <a href="a00466.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_priority_queue.h</b> <a href="a00473.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_queue.h</b> <a href="a00476.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_unordered_map.h</b> <a href="a00480.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_unordered_set.h</b> <a href="a00484.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>concurrent_vector.h</b> <a href="a00487.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>critical_section.h</b> <a href="a00496.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>enumerable_thread_specific.h</b> <a href="a00499.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00372.html">flow_graph.h</a> <a href="a00511.html">[code]</a></td><td class="indexvalue">The graph related classes and functions </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00373.html">memory_pool.h</a> <a href="a00524.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>mutex.h</b> <a href="a00531.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>null_mutex.h</b> <a href="a00533.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>null_rw_mutex.h</b> <a href="a00534.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_do.h</b> <a href="a00535.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_for.h</b> <a href="a00544.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_for_each.h</b> <a href="a00548.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_invoke.h</b> <a href="a00550.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_reduce.h</b> <a href="a00556.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_scan.h</b> <a href="a00562.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_sort.h</b> <a href="a00567.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>parallel_while.h</b> <a href="a00571.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>partitioner.h</b> <a href="a00575.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>pipeline.h</b> <a href="a00587.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>queuing_mutex.h</b> <a href="a00603.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>queuing_rw_mutex.h</b> <a href="a00604.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>reader_writer_lock.h</b> <a href="a00605.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>recursive_mutex.h</b> <a href="a00606.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>runtime_loader.h</b> <a href="a00607.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00392.html">scalable_allocator.h</a> <a href="a00608.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>spin_mutex.h</b> <a href="a00611.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>spin_rw_mutex.h</b> <a href="a00612.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task.h</b> <a href="a00613.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task_group.h</b> <a href="a00623.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task_scheduler_init.h</b> <a href="a00630.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>task_scheduler_observer.h</b> <a href="a00631.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb.h</b> <a href="a00633.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_allocator.h</b> <a href="a00634.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_config.h</b> <a href="a00638.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_exception.h</b> <a href="a00639.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_machine.h</b> <a href="a00640.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_profiling.h</b> <a href="a00647.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_stddef.h</b> <a href="a00648.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbb_thread.h</b> <a href="a00655.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tbbmalloc_proxy.h</b> <a href="a00663.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><b>tick_count.h</b> <a href="a00665.html">[code]</a></td><td class="indexvalue"></td></tr>
 </table>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions.html b/doc/html/functions.html
index 4a75e7c..6506554 100644
--- a/doc/html/functions.html
+++ b/doc/html/functions.html
@@ -61,25 +61,26 @@
 Here is a list of all documented class members with links to the class documentation for each member:
 <p>
 <h3><a class="anchor" name="index_a">- a -</a></h3><ul>
-<li>acquire()
-: <a class="el" href="a00308.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00306.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00297.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00291.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00289.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
-: <a class="el" href="a00304.html#4b647e4a93d08ccdd8d323279e4eaaa6">tbb::flow::interface6::source_node< Output ></a><li>add()
-: <a class="el" href="a00282.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00281.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
-: <a class="el" href="a00284.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
-: <a class="el" href="a00311.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>affinity_id
-: <a class="el" href="a00311.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocate()
-: <a class="el" href="a00320.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00317.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00299.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00270.html#365bd64d284c80d85bb2149a12681526">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00238.html#4cdeea67af6c1fcd8f1d5e9 [...]
-: <a class="el" href="a00311.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
-: <a class="el" href="a00311.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
-: <a class="el" href="a00311.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocated
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>allocator_type
-: <a class="el" href="a00317.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00255.html#3c03eb40955b933b01987222722ac4bd">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a c [...]
-: <a class="el" href="a00250.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
-: <a class="el" href="a00250.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a><li>automatic
-: <a class="el" href="a00316.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a></ul>
+<li>abort()
+: <a class="el" href="a00268.html#86c77a6c1317239405968f5afc7b10d3">tbb::concurrent_bounded_queue< T, A ></a><li>acquire()
+: <a class="el" href="a00334.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00332.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00323.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00317.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00315.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
+: <a class="el" href="a00330.html#4b647e4a93d08ccdd8d323279e4eaaa6">tbb::flow::interface6::source_node< Output ></a><li>add()
+: <a class="el" href="a00308.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00307.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
+: <a class="el" href="a00310.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
+: <a class="el" href="a00337.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>affinity_id
+: <a class="el" href="a00337.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocate()
+: <a class="el" href="a00346.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00343.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00325.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00296.html#365bd64d284c80d85bb2149a12681526">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00264.html#4cdeea67af6c1fcd8f1d5e9 [...]
+: <a class="el" href="a00337.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
+: <a class="el" href="a00337.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
+: <a class="el" href="a00337.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocated
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>allocator_type
+: <a class="el" href="a00281.html#3c03eb40955b933b01987222722ac4bd">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">tbb::interface5::concurrent_priority_qu [...]
+: <a class="el" href="a00276.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
+: <a class="el" href="a00276.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a><li>automatic
+: <a class="el" href="a00342.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x62.html b/doc/html/functions_0x62.html
index c7802c8..c697e3f 100644
--- a/doc/html/functions_0x62.html
+++ b/doc/html/functions_0x62.html
@@ -62,14 +62,14 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_b">- b -</a></h3><ul>
 <li>back()
-: <a class="el" href="a00250.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
-: <a class="el" href="a00255.html#84afb3906a39e399cde1c950d6351300">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00233.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
-: <a class="el" href="a00233.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
-: <a class="el" href="a00243.html#af34cb91b1d0f36a885a1a3432dd9af1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>buffer_node()
-: <a class="el" href="a00237.html#03ad7b85a8341437f584af06ad050cdc">tbb::flow::interface6::buffer_node< T, A ></a></ul>
+: <a class="el" href="a00276.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
+: <a class="el" href="a00288.html#f63c3b7d03098b57fc16b71c57b303e5">tbb::flow::interface6::graph</a>, <a class="el" href="a00281.html#84afb3906a39e399cde1c950d6351300">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00259.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00253 [...]
+: <a class="el" href="a00259.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
+: <a class="el" href="a00269.html#af34cb91b1d0f36a885a1a3432dd9af1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>buffer_node()
+: <a class="el" href="a00263.html#03ad7b85a8341437f584af06ad050cdc">tbb::flow::interface6::buffer_node< T, A ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x63.html b/doc/html/functions_0x63.html
index 573ef7c..c22c70c 100644
--- a/doc/html/functions_0x63.html
+++ b/doc/html/functions_0x63.html
@@ -62,32 +62,32 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_c">- c -</a></h3><ul>
 <li>cancel_group_execution()
-: <a class="el" href="a00311.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00313.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
-: <a class="el" href="a00250.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00242.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
-: <a class="el" href="a00250.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
-: <a class="el" href="a00250.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>change_group()
-: <a class="el" href="a00311.html#62247be9a637a814c8e8f4bcfb3a1908">tbb::task</a><li>clear()
-: <a class="el" href="a00315.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00284.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00255.html#a8764176d4b6014c5d65f1051851abc8">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00242.html#90b31e2954c6e4596c7900435a5f [...]
-: <a class="el" href="a00235.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00234.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
-: <a class="el" href="a00250.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
-: <a class="el" href="a00242.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
-: <a class="el" href="a00243.html#83c40f2053f208861b90390e12a36436">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_priority_queue()
-: <a class="el" href="a00247.html#c8b20e7430c5302936030bef59a562be">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>concurrent_queue()
-: <a class="el" href="a00249.html#9102b897776bd2d9e908e6604ff16b5f">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00248.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
-: <a class="el" href="a00250.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
-: <a class="el" href="a00246.html#27399c613eb1aecd4660803955dda09d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>const_iterator
-: <a class="el" href="a00233.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
-: <a class="el" href="a00242.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#a4ded8601a434098605be0dcc4febc60">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>construct()
-: <a class="el" href="a00317.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator< T ></a>, <a class="el" href="a00270.html#c7e1671b725894b94ce9a6ac544e24f2">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00238.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>context()
-: <a class="el" href="a00311.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>continue_node()
-: <a class="el" href="a00252.html#869562787fcb5c57a90aea120f26d492">tbb::flow::interface6::continue_node< Output ></a><li>continue_receiver()
-: <a class="el" href="a00253.html#a0b292ed7fa6556b2a735f6d1e82dc74">tbb::flow::interface6::continue_receiver</a><li>count()
-: <a class="el" href="a00243.html#6968eb6feed2df36be421df0464297af">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
-: <a class="el" href="a00250.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
-: <a class="el" href="a00250.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00337.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00340.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
+: <a class="el" href="a00276.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00268.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
+: <a class="el" href="a00288.html#e183dfc3f89dc8f57c06ba165fb89f66">tbb::flow::interface6::graph</a>, <a class="el" href="a00276.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
+: <a class="el" href="a00288.html#4866156e6a31d0399b61c6eb82ee81fd">tbb::flow::interface6::graph</a>, <a class="el" href="a00276.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>change_group()
+: <a class="el" href="a00337.html#62247be9a637a814c8e8f4bcfb3a1908">tbb::task</a><li>clear()
+: <a class="el" href="a00341.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00310.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00281.html#a8764176d4b6014c5d65f1051851abc8">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00268.html#90b31e2954c6e4596c7900435a5f [...]
+: <a class="el" href="a00261.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00260.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
+: <a class="el" href="a00276.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
+: <a class="el" href="a00268.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
+: <a class="el" href="a00269.html#83c40f2053f208861b90390e12a36436">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_priority_queue()
+: <a class="el" href="a00273.html#c8b20e7430c5302936030bef59a562be">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>concurrent_queue()
+: <a class="el" href="a00275.html#9102b897776bd2d9e908e6604ff16b5f">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00274.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
+: <a class="el" href="a00276.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
+: <a class="el" href="a00272.html#27399c613eb1aecd4660803955dda09d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>const_iterator
+: <a class="el" href="a00259.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
+: <a class="el" href="a00268.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#a4ded8601a434098605be0dcc4febc60">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>construct()
+: <a class="el" href="a00343.html#15c431ccb5ccc5a30e5d496edad4c143">tbb::tbb_allocator< T ></a>, <a class="el" href="a00296.html#3491a81e0597c1696a163e7c8fa8706a">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00264.html#48a7e49dfb0578edc84a90a5ac30793d">tbb::cache_aligned_allocator< T ></a><li>context()
+: <a class="el" href="a00337.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>continue_node()
+: <a class="el" href="a00278.html#869562787fcb5c57a90aea120f26d492">tbb::flow::interface6::continue_node< Output ></a><li>continue_receiver()
+: <a class="el" href="a00279.html#a0b292ed7fa6556b2a735f6d1e82dc74">tbb::flow::interface6::continue_receiver</a><li>count()
+: <a class="el" href="a00269.html#6968eb6feed2df36be421df0464297af">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
+: <a class="el" href="a00276.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
+: <a class="el" href="a00276.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x64.html b/doc/html/functions_0x64.html
index 9e2845e..4322d4f 100644
--- a/doc/html/functions_0x64.html
+++ b/doc/html/functions_0x64.html
@@ -62,18 +62,18 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_d">- d -</a></h3><ul>
 <li>deallocate()
-: <a class="el" href="a00317.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00299.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00270.html#4e24a03de38638af07548383024c54ab">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00238.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement
-: <a class="el" href="a00266.html#a3344b2461966631b6ee34b79fb105c7">tbb::flow::interface6::limiter_node< T ></a><li>decrement_ref_count()
-: <a class="el" href="a00311.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>decrement_wait_count()
-: <a class="el" href="a00262.html#29b85506870f13a884a21655aec2a65d">tbb::flow::interface6::graph</a><li>default_num_threads()
-: <a class="el" href="a00316.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>deferred
-: <a class="el" href="a00316.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>destroy()
-: <a class="el" href="a00320.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00273.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00240.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00319.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00317.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator [...]
-: <a class="el" href="a00242.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#77399bc76b3ecd60e33f7e35a5becd87">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>downgrade_to_reader()
-: <a class="el" href="a00308.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00291.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00343.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00325.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00296.html#4e24a03de38638af07548383024c54ab">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00264.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement
+: <a class="el" href="a00292.html#a3344b2461966631b6ee34b79fb105c7">tbb::flow::interface6::limiter_node< T ></a><li>decrement_ref_count()
+: <a class="el" href="a00337.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>decrement_wait_count()
+: <a class="el" href="a00288.html#29b85506870f13a884a21655aec2a65d">tbb::flow::interface6::graph</a><li>default_num_threads()
+: <a class="el" href="a00342.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>deferred
+: <a class="el" href="a00342.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>destroy()
+: <a class="el" href="a00346.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00299.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00266.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00345.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">tbb::task</a><li>d [...]
+: <a class="el" href="a00268.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#77399bc76b3ecd60e33f7e35a5becd87">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>downgrade_to_reader()
+: <a class="el" href="a00334.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00317.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x65.html b/doc/html/functions_0x65.html
index 89bfe0d..20ff978 100644
--- a/doc/html/functions_0x65.html
+++ b/doc/html/functions_0x65.html
@@ -62,29 +62,30 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_e">- e -</a></h3><ul>
 <li>ec_bad_arg
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">tbb::interface6::runtime_loader</a><li>ec_bad_call
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">tbb::interface6::runtime_loader</a><li>ec_bad_lib
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">tbb::interface6::runtime_loader</a><li>ec_bad_ver
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">tbb::interface6::runtime_loader</a><li>ec_no_lib
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">tbb::interface6::runtime_loader</a><li>ec_ok
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">tbb::interface6::runtime_loader</a><li>em_abort
-: <a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">tbb::interface6::runtime_loader</a><li>em_status
-: <a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">tbb::interface6::runtime_loader</a><li>em_throw
-: <a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">tbb::interface6::runtime_loader</a><li>empty()
-: <a class="el" href="a00315.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00255.html#72595886d0ac8fd0543f90038570510d">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00242.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.htm [...]
-: <a class="el" href="a00255.html#cb448bb4977ce366ceb7344085cc7050">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00233.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00227.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enqueue()
-: <a class="el" href="a00311.html#fe6bf6aaf84e664134fabb6c4f409ea9">tbb::task</a><li>enumerable_thread_specific()
-: <a class="el" href="a00255.html#7bce6829981c9efe3f59cae2355e383e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
-: <a class="el" href="a00243.html#5f12d150d421420965db07368666a84f">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>error_code
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789">tbb::interface6::runtime_loader</a><li>error_mode
-: <a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb">tbb::interface6::runtime_loader</a><li>exact_exception_propagation
-: <a class="el" href="a00256.html#f17200974c33be21f42a5f00893de028">tbb::filter</a><li>exclude()
-: <a class="el" href="a00243.html#0c964214eb38f54603aa75fdff6d2709">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
-: <a class="el" href="a00311.html#22c298cd40937a431a06777423f002f6">tbb::task</a>, <a class="el" href="a00253.html#40ca8b7e96c5bc3428b4d1e409725ee5">tbb::flow::interface6::continue_receiver</a><li>executing
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a></ul>
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">tbb::interface6::runtime_loader</a><li>ec_bad_call
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">tbb::interface6::runtime_loader</a><li>ec_bad_lib
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">tbb::interface6::runtime_loader</a><li>ec_bad_ver
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">tbb::interface6::runtime_loader</a><li>ec_no_lib
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">tbb::interface6::runtime_loader</a><li>ec_ok
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">tbb::interface6::runtime_loader</a><li>em_abort
+: <a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">tbb::interface6::runtime_loader</a><li>em_status
+: <a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">tbb::interface6::runtime_loader</a><li>em_throw
+: <a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">tbb::interface6::runtime_loader</a><li>empty()
+: <a class="el" href="a00341.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00281.html#72595886d0ac8fd0543f90038570510d">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00268.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.htm [...]
+: <a class="el" href="a00288.html#907bd06606818c36f52420fe8d469d35">tbb::flow::interface6::graph</a>, <a class="el" href="a00281.html#cb448bb4977ce366ceb7344085cc7050">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00259.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00253 [...]
+: <a class="el" href="a00337.html#fe6bf6aaf84e664134fabb6c4f409ea9">tbb::task</a><li>enumerable_thread_specific()
+: <a class="el" href="a00281.html#7bce6829981c9efe3f59cae2355e383e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
+: <a class="el" href="a00269.html#5f12d150d421420965db07368666a84f">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>error_code
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789">tbb::interface6::runtime_loader</a><li>error_mode
+: <a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb">tbb::interface6::runtime_loader</a><li>exact_exception_propagation
+: <a class="el" href="a00282.html#f17200974c33be21f42a5f00893de028">tbb::filter</a><li>exclude()
+: <a class="el" href="a00269.html#0c964214eb38f54603aa75fdff6d2709">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
+: <a class="el" href="a00337.html#22c298cd40937a431a06777423f002f6">tbb::task</a>, <a class="el" href="a00279.html#40ca8b7e96c5bc3428b4d1e409725ee5">tbb::flow::interface6::continue_receiver</a>, <a class="el" href="a00251.html#641c8dc43652589d12eefaef130c094d">tbb::interface6::aggregator</a><li>execute_impl()
+: <a class="el" href="a00252.html#fdd0a9ce522246b9e14ae5e44bc72d31">tbb::interface6::aggregator_ext< handler_type ></a><li>executing
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x66.html b/doc/html/functions_0x66.html
index 98f21be..7872813 100644
--- a/doc/html/functions_0x66.html
+++ b/doc/html/functions_0x66.html
@@ -62,19 +62,19 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_f">- f -</a></h3><ul>
 <li>filter_is_bound
-: <a class="el" href="a00256.html#dd6a6e7210efc9bcaf2c5e08767d92b5">tbb::filter</a><li>filter_is_out_of_order
-: <a class="el" href="a00256.html#2e5eb65f95d8050186278077e433c5b1">tbb::filter</a><li>filter_is_serial
-: <a class="el" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">tbb::filter</a><li>filter_may_emit_null
-: <a class="el" href="a00256.html#bdd02a434a6e7499dd1e8f43aae96793">tbb::filter</a><li>finalize()
-: <a class="el" href="a00256.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
-: <a class="el" href="a00243.html#7bc475d1968f7f0af3d736d7e8a0d7df">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>forward()
-: <a class="el" href="a00237.html#2648324ce0a38b40132b8502ef250e3a">tbb::flow::interface6::buffer_node< T, A ></a><li>freed
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>front()
-: <a class="el" href="a00250.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a><li>function_node()
-: <a class="el" href="a00261.html#01055081ed477714503820035db3a965">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>, <a class="el" href="a00260.html#d5132323fd2ac6a00ea0c78beda78723">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></ul>
+: <a class="el" href="a00282.html#dd6a6e7210efc9bcaf2c5e08767d92b5">tbb::filter</a><li>filter_is_out_of_order
+: <a class="el" href="a00282.html#2e5eb65f95d8050186278077e433c5b1">tbb::filter</a><li>filter_is_serial
+: <a class="el" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">tbb::filter</a><li>filter_may_emit_null
+: <a class="el" href="a00282.html#bdd02a434a6e7499dd1e8f43aae96793">tbb::filter</a><li>finalize()
+: <a class="el" href="a00282.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
+: <a class="el" href="a00269.html#7bc475d1968f7f0af3d736d7e8a0d7df">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>forward()
+: <a class="el" href="a00263.html#2648324ce0a38b40132b8502ef250e3a">tbb::flow::interface6::buffer_node< T, A ></a><li>freed
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>front()
+: <a class="el" href="a00276.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a><li>function_node()
+: <a class="el" href="a00287.html#01055081ed477714503820035db3a965">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>, <a class="el" href="a00286.html#d5132323fd2ac6a00ea0c78beda78723">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x67.html b/doc/html/functions_0x67.html
index b1ff300..4247d32 100644
--- a/doc/html/functions_0x67.html
+++ b/doc/html/functions_0x67.html
@@ -62,16 +62,16 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_g">- g -</a></h3><ul>
 <li>get_allocator()
-: <a class="el" href="a00250.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00242.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#d545d444fb0d16148f9b61fd89f9a337">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="e [...]
-: <a class="el" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>graph()
-: <a class="el" href="a00262.html#4ab3d4b5208ece28c4c3ced647e26e12">tbb::flow::interface6::graph</a><li>group()
-: <a class="el" href="a00311.html#5987123486afca36ddebb9e2a8b7779a">tbb::task</a><li>group_priority()
-: <a class="el" href="a00311.html#e1d969a1ccab6796e3b8b2c1a5be33d2">tbb::task</a><li>grow_by()
-: <a class="el" href="a00250.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
-: <a class="el" href="a00250.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00276.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00268.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#d545d444fb0d16148f9b61fd89f9a337">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="e [...]
+: <a class="el" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>graph()
+: <a class="el" href="a00288.html#104d4f3775f596b43177c29e6b7b7656">tbb::flow::interface6::graph</a><li>group()
+: <a class="el" href="a00337.html#5987123486afca36ddebb9e2a8b7779a">tbb::task</a><li>group_priority()
+: <a class="el" href="a00337.html#e1d969a1ccab6796e3b8b2c1a5be33d2">tbb::task</a><li>grow_by()
+: <a class="el" href="a00276.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
+: <a class="el" href="a00276.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x69.html b/doc/html/functions_0x69.html
index 875163c..aca7f13 100644
--- a/doc/html/functions_0x69.html
+++ b/doc/html/functions_0x69.html
@@ -62,32 +62,32 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_i">- i -</a></h3><ul>
 <li>increment_ref_count()
-: <a class="el" href="a00311.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>increment_wait_count()
-: <a class="el" href="a00262.html#a993b789d1e488e0c3929135beae560e">tbb::flow::interface6::graph</a><li>init()
-: <a class="el" href="a00313.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
-: <a class="el" href="a00316.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>input_type
-: <a class="el" href="a00266.html#035196d3c9240ef041f528ebcde8baa7">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00286.html#b2829b518979874ad3d2a939e14ae7bd">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00302.html#af629f26832ff4e476e240637a78bc0c">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00287.html#1e71030845210b6c4c7380eb9e11a2ac">tbb::flow::interface6::queue_node< T, A &gt [...]
-: <a class="el" href="a00243.html#1dd37fad87e561151ba1e242ca94bcc1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
-: <a class="el" href="a00243.html#72c9c9e9655fcf096f5f0ed9c8ba6669">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
-: <a class="el" href="a00243.html#8f5373b8e1864619d1ffcf3bf3f1f13d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
-: <a class="el" href="a00243.html#2f76ed101a0ccc8875b846c2f747897e">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_forward()
-: <a class="el" href="a00286.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00287.html#eadcbbb81f9a9d223afabe0f40e77ecb">tbb::flow::interface6::queue_node< T, A ></a>, <a class="el" href="a00237.html#dcbffbae514f4d95205b0845785c0a91">tbb::flow::interface6::buffer_node< T, A ></a><li>internal_reg_succ()
-: <a class="el" href="a00237.html#df21388252b8963e839dca29d2c67ea5">tbb::flow::interface6::buffer_node< T, A ></a><li>internal_rem_succ()
-: <a class="el" href="a00237.html#6b6cf76dff80fd679251da93351c1291">tbb::flow::interface6::buffer_node< T, A ></a><li>interval_t()
-: <a class="el" href="a00324.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
-: <a class="el" href="a00316.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
-: <a class="el" href="a00256.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
-: <a class="el" href="a00311.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
-: <a class="el" href="a00235.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00234.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00233.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
-: <a class="el" href="a00313.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
-: <a class="el" href="a00256.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
-: <a class="el" href="a00311.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
-: <a class="el" href="a00256.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
-: <a class="el" href="a00311.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer
-: <a class="el" href="a00245.html#07d958f151a0eaa92f50fd56ad6440e2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, <a class="el" href="a00308.html#6b5a7c3c67a36b05c4df8410d32627d8">tbb::spin_rw_mutex_v3::scoped_lock</a></ul>
+: <a class="el" href="a00337.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>increment_wait_count()
+: <a class="el" href="a00288.html#a993b789d1e488e0c3929135beae560e">tbb::flow::interface6::graph</a><li>init()
+: <a class="el" href="a00340.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
+: <a class="el" href="a00342.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>input_type
+: <a class="el" href="a00292.html#035196d3c9240ef041f528ebcde8baa7">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00312.html#b2829b518979874ad3d2a939e14ae7bd">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00328.html#af629f26832ff4e476e240637a78bc0c">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00313.html#1e71030845210b6c4c7380eb9e11a2ac">tbb::flow::interface6::queue_node< T, A &gt [...]
+: <a class="el" href="a00269.html#1dd37fad87e561151ba1e242ca94bcc1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
+: <a class="el" href="a00269.html#72c9c9e9655fcf096f5f0ed9c8ba6669">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
+: <a class="el" href="a00269.html#8f5373b8e1864619d1ffcf3bf3f1f13d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
+: <a class="el" href="a00269.html#2f76ed101a0ccc8875b846c2f747897e">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_forward()
+: <a class="el" href="a00312.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00313.html#eadcbbb81f9a9d223afabe0f40e77ecb">tbb::flow::interface6::queue_node< T, A ></a>, <a class="el" href="a00263.html#dcbffbae514f4d95205b0845785c0a91">tbb::flow::interface6::buffer_node< T, A ></a><li>internal_reg_succ()
+: <a class="el" href="a00263.html#df21388252b8963e839dca29d2c67ea5">tbb::flow::interface6::buffer_node< T, A ></a><li>internal_rem_succ()
+: <a class="el" href="a00263.html#6b6cf76dff80fd679251da93351c1291">tbb::flow::interface6::buffer_node< T, A ></a><li>interval_t()
+: <a class="el" href="a00350.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
+: <a class="el" href="a00342.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
+: <a class="el" href="a00282.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
+: <a class="el" href="a00337.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a>, <a class="el" href="a00288.html#227ea140dc2c68f79a4e5a34a8367b58">tbb::flow::interface6::graph</a><li>is_divisible()
+: <a class="el" href="a00261.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00260.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00259.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
+: <a class="el" href="a00340.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
+: <a class="el" href="a00282.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
+: <a class="el" href="a00337.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
+: <a class="el" href="a00282.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
+: <a class="el" href="a00337.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer
+: <a class="el" href="a00271.html#07d958f151a0eaa92f50fd56ad6440e2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, <a class="el" href="a00334.html#6b5a7c3c67a36b05c4df8410d32627d8">tbb::spin_rw_mutex_v3::scoped_lock</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x6c.html b/doc/html/functions_0x6c.html
index 1017946..d7befaf 100644
--- a/doc/html/functions_0x6c.html
+++ b/doc/html/functions_0x6c.html
@@ -62,15 +62,15 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_l">- l -</a></h3><ul>
 <li>limiter_node()
-: <a class="el" href="a00266.html#83d3ab884543b070ee5b345a87f241fa">tbb::flow::interface6::limiter_node< T ></a><li>load()
-: <a class="el" href="a00298.html#5f3f6f1683386705a6931acae45f0862">tbb::interface6::runtime_loader</a><li>local()
-: <a class="el" href="a00255.html#7dc79058d2832f7447de8e691c3455ea">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
-: <a class="el" href="a00307.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00305.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00296.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00292.html#2653d1a2d560059a51219a8ceab3ade9">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00275.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
-: <a class="el" href="a00307.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00292.html#d9d16a24d9f6c3dada73c6b9ff214f5b">tbb::interface5::reader_writer_lock</a><li>lookup()
-: <a class="el" href="a00243.html#3f3413264a99174a224ef96f6c4ea769">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <a class="el" href="a00292.html#83d3ab884543b070ee5b345a87f241fa">tbb::flow::interface6::limiter_node< T ></a><li>load()
+: <a class="el" href="a00324.html#5f3f6f1683386705a6931acae45f0862">tbb::interface6::runtime_loader</a><li>local()
+: <a class="el" href="a00281.html#7dc79058d2832f7447de8e691c3455ea">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
+: <a class="el" href="a00333.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00331.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00322.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00318.html#2653d1a2d560059a51219a8ceab3ade9">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00301.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
+: <a class="el" href="a00333.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00318.html#d9d16a24d9f6c3dada73c6b9ff214f5b">tbb::interface5::reader_writer_lock</a><li>lookup()
+: <a class="el" href="a00269.html#3f3413264a99174a224ef96f6c4ea769">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x6d.html b/doc/html/functions_0x6d.html
index b50d20d..6f5bde3 100644
--- a/doc/html/functions_0x6d.html
+++ b/doc/html/functions_0x6d.html
@@ -62,16 +62,16 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_m">- m -</a></h3><ul>
 <li>make_filter
-: <a class="el" href="a00257.html#85c2892eff1fddcd06e28911e75838bd">tbb::interface6::filter_t< T, U ></a><li>malloc_type
-: <a class="el" href="a00317.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>max_size()
-: <a class="el" href="a00317.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00299.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00270.html#beebdb6144df8ba219fadfad4de866ea">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00250.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00243.html#2bce57fe9b594abe1e6 [...]
-: <a class="el" href="a00269.html#2822528265718a4c779591fc37c02ca8">tbb::interface6::memory_pool< Alloc ></a><li>move()
-: <a class="el" href="a00273.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00240.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00319.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex
-: <a class="el" href="a00275.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a>, <a class="el" href="a00308.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">tbb::spin_rw_mutex_v3::scoped_lock</a><li>my_exception_data
-: <a class="el" href="a00273.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></a></ul>
+: <a class="el" href="a00283.html#85c2892eff1fddcd06e28911e75838bd">tbb::interface6::filter_t< T, U ></a><li>malloc_type
+: <a class="el" href="a00343.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>max_size()
+: <a class="el" href="a00343.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00325.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00296.html#beebdb6144df8ba219fadfad4de866ea">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00276.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00269.html#2bce57fe9b594abe1e6 [...]
+: <a class="el" href="a00295.html#2822528265718a4c779591fc37c02ca8">tbb::interface6::memory_pool< Alloc ></a><li>move()
+: <a class="el" href="a00299.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00266.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00345.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex
+: <a class="el" href="a00301.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a>, <a class="el" href="a00334.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">tbb::spin_rw_mutex_v3::scoped_lock</a><li>my_exception_data
+: <a class="el" href="a00299.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x6e.html b/doc/html/functions_0x6e.html
index 6105f3d..43343da 100644
--- a/doc/html/functions_0x6e.html
+++ b/doc/html/functions_0x6e.html
@@ -62,13 +62,13 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_n">- n -</a></h3><ul>
 <li>name()
-: <a class="el" href="a00273.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00240.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00319.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>native_handle_type
-: <a class="el" href="a00296.html#889fa8cc32dd707eef7c0f52dda09c0d">tbb::recursive_mutex</a>, <a class="el" href="a00275.html#9f1ec84d5815263ceae853f06ddb4cac">tbb::mutex</a><li>note_affinity()
-: <a class="el" href="a00311.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
-: <a class="el" href="a00323.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
+: <a class="el" href="a00299.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00266.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00345.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>native_handle_type
+: <a class="el" href="a00322.html#889fa8cc32dd707eef7c0f52dda09c0d">tbb::recursive_mutex</a>, <a class="el" href="a00301.html#9f1ec84d5815263ceae853f06ddb4cac">tbb::mutex</a><li>note_affinity()
+: <a class="el" href="a00337.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
+: <a class="el" href="a00349.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x6f.html b/doc/html/functions_0x6f.html
index 8053111..990f9a0 100644
--- a/doc/html/functions_0x6f.html
+++ b/doc/html/functions_0x6f.html
@@ -62,21 +62,21 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_o">- o -</a></h3><ul>
 <li>object_may_be_null()
-: <a class="el" href="a00256.html#8ec4dfe053e94a2349d56781ddea8477">tbb::filter</a><li>operator *()
-: <a class="el" href="a00244.html#170280ea807a22e742095de3e8c5ea38">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00246.html#9411df8197ceb4881ec4c7368a0a7f88">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
-: <a class="el" href="a00319.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
-: <a class="el" href="a00256.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00245.html#fa6314b861c574f86ed189b124cf5853">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+
-: <a class="el" href="a00324.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator+=()
-: <a class="el" href="a00324.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-
-: <a class="el" href="a00323.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00324.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a><li>operator-=()
-: <a class="el" href="a00324.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
-: <a class="el" href="a00244.html#a807920cdffe3ec5c5e282b4d1ff92a2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00246.html#3d03a48ecb8cd9549bd8be64b09c9b0d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
-: <a class="el" href="a00250.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00247.html#2ab7f7808891027ac0f0f5b3a4be51e9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00243.html#088d1aaccc816884a49e38f7065622c8">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
-: <a class="el" href="a00250.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a><li>output_type
-: <a class="el" href="a00266.html#6e67fc480147c0b88a483b85db6457b0">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00286.html#2cb099b590246b6bc93cc15e78c6ee5c">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00302.html#ca026eaef70e35791c407323199031a7">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00287.html#25b5a53ab1f9a342644fa3759bc0b1ad">tbb::flow::interface6::queue_node< T, A &gt [...]
+: <a class="el" href="a00282.html#8ec4dfe053e94a2349d56781ddea8477">tbb::filter</a><li>operator *()
+: <a class="el" href="a00270.html#170280ea807a22e742095de3e8c5ea38">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00272.html#9411df8197ceb4881ec4c7368a0a7f88">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
+: <a class="el" href="a00345.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
+: <a class="el" href="a00282.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00271.html#fa6314b861c574f86ed189b124cf5853">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+
+: <a class="el" href="a00350.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator+=()
+: <a class="el" href="a00350.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-
+: <a class="el" href="a00349.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00350.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a><li>operator-=()
+: <a class="el" href="a00350.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
+: <a class="el" href="a00270.html#a807920cdffe3ec5c5e282b4d1ff92a2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00272.html#3d03a48ecb8cd9549bd8be64b09c9b0d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
+: <a class="el" href="a00276.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00273.html#2ab7f7808891027ac0f0f5b3a4be51e9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00269.html#088d1aaccc816884a49e38f7065622c8">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
+: <a class="el" href="a00276.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a><li>output_type
+: <a class="el" href="a00292.html#6e67fc480147c0b88a483b85db6457b0">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00312.html#2cb099b590246b6bc93cc15e78c6ee5c">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00328.html#ca026eaef70e35791c407323199031a7">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00313.html#25b5a53ab1f9a342644fa3759bc0b1ad">tbb::flow::interface6::queue_node< T, A &gt [...]
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x70.html b/doc/html/functions_0x70.html
index 6f5fb7a..f754b72 100644
--- a/doc/html/functions_0x70.html
+++ b/doc/html/functions_0x70.html
@@ -62,25 +62,26 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_p">- p -</a></h3><ul>
 <li>page_range_type
-: <a class="el" href="a00235.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>pages()
-: <a class="el" href="a00235.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
-: <a class="el" href="a00282.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
-: <a class="el" href="a00311.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
-: <a class="el" href="a00230.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
-: <a class="el" href="a00284.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
-: <a class="el" href="a00242.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
-: <a class="el" href="a00315.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
-: <a class="el" href="a00249.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>predecessor_type
-: <a class="el" href="a00266.html#f89fcf44f38eb33f965ee5362d3e68e9">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00286.html#fdea783bf9d5a4c98e794ac7e0f84ccf">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00302.html#8127e36811832563fe1e9bc3ba391f79">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00287.html#5e2fdd33c45d44549dee9c1638e19898">tbb::flow::interface6::queue_node< T, A &gt [...]
-: <a class="el" href="a00313.html#2f2342b9e6c9c03703248ac13ad0271d">tbb::task_group_context</a><li>priority_queue_node()
-: <a class="el" href="a00286.html#17a4f66e23d54100b64805405e905d62">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a><li>process_item()
-: <a class="el" href="a00322.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
-: <a class="el" href="a00242.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#d905af7b8f6defff562f5ae9c3275763">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>push_back()
-: <a class="el" href="a00315.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00250.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
-: <a class="el" href="a00249.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
+: <a class="el" href="a00261.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>pages()
+: <a class="el" href="a00261.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
+: <a class="el" href="a00308.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
+: <a class="el" href="a00337.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
+: <a class="el" href="a00256.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
+: <a class="el" href="a00310.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
+: <a class="el" href="a00268.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
+: <a class="el" href="a00341.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
+: <a class="el" href="a00275.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>predecessor_type
+: <a class="el" href="a00292.html#f89fcf44f38eb33f965ee5362d3e68e9">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00312.html#fdea783bf9d5a4c98e794ac7e0f84ccf">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00328.html#8127e36811832563fe1e9bc3ba391f79">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00313.html#5e2fdd33c45d44549dee9c1638e19898">tbb::flow::interface6::queue_node< T, A &gt [...]
+: <a class="el" href="a00340.html#2f2342b9e6c9c03703248ac13ad0271d">tbb::task_group_context</a><li>priority_queue_node()
+: <a class="el" href="a00312.html#17a4f66e23d54100b64805405e905d62">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a><li>process()
+: <a class="el" href="a00252.html#ccd88bf4333dc100ba97da8e2170277d">tbb::interface6::aggregator_ext< handler_type ></a><li>process_item()
+: <a class="el" href="a00348.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
+: <a class="el" href="a00268.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#d905af7b8f6defff562f5ae9c3275763">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>push_back()
+: <a class="el" href="a00341.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00276.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
+: <a class="el" href="a00275.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x71.html b/doc/html/functions_0x71.html
index 0b42c1c..ea52877 100644
--- a/doc/html/functions_0x71.html
+++ b/doc/html/functions_0x71.html
@@ -62,12 +62,12 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_q">- q -</a></h3><ul>
 <li>queue_node()
-: <a class="el" href="a00287.html#0226762d9ebba28311b7b1518d948ab1">tbb::flow::interface6::queue_node< T, A ></a><li>queuing_mutex()
-: <a class="el" href="a00288.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
-: <a class="el" href="a00290.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
+: <a class="el" href="a00313.html#0226762d9ebba28311b7b1518d948ab1">tbb::flow::interface6::queue_node< T, A ></a><li>queuing_mutex()
+: <a class="el" href="a00314.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
+: <a class="el" href="a00316.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x72.html b/doc/html/functions_0x72.html
index 3d1b8e9..f3b1ee4 100644
--- a/doc/html/functions_0x72.html
+++ b/doc/html/functions_0x72.html
@@ -62,38 +62,38 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_r">- r -</a></h3><ul>
 <li>range()
-: <a class="el" href="a00255.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
-: <a class="el" href="a00250.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>reader_writer_lock()
-: <a class="el" href="a00292.html#c1431c4293e777efd9aab9a95c2a46e1">tbb::interface5::reader_writer_lock</a><li>ready
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recursive_mutex()
-: <a class="el" href="a00296.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>recycle_as_child_of()
-: <a class="el" href="a00311.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
-: <a class="el" href="a00311.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
-: <a class="el" href="a00311.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
-: <a class="el" href="a00311.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>reexecute
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a><li>ref_count()
-: <a class="el" href="a00311.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>reference
-: <a class="el" href="a00242.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#5804b3c708ef4e50d603f918ef2b9e58">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>register_pending_exception()
-: <a class="el" href="a00313.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>register_predecessor()
-: <a class="el" href="a00266.html#de70a0e88ce7655d8c14b6af57f7496f">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00253.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">tbb::flow::interface6::continue_receiver</a>, <a class="el" href="a00295.html#30e3316466efe3a713c23062b6e806f3">tbb::flow::interface6::receiver< T ></a><li>register_successor()
-: <a class="el" href="a00266.html#c76561d8d871b4769876988a4de12a9b">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00237.html#f8bf4944ede4fc106423d67715beb695">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00236.html#fd0324c9ddb51fe6f95b3d015d338941">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00304.html#22960d499df9f1569a9d8a544e35afe3">tbb::flow::interface6::source_node< Output ></a>, <a class=" [...]
-: <a class="el" href="a00243.html#94758113d8993cfe5afdf2d63a728869">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>release()
-: <a class="el" href="a00308.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00306.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00297.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00291.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00289.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
-: <a class="el" href="a00266.html#c530e7b469454e2340460795f2da3317">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00253.html#cb691b18416d4742265aed84d496ebbd">tbb::flow::interface6::continue_receiver</a>, <a class="el" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">tbb::flow::interface6::receiver< T ></a><li>remove_successor()
-: <a class="el" href="a00266.html#275e328063c121b3e506ccef2a825d28">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00237.html#2074da0e39b9477c32897d6e5786196f">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00236.html#366efcc046ec08a104281109801ae629">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00304.html#222484bf295f39df36415a29e508e5c9">tbb::flow::interface6::source_node< Output ></a>, <a class=" [...]
-: <a class="el" href="a00250.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
-: <a class="el" href="a00250.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
-: <a class="el" href="a00313.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
-: <a class="el" href="a00250.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>root_task()
-: <a class="el" href="a00262.html#7f4e3ae90811a5d8b597146b5b586d10">tbb::flow::interface6::graph</a><li>row_range_type
-: <a class="el" href="a00234.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>rows()
-: <a class="el" href="a00235.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00234.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
-: <a class="el" href="a00284.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00282.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a>, <a class="el" href="a00262.html#c1145b00e063793a7e7bf994d202c7a0">tbb::flow::interface6::graph</a><li>runtime_loader()
-: <a class="el" href="a00298.html#7ae5330beb48fce0c702c32a5df0094a">tbb::interface6::runtime_loader</a></ul>
+: <a class="el" href="a00281.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
+: <a class="el" href="a00276.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>reader_writer_lock()
+: <a class="el" href="a00318.html#c1431c4293e777efd9aab9a95c2a46e1">tbb::interface5::reader_writer_lock</a><li>ready
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recursive_mutex()
+: <a class="el" href="a00322.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>recycle_as_child_of()
+: <a class="el" href="a00337.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
+: <a class="el" href="a00337.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
+: <a class="el" href="a00337.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
+: <a class="el" href="a00337.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>reexecute
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a><li>ref_count()
+: <a class="el" href="a00337.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>reference
+: <a class="el" href="a00268.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#5804b3c708ef4e50d603f918ef2b9e58">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>register_pending_exception()
+: <a class="el" href="a00340.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>register_predecessor()
+: <a class="el" href="a00292.html#de70a0e88ce7655d8c14b6af57f7496f">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00279.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">tbb::flow::interface6::continue_receiver</a>, <a class="el" href="a00321.html#30e3316466efe3a713c23062b6e806f3">tbb::flow::interface6::receiver< T ></a><li>register_successor()
+: <a class="el" href="a00292.html#c76561d8d871b4769876988a4de12a9b">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00263.html#f8bf4944ede4fc106423d67715beb695">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00262.html#fd0324c9ddb51fe6f95b3d015d338941">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00330.html#22960d499df9f1569a9d8a544e35afe3">tbb::flow::interface6::source_node< Output ></a>, <a class=" [...]
+: <a class="el" href="a00269.html#94758113d8993cfe5afdf2d63a728869">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>release()
+: <a class="el" href="a00334.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00332.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00323.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00317.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00315.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
+: <a class="el" href="a00292.html#c530e7b469454e2340460795f2da3317">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00279.html#cb691b18416d4742265aed84d496ebbd">tbb::flow::interface6::continue_receiver</a>, <a class="el" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">tbb::flow::interface6::receiver< T ></a><li>remove_successor()
+: <a class="el" href="a00292.html#275e328063c121b3e506ccef2a825d28">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00263.html#2074da0e39b9477c32897d6e5786196f">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00262.html#366efcc046ec08a104281109801ae629">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00330.html#222484bf295f39df36415a29e508e5c9">tbb::flow::interface6::source_node< Output ></a>, <a class=" [...]
+: <a class="el" href="a00276.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
+: <a class="el" href="a00276.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
+: <a class="el" href="a00340.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
+: <a class="el" href="a00276.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>root_task()
+: <a class="el" href="a00288.html#7f4e3ae90811a5d8b597146b5b586d10">tbb::flow::interface6::graph</a><li>row_range_type
+: <a class="el" href="a00260.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>rows()
+: <a class="el" href="a00261.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00260.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
+: <a class="el" href="a00310.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00308.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a>, <a class="el" href="a00288.html#c1145b00e063793a7e7bf994d202c7a0">tbb::flow::interface6::graph</a><li>runtime_loader()
+: <a class="el" href="a00324.html#7ae5330beb48fce0c702c32a5df0094a">tbb::interface6::runtime_loader</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x73.html b/doc/html/functions_0x73.html
index 20bf466..93d374e 100644
--- a/doc/html/functions_0x73.html
+++ b/doc/html/functions_0x73.html
@@ -62,35 +62,35 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_s">- s -</a></h3><ul>
 <li>scoped_lock()
-: <a class="el" href="a00308.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00306.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00297.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00293.html#cf19f20e082887c1bb0ba6b0911c3583">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00291.html#fbb8798792d3aebb136c46fc63d [...]
-: <a class="el" href="a00294.html#87ab0dc8f7216e6ba0f7acd6aec33064">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>seconds()
-: <a class="el" href="a00324.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
-: <a class="el" href="a00311.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>sequencer_node()
-: <a class="el" href="a00302.html#b38e7a070552960384bcc1d91af13a5c">tbb::flow::interface6::sequencer_node< T, A ></a><li>set_affinity()
-: <a class="el" href="a00311.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
-: <a class="el" href="a00242.html#f3c6c934f85fd02aedbc83a16943193b">tbb::concurrent_bounded_queue< T, A ></a><li>set_group_priority()
-: <a class="el" href="a00311.html#9ac8d1542d67d9d80121ff986801ac26">tbb::task</a><li>set_parent()
-: <a class="el" href="a00311.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">tbb::task</a><li>set_priority()
-: <a class="el" href="a00313.html#c4272d4d9ab65d600ca70fc2c8c4b039">tbb::task_group_context</a><li>set_ref_count()
-: <a class="el" href="a00311.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>set_state()
-: <a class="el" href="a00275.html#795649a185b0d6af6dc81c5f378616dd">tbb::mutex</a><li>shrink_to_fit()
-: <a class="el" href="a00250.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
-: <a class="el" href="a00255.html#33fd6593da1ed14340f10f67d5a69130">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00242.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00247.html#8b2ae25c61338c6fd59e94fe09822ba5">tbb::interface5::concurrent_priority_queue< T,  [...]
-: <a class="el" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00233.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>source_node()
-: <a class="el" href="a00304.html#adaac111fbcace95804219a5f2929304">tbb::flow::interface6::source_node< Output ></a><li>spawn_and_wait_for_all()
-: <a class="el" href="a00311.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
-: <a class="el" href="a00311.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
-: <a class="el" href="a00305.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
-: <a class="el" href="a00307.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
-: <a class="el" href="a00311.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>state_type
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a><li>status()
-: <a class="el" href="a00298.html#78d938ed2e54d38dd38d6609e6c60389">tbb::interface6::runtime_loader</a><li>status_t
-: <a class="el" href="a00292.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock</a><li>successor_type
-: <a class="el" href="a00266.html#e8945e4dd6ea759ff9e4735da13f12ef">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00286.html#09ab5064ca8192e68c03da47603e68eb">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00302.html#795f3ee75f133b9d3b159172fc4a197f">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00287.html#f35076a19f256f9e7a61bed77ca1ccc5">tbb::flow::interface6::queue_node< T, A &gt [...]
-: <a class="el" href="a00250.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00247.html#0ecdc6a04aa259374425d424ca2a6082">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00243.html#076f8d9e16110aac5f558777aa744eb6">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <a class="el" href="a00334.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00332.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00323.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00319.html#cf19f20e082887c1bb0ba6b0911c3583">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00317.html#fbb8798792d3aebb136c46fc63d [...]
+: <a class="el" href="a00320.html#87ab0dc8f7216e6ba0f7acd6aec33064">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>seconds()
+: <a class="el" href="a00350.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
+: <a class="el" href="a00337.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>sequencer_node()
+: <a class="el" href="a00328.html#b38e7a070552960384bcc1d91af13a5c">tbb::flow::interface6::sequencer_node< T, A ></a><li>set_affinity()
+: <a class="el" href="a00337.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
+: <a class="el" href="a00268.html#f3c6c934f85fd02aedbc83a16943193b">tbb::concurrent_bounded_queue< T, A ></a><li>set_group_priority()
+: <a class="el" href="a00337.html#9ac8d1542d67d9d80121ff986801ac26">tbb::task</a><li>set_parent()
+: <a class="el" href="a00337.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">tbb::task</a><li>set_priority()
+: <a class="el" href="a00340.html#c4272d4d9ab65d600ca70fc2c8c4b039">tbb::task_group_context</a><li>set_ref_count()
+: <a class="el" href="a00337.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>set_state()
+: <a class="el" href="a00301.html#795649a185b0d6af6dc81c5f378616dd">tbb::mutex</a><li>shrink_to_fit()
+: <a class="el" href="a00276.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
+: <a class="el" href="a00281.html#33fd6593da1ed14340f10f67d5a69130">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00268.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00273.html#8b2ae25c61338c6fd59e94fe09822ba5">tbb::interface5::concurrent_priority_queue< T,  [...]
+: <a class="el" href="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00259.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>source_node()
+: <a class="el" href="a00330.html#adaac111fbcace95804219a5f2929304">tbb::flow::interface6::source_node< Output ></a><li>spawn_and_wait_for_all()
+: <a class="el" href="a00337.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
+: <a class="el" href="a00337.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
+: <a class="el" href="a00331.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
+: <a class="el" href="a00333.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
+: <a class="el" href="a00337.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>state_type
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a><li>status()
+: <a class="el" href="a00324.html#78d938ed2e54d38dd38d6609e6c60389">tbb::interface6::runtime_loader</a><li>status_t
+: <a class="el" href="a00318.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock</a><li>successor_type
+: <a class="el" href="a00292.html#e8945e4dd6ea759ff9e4735da13f12ef">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00312.html#09ab5064ca8192e68c03da47603e68eb">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00328.html#795f3ee75f133b9d3b159172fc4a197f">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00313.html#f35076a19f256f9e7a61bed77ca1ccc5">tbb::flow::interface6::queue_node< T, A &gt [...]
+: <a class="el" href="a00276.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00273.html#0ecdc6a04aa259374425d424ca2a6082">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00269.html#076f8d9e16110aac5f558777aa744eb6">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x74.html b/doc/html/functions_0x74.html
index c1b9893..6e9c379 100644
--- a/doc/html/functions_0x74.html
+++ b/doc/html/functions_0x74.html
@@ -62,27 +62,27 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_t">- t -</a></h3><ul>
 <li>task()
-: <a class="el" href="a00311.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
-: <a class="el" href="a00313.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
-: <a class="el" href="a00315.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
-: <a class="el" href="a00316.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
-: <a class="el" href="a00316.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
-: <a class="el" href="a00320.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00273.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00240.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00319.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
-: <a class="el" href="a00323.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
-: <a class="el" href="a00308.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00306.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00297.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00291.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00289.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
-: <a class="el" href="a00237.html#8ef07c434eb763d947a7b4e80c086a49">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00304.html#2c7fcc29e2894b29138be3c1edce9bc9">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00301.html#7b840f50da117a0d6848707c1857ea2e">tbb::flow::interface6::sender< T ></a><li>try_get()
-: <a class="el" href="a00237.html#aeb8aec46ca99ca022356a792c46735e">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00304.html#41073ad4d3510ed5a8b6bda9c0f58636">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00301.html#922fb56b0aad090b90a98b7d56b76a59">tbb::flow::interface6::sender< T ></a><li>try_lock()
-: <a class="el" href="a00307.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00305.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00296.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00292.html#721eb173e154ab38292273e9266a9b07">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00275.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
-: <a class="el" href="a00307.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00292.html#595fb23952e3b89426b1f7938dea9b11">tbb::interface5::reader_writer_lock</a><li>try_pop()
-: <a class="el" href="a00242.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#e036461a29cc40902a2bb79abf9f5146">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>try_process_item()
-: <a class="el" href="a00322.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
-: <a class="el" href="a00242.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a><li>try_put()
-: <a class="el" href="a00266.html#55a02d458a4d8ffa6accd7a70605da2f">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00237.html#2b02fe332e704bbe14f297802298b63a">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00236.html#29eb768c10b377880bbf83d31ee49acf">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00253.html#3969c70fb89c0a982f142ae9eb5facae">tbb::flow::interface6::continue_receiver</a>, <a class="el" href=" [...]
-: <a class="el" href="a00237.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00304.html#494678baf9096835268736b800824460">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00301.html#27036b06d6a91e97007e14f400529199">tbb::flow::interface6::sender< T ></a><li>try_reserve()
-: <a class="el" href="a00237.html#1cc889bb6c38bcb81757d0ebbc3a5e64">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00304.html#ad459713ff3c1c9ad0f4826daa141f65">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00301.html#02c05b472271db1b68a48ea2618fa72f">tbb::flow::interface6::sender< T ></a></ul>
+: <a class="el" href="a00337.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
+: <a class="el" href="a00340.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
+: <a class="el" href="a00341.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
+: <a class="el" href="a00342.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
+: <a class="el" href="a00342.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
+: <a class="el" href="a00346.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00299.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00266.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00345.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
+: <a class="el" href="a00349.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
+: <a class="el" href="a00334.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00332.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00323.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00317.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00315.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
+: <a class="el" href="a00263.html#8ef07c434eb763d947a7b4e80c086a49">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00330.html#2c7fcc29e2894b29138be3c1edce9bc9">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00327.html#7b840f50da117a0d6848707c1857ea2e">tbb::flow::interface6::sender< T ></a><li>try_get()
+: <a class="el" href="a00263.html#aeb8aec46ca99ca022356a792c46735e">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00330.html#41073ad4d3510ed5a8b6bda9c0f58636">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00327.html#922fb56b0aad090b90a98b7d56b76a59">tbb::flow::interface6::sender< T ></a><li>try_lock()
+: <a class="el" href="a00333.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00331.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00322.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00318.html#721eb173e154ab38292273e9266a9b07">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00301.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
+: <a class="el" href="a00333.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00318.html#595fb23952e3b89426b1f7938dea9b11">tbb::interface5::reader_writer_lock</a><li>try_pop()
+: <a class="el" href="a00268.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#e036461a29cc40902a2bb79abf9f5146">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>try_process_item()
+: <a class="el" href="a00348.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
+: <a class="el" href="a00268.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a><li>try_put()
+: <a class="el" href="a00292.html#55a02d458a4d8ffa6accd7a70605da2f">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00263.html#2b02fe332e704bbe14f297802298b63a">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00262.html#29eb768c10b377880bbf83d31ee49acf">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00279.html#3969c70fb89c0a982f142ae9eb5facae">tbb::flow::interface6::continue_receiver</a>, <a class="el" href=" [...]
+: <a class="el" href="a00263.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00330.html#494678baf9096835268736b800824460">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00327.html#27036b06d6a91e97007e14f400529199">tbb::flow::interface6::sender< T ></a><li>try_reserve()
+: <a class="el" href="a00263.html#1cc889bb6c38bcb81757d0ebbc3a5e64">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00330.html#ad459713ff3c1c9ad0f4826daa141f65">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00327.html#02c05b472271db1b68a48ea2618fa72f">tbb::flow::interface6::sender< T ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x75.html b/doc/html/functions_0x75.html
index fbb42cd..8ba813c 100644
--- a/doc/html/functions_0x75.html
+++ b/doc/html/functions_0x75.html
@@ -62,12 +62,12 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_u">- u -</a></h3><ul>
 <li>unlock()
-: <a class="el" href="a00307.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00305.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00296.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00292.html#5113b32689305599b2c36b5831547704">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00275.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
-: <a class="el" href="a00248.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
-: <a class="el" href="a00308.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00291.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00333.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00331.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00322.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00318.html#5113b32689305599b2c36b5831547704">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00301.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
+: <a class="el" href="a00274.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
+: <a class="el" href="a00334.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00317.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x76.html b/doc/html/functions_0x76.html
index 5973c8d..6dbc36c 100644
--- a/doc/html/functions_0x76.html
+++ b/doc/html/functions_0x76.html
@@ -62,10 +62,10 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_v">- v -</a></h3><ul>
 <li>value_type
-: <a class="el" href="a00282.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00242.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#7c611a6b5b8f94b0e7f2afc97e31efb1">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el"  [...]
+: <a class="el" href="a00308.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00268.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#7c611a6b5b8f94b0e7f2afc97e31efb1">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el"  [...]
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x77.html b/doc/html/functions_0x77.html
index 6befb6e..6d15f6d 100644
--- a/doc/html/functions_0x77.html
+++ b/doc/html/functions_0x77.html
@@ -62,11 +62,11 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_w">- w -</a></h3><ul>
 <li>wait_for_all()
-: <a class="el" href="a00311.html#53d2615ad9c38859b4c8080936600283">tbb::task</a>, <a class="el" href="a00262.html#a66b0020f7514b86d030fa8aea073d37">tbb::flow::interface6::graph</a><li>what()
-: <a class="el" href="a00273.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00240.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00319.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
+: <a class="el" href="a00337.html#53d2615ad9c38859b4c8080936600283">tbb::task</a>, <a class="el" href="a00288.html#a66b0020f7514b86d030fa8aea073d37">tbb::flow::interface6::graph</a><li>what()
+: <a class="el" href="a00299.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00266.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00345.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_0x7e.html b/doc/html/functions_0x7e.html
index 04656df..9220fce 100644
--- a/doc/html/functions_0x7e.html
+++ b/doc/html/functions_0x7e.html
@@ -62,34 +62,34 @@ Here is a list of all documented class members with links to the class documenta
 <p>
 <h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
 <li>~combinable()
-: <a class="el" href="a00241.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
-: <a class="el" href="a00242.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
-: <a class="el" href="a00243.html#2aa8e2d28d5af1284cf78d20a9c22731">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
-: <a class="el" href="a00248.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
-: <a class="el" href="a00250.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
-: <a class="el" href="a00246.html#928769b139d53427e7075c1f86148e4c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~continue_receiver()
-: <a class="el" href="a00253.html#1e14828fa079b9835ff7267df5ee45d7">tbb::flow::interface6::continue_receiver</a><li>~enumerable_thread_specific()
-: <a class="el" href="a00255.html#5a7907d9e3e5b18e7a7b55211ef3213f">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
-: <a class="el" href="a00256.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~graph()
-: <a class="el" href="a00262.html#8a7d424c0616a1c37a908ead182e2fe5">tbb::flow::interface6::graph</a><li>~memory_pool()
-: <a class="el" href="a00269.html#fdad7c4ed08332ec384491a71b721957">tbb::interface6::memory_pool< Alloc ></a><li>~parallel_while()
-: <a class="el" href="a00282.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
-: <a class="el" href="a00284.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
-: <a class="el" href="a00290.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~reader_writer_lock()
-: <a class="el" href="a00292.html#5135f64f7b7339017f33d956445edbee">tbb::interface5::reader_writer_lock</a><li>~receiver()
-: <a class="el" href="a00295.html#b00699b235435f7b65b663d5063624a1">tbb::flow::interface6::receiver< T ></a><li>~runtime_loader()
-: <a class="el" href="a00298.html#c25fec923a751a3e03f5cbe969f1f0c5">tbb::interface6::runtime_loader</a><li>~scoped_lock()
-: <a class="el" href="a00308.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00306.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00297.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00293.html#70246e0260493625ff956fa5926fc71f">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00291.html#32c7d67a660d23ebbaab1a1d282 [...]
-: <a class="el" href="a00294.html#bd21c5f3d555d64d1de8658e15bf4966">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>~sequencer_node()
-: <a class="el" href="a00302.html#93d3d8f6a72b3e1387047282116ed6ee">tbb::flow::interface6::sequencer_node< T, A ></a><li>~source_node()
-: <a class="el" href="a00304.html#61700b0865fc17188b0abe26bbde65b6">tbb::flow::interface6::source_node< Output ></a><li>~spin_rw_mutex_v3()
-: <a class="el" href="a00307.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
-: <a class="el" href="a00311.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
-: <a class="el" href="a00315.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
-: <a class="el" href="a00316.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
+: <a class="el" href="a00267.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
+: <a class="el" href="a00268.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
+: <a class="el" href="a00269.html#2aa8e2d28d5af1284cf78d20a9c22731">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
+: <a class="el" href="a00274.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
+: <a class="el" href="a00276.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
+: <a class="el" href="a00272.html#928769b139d53427e7075c1f86148e4c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~continue_receiver()
+: <a class="el" href="a00279.html#1e14828fa079b9835ff7267df5ee45d7">tbb::flow::interface6::continue_receiver</a><li>~enumerable_thread_specific()
+: <a class="el" href="a00281.html#5a7907d9e3e5b18e7a7b55211ef3213f">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
+: <a class="el" href="a00282.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~graph()
+: <a class="el" href="a00288.html#8a7d424c0616a1c37a908ead182e2fe5">tbb::flow::interface6::graph</a><li>~memory_pool()
+: <a class="el" href="a00295.html#fdad7c4ed08332ec384491a71b721957">tbb::interface6::memory_pool< Alloc ></a><li>~parallel_while()
+: <a class="el" href="a00308.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
+: <a class="el" href="a00310.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
+: <a class="el" href="a00316.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~reader_writer_lock()
+: <a class="el" href="a00318.html#5135f64f7b7339017f33d956445edbee">tbb::interface5::reader_writer_lock</a><li>~receiver()
+: <a class="el" href="a00321.html#b00699b235435f7b65b663d5063624a1">tbb::flow::interface6::receiver< T ></a><li>~runtime_loader()
+: <a class="el" href="a00324.html#c25fec923a751a3e03f5cbe969f1f0c5">tbb::interface6::runtime_loader</a><li>~scoped_lock()
+: <a class="el" href="a00334.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00332.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00323.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00319.html#70246e0260493625ff956fa5926fc71f">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00317.html#32c7d67a660d23ebbaab1a1d282 [...]
+: <a class="el" href="a00320.html#bd21c5f3d555d64d1de8658e15bf4966">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>~sequencer_node()
+: <a class="el" href="a00328.html#93d3d8f6a72b3e1387047282116ed6ee">tbb::flow::interface6::sequencer_node< T, A ></a><li>~source_node()
+: <a class="el" href="a00330.html#61700b0865fc17188b0abe26bbde65b6">tbb::flow::interface6::source_node< Output ></a><li>~spin_rw_mutex_v3()
+: <a class="el" href="a00333.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
+: <a class="el" href="a00337.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
+: <a class="el" href="a00341.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
+: <a class="el" href="a00342.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_enum.html b/doc/html/functions_enum.html
index d61b61c..3adb98c 100644
--- a/doc/html/functions_enum.html
+++ b/doc/html/functions_enum.html
@@ -35,14 +35,14 @@
 <p>
 <ul>
 <li>error_code
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789">tbb::interface6::runtime_loader</a><li>error_mode
-: <a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb">tbb::interface6::runtime_loader</a><li>malloc_type
-: <a class="el" href="a00317.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>state_type
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a><li>status_t
-: <a class="el" href="a00292.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock</a></ul>
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789">tbb::interface6::runtime_loader</a><li>error_mode
+: <a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb">tbb::interface6::runtime_loader</a><li>malloc_type
+: <a class="el" href="a00343.html#09a7f81fb2c3055aaecf058b11538544">tbb::tbb_allocator< T ></a><li>state_type
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e">tbb::task</a><li>status_t
+: <a class="el" href="a00318.html#6f921f0d7c1812ceb5674418c8b6ccaf">tbb::interface5::reader_writer_lock</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_eval.html b/doc/html/functions_eval.html
index bdb73c6..2e4b60e 100644
--- a/doc/html/functions_eval.html
+++ b/doc/html/functions_eval.html
@@ -35,24 +35,24 @@
 <p>
 <ul>
 <li>allocated
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>ec_bad_arg
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">tbb::interface6::runtime_loader</a><li>ec_bad_call
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">tbb::interface6::runtime_loader</a><li>ec_bad_lib
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">tbb::interface6::runtime_loader</a><li>ec_bad_ver
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">tbb::interface6::runtime_loader</a><li>ec_no_lib
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">tbb::interface6::runtime_loader</a><li>ec_ok
-: <a class="el" href="a00298.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">tbb::interface6::runtime_loader</a><li>em_abort
-: <a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">tbb::interface6::runtime_loader</a><li>em_status
-: <a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">tbb::interface6::runtime_loader</a><li>em_throw
-: <a class="el" href="a00298.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">tbb::interface6::runtime_loader</a><li>executing
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a><li>freed
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>ready
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recycle
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>reexecute
-: <a class="el" href="a00311.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a></ul>
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">tbb::task</a><li>ec_bad_arg
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878927e94a7b173bb8d0623bf48aad8fc703">tbb::interface6::runtime_loader</a><li>ec_bad_call
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde018789e6ce2b091083b80878cbb70cd00782a1">tbb::interface6::runtime_loader</a><li>ec_bad_lib
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878903ee81d8c05966bc1125666713dee5f6">tbb::interface6::runtime_loader</a><li>ec_bad_ver
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878907790f32918e60d670a96c1f0349e8d6">tbb::interface6::runtime_loader</a><li>ec_no_lib
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde01878902acc03ebfcdb16e3e26b24f64da2bdb">tbb::interface6::runtime_loader</a><li>ec_ok
+: <a class="el" href="a00324.html#6831be91cdc64e57e565ce0dde0187891e3a364f63f419e5ea2f1d1e52289b27">tbb::interface6::runtime_loader</a><li>em_abort
+: <a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcb630dd30c9ba61d5ab187e80313bbad94">tbb::interface6::runtime_loader</a><li>em_status
+: <a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcbdb47fe5ffbd2eaf47e6de0af433ada38">tbb::interface6::runtime_loader</a><li>em_throw
+: <a class="el" href="a00324.html#bb0130fe0f596399707e61431231ebcbdeb59ca2912432b47fd3ec831574653b">tbb::interface6::runtime_loader</a><li>executing
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">tbb::task</a><li>freed
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">tbb::task</a><li>ready
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">tbb::task</a><li>recycle
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">tbb::task</a><li>reexecute
+: <a class="el" href="a00337.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">tbb::task</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html
index c114b87..ad36560 100644
--- a/doc/html/functions_func.html
+++ b/doc/html/functions_func.html
@@ -60,22 +60,22 @@
  
 <p>
 <h3><a class="anchor" name="index_a">- a -</a></h3><ul>
-<li>acquire()
-: <a class="el" href="a00308.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00306.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00297.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00291.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00289.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
-: <a class="el" href="a00304.html#4b647e4a93d08ccdd8d323279e4eaaa6">tbb::flow::interface6::source_node< Output ></a><li>add()
-: <a class="el" href="a00282.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00281.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
-: <a class="el" href="a00284.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
-: <a class="el" href="a00311.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>allocate()
-: <a class="el" href="a00320.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00317.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00299.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00270.html#365bd64d284c80d85bb2149a12681526">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00238.html#4cdeea67af6c1fcd8f1d5e9 [...]
-: <a class="el" href="a00311.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
-: <a class="el" href="a00311.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
-: <a class="el" href="a00311.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>allocator_type()
-: <a class="el" href="a00317.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00255.html#3c03eb40955b933b01987222722ac4bd">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a c [...]
-: <a class="el" href="a00250.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
-: <a class="el" href="a00250.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a></ul>
+<li>abort()
+: <a class="el" href="a00268.html#86c77a6c1317239405968f5afc7b10d3">tbb::concurrent_bounded_queue< T, A ></a><li>acquire()
+: <a class="el" href="a00334.html#b0b646ec5be02a127d159bbb7ca65353">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00332.html#3ee3c338732b1f64b0b32a757807a30d">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00323.html#7fb04da37cccf8c99b1f9102d9074f9a">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00317.html#a8dd5ab8686e76de21587544dbb681e0">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00315.html#533e4fc8355ee321206a0609c42d909d">tbb::qu [...]
+: <a class="el" href="a00330.html#4b647e4a93d08ccdd8d323279e4eaaa6">tbb::flow::interface6::source_node< Output ></a><li>add()
+: <a class="el" href="a00308.html#e131c560057a58229992b61eb8dba4c6">tbb::parallel_while< Body ></a>, <a class="el" href="a00307.html#40baaf0f6856f4491dd0adf896c93516">tbb::parallel_do_feeder< Item ></a><li>add_filter()
+: <a class="el" href="a00310.html#38fb5c9c8395dd6f89a4ae2011a83e0d">tbb::pipeline</a><li>affinity()
+: <a class="el" href="a00337.html#3a920a56b0bcf2801518fb45b2c9d2be">tbb::task</a><li>allocate()
+: <a class="el" href="a00346.html#c35e5db8e9cdff5d1387db5b0bad2e4a">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00343.html#f6cb487b1bdce0b581f265a77dca6d53">tbb::tbb_allocator< T ></a>, <a class="el" href="a00325.html#726b1586d05d44665a36e1c7b2699bfd">tbb::scalable_allocator< T ></a>, <a class="el" href="a00296.html#365bd64d284c80d85bb2149a12681526">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00264.html#4cdeea67af6c1fcd8f1d5e9 [...]
+: <a class="el" href="a00337.html#1ff794f7053cd9148d5f280fbf07377f">tbb::task</a><li>allocate_continuation()
+: <a class="el" href="a00337.html#1434c79a5138993269d034008bff7329">tbb::task</a><li>allocate_root()
+: <a class="el" href="a00337.html#8ccc518caf31075a3e073996d2d240a4">tbb::task</a><li>assign()
+: <a class="el" href="a00276.html#93a06b3112cb804f42f40efb5e7387b4">tbb::concurrent_vector< T, A ></a><li>at()
+: <a class="el" href="a00276.html#23e14a38af748edff96a7adc3a0f1c58">tbb::concurrent_vector< T, A ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x62.html b/doc/html/functions_func_0x62.html
index 650d3b4..fc5b63f 100644
--- a/doc/html/functions_func_0x62.html
+++ b/doc/html/functions_func_0x62.html
@@ -61,14 +61,14 @@
 <p>
 <h3><a class="anchor" name="index_b">- b -</a></h3><ul>
 <li>back()
-: <a class="el" href="a00250.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
-: <a class="el" href="a00255.html#84afb3906a39e399cde1c950d6351300">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00233.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00227.html#0d702fc6b9e9d061ace3501b3c861cdf">tbb::aligned_space< T, N ></a><li>blocked_range()
-: <a class="el" href="a00233.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
-: <a class="el" href="a00243.html#af34cb91b1d0f36a885a1a3432dd9af1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>buffer_node()
-: <a class="el" href="a00237.html#03ad7b85a8341437f584af06ad050cdc">tbb::flow::interface6::buffer_node< T, A ></a></ul>
+: <a class="el" href="a00276.html#bd518e204107d07fd08d0ec5bdfd383d">tbb::concurrent_vector< T, A ></a><li>begin()
+: <a class="el" href="a00288.html#f63c3b7d03098b57fc16b71c57b303e5">tbb::flow::interface6::graph</a>, <a class="el" href="a00281.html#84afb3906a39e399cde1c950d6351300">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#78a06182276ff758788d4c0623ae0d71">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00259.html#18d2258400756ac1446dac7676b18df3">tbb::blocked_range< Value ></a>, <a class="el" href="a00253 [...]
+: <a class="el" href="a00259.html#4c0efd2be3f96a0ab3ba5085e8b3fcc7">tbb::blocked_range< Value ></a><li>bucket_count()
+: <a class="el" href="a00269.html#af34cb91b1d0f36a885a1a3432dd9af1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>buffer_node()
+: <a class="el" href="a00263.html#03ad7b85a8341437f584af06ad050cdc">tbb::flow::interface6::buffer_node< T, A ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x63.html b/doc/html/functions_func_0x63.html
index 71c33a7..20e2186 100644
--- a/doc/html/functions_func_0x63.html
+++ b/doc/html/functions_func_0x63.html
@@ -61,30 +61,30 @@
 <p>
 <h3><a class="anchor" name="index_c">- c -</a></h3><ul>
 <li>cancel_group_execution()
-: <a class="el" href="a00311.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00313.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
-: <a class="el" href="a00250.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00242.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
-: <a class="el" href="a00250.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
-: <a class="el" href="a00250.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>change_group()
-: <a class="el" href="a00311.html#62247be9a637a814c8e8f4bcfb3a1908">tbb::task</a><li>clear()
-: <a class="el" href="a00315.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00284.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00255.html#a8764176d4b6014c5d65f1051851abc8">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00242.html#90b31e2954c6e4596c7900435a5f [...]
-: <a class="el" href="a00235.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00234.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
-: <a class="el" href="a00250.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
-: <a class="el" href="a00242.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
-: <a class="el" href="a00243.html#83c40f2053f208861b90390e12a36436">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_priority_queue()
-: <a class="el" href="a00247.html#c8b20e7430c5302936030bef59a562be">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>concurrent_queue()
-: <a class="el" href="a00249.html#9102b897776bd2d9e908e6604ff16b5f">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00248.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
-: <a class="el" href="a00250.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
-: <a class="el" href="a00246.html#27399c613eb1aecd4660803955dda09d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>construct()
-: <a class="el" href="a00317.html#ab228ab9e324ed041c2226e1d717df5f">tbb::tbb_allocator< T ></a>, <a class="el" href="a00270.html#c7e1671b725894b94ce9a6ac544e24f2">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00238.html#958ee8745c86c275bfc9533af565e017">tbb::cache_aligned_allocator< T ></a><li>context()
-: <a class="el" href="a00311.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>continue_node()
-: <a class="el" href="a00252.html#869562787fcb5c57a90aea120f26d492">tbb::flow::interface6::continue_node< Output ></a><li>continue_receiver()
-: <a class="el" href="a00253.html#a0b292ed7fa6556b2a735f6d1e82dc74">tbb::flow::interface6::continue_receiver</a><li>count()
-: <a class="el" href="a00243.html#6968eb6feed2df36be421df0464297af">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
-: <a class="el" href="a00250.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
-: <a class="el" href="a00250.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00337.html#0f3fb4aac549ab642022450a4bd13326">tbb::task</a>, <a class="el" href="a00340.html#8bcdfdf4e6bfb76125b6de15c00b571d">tbb::task_group_context</a><li>capacity()
+: <a class="el" href="a00276.html#3ed6b9ae7217af5103d974045b6f5cd5">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00268.html#b2888b3e4e837d7e03f2c731963a402b">tbb::concurrent_bounded_queue< T, A ></a><li>cbegin()
+: <a class="el" href="a00288.html#e183dfc3f89dc8f57c06ba165fb89f66">tbb::flow::interface6::graph</a>, <a class="el" href="a00276.html#f88fcf1c920693c39bd9709db33c199f">tbb::concurrent_vector< T, A ></a><li>cend()
+: <a class="el" href="a00288.html#4866156e6a31d0399b61c6eb82ee81fd">tbb::flow::interface6::graph</a>, <a class="el" href="a00276.html#0c15a5d0f1cf75d687dabba07da1d46b">tbb::concurrent_vector< T, A ></a><li>change_group()
+: <a class="el" href="a00337.html#62247be9a637a814c8e8f4bcfb3a1908">tbb::task</a><li>clear()
+: <a class="el" href="a00341.html#fce446ee13e025969945328f3ff59b95">tbb::task_list</a>, <a class="el" href="a00310.html#2c84aef5b834b555ee220b176e25931e">tbb::pipeline</a>, <a class="el" href="a00281.html#a8764176d4b6014c5d65f1051851abc8">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#26f937a359a66b6aae904c3cd9a3c444">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00268.html#90b31e2954c6e4596c7900435a5f [...]
+: <a class="el" href="a00261.html#3336ba9480fd6c43e158f9beb024c050">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00260.html#392a46759af2c884957115771affa7f4">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
+: <a class="el" href="a00276.html#1693d1da41b1a8235871be9c6633be35">tbb::concurrent_vector< T, A ></a><li>concurrent_bounded_queue()
+: <a class="el" href="a00268.html#a5e04dcd7db9fd9b583b4e7df832246a">tbb::concurrent_bounded_queue< T, A ></a><li>concurrent_hash_map()
+: <a class="el" href="a00269.html#83c40f2053f208861b90390e12a36436">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>concurrent_priority_queue()
+: <a class="el" href="a00273.html#c8b20e7430c5302936030bef59a562be">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>concurrent_queue()
+: <a class="el" href="a00275.html#9102b897776bd2d9e908e6604ff16b5f">tbb::deprecated::concurrent_queue< T, A ></a>, <a class="el" href="a00274.html#8a6b98ea11a867db8ac868f0113ca429">tbb::strict_ppl::concurrent_queue< T, A ></a><li>concurrent_vector()
+: <a class="el" href="a00276.html#4450de83c5862ea4bcd9443fd7e67419">tbb::concurrent_vector< T, A ></a><li>const_accessor()
+: <a class="el" href="a00272.html#27399c613eb1aecd4660803955dda09d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>construct()
+: <a class="el" href="a00343.html#15c431ccb5ccc5a30e5d496edad4c143">tbb::tbb_allocator< T ></a>, <a class="el" href="a00296.html#3491a81e0597c1696a163e7c8fa8706a">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00264.html#48a7e49dfb0578edc84a90a5ac30793d">tbb::cache_aligned_allocator< T ></a><li>context()
+: <a class="el" href="a00337.html#d8c36a93f3972590fbb65ff1cef3173b">tbb::task</a><li>continue_node()
+: <a class="el" href="a00278.html#869562787fcb5c57a90aea120f26d492">tbb::flow::interface6::continue_node< Output ></a><li>continue_receiver()
+: <a class="el" href="a00279.html#a0b292ed7fa6556b2a735f6d1e82dc74">tbb::flow::interface6::continue_receiver</a><li>count()
+: <a class="el" href="a00269.html#6968eb6feed2df36be421df0464297af">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>crbegin()
+: <a class="el" href="a00276.html#db78a1d28c9c966050e8a2926d834a33">tbb::concurrent_vector< T, A ></a><li>crend()
+: <a class="el" href="a00276.html#fff9cece89438587997ebedf93c5e962">tbb::concurrent_vector< T, A ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x64.html b/doc/html/functions_func_0x64.html
index ce18572..accd1e1 100644
--- a/doc/html/functions_func_0x64.html
+++ b/doc/html/functions_func_0x64.html
@@ -61,15 +61,15 @@
 <p>
 <h3><a class="anchor" name="index_d">- d -</a></h3><ul>
 <li>deallocate()
-: <a class="el" href="a00317.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00299.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00270.html#4e24a03de38638af07548383024c54ab">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00238.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement_ref_count()
-: <a class="el" href="a00311.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>decrement_wait_count()
-: <a class="el" href="a00262.html#29b85506870f13a884a21655aec2a65d">tbb::flow::interface6::graph</a><li>default_num_threads()
-: <a class="el" href="a00316.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>destroy()
-: <a class="el" href="a00320.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00273.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00240.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00319.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00317.html#ef133522bf55f05a605bee0763208281">tbb::tbb_allocator [...]
-: <a class="el" href="a00308.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00291.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00343.html#fdd011fdf2f9ad07006dc7c0a7ec1da2">tbb::tbb_allocator< T ></a>, <a class="el" href="a00325.html#f806a238c18cbcfb531e1e0a0d2ec59d">tbb::scalable_allocator< T ></a>, <a class="el" href="a00296.html#4e24a03de38638af07548383024c54ab">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00264.html#3d4eadf188f7d85d3805ae534e0b8e1c">tbb::cache_aligned_allocator< T ></a><li>decrement_ref_count()
+: <a class="el" href="a00337.html#ef4680f5c148020c5e7e43ddef44cd5d">tbb::task</a><li>decrement_wait_count()
+: <a class="el" href="a00288.html#29b85506870f13a884a21655aec2a65d">tbb::flow::interface6::graph</a><li>default_num_threads()
+: <a class="el" href="a00342.html#ba00714c33a41a3c2216f48613971cab">tbb::task_scheduler_init</a><li>destroy()
+: <a class="el" href="a00346.html#921875bbacd2c8a5f324c7da7a415262">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00299.html#7a46873119d9f85a7b0009c13e41a258">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00266.html#93d875d3555502ff6f18513525de204c">tbb::captured_exception</a>, <a class="el" href="a00345.html#66c94938eca8bf88b76f3eccaaf215d8">tbb::tbb_exception</a>, <a class="el" href="a00337.html#dfaacf92685e5f86393bf657b2853bf8">tbb::task</a><li>d [...]
+: <a class="el" href="a00334.html#c2c2c38a08cb9080e87099fac3e5bc94">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00317.html#0d2f93edf7b15ec4bcee138823220c52">tbb::queuing_rw_mutex::scoped_lock</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x65.html b/doc/html/functions_func_0x65.html
index a7792ad..59f24b5 100644
--- a/doc/html/functions_func_0x65.html
+++ b/doc/html/functions_func_0x65.html
@@ -61,16 +61,17 @@
 <p>
 <h3><a class="anchor" name="index_e">- e -</a></h3><ul>
 <li>empty()
-: <a class="el" href="a00315.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00255.html#72595886d0ac8fd0543f90038570510d">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00242.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.htm [...]
-: <a class="el" href="a00255.html#cb448bb4977ce366ceb7344085cc7050">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00233.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00227.html#024be075c23c0394c9a2518d993bcd9e">tbb::aligned_space< T, N ></a><li>enqueue()
-: <a class="el" href="a00311.html#fe6bf6aaf84e664134fabb6c4f409ea9">tbb::task</a><li>enumerable_thread_specific()
-: <a class="el" href="a00255.html#7bce6829981c9efe3f59cae2355e383e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
-: <a class="el" href="a00243.html#5f12d150d421420965db07368666a84f">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exclude()
-: <a class="el" href="a00243.html#0c964214eb38f54603aa75fdff6d2709">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
-: <a class="el" href="a00311.html#22c298cd40937a431a06777423f002f6">tbb::task</a>, <a class="el" href="a00253.html#40ca8b7e96c5bc3428b4d1e409725ee5">tbb::flow::interface6::continue_receiver</a></ul>
+: <a class="el" href="a00341.html#f3ac31e092814b90929f81bb30441959">tbb::task_list</a>, <a class="el" href="a00281.html#72595886d0ac8fd0543f90038570510d">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#c6426cb93cf20d3af40f3c90f1f0481a">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00268.html#f64924f2ee9225c368a270fc3c394db9">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.htm [...]
+: <a class="el" href="a00288.html#907bd06606818c36f52420fe8d469d35">tbb::flow::interface6::graph</a>, <a class="el" href="a00281.html#cb448bb4977ce366ceb7344085cc7050">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#1e6aa764ce5a1cbd24526f68bc0a2f6b">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00259.html#8b929d93ddc13f148b11bceef3a3bdf8">tbb::blocked_range< Value ></a>, <a class="el" href="a00253 [...]
+: <a class="el" href="a00337.html#fe6bf6aaf84e664134fabb6c4f409ea9">tbb::task</a><li>enumerable_thread_specific()
+: <a class="el" href="a00281.html#7bce6829981c9efe3f59cae2355e383e">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>erase()
+: <a class="el" href="a00269.html#5f12d150d421420965db07368666a84f">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>exclude()
+: <a class="el" href="a00269.html#0c964214eb38f54603aa75fdff6d2709">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>execute()
+: <a class="el" href="a00337.html#22c298cd40937a431a06777423f002f6">tbb::task</a>, <a class="el" href="a00279.html#40ca8b7e96c5bc3428b4d1e409725ee5">tbb::flow::interface6::continue_receiver</a>, <a class="el" href="a00251.html#641c8dc43652589d12eefaef130c094d">tbb::interface6::aggregator</a><li>execute_impl()
+: <a class="el" href="a00252.html#fdd0a9ce522246b9e14ae5e44bc72d31">tbb::interface6::aggregator_ext< handler_type ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x66.html b/doc/html/functions_func_0x66.html
index d16aafb..8ea4b35 100644
--- a/doc/html/functions_func_0x66.html
+++ b/doc/html/functions_func_0x66.html
@@ -61,14 +61,14 @@
 <p>
 <h3><a class="anchor" name="index_f">- f -</a></h3><ul>
 <li>finalize()
-: <a class="el" href="a00256.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
-: <a class="el" href="a00243.html#7bc475d1968f7f0af3d736d7e8a0d7df">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>forward()
-: <a class="el" href="a00237.html#2648324ce0a38b40132b8502ef250e3a">tbb::flow::interface6::buffer_node< T, A ></a><li>front()
-: <a class="el" href="a00250.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a><li>function_node()
-: <a class="el" href="a00261.html#01055081ed477714503820035db3a965">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>, <a class="el" href="a00260.html#d5132323fd2ac6a00ea0c78beda78723">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></ul>
+: <a class="el" href="a00282.html#56275eb889c77c4807967133e21401bd">tbb::filter</a><li>find()
+: <a class="el" href="a00269.html#7bc475d1968f7f0af3d736d7e8a0d7df">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>forward()
+: <a class="el" href="a00263.html#2648324ce0a38b40132b8502ef250e3a">tbb::flow::interface6::buffer_node< T, A ></a><li>front()
+: <a class="el" href="a00276.html#502615a858eb9fa0390ee59169065e90">tbb::concurrent_vector< T, A ></a><li>function_node()
+: <a class="el" href="a00287.html#01055081ed477714503820035db3a965">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>, <a class="el" href="a00286.html#d5132323fd2ac6a00ea0c78beda78723">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x67.html b/doc/html/functions_func_0x67.html
index 89d0fa9..b02d40d 100644
--- a/doc/html/functions_func_0x67.html
+++ b/doc/html/functions_func_0x67.html
@@ -61,16 +61,16 @@
 <p>
 <h3><a class="anchor" name="index_g">- g -</a></h3><ul>
 <li>get_allocator()
-: <a class="el" href="a00250.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00242.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#d545d444fb0d16148f9b61fd89f9a337">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="e [...]
-: <a class="el" href="a00233.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>graph()
-: <a class="el" href="a00262.html#4ab3d4b5208ece28c4c3ced647e26e12">tbb::flow::interface6::graph</a><li>group()
-: <a class="el" href="a00311.html#5987123486afca36ddebb9e2a8b7779a">tbb::task</a><li>group_priority()
-: <a class="el" href="a00311.html#e1d969a1ccab6796e3b8b2c1a5be33d2">tbb::task</a><li>grow_by()
-: <a class="el" href="a00250.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
-: <a class="el" href="a00250.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00276.html#2fdba8e90de6a4d2300222236d46758e">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00268.html#415eb87e53b1c6a266de06ecbc490d16">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#f034f70caef445fe8abc9113ec926a8d">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#d545d444fb0d16148f9b61fd89f9a337">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="e [...]
+: <a class="el" href="a00259.html#fcd2e5b8b6c11fd3f20fc0aa9f11bbc2">tbb::blocked_range< Value ></a><li>graph()
+: <a class="el" href="a00288.html#104d4f3775f596b43177c29e6b7b7656">tbb::flow::interface6::graph</a><li>group()
+: <a class="el" href="a00337.html#5987123486afca36ddebb9e2a8b7779a">tbb::task</a><li>group_priority()
+: <a class="el" href="a00337.html#e1d969a1ccab6796e3b8b2c1a5be33d2">tbb::task</a><li>grow_by()
+: <a class="el" href="a00276.html#473a59a4c9308b93411b898b3110d26c">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
+: <a class="el" href="a00276.html#a7e3b67c8ccab16d0aecc80899ae799d">tbb::concurrent_vector< T, A ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x69.html b/doc/html/functions_func_0x69.html
index c1f16ed..3072e1b 100644
--- a/doc/html/functions_func_0x69.html
+++ b/doc/html/functions_func_0x69.html
@@ -61,31 +61,31 @@
 <p>
 <h3><a class="anchor" name="index_i">- i -</a></h3><ul>
 <li>increment_ref_count()
-: <a class="el" href="a00311.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>increment_wait_count()
-: <a class="el" href="a00262.html#a993b789d1e488e0c3929135beae560e">tbb::flow::interface6::graph</a><li>init()
-: <a class="el" href="a00313.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
-: <a class="el" href="a00316.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>insert()
-: <a class="el" href="a00243.html#1dd37fad87e561151ba1e242ca94bcc1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
-: <a class="el" href="a00243.html#72c9c9e9655fcf096f5f0ed9c8ba6669">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
-: <a class="el" href="a00243.html#8f5373b8e1864619d1ffcf3bf3f1f13d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
-: <a class="el" href="a00243.html#2f76ed101a0ccc8875b846c2f747897e">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_forward()
-: <a class="el" href="a00286.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00287.html#eadcbbb81f9a9d223afabe0f40e77ecb">tbb::flow::interface6::queue_node< T, A ></a>, <a class="el" href="a00237.html#dcbffbae514f4d95205b0845785c0a91">tbb::flow::interface6::buffer_node< T, A ></a><li>internal_reg_succ()
-: <a class="el" href="a00237.html#df21388252b8963e839dca29d2c67ea5">tbb::flow::interface6::buffer_node< T, A ></a><li>internal_rem_succ()
-: <a class="el" href="a00237.html#6b6cf76dff80fd679251da93351c1291">tbb::flow::interface6::buffer_node< T, A ></a><li>interval_t()
-: <a class="el" href="a00324.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
-: <a class="el" href="a00316.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
-: <a class="el" href="a00256.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
-: <a class="el" href="a00311.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a><li>is_divisible()
-: <a class="el" href="a00235.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00234.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00233.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
-: <a class="el" href="a00313.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
-: <a class="el" href="a00256.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
-: <a class="el" href="a00311.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
-: <a class="el" href="a00256.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
-: <a class="el" href="a00311.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer()
-: <a class="el" href="a00245.html#07d958f151a0eaa92f50fd56ad6440e2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, <a class="el" href="a00308.html#6b5a7c3c67a36b05c4df8410d32627d8">tbb::spin_rw_mutex_v3::scoped_lock</a></ul>
+: <a class="el" href="a00337.html#f5fb43c7ad0de5a4b95703cebc39e345">tbb::task</a><li>increment_wait_count()
+: <a class="el" href="a00288.html#a993b789d1e488e0c3929135beae560e">tbb::flow::interface6::graph</a><li>init()
+: <a class="el" href="a00340.html#49a55352084fd44b8863d182e839e6dc">tbb::task_group_context</a><li>initialize()
+: <a class="el" href="a00342.html#d5ed214a8bb53b0466ed91ff4734b9a3">tbb::task_scheduler_init</a><li>insert()
+: <a class="el" href="a00269.html#1dd37fad87e561151ba1e242ca94bcc1">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_copy()
+: <a class="el" href="a00269.html#72c9c9e9655fcf096f5f0ed9c8ba6669">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_equal_range()
+: <a class="el" href="a00269.html#8f5373b8e1864619d1ffcf3bf3f1f13d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_fast_find()
+: <a class="el" href="a00269.html#2f76ed101a0ccc8875b846c2f747897e">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>internal_forward()
+: <a class="el" href="a00312.html#ed2d8dc0a9c1c2571e4a69df2f2209e5">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00313.html#eadcbbb81f9a9d223afabe0f40e77ecb">tbb::flow::interface6::queue_node< T, A ></a>, <a class="el" href="a00263.html#dcbffbae514f4d95205b0845785c0a91">tbb::flow::interface6::buffer_node< T, A ></a><li>internal_reg_succ()
+: <a class="el" href="a00263.html#df21388252b8963e839dca29d2c67ea5">tbb::flow::interface6::buffer_node< T, A ></a><li>internal_rem_succ()
+: <a class="el" href="a00263.html#6b6cf76dff80fd679251da93351c1291">tbb::flow::interface6::buffer_node< T, A ></a><li>interval_t()
+: <a class="el" href="a00350.html#1a21a428e00cced2e6a49e0f5f2258bf">tbb::tick_count::interval_t</a><li>is_active()
+: <a class="el" href="a00342.html#12752282977029f23416642bc03e8b74">tbb::task_scheduler_init</a><li>is_bound()
+: <a class="el" href="a00282.html#15c29cae5d237e6d63dbfe5c94af89d5">tbb::filter</a><li>is_cancelled()
+: <a class="el" href="a00337.html#025f18118c057c4c8db87ff2ce8df975">tbb::task</a>, <a class="el" href="a00288.html#227ea140dc2c68f79a4e5a34a8367b58">tbb::flow::interface6::graph</a><li>is_divisible()
+: <a class="el" href="a00261.html#39d69191721c488e737ae5d9c5336b9c">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00260.html#ad36a9b38e4fef26d376f99552ce2d92">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00259.html#41a58b703d574b6e1ca155df3576f578">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
+: <a class="el" href="a00340.html#4db72f16210b0a991b2c134d6763a4cc">tbb::task_group_context</a><li>is_ordered()
+: <a class="el" href="a00282.html#cd53206c4795ef2df5df26b795caf692">tbb::filter</a><li>is_owned_by_current_thread()
+: <a class="el" href="a00337.html#c26718b3b247cd13deb1a741902e7105">tbb::task</a><li>is_serial()
+: <a class="el" href="a00282.html#fcfec27656a69ff2072802ac001e936f">tbb::filter</a><li>is_stolen_task()
+: <a class="el" href="a00337.html#f9169402702f56bf519448aaf34450aa">tbb::task</a><li>is_writer()
+: <a class="el" href="a00271.html#07d958f151a0eaa92f50fd56ad6440e2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, <a class="el" href="a00334.html#6b5a7c3c67a36b05c4df8410d32627d8">tbb::spin_rw_mutex_v3::scoped_lock</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x6c.html b/doc/html/functions_func_0x6c.html
index 39c5b13..6935655 100644
--- a/doc/html/functions_func_0x6c.html
+++ b/doc/html/functions_func_0x6c.html
@@ -61,15 +61,15 @@
 <p>
 <h3><a class="anchor" name="index_l">- l -</a></h3><ul>
 <li>limiter_node()
-: <a class="el" href="a00266.html#83d3ab884543b070ee5b345a87f241fa">tbb::flow::interface6::limiter_node< T ></a><li>load()
-: <a class="el" href="a00298.html#5f3f6f1683386705a6931acae45f0862">tbb::interface6::runtime_loader</a><li>local()
-: <a class="el" href="a00255.html#7dc79058d2832f7447de8e691c3455ea">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
-: <a class="el" href="a00307.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00305.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00296.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00292.html#2653d1a2d560059a51219a8ceab3ade9">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00275.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
-: <a class="el" href="a00307.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00292.html#d9d16a24d9f6c3dada73c6b9ff214f5b">tbb::interface5::reader_writer_lock</a><li>lookup()
-: <a class="el" href="a00243.html#3f3413264a99174a224ef96f6c4ea769">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <a class="el" href="a00292.html#83d3ab884543b070ee5b345a87f241fa">tbb::flow::interface6::limiter_node< T ></a><li>load()
+: <a class="el" href="a00324.html#5f3f6f1683386705a6931acae45f0862">tbb::interface6::runtime_loader</a><li>local()
+: <a class="el" href="a00281.html#7dc79058d2832f7447de8e691c3455ea">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>lock()
+: <a class="el" href="a00333.html#4007d6e1523dbc3c2bb7f889ab789a8a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00331.html#4f748989e19b6045e3a2d2ee73626a28">tbb::spin_mutex</a>, <a class="el" href="a00322.html#4c342c69d47f4bb0b393535dee4015d6">tbb::recursive_mutex</a>, <a class="el" href="a00318.html#2653d1a2d560059a51219a8ceab3ade9">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00301.html#4470e61c24c129a0299ca6c17240adbb">tbb::mutex</a><li>lock_read()
+: <a class="el" href="a00333.html#13f799708ac4ca437a16be202e263e18">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00318.html#d9d16a24d9f6c3dada73c6b9ff214f5b">tbb::interface5::reader_writer_lock</a><li>lookup()
+: <a class="el" href="a00269.html#3f3413264a99174a224ef96f6c4ea769">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x6d.html b/doc/html/functions_func_0x6d.html
index 276dca7..5568614 100644
--- a/doc/html/functions_func_0x6d.html
+++ b/doc/html/functions_func_0x6d.html
@@ -61,13 +61,13 @@
 <p>
 <h3><a class="anchor" name="index_m">- m -</a></h3><ul>
 <li>max_size()
-: <a class="el" href="a00317.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00299.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00270.html#beebdb6144df8ba219fadfad4de866ea">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00250.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00243.html#2bce57fe9b594abe1e6 [...]
-: <a class="el" href="a00269.html#2822528265718a4c779591fc37c02ca8">tbb::interface6::memory_pool< Alloc ></a><li>move()
-: <a class="el" href="a00273.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00240.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00319.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
-: <a class="el" href="a00275.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a>, <a class="el" href="a00308.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">tbb::spin_rw_mutex_v3::scoped_lock</a></ul>
+: <a class="el" href="a00343.html#f059ca2c96243024f0d562ee3a87a3a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00325.html#880e766f1d913988c21973dbdd874fd5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00296.html#beebdb6144df8ba219fadfad4de866ea">tbb::interface6::memory_pool_allocator< T, P ></a>, <a class="el" href="a00276.html#2c248a017f0576df3e7cd99627836fd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00269.html#2bce57fe9b594abe1e6 [...]
+: <a class="el" href="a00295.html#2822528265718a4c779591fc37c02ca8">tbb::interface6::memory_pool< Alloc ></a><li>move()
+: <a class="el" href="a00299.html#1aea0ad179d6f0481fe7f3495f66adf9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00266.html#837a50b8f6a800bda225c39d1699643f">tbb::captured_exception</a>, <a class="el" href="a00345.html#3e3482bf264d4ca4dde046cd9c02c766">tbb::tbb_exception</a><li>mutex()
+: <a class="el" href="a00301.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a>, <a class="el" href="a00334.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">tbb::spin_rw_mutex_v3::scoped_lock</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x6e.html b/doc/html/functions_func_0x6e.html
index 2a91226..d6305b7 100644
--- a/doc/html/functions_func_0x6e.html
+++ b/doc/html/functions_func_0x6e.html
@@ -61,12 +61,12 @@
 <p>
 <h3><a class="anchor" name="index_n">- n -</a></h3><ul>
 <li>name()
-: <a class="el" href="a00273.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00240.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00319.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>note_affinity()
-: <a class="el" href="a00311.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
-: <a class="el" href="a00323.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
+: <a class="el" href="a00299.html#bc5f5c4739b17ac5211ac58226c2f5a5">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00266.html#5af82fd677449c5ca727fa1d7e16f9f5">tbb::captured_exception</a>, <a class="el" href="a00345.html#d00f6497e552fee978a02bfcbebf46e2">tbb::tbb_exception</a><li>note_affinity()
+: <a class="el" href="a00337.html#713c338c8eeaebdc5a6b10a69c039b06">tbb::task</a><li>now()
+: <a class="el" href="a00349.html#fb7f78ca61cf28398645ace66e284473">tbb::tick_count</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x6f.html b/doc/html/functions_func_0x6f.html
index ad27829..0eaaf02 100644
--- a/doc/html/functions_func_0x6f.html
+++ b/doc/html/functions_func_0x6f.html
@@ -61,18 +61,18 @@
 <p>
 <h3><a class="anchor" name="index_o">- o -</a></h3><ul>
 <li>object_may_be_null()
-: <a class="el" href="a00256.html#8ec4dfe053e94a2349d56781ddea8477">tbb::filter</a><li>operator *()
-: <a class="el" href="a00244.html#170280ea807a22e742095de3e8c5ea38">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00246.html#9411df8197ceb4881ec4c7368a0a7f88">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
-: <a class="el" href="a00319.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
-: <a class="el" href="a00256.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00245.html#fa6314b861c574f86ed189b124cf5853">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+=()
-: <a class="el" href="a00324.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-=()
-: <a class="el" href="a00324.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
-: <a class="el" href="a00244.html#a807920cdffe3ec5c5e282b4d1ff92a2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00246.html#3d03a48ecb8cd9549bd8be64b09c9b0d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
-: <a class="el" href="a00250.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00247.html#2ab7f7808891027ac0f0f5b3a4be51e9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00243.html#088d1aaccc816884a49e38f7065622c8">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
-: <a class="el" href="a00250.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00282.html#8ec4dfe053e94a2349d56781ddea8477">tbb::filter</a><li>operator *()
+: <a class="el" href="a00270.html#170280ea807a22e742095de3e8c5ea38">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00272.html#9411df8197ceb4881ec4c7368a0a7f88">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator delete()
+: <a class="el" href="a00345.html#3f2da7f3d8a6e4c1df522af1213afb5a">tbb::tbb_exception</a><li>operator()()
+: <a class="el" href="a00282.html#fa1b3dc1f4f47563ccab7f4d92f5b543">tbb::filter</a>, <a class="el" href="a00271.html#fa6314b861c574f86ed189b124cf5853">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a><li>operator+=()
+: <a class="el" href="a00350.html#cd9814947902e26463a69a111530f81b">tbb::tick_count::interval_t</a><li>operator-=()
+: <a class="el" href="a00350.html#35ff7eaf7c2031b4a991402ac9ecb940">tbb::tick_count::interval_t</a><li>operator->()
+: <a class="el" href="a00270.html#a807920cdffe3ec5c5e282b4d1ff92a2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>, <a class="el" href="a00272.html#3d03a48ecb8cd9549bd8be64b09c9b0d">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>operator=()
+: <a class="el" href="a00276.html#19f4ab88a01b0fd056af3bba463e7bd6">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00273.html#2ab7f7808891027ac0f0f5b3a4be51e9">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00269.html#088d1aaccc816884a49e38f7065622c8">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>operator[]()
+: <a class="el" href="a00276.html#c6fade5c732cc95274d1d8277ea619d1">tbb::concurrent_vector< T, A ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x70.html b/doc/html/functions_func_0x70.html
index a624403..1660308 100644
--- a/doc/html/functions_func_0x70.html
+++ b/doc/html/functions_func_0x70.html
@@ -61,23 +61,24 @@
 <p>
 <h3><a class="anchor" name="index_p">- p -</a></h3><ul>
 <li>pages()
-: <a class="el" href="a00235.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
-: <a class="el" href="a00282.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
-: <a class="el" href="a00311.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
-: <a class="el" href="a00230.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
-: <a class="el" href="a00284.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
-: <a class="el" href="a00242.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
-: <a class="el" href="a00315.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
-: <a class="el" href="a00249.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>priority()
-: <a class="el" href="a00313.html#2f2342b9e6c9c03703248ac13ad0271d">tbb::task_group_context</a><li>priority_queue_node()
-: <a class="el" href="a00286.html#17a4f66e23d54100b64805405e905d62">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a><li>process_item()
-: <a class="el" href="a00322.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
-: <a class="el" href="a00242.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#d905af7b8f6defff562f5ae9c3275763">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>push_back()
-: <a class="el" href="a00315.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00250.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
-: <a class="el" href="a00249.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
+: <a class="el" href="a00261.html#cf971430aa12361d3ed245344b7c6764">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
+: <a class="el" href="a00308.html#36e26ba3880c7bcf804a97ba0cbe133f">tbb::parallel_while< Body ></a><li>parent()
+: <a class="el" href="a00337.html#314e98ee4347ccec83efcb9ee22e8596">tbb::task</a><li>pause()
+: <a class="el" href="a00256.html#a174ea93e3bd3d5cce82389c2f28d037">tbb::internal::atomic_backoff</a><li>pipeline()
+: <a class="el" href="a00310.html#596dc3beba27099c4c8581cb419e1a59">tbb::pipeline</a><li>pop()
+: <a class="el" href="a00268.html#41f4c6bd7a82ab070e840bbf81b0b123">tbb::concurrent_bounded_queue< T, A ></a><li>pop_front()
+: <a class="el" href="a00341.html#5fe85df5ed524418389d34051750347d">tbb::task_list</a><li>pop_if_present()
+: <a class="el" href="a00275.html#48da3536245318af6cb5fd58bac78039">tbb::deprecated::concurrent_queue< T, A ></a><li>priority()
+: <a class="el" href="a00340.html#2f2342b9e6c9c03703248ac13ad0271d">tbb::task_group_context</a><li>priority_queue_node()
+: <a class="el" href="a00312.html#17a4f66e23d54100b64805405e905d62">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a><li>process()
+: <a class="el" href="a00252.html#ccd88bf4333dc100ba97da8e2170277d">tbb::interface6::aggregator_ext< handler_type ></a><li>process_item()
+: <a class="el" href="a00348.html#5e726bdc7fbd924c0b07bd558b1d4d5d">tbb::thread_bound_filter</a><li>push()
+: <a class="el" href="a00268.html#ceb08c743b11ba88c878e73fff8af20b">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#73c47563ffcc4c2f6452f25a04ebe2e2">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#d905af7b8f6defff562f5ae9c3275763">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>push_back()
+: <a class="el" href="a00341.html#4cd34756bc4763dafb8c84838a0124ff">tbb::task_list</a>, <a class="el" href="a00276.html#e94e038f915c0268fdf2d3d7f87d81b8">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
+: <a class="el" href="a00275.html#7c45561bafe71107d09b2bc1b8f4e681">tbb::deprecated::concurrent_queue< T, A ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x71.html b/doc/html/functions_func_0x71.html
index b59f3fa..77e504c 100644
--- a/doc/html/functions_func_0x71.html
+++ b/doc/html/functions_func_0x71.html
@@ -61,12 +61,12 @@
 <p>
 <h3><a class="anchor" name="index_q">- q -</a></h3><ul>
 <li>queue_node()
-: <a class="el" href="a00287.html#0226762d9ebba28311b7b1518d948ab1">tbb::flow::interface6::queue_node< T, A ></a><li>queuing_mutex()
-: <a class="el" href="a00288.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
-: <a class="el" href="a00290.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
+: <a class="el" href="a00313.html#0226762d9ebba28311b7b1518d948ab1">tbb::flow::interface6::queue_node< T, A ></a><li>queuing_mutex()
+: <a class="el" href="a00314.html#b389ad9c4db7293e4bdb5b8cda69ec04">tbb::queuing_mutex</a><li>queuing_rw_mutex()
+: <a class="el" href="a00316.html#85c90877c3447690ac4e2ac4ff8dea5e">tbb::queuing_rw_mutex</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x72.html b/doc/html/functions_func_0x72.html
index 0a26187..a633329 100644
--- a/doc/html/functions_func_0x72.html
+++ b/doc/html/functions_func_0x72.html
@@ -61,33 +61,33 @@
 <p>
 <h3><a class="anchor" name="index_r">- r -</a></h3><ul>
 <li>range()
-: <a class="el" href="a00255.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
-: <a class="el" href="a00250.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>reader_writer_lock()
-: <a class="el" href="a00292.html#c1431c4293e777efd9aab9a95c2a46e1">tbb::interface5::reader_writer_lock</a><li>recursive_mutex()
-: <a class="el" href="a00296.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle_as_child_of()
-: <a class="el" href="a00311.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
-: <a class="el" href="a00311.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
-: <a class="el" href="a00311.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
-: <a class="el" href="a00311.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>ref_count()
-: <a class="el" href="a00311.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>register_pending_exception()
-: <a class="el" href="a00313.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>register_predecessor()
-: <a class="el" href="a00266.html#de70a0e88ce7655d8c14b6af57f7496f">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00253.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">tbb::flow::interface6::continue_receiver</a>, <a class="el" href="a00295.html#30e3316466efe3a713c23062b6e806f3">tbb::flow::interface6::receiver< T ></a><li>register_successor()
-: <a class="el" href="a00266.html#c76561d8d871b4769876988a4de12a9b">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00237.html#f8bf4944ede4fc106423d67715beb695">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00236.html#fd0324c9ddb51fe6f95b3d015d338941">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00304.html#22960d499df9f1569a9d8a544e35afe3">tbb::flow::interface6::source_node< Output ></a>, <a class=" [...]
-: <a class="el" href="a00243.html#94758113d8993cfe5afdf2d63a728869">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>release()
-: <a class="el" href="a00308.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00306.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00297.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00291.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00289.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
-: <a class="el" href="a00266.html#c530e7b469454e2340460795f2da3317">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00253.html#cb691b18416d4742265aed84d496ebbd">tbb::flow::interface6::continue_receiver</a>, <a class="el" href="a00295.html#3bc76547b51d3c9b633e3987d22dce95">tbb::flow::interface6::receiver< T ></a><li>remove_successor()
-: <a class="el" href="a00266.html#275e328063c121b3e506ccef2a825d28">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00237.html#2074da0e39b9477c32897d6e5786196f">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00236.html#366efcc046ec08a104281109801ae629">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00304.html#222484bf295f39df36415a29e508e5c9">tbb::flow::interface6::source_node< Output ></a>, <a class=" [...]
-: <a class="el" href="a00250.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
-: <a class="el" href="a00250.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
-: <a class="el" href="a00313.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
-: <a class="el" href="a00250.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>root_task()
-: <a class="el" href="a00262.html#7f4e3ae90811a5d8b597146b5b586d10">tbb::flow::interface6::graph</a><li>rows()
-: <a class="el" href="a00235.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00234.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
-: <a class="el" href="a00284.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00282.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a>, <a class="el" href="a00262.html#c1145b00e063793a7e7bf994d202c7a0">tbb::flow::interface6::graph</a><li>runtime_loader()
-: <a class="el" href="a00298.html#7ae5330beb48fce0c702c32a5df0094a">tbb::interface6::runtime_loader</a></ul>
+: <a class="el" href="a00281.html#3b068000cf4dbf9b40f8bb7e3fc53e0b">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#3d09ccfb581b879ae64203741035e193">tbb::concurrent_vector< T, A ></a><li>rbegin()
+: <a class="el" href="a00276.html#9f9c103e18d5f212703805354074ad44">tbb::concurrent_vector< T, A ></a><li>reader_writer_lock()
+: <a class="el" href="a00318.html#c1431c4293e777efd9aab9a95c2a46e1">tbb::interface5::reader_writer_lock</a><li>recursive_mutex()
+: <a class="el" href="a00322.html#d2fceb7f95c24a8cd1457d4527e4b8c6">tbb::recursive_mutex</a><li>recycle_as_child_of()
+: <a class="el" href="a00337.html#db399855177438bbc9cc61d508dae8d2">tbb::task</a><li>recycle_as_continuation()
+: <a class="el" href="a00337.html#a67a79e18f62b43a623a00cfbd76db4c">tbb::task</a><li>recycle_as_safe_continuation()
+: <a class="el" href="a00337.html#3b290d14109704e2b69dc1ac980a7a76">tbb::task</a><li>recycle_to_reexecute()
+: <a class="el" href="a00337.html#4f1be9bbcdb487830dbe298b68d85144">tbb::task</a><li>ref_count()
+: <a class="el" href="a00337.html#ad774f55eaec008ae02b236423209ced">tbb::task</a><li>register_pending_exception()
+: <a class="el" href="a00340.html#d97c8a03615594b71b4ef06ff75cf561">tbb::task_group_context</a><li>register_predecessor()
+: <a class="el" href="a00292.html#de70a0e88ce7655d8c14b6af57f7496f">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00279.html#2fcfa4990a42417bbeb1f3c8b9ac8a22">tbb::flow::interface6::continue_receiver</a>, <a class="el" href="a00321.html#30e3316466efe3a713c23062b6e806f3">tbb::flow::interface6::receiver< T ></a><li>register_successor()
+: <a class="el" href="a00292.html#c76561d8d871b4769876988a4de12a9b">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00263.html#f8bf4944ede4fc106423d67715beb695">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00262.html#fd0324c9ddb51fe6f95b3d015d338941">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00330.html#22960d499df9f1569a9d8a544e35afe3">tbb::flow::interface6::source_node< Output ></a>, <a class=" [...]
+: <a class="el" href="a00269.html#94758113d8993cfe5afdf2d63a728869">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>release()
+: <a class="el" href="a00334.html#61b14d00a78185c9b2d206ebfc379124">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00332.html#eeb615e68e963e6bf8d9c11402d0ce8e">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00323.html#ac480ea0e9d5ea0345a67d57008b6263">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00317.html#67ae221109ddc69510ab593874e435d4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00315.html#3bf2b8c87ff22115be9b2eac179f2d30">tbb::qu [...]
+: <a class="el" href="a00292.html#c530e7b469454e2340460795f2da3317">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00279.html#cb691b18416d4742265aed84d496ebbd">tbb::flow::interface6::continue_receiver</a>, <a class="el" href="a00321.html#3bc76547b51d3c9b633e3987d22dce95">tbb::flow::interface6::receiver< T ></a><li>remove_successor()
+: <a class="el" href="a00292.html#275e328063c121b3e506ccef2a825d28">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00263.html#2074da0e39b9477c32897d6e5786196f">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00262.html#366efcc046ec08a104281109801ae629">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00330.html#222484bf295f39df36415a29e508e5c9">tbb::flow::interface6::source_node< Output ></a>, <a class=" [...]
+: <a class="el" href="a00276.html#d438b9b32ea3a8ffb703015b6dce055b">tbb::concurrent_vector< T, A ></a><li>reserve()
+: <a class="el" href="a00276.html#5a0ce05026994b010018f72cfdeb72c1">tbb::concurrent_vector< T, A ></a><li>reset()
+: <a class="el" href="a00340.html#6d30d16bf1cd22f86c6afaf29c2b430c">tbb::task_group_context</a><li>resize()
+: <a class="el" href="a00276.html#98ce6b2c6d2622f0c030b46dfac3880c">tbb::concurrent_vector< T, A ></a><li>root_task()
+: <a class="el" href="a00288.html#7f4e3ae90811a5d8b597146b5b586d10">tbb::flow::interface6::graph</a><li>rows()
+: <a class="el" href="a00261.html#1584623e59ff32a8aa82006827508be4">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00260.html#f496e7348a82652fba581203477cc07c">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
+: <a class="el" href="a00310.html#93d7fec8cd607b803dd2d79fb46bd260">tbb::pipeline</a>, <a class="el" href="a00308.html#b32a0a6e5e09ebb7fad3e6652c19afe5">tbb::parallel_while< Body ></a>, <a class="el" href="a00288.html#c1145b00e063793a7e7bf994d202c7a0">tbb::flow::interface6::graph</a><li>runtime_loader()
+: <a class="el" href="a00324.html#7ae5330beb48fce0c702c32a5df0094a">tbb::interface6::runtime_loader</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x73.html b/doc/html/functions_func_0x73.html
index ef5e94a..2135a1f 100644
--- a/doc/html/functions_func_0x73.html
+++ b/doc/html/functions_func_0x73.html
@@ -61,31 +61,31 @@
 <p>
 <h3><a class="anchor" name="index_s">- s -</a></h3><ul>
 <li>scoped_lock()
-: <a class="el" href="a00308.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00306.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00297.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00293.html#cf19f20e082887c1bb0ba6b0911c3583">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00291.html#fbb8798792d3aebb136c46fc63d [...]
-: <a class="el" href="a00294.html#87ab0dc8f7216e6ba0f7acd6aec33064">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>seconds()
-: <a class="el" href="a00324.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
-: <a class="el" href="a00311.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>sequencer_node()
-: <a class="el" href="a00302.html#b38e7a070552960384bcc1d91af13a5c">tbb::flow::interface6::sequencer_node< T, A ></a><li>set_affinity()
-: <a class="el" href="a00311.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
-: <a class="el" href="a00242.html#f3c6c934f85fd02aedbc83a16943193b">tbb::concurrent_bounded_queue< T, A ></a><li>set_group_priority()
-: <a class="el" href="a00311.html#9ac8d1542d67d9d80121ff986801ac26">tbb::task</a><li>set_parent()
-: <a class="el" href="a00311.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">tbb::task</a><li>set_priority()
-: <a class="el" href="a00313.html#c4272d4d9ab65d600ca70fc2c8c4b039">tbb::task_group_context</a><li>set_ref_count()
-: <a class="el" href="a00311.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>set_state()
-: <a class="el" href="a00275.html#795649a185b0d6af6dc81c5f378616dd">tbb::mutex</a><li>shrink_to_fit()
-: <a class="el" href="a00250.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
-: <a class="el" href="a00255.html#33fd6593da1ed14340f10f67d5a69130">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00250.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00242.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00247.html#8b2ae25c61338c6fd59e94fe09822ba5">tbb::interface5::concurrent_priority_queue< T,  [...]
-: <a class="el" href="a00304.html#adaac111fbcace95804219a5f2929304">tbb::flow::interface6::source_node< Output ></a><li>spawn_and_wait_for_all()
-: <a class="el" href="a00311.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
-: <a class="el" href="a00311.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
-: <a class="el" href="a00305.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
-: <a class="el" href="a00307.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
-: <a class="el" href="a00311.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>status()
-: <a class="el" href="a00298.html#78d938ed2e54d38dd38d6609e6c60389">tbb::interface6::runtime_loader</a><li>swap()
-: <a class="el" href="a00250.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00247.html#0ecdc6a04aa259374425d424ca2a6082">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00243.html#076f8d9e16110aac5f558777aa744eb6">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
+: <a class="el" href="a00334.html#42a92d4f8fdde425b111cfa8a9228071">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00332.html#5ce6807050a9e8f87bcb4a65dccb12ef">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00323.html#dec17713c4c1321ac8fec66816d0c602">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00319.html#cf19f20e082887c1bb0ba6b0911c3583">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00317.html#fbb8798792d3aebb136c46fc63d [...]
+: <a class="el" href="a00320.html#87ab0dc8f7216e6ba0f7acd6aec33064">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>seconds()
+: <a class="el" href="a00350.html#d5d8429c0bc59cf6131b2abc7929fa59">tbb::tick_count::interval_t</a><li>self()
+: <a class="el" href="a00337.html#bd43e8d6249738efafd12d6a4c72c5e3">tbb::task</a><li>sequencer_node()
+: <a class="el" href="a00328.html#b38e7a070552960384bcc1d91af13a5c">tbb::flow::interface6::sequencer_node< T, A ></a><li>set_affinity()
+: <a class="el" href="a00337.html#dca19d7a45487a7d67a0db517e2b57c9">tbb::task</a><li>set_capacity()
+: <a class="el" href="a00268.html#f3c6c934f85fd02aedbc83a16943193b">tbb::concurrent_bounded_queue< T, A ></a><li>set_group_priority()
+: <a class="el" href="a00337.html#9ac8d1542d67d9d80121ff986801ac26">tbb::task</a><li>set_parent()
+: <a class="el" href="a00337.html#d2eaf79fcaa3ae473e3bd3f44bd8a464">tbb::task</a><li>set_priority()
+: <a class="el" href="a00340.html#c4272d4d9ab65d600ca70fc2c8c4b039">tbb::task_group_context</a><li>set_ref_count()
+: <a class="el" href="a00337.html#06a4206a57e8e12a439b14d6d41cfd92">tbb::task</a><li>set_state()
+: <a class="el" href="a00301.html#795649a185b0d6af6dc81c5f378616dd">tbb::mutex</a><li>shrink_to_fit()
+: <a class="el" href="a00276.html#03c6f4cf66532bf4cc907ee738a9a186">tbb::concurrent_vector< T, A ></a><li>size()
+: <a class="el" href="a00281.html#33fd6593da1ed14340f10f67d5a69130">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00276.html#715fe313c4a9c22731cc404dd80c9ec9">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00268.html#7dc14d1a579a4cccda9f857585e1768d">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00273.html#8b2ae25c61338c6fd59e94fe09822ba5">tbb::interface5::concurrent_priority_queue< T,  [...]
+: <a class="el" href="a00330.html#adaac111fbcace95804219a5f2929304">tbb::flow::interface6::source_node< Output ></a><li>spawn_and_wait_for_all()
+: <a class="el" href="a00337.html#894ab68378e502776d8220eea7ce9fa1">tbb::task</a><li>spawn_root_and_wait()
+: <a class="el" href="a00337.html#c33c7edbaec67aa8a56f48986a9dc69f">tbb::task</a><li>spin_mutex()
+: <a class="el" href="a00331.html#3d8fb44644fd8d41ada1fbeba7409be3">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
+: <a class="el" href="a00333.html#61332b2756de89f3f5f69310cbb6e70c">tbb::spin_rw_mutex_v3</a><li>state()
+: <a class="el" href="a00337.html#0af7b2d7e6e8b4333b2accfce3dfb374">tbb::task</a><li>status()
+: <a class="el" href="a00324.html#78d938ed2e54d38dd38d6609e6c60389">tbb::interface6::runtime_loader</a><li>swap()
+: <a class="el" href="a00276.html#96c9c4bd968ed3edb8dd276854d2dae0">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00273.html#0ecdc6a04aa259374425d424ca2a6082">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00269.html#076f8d9e16110aac5f558777aa744eb6">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x74.html b/doc/html/functions_func_0x74.html
index 5b01f3f..8f00301 100644
--- a/doc/html/functions_func_0x74.html
+++ b/doc/html/functions_func_0x74.html
@@ -61,27 +61,27 @@
 <p>
 <h3><a class="anchor" name="index_t">- t -</a></h3><ul>
 <li>task()
-: <a class="el" href="a00311.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
-: <a class="el" href="a00313.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
-: <a class="el" href="a00315.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
-: <a class="el" href="a00316.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
-: <a class="el" href="a00316.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
-: <a class="el" href="a00320.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00273.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00240.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00319.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
-: <a class="el" href="a00323.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
-: <a class="el" href="a00308.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00306.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00297.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00291.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00289.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
-: <a class="el" href="a00237.html#8ef07c434eb763d947a7b4e80c086a49">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00304.html#2c7fcc29e2894b29138be3c1edce9bc9">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00301.html#7b840f50da117a0d6848707c1857ea2e">tbb::flow::interface6::sender< T ></a><li>try_get()
-: <a class="el" href="a00237.html#aeb8aec46ca99ca022356a792c46735e">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00304.html#41073ad4d3510ed5a8b6bda9c0f58636">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00301.html#922fb56b0aad090b90a98b7d56b76a59">tbb::flow::interface6::sender< T ></a><li>try_lock()
-: <a class="el" href="a00307.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00305.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00296.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00292.html#721eb173e154ab38292273e9266a9b07">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00275.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
-: <a class="el" href="a00307.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00292.html#595fb23952e3b89426b1f7938dea9b11">tbb::interface5::reader_writer_lock</a><li>try_pop()
-: <a class="el" href="a00242.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#e036461a29cc40902a2bb79abf9f5146">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>try_process_item()
-: <a class="el" href="a00322.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
-: <a class="el" href="a00242.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a><li>try_put()
-: <a class="el" href="a00266.html#55a02d458a4d8ffa6accd7a70605da2f">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00237.html#2b02fe332e704bbe14f297802298b63a">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00236.html#29eb768c10b377880bbf83d31ee49acf">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00253.html#3969c70fb89c0a982f142ae9eb5facae">tbb::flow::interface6::continue_receiver</a>, <a class="el" href=" [...]
-: <a class="el" href="a00237.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00304.html#494678baf9096835268736b800824460">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00301.html#27036b06d6a91e97007e14f400529199">tbb::flow::interface6::sender< T ></a><li>try_reserve()
-: <a class="el" href="a00237.html#1cc889bb6c38bcb81757d0ebbc3a5e64">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00304.html#ad459713ff3c1c9ad0f4826daa141f65">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00301.html#02c05b472271db1b68a48ea2618fa72f">tbb::flow::interface6::sender< T ></a></ul>
+: <a class="el" href="a00337.html#2bce8ec6e44706e70128f5cf91b76e67">tbb::task</a><li>task_group_context()
+: <a class="el" href="a00340.html#19fee08fb8ac98adccfe69c1aa63c491">tbb::task_group_context</a><li>task_list()
+: <a class="el" href="a00341.html#416341c2047eaef50417b41eaf7e9de6">tbb::task_list</a><li>task_scheduler_init()
+: <a class="el" href="a00342.html#421600bf9bf9338bcf937063f2ff0e90">tbb::task_scheduler_init</a><li>terminate()
+: <a class="el" href="a00342.html#f73257e04cb7fb9bd5be2b635d9016f1">tbb::task_scheduler_init</a><li>throw_self()
+: <a class="el" href="a00346.html#292832fd5c523e3d8081a22247840a1d">tbb::internal::tbb_exception_ptr</a>, <a class="el" href="a00299.html#17cffba35811c92b7e65d63506b69602">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00266.html#2dd1be66ab32fa27e0ddef5707fa67ef">tbb::captured_exception</a>, <a class="el" href="a00345.html#8588e07fa49692f4d734e4f2e4f048f4">tbb::tbb_exception</a><li>tick_count()
+: <a class="el" href="a00349.html#34593326ae4191e02a13c7cbdab9de4c">tbb::tick_count</a><li>try_acquire()
+: <a class="el" href="a00334.html#9879626968d9b9a04cd2ec0fb2e84ae1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00332.html#9297ec188534b45dc0ca48f2f39a0501">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00323.html#36bfc3e93e3ef6340abef4901444d340">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00317.html#2e4ff6c9ec2fee6682f95290d1f42baa">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00315.html#e5a014fb817599386a87170cf2cf51a9">tbb::qu [...]
+: <a class="el" href="a00263.html#8ef07c434eb763d947a7b4e80c086a49">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00330.html#2c7fcc29e2894b29138be3c1edce9bc9">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00327.html#7b840f50da117a0d6848707c1857ea2e">tbb::flow::interface6::sender< T ></a><li>try_get()
+: <a class="el" href="a00263.html#aeb8aec46ca99ca022356a792c46735e">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00330.html#41073ad4d3510ed5a8b6bda9c0f58636">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00327.html#922fb56b0aad090b90a98b7d56b76a59">tbb::flow::interface6::sender< T ></a><li>try_lock()
+: <a class="el" href="a00333.html#088bb256be794cc47d3b83791632fdfc">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00331.html#8f9a58fb56a2b4c5efe1a7f7c1ae2074">tbb::spin_mutex</a>, <a class="el" href="a00322.html#86e719b0afee25704af11ab97694d240">tbb::recursive_mutex</a>, <a class="el" href="a00318.html#721eb173e154ab38292273e9266a9b07">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00301.html#4331652c79dea1c1131bd59ab161b234">tbb::mutex</a><li>try_lock_read()
+: <a class="el" href="a00333.html#b8667415869013f840d976aa406d385a">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00318.html#595fb23952e3b89426b1f7938dea9b11">tbb::interface5::reader_writer_lock</a><li>try_pop()
+: <a class="el" href="a00268.html#0ca487019bbb00a196442aff78a1e4f7">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#ae31ca0db34ef96ef1e74aa0d28c95f8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#e036461a29cc40902a2bb79abf9f5146">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>try_process_item()
+: <a class="el" href="a00348.html#c4f90f2c771bce748beb9be734fa286c">tbb::thread_bound_filter</a><li>try_push()
+: <a class="el" href="a00268.html#2bd6232531279fb3ccbd296bea23066b">tbb::concurrent_bounded_queue< T, A ></a><li>try_put()
+: <a class="el" href="a00292.html#55a02d458a4d8ffa6accd7a70605da2f">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00263.html#2b02fe332e704bbe14f297802298b63a">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00262.html#29eb768c10b377880bbf83d31ee49acf">tbb::flow::interface6::broadcast_node< T ></a>, <a class="el" href="a00279.html#3969c70fb89c0a982f142ae9eb5facae">tbb::flow::interface6::continue_receiver</a>, <a class="el" href=" [...]
+: <a class="el" href="a00263.html#2c8e8f2f5f4ff5be27136cc1184a3c3e">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00330.html#494678baf9096835268736b800824460">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00327.html#27036b06d6a91e97007e14f400529199">tbb::flow::interface6::sender< T ></a><li>try_reserve()
+: <a class="el" href="a00263.html#1cc889bb6c38bcb81757d0ebbc3a5e64">tbb::flow::interface6::buffer_node< T, A ></a>, <a class="el" href="a00330.html#ad459713ff3c1c9ad0f4826daa141f65">tbb::flow::interface6::source_node< Output ></a>, <a class="el" href="a00327.html#02c05b472271db1b68a48ea2618fa72f">tbb::flow::interface6::sender< T ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x75.html b/doc/html/functions_func_0x75.html
index fb19c2b..380d3df 100644
--- a/doc/html/functions_func_0x75.html
+++ b/doc/html/functions_func_0x75.html
@@ -61,12 +61,12 @@
 <p>
 <h3><a class="anchor" name="index_u">- u -</a></h3><ul>
 <li>unlock()
-: <a class="el" href="a00307.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00305.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00296.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00292.html#5113b32689305599b2c36b5831547704">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00275.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
-: <a class="el" href="a00248.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
-: <a class="el" href="a00308.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00291.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00333.html#f9f52ead2098eb5fb12da59d5ae53b55">tbb::spin_rw_mutex_v3</a>, <a class="el" href="a00331.html#0e843ee6265f57f27d228ba91e7308ef">tbb::spin_mutex</a>, <a class="el" href="a00322.html#f0a96e26b7f074588dc31e32524856ae">tbb::recursive_mutex</a>, <a class="el" href="a00318.html#5113b32689305599b2c36b5831547704">tbb::interface5::reader_writer_lock</a>, <a class="el" href="a00301.html#5fc9ef443ae75d966695546be399cc6b">tbb::mutex</a><li>unsafe_size()
+: <a class="el" href="a00274.html#eaa35a5274606779802e9a669a706260">tbb::strict_ppl::concurrent_queue< T, A ></a><li>upgrade_to_writer()
+: <a class="el" href="a00334.html#3f0b1e3f2efab63336400348bd070226">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00317.html#11ba1da4a722c9e6f73339a52c487e82">tbb::queuing_rw_mutex::scoped_lock</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x77.html b/doc/html/functions_func_0x77.html
index 4d904d2..dd067aa 100644
--- a/doc/html/functions_func_0x77.html
+++ b/doc/html/functions_func_0x77.html
@@ -61,11 +61,11 @@
 <p>
 <h3><a class="anchor" name="index_w">- w -</a></h3><ul>
 <li>wait_for_all()
-: <a class="el" href="a00311.html#53d2615ad9c38859b4c8080936600283">tbb::task</a>, <a class="el" href="a00262.html#a66b0020f7514b86d030fa8aea073d37">tbb::flow::interface6::graph</a><li>what()
-: <a class="el" href="a00273.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00240.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00319.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
+: <a class="el" href="a00337.html#53d2615ad9c38859b4c8080936600283">tbb::task</a>, <a class="el" href="a00288.html#a66b0020f7514b86d030fa8aea073d37">tbb::flow::interface6::graph</a><li>what()
+: <a class="el" href="a00299.html#b33a89bccf0c63106f1270c7bfaaf54f">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00266.html#6b5988ef74a1fe2a58998d110b3633e0">tbb::captured_exception</a>, <a class="el" href="a00345.html#e8157689ecb66bc6c72d3618bf3cc371">tbb::tbb_exception</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func_0x7e.html b/doc/html/functions_func_0x7e.html
index 5f016b1..6cd6e45 100644
--- a/doc/html/functions_func_0x7e.html
+++ b/doc/html/functions_func_0x7e.html
@@ -61,34 +61,34 @@
 <p>
 <h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
 <li>~combinable()
-: <a class="el" href="a00241.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
-: <a class="el" href="a00242.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
-: <a class="el" href="a00243.html#2aa8e2d28d5af1284cf78d20a9c22731">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
-: <a class="el" href="a00248.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
-: <a class="el" href="a00250.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
-: <a class="el" href="a00246.html#928769b139d53427e7075c1f86148e4c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~continue_receiver()
-: <a class="el" href="a00253.html#1e14828fa079b9835ff7267df5ee45d7">tbb::flow::interface6::continue_receiver</a><li>~enumerable_thread_specific()
-: <a class="el" href="a00255.html#5a7907d9e3e5b18e7a7b55211ef3213f">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
-: <a class="el" href="a00256.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~graph()
-: <a class="el" href="a00262.html#8a7d424c0616a1c37a908ead182e2fe5">tbb::flow::interface6::graph</a><li>~memory_pool()
-: <a class="el" href="a00269.html#fdad7c4ed08332ec384491a71b721957">tbb::interface6::memory_pool< Alloc ></a><li>~parallel_while()
-: <a class="el" href="a00282.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
-: <a class="el" href="a00284.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
-: <a class="el" href="a00290.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~reader_writer_lock()
-: <a class="el" href="a00292.html#5135f64f7b7339017f33d956445edbee">tbb::interface5::reader_writer_lock</a><li>~receiver()
-: <a class="el" href="a00295.html#b00699b235435f7b65b663d5063624a1">tbb::flow::interface6::receiver< T ></a><li>~runtime_loader()
-: <a class="el" href="a00298.html#c25fec923a751a3e03f5cbe969f1f0c5">tbb::interface6::runtime_loader</a><li>~scoped_lock()
-: <a class="el" href="a00308.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00306.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00297.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00293.html#70246e0260493625ff956fa5926fc71f">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00291.html#32c7d67a660d23ebbaab1a1d282 [...]
-: <a class="el" href="a00294.html#bd21c5f3d555d64d1de8658e15bf4966">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>~sequencer_node()
-: <a class="el" href="a00302.html#93d3d8f6a72b3e1387047282116ed6ee">tbb::flow::interface6::sequencer_node< T, A ></a><li>~source_node()
-: <a class="el" href="a00304.html#61700b0865fc17188b0abe26bbde65b6">tbb::flow::interface6::source_node< Output ></a><li>~spin_rw_mutex_v3()
-: <a class="el" href="a00307.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
-: <a class="el" href="a00311.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
-: <a class="el" href="a00315.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
-: <a class="el" href="a00316.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
+: <a class="el" href="a00267.html#2c87e79ae98588a5780f708773388843">tbb::combinable< T ></a><li>~concurrent_bounded_queue()
+: <a class="el" href="a00268.html#acaf5b510dc0dfc7780b8c956cf773cf">tbb::concurrent_bounded_queue< T, A ></a><li>~concurrent_hash_map()
+: <a class="el" href="a00269.html#2aa8e2d28d5af1284cf78d20a9c22731">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a><li>~concurrent_queue()
+: <a class="el" href="a00274.html#830b33753d6b149c366344e29b2edd8c">tbb::strict_ppl::concurrent_queue< T, A ></a><li>~concurrent_vector()
+: <a class="el" href="a00276.html#da2444b28bb840d38f60d0030333a5fc">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
+: <a class="el" href="a00272.html#928769b139d53427e7075c1f86148e4c">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a><li>~continue_receiver()
+: <a class="el" href="a00279.html#1e14828fa079b9835ff7267df5ee45d7">tbb::flow::interface6::continue_receiver</a><li>~enumerable_thread_specific()
+: <a class="el" href="a00281.html#5a7907d9e3e5b18e7a7b55211ef3213f">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a><li>~filter()
+: <a class="el" href="a00282.html#66d159f362293e3964ba3da8bc1d2604">tbb::filter</a><li>~graph()
+: <a class="el" href="a00288.html#8a7d424c0616a1c37a908ead182e2fe5">tbb::flow::interface6::graph</a><li>~memory_pool()
+: <a class="el" href="a00295.html#fdad7c4ed08332ec384491a71b721957">tbb::interface6::memory_pool< Alloc ></a><li>~parallel_while()
+: <a class="el" href="a00308.html#6fcfc973cc56b79c6d0fbb8a31be7e84">tbb::parallel_while< Body ></a><li>~pipeline()
+: <a class="el" href="a00310.html#49513c6c24f9d5bbbb27edca5efe01c9">tbb::pipeline</a><li>~queuing_rw_mutex()
+: <a class="el" href="a00316.html#1ba73e3d95cfdf8323880bc623af9099">tbb::queuing_rw_mutex</a><li>~reader_writer_lock()
+: <a class="el" href="a00318.html#5135f64f7b7339017f33d956445edbee">tbb::interface5::reader_writer_lock</a><li>~receiver()
+: <a class="el" href="a00321.html#b00699b235435f7b65b663d5063624a1">tbb::flow::interface6::receiver< T ></a><li>~runtime_loader()
+: <a class="el" href="a00324.html#c25fec923a751a3e03f5cbe969f1f0c5">tbb::interface6::runtime_loader</a><li>~scoped_lock()
+: <a class="el" href="a00334.html#d7eaaa3f2e2c5dc11e7005811b1bdd04">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00332.html#ac6fa425d1f06c56d8b70abc51aac844">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00323.html#c1197ffb8f3cd9d4fed71d7e06265b7c">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00319.html#70246e0260493625ff956fa5926fc71f">tbb::interface5::reader_writer_lock::scoped_lock</a>, <a class="el" href="a00317.html#32c7d67a660d23ebbaab1a1d282 [...]
+: <a class="el" href="a00320.html#bd21c5f3d555d64d1de8658e15bf4966">tbb::interface5::reader_writer_lock::scoped_lock_read</a><li>~sequencer_node()
+: <a class="el" href="a00328.html#93d3d8f6a72b3e1387047282116ed6ee">tbb::flow::interface6::sequencer_node< T, A ></a><li>~source_node()
+: <a class="el" href="a00330.html#61700b0865fc17188b0abe26bbde65b6">tbb::flow::interface6::source_node< Output ></a><li>~spin_rw_mutex_v3()
+: <a class="el" href="a00333.html#9a815fb2759e55072ed413f1b6970cf3">tbb::spin_rw_mutex_v3</a><li>~task()
+: <a class="el" href="a00337.html#98245ee0473f84cb19dbbf8c81134908">tbb::task</a><li>~task_list()
+: <a class="el" href="a00341.html#6d438f1499a02db1e59c24ab6043e5ba">tbb::task_list</a><li>~task_scheduler_init()
+: <a class="el" href="a00342.html#4da6c86292d80c703a66c1f6f5299488">tbb::task_scheduler_init</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_rela.html b/doc/html/functions_rela.html
index b41cc37..00b0793 100644
--- a/doc/html/functions_rela.html
+++ b/doc/html/functions_rela.html
@@ -35,12 +35,12 @@
 <p>
 <ul>
 <li>make_filter
-: <a class="el" href="a00257.html#85c2892eff1fddcd06e28911e75838bd">tbb::interface6::filter_t< T, U ></a><li>operator+
-: <a class="el" href="a00324.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator-
-: <a class="el" href="a00323.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00324.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a></ul>
+: <a class="el" href="a00283.html#85c2892eff1fddcd06e28911e75838bd">tbb::interface6::filter_t< T, U ></a><li>operator+
+: <a class="el" href="a00350.html#5871ead1ca230efbe52a5008470e6428">tbb::tick_count::interval_t</a><li>operator-
+: <a class="el" href="a00349.html#09dde78a4100800c11bb883d6204b586">tbb::tick_count</a>, <a class="el" href="a00350.html#fa509691e1d689830931e36edd274f76">tbb::tick_count::interval_t</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_type.html b/doc/html/functions_type.html
index e92554c..d75b769 100644
--- a/doc/html/functions_type.html
+++ b/doc/html/functions_type.html
@@ -35,24 +35,24 @@
 <p>
 <ul>
 <li>affinity_id
-: <a class="el" href="a00311.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocator_type
-: <a class="el" href="a00317.html#78701e7454ef8e1a25b5acd364367080">tbb::tbb_allocator< T ></a>, <a class="el" href="a00255.html#3c03eb40955b933b01987222722ac4bd">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00242.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a c [...]
-: <a class="el" href="a00233.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
-: <a class="el" href="a00242.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#a4ded8601a434098605be0dcc4febc60">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>difference_type
-: <a class="el" href="a00242.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#77399bc76b3ecd60e33f7e35a5becd87">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>input_type
-: <a class="el" href="a00266.html#035196d3c9240ef041f528ebcde8baa7">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00286.html#b2829b518979874ad3d2a939e14ae7bd">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00302.html#af629f26832ff4e476e240637a78bc0c">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00287.html#1e71030845210b6c4c7380eb9e11a2ac">tbb::flow::interface6::queue_node< T, A &gt [...]
-: <a class="el" href="a00296.html#889fa8cc32dd707eef7c0f52dda09c0d">tbb::recursive_mutex</a>, <a class="el" href="a00275.html#9f1ec84d5815263ceae853f06ddb4cac">tbb::mutex</a><li>output_type
-: <a class="el" href="a00266.html#6e67fc480147c0b88a483b85db6457b0">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00286.html#2cb099b590246b6bc93cc15e78c6ee5c">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00302.html#ca026eaef70e35791c407323199031a7">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00287.html#25b5a53ab1f9a342644fa3759bc0b1ad">tbb::flow::interface6::queue_node< T, A &gt [...]
-: <a class="el" href="a00235.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>predecessor_type
-: <a class="el" href="a00266.html#f89fcf44f38eb33f965ee5362d3e68e9">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00286.html#fdea783bf9d5a4c98e794ac7e0f84ccf">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00302.html#8127e36811832563fe1e9bc3ba391f79">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00287.html#5e2fdd33c45d44549dee9c1638e19898">tbb::flow::interface6::queue_node< T, A &gt [...]
-: <a class="el" href="a00242.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#5804b3c708ef4e50d603f918ef2b9e58">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>row_range_type
-: <a class="el" href="a00234.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>size_type
-: <a class="el" href="a00242.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#b679eea8d01d041625a39f719ca2b7ed">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00233.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>successor_type
-: <a class="el" href="a00266.html#e8945e4dd6ea759ff9e4735da13f12ef">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00286.html#09ab5064ca8192e68c03da47603e68eb">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00302.html#795f3ee75f133b9d3b159172fc4a197f">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00287.html#f35076a19f256f9e7a61bed77ca1ccc5">tbb::flow::interface6::queue_node< T, A &gt [...]
-: <a class="el" href="a00282.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00242.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00248.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00247.html#7c611a6b5b8f94b0e7f2afc97e31efb1">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el"  [...]
+: <a class="el" href="a00337.html#d61bb32389d3857bf7511d69beaafb76">tbb::task</a><li>allocator_type
+: <a class="el" href="a00281.html#3c03eb40955b933b01987222722ac4bd">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>, <a class="el" href="a00268.html#2e2726fccf6d975dc1071608cc0bbf90">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#5a3956341728eaa558d8827063718cac">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#1712cb3a46bc1821fccc5e2cd83d5cd7">tbb::interface5::concurrent_priority_qu [...]
+: <a class="el" href="a00259.html#1a8d05842c2b3dfc177bc4d347e4cef7">tbb::blocked_range< Value ></a><li>const_reference
+: <a class="el" href="a00268.html#796713d0b9ba93a4721cbe13e4474068">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#4d48e7ff93f81636bca2c74f7da34750">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#a4ded8601a434098605be0dcc4febc60">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>difference_type
+: <a class="el" href="a00268.html#4b45c91297e69515d83d5eef85ae1f49">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#068576d16c7e4e05d52f9db7a45b5b65">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#77399bc76b3ecd60e33f7e35a5becd87">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>input_type
+: <a class="el" href="a00292.html#035196d3c9240ef041f528ebcde8baa7">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00312.html#b2829b518979874ad3d2a939e14ae7bd">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00328.html#af629f26832ff4e476e240637a78bc0c">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00313.html#1e71030845210b6c4c7380eb9e11a2ac">tbb::flow::interface6::queue_node< T, A &gt [...]
+: <a class="el" href="a00322.html#889fa8cc32dd707eef7c0f52dda09c0d">tbb::recursive_mutex</a>, <a class="el" href="a00301.html#9f1ec84d5815263ceae853f06ddb4cac">tbb::mutex</a><li>output_type
+: <a class="el" href="a00292.html#6e67fc480147c0b88a483b85db6457b0">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00312.html#2cb099b590246b6bc93cc15e78c6ee5c">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00328.html#ca026eaef70e35791c407323199031a7">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00313.html#25b5a53ab1f9a342644fa3759bc0b1ad">tbb::flow::interface6::queue_node< T, A &gt [...]
+: <a class="el" href="a00261.html#b8ebf17a552ba47825e9b3887855b719">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>predecessor_type
+: <a class="el" href="a00292.html#f89fcf44f38eb33f965ee5362d3e68e9">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00312.html#fdea783bf9d5a4c98e794ac7e0f84ccf">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00328.html#8127e36811832563fe1e9bc3ba391f79">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00313.html#5e2fdd33c45d44549dee9c1638e19898">tbb::flow::interface6::queue_node< T, A &gt [...]
+: <a class="el" href="a00268.html#dcd44ca6a88c0dc7a847a47a10811f0c">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#a8d725c50a9834bb7af5b67c0aff92b8">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#5804b3c708ef4e50d603f918ef2b9e58">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a><li>row_range_type
+: <a class="el" href="a00260.html#a807a22fe658ec38b8edfd69521d0383">tbb::blocked_range2d< RowValue, ColValue ></a><li>size_type
+: <a class="el" href="a00268.html#a80e4c11dbb324e4b92a24a77bbcde68">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#8fc30e93f8342a1960357f71e4fe8a2b">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#b679eea8d01d041625a39f719ca2b7ed">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el" href="a00259.html#f5707bffea38eee5c9680f37358afb8e">tbb::blocked_range< Value ></a><li>successor_type
+: <a class="el" href="a00292.html#e8945e4dd6ea759ff9e4735da13f12ef">tbb::flow::interface6::limiter_node< T ></a>, <a class="el" href="a00312.html#09ab5064ca8192e68c03da47603e68eb">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>, <a class="el" href="a00328.html#795f3ee75f133b9d3b159172fc4a197f">tbb::flow::interface6::sequencer_node< T, A ></a>, <a class="el" href="a00313.html#f35076a19f256f9e7a61bed77ca1ccc5">tbb::flow::interface6::queue_node< T, A &gt [...]
+: <a class="el" href="a00308.html#fa297e53d3af2a101e712bc200233e9c">tbb::parallel_while< Body ></a>, <a class="el" href="a00268.html#98245517a931e5893f6601e66c51fc75">tbb::concurrent_bounded_queue< T, A ></a>, <a class="el" href="a00274.html#682c3978d5cb0620000994f11c44a476">tbb::strict_ppl::concurrent_queue< T, A ></a>, <a class="el" href="a00273.html#7c611a6b5b8f94b0e7f2afc97e31efb1">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>, <a class="el"  [...]
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html
index 76c4d9c..f45ce51 100644
--- a/doc/html/functions_vars.html
+++ b/doc/html/functions_vars.html
@@ -35,20 +35,20 @@
 <p>
 <ul>
 <li>automatic
-: <a class="el" href="a00316.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a><li>decrement
-: <a class="el" href="a00266.html#a3344b2461966631b6ee34b79fb105c7">tbb::flow::interface6::limiter_node< T ></a><li>deferred
-: <a class="el" href="a00316.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>exact_exception_propagation
-: <a class="el" href="a00256.html#f17200974c33be21f42a5f00893de028">tbb::filter</a><li>filter_is_bound
-: <a class="el" href="a00256.html#dd6a6e7210efc9bcaf2c5e08767d92b5">tbb::filter</a><li>filter_is_out_of_order
-: <a class="el" href="a00256.html#2e5eb65f95d8050186278077e433c5b1">tbb::filter</a><li>filter_is_serial
-: <a class="el" href="a00256.html#4b7de3a76e744f3d9c1bc5d437ea851d">tbb::filter</a><li>filter_may_emit_null
-: <a class="el" href="a00256.html#bdd02a434a6e7499dd1e8f43aae96793">tbb::filter</a><li>is_writer
-: <a class="el" href="a00245.html#07d958f151a0eaa92f50fd56ad6440e2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, <a class="el" href="a00308.html#6b5a7c3c67a36b05c4df8410d32627d8">tbb::spin_rw_mutex_v3::scoped_lock</a><li>mutex
-: <a class="el" href="a00275.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a>, <a class="el" href="a00308.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">tbb::spin_rw_mutex_v3::scoped_lock</a><li>my_exception_data
-: <a class="el" href="a00273.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></a></ul>
+: <a class="el" href="a00342.html#8f5988e2b0fbb2d533fcbb7f2583743f">tbb::task_scheduler_init</a><li>decrement
+: <a class="el" href="a00292.html#a3344b2461966631b6ee34b79fb105c7">tbb::flow::interface6::limiter_node< T ></a><li>deferred
+: <a class="el" href="a00342.html#e6c860f1e559026ff3ef4599c0d6c514">tbb::task_scheduler_init</a><li>exact_exception_propagation
+: <a class="el" href="a00282.html#f17200974c33be21f42a5f00893de028">tbb::filter</a><li>filter_is_bound
+: <a class="el" href="a00282.html#dd6a6e7210efc9bcaf2c5e08767d92b5">tbb::filter</a><li>filter_is_out_of_order
+: <a class="el" href="a00282.html#2e5eb65f95d8050186278077e433c5b1">tbb::filter</a><li>filter_is_serial
+: <a class="el" href="a00282.html#4b7de3a76e744f3d9c1bc5d437ea851d">tbb::filter</a><li>filter_may_emit_null
+: <a class="el" href="a00282.html#bdd02a434a6e7499dd1e8f43aae96793">tbb::filter</a><li>is_writer
+: <a class="el" href="a00271.html#07d958f151a0eaa92f50fd56ad6440e2">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>, <a class="el" href="a00334.html#6b5a7c3c67a36b05c4df8410d32627d8">tbb::spin_rw_mutex_v3::scoped_lock</a><li>mutex
+: <a class="el" href="a00301.html#05313cb77d4f85213103d4dab74ed454">tbb::mutex</a>, <a class="el" href="a00334.html#d96d1a1fcc3d79ef3e5c06a53b8ffeaa">tbb::spin_rw_mutex_v3::scoped_lock</a><li>my_exception_data
+: <a class="el" href="a00299.html#a8c0ae2089ae784b28907cf748b89416">tbb::movable_exception< ExceptionData ></a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/globals.html b/doc/html/globals.html
index 3165200..ff26950 100644
--- a/doc/html/globals.html
+++ b/doc/html/globals.html
@@ -29,18 +29,18 @@ Here is a list of all documented file members with links to the documentation:
 <p>
 <ul>
 <li>scalable_aligned_free()
-: <a class="el" href="a00397.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
-: <a class="el" href="a00397.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
-: <a class="el" href="a00397.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
-: <a class="el" href="a00397.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
-: <a class="el" href="a00397.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
-: <a class="el" href="a00397.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
-: <a class="el" href="a00397.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
-: <a class="el" href="a00397.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
-: <a class="el" href="a00397.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
+: <a class="el" href="a00428.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
+: <a class="el" href="a00428.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
+: <a class="el" href="a00428.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
+: <a class="el" href="a00428.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
+: <a class="el" href="a00428.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
+: <a class="el" href="a00428.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
+: <a class="el" href="a00428.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
+: <a class="el" href="a00428.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
+: <a class="el" href="a00428.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html
index e9eed12..359a759 100644
--- a/doc/html/globals_func.html
+++ b/doc/html/globals_func.html
@@ -29,18 +29,18 @@
 <p>
 <ul>
 <li>scalable_aligned_free()
-: <a class="el" href="a00397.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
-: <a class="el" href="a00397.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
-: <a class="el" href="a00397.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
-: <a class="el" href="a00397.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
-: <a class="el" href="a00397.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
-: <a class="el" href="a00397.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
-: <a class="el" href="a00397.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
-: <a class="el" href="a00397.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
-: <a class="el" href="a00397.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
+: <a class="el" href="a00428.html#g65a20e812012f15ec7442d5b45d0cba5">scalable_allocator.h</a><li>scalable_aligned_malloc()
+: <a class="el" href="a00428.html#gc1c7aaa1fe85c17ba5a3a96f7e8d89e7">scalable_allocator.h</a><li>scalable_aligned_realloc()
+: <a class="el" href="a00428.html#gbaea91376be80dfabd7c93eaffd9abaa">scalable_allocator.h</a><li>scalable_calloc()
+: <a class="el" href="a00428.html#g3f5a2fde0bcaa3eda35be32c8658f444">scalable_allocator.h</a><li>scalable_free()
+: <a class="el" href="a00428.html#gca3579c21244dba9f0c351e5984d4565">scalable_allocator.h</a><li>scalable_malloc()
+: <a class="el" href="a00428.html#gc25b8e6c76db0b346a8249796a7a2475">scalable_allocator.h</a><li>scalable_msize()
+: <a class="el" href="a00428.html#g0965ce1b4b7835f92869c7fd867265f7">scalable_allocator.h</a><li>scalable_posix_memalign()
+: <a class="el" href="a00428.html#g05dcec987480bb2c82ecdead6a085899">scalable_allocator.h</a><li>scalable_realloc()
+: <a class="el" href="a00428.html#g951bbbbd2d041acb59ba5fa910b52543">scalable_allocator.h</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html
index b684037..e84d06c 100644
--- a/doc/html/hierarchy.html
+++ b/doc/html/hierarchy.html
@@ -21,153 +21,158 @@
     <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="a00226.html">tbb::internal::affinity_partitioner_base_v3</a>
+<li><a class="el" href="a00250.html">tbb::internal::affinity_partitioner_base_v3</a>
 <ul>
-<li><a class="el" href="a00225.html">tbb::affinity_partitioner</a>
-</ul>
-<li><a class="el" href="a00227.html">tbb::aligned_space< T, N ></a>
-<li><a class="el" href="a00228.html">tbb::atomic< T ></a>
-<li><a class="el" href="a00229.html">tbb::atomic< void * ></a>
-<li><a class="el" href="a00230.html">tbb::internal::atomic_backoff</a>
-<li><a class="el" href="a00231.html">tbb::auto_partitioner</a>
-<li><a class="el" href="a00232.html">tbb::bad_last_alloc</a>
-<li><a class="el" href="a00233.html">tbb::blocked_range< Value ></a>
-<li><a class="el" href="a00234.html">tbb::blocked_range2d< RowValue, ColValue ></a>
-<li><a class="el" href="a00235.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
-<li><a class="el" href="a00233.html">tbb::blocked_range< I ></a>
-<li><a class="el" href="a00238.html">tbb::cache_aligned_allocator< T ></a>
-<li><a class="el" href="a00239.html">tbb::cache_aligned_allocator< void ></a>
-<li><a class="el" href="a00241.html">tbb::combinable< T ></a>
-<li><a class="el" href="a00242.html">tbb::concurrent_bounded_queue< T, A ></a>
+<li><a class="el" href="a00249.html">tbb::affinity_partitioner</a>
+</ul>
+<li><a class="el" href="a00252.html">tbb::interface6::aggregator_ext< handler_type ></a>
 <ul>
-<li><a class="el" href="a00249.html">tbb::deprecated::concurrent_queue< T, A ></a>
+<li><a class="el" href="a00251.html">tbb::interface6::aggregator</a>
 </ul>
-<li><a class="el" href="a00243.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>
-<li><a class="el" href="a00245.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>
-<li><a class="el" href="a00246.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>
+<li><a class="el" href="a00253.html">tbb::aligned_space< T, N ></a>
+<li><a class="el" href="a00254.html">tbb::atomic< T ></a>
+<li><a class="el" href="a00255.html">tbb::atomic< void * ></a>
+<li><a class="el" href="a00256.html">tbb::internal::atomic_backoff</a>
+<li><a class="el" href="a00257.html">tbb::auto_partitioner</a>
+<li><a class="el" href="a00258.html">tbb::bad_last_alloc</a>
+<li><a class="el" href="a00259.html">tbb::blocked_range< Value ></a>
+<li><a class="el" href="a00260.html">tbb::blocked_range2d< RowValue, ColValue ></a>
+<li><a class="el" href="a00261.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+<li><a class="el" href="a00259.html">tbb::blocked_range< I ></a>
+<li><a class="el" href="a00264.html">tbb::cache_aligned_allocator< T ></a>
+<li><a class="el" href="a00265.html">tbb::cache_aligned_allocator< void ></a>
+<li><a class="el" href="a00267.html">tbb::combinable< T ></a>
+<li><a class="el" href="a00268.html">tbb::concurrent_bounded_queue< T, A ></a>
 <ul>
-<li><a class="el" href="a00244.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>
-</ul>
-<li><a class="el" href="a00247.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
-<li><a class="el" href="a00248.html">tbb::strict_ppl::concurrent_queue< T, A ></a>
-<li><a class="el" href="a00250.html">tbb::concurrent_vector< T, A ></a>
-<li><a class="el" href="a00251.html">tbb::flow::interface6::continue_msg</a>
-<li><a class="el" href="a00255.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
-<li><a class="el" href="a00256.html">tbb::filter</a>
+<li><a class="el" href="a00275.html">tbb::deprecated::concurrent_queue< T, A ></a>
+</ul>
+<li><a class="el" href="a00269.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator ></a>
+<li><a class="el" href="a00271.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::bucket_accessor</a>
+<li><a class="el" href="a00272.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::const_accessor</a>
 <ul>
-<li><a class="el" href="a00322.html">tbb::thread_bound_filter</a>
+<li><a class="el" href="a00270.html">tbb::interface5::concurrent_hash_map< Key, T, HashCompare, Allocator >::accessor</a>
 </ul>
-<li><a class="el" href="a00257.html">tbb::interface6::filter_t< T, U ></a>
-<li><a class="el" href="a00258.html">tbb::final_scan_tag</a>
-<li><a class="el" href="a00259.html">tbb::interface6::flow_control</a>
-<li><a class="el" href="a00262.html">tbb::flow::interface6::graph</a>
-<li><a class="el" href="a00263.html">tbb::flow::interface6::graph_node</a>
+<li><a class="el" href="a00273.html">tbb::interface5::concurrent_priority_queue< T, Compare, A ></a>
+<li><a class="el" href="a00274.html">tbb::strict_ppl::concurrent_queue< T, A ></a>
+<li><a class="el" href="a00276.html">tbb::concurrent_vector< T, A ></a>
+<li><a class="el" href="a00277.html">tbb::flow::interface6::continue_msg</a>
+<li><a class="el" href="a00281.html">tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type ></a>
+<li><a class="el" href="a00282.html">tbb::filter</a>
 <ul>
-<li><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a>
-<li><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>
+<li><a class="el" href="a00348.html">tbb::thread_bound_filter</a>
+</ul>
+<li><a class="el" href="a00283.html">tbb::interface6::filter_t< T, U ></a>
+<li><a class="el" href="a00284.html">tbb::final_scan_tag</a>
+<li><a class="el" href="a00285.html">tbb::interface6::flow_control</a>
+<li><a class="el" href="a00288.html">tbb::flow::interface6::graph</a>
+<li><a class="el" href="a00289.html">tbb::flow::interface6::graph_node</a>
 <ul>
-<li><a class="el" href="a00286.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>
-<li><a class="el" href="a00287.html">tbb::flow::interface6::queue_node< T, A ></a>
+<li><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a>
+<li><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>
 <ul>
-<li><a class="el" href="a00302.html">tbb::flow::interface6::sequencer_node< T, A ></a>
+<li><a class="el" href="a00312.html">tbb::flow::interface6::priority_queue_node< T, Compare, A ></a>
+<li><a class="el" href="a00313.html">tbb::flow::interface6::queue_node< T, A ></a>
+<ul>
+<li><a class="el" href="a00328.html">tbb::flow::interface6::sequencer_node< T, A ></a>
 </ul>
 </ul>
-<li><a class="el" href="a00252.html">tbb::flow::interface6::continue_node< Output ></a>
-<li><a class="el" href="a00260.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>
-<li><a class="el" href="a00261.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>
-<li><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a>
-<li><a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< Input, Output,, Allocator ></a>
-<li><a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< TupleType, TupleType, rejecting, Allocator ></a>
+<li><a class="el" href="a00278.html">tbb::flow::interface6::continue_node< Output ></a>
+<li><a class="el" href="a00286.html">tbb::flow::interface6::function_node< Input, Output,, Allocator ></a>
+<li><a class="el" href="a00287.html">tbb::flow::interface6::function_node< Input, Output, queueing, Allocator ></a>
+<li><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a>
+<li><a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< Input, Output,, Allocator ></a>
+<li><a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a>
 <ul>
-<li><a class="el" href="a00310.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>
-</ul>
-<li><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a>
-</ul>
-<li><a class="el" href="a00264.html">tbb::improper_lock</a>
-<li><b>atomic_impl</b><li><b>multioutput_function_input</b><ul>
-<li><a class="el" href="a00274.html">tbb::flow::interface6::multioutput_function_node< TupleType, TupleType, rejecting, Allocator ></a>
-</ul>
-<li><a class="el" href="a00265.html">tbb::invalid_multiple_scheduling</a>
-<li><a class="el" href="a00267.html">tbb::internal::machine_load_store_relaxed< T, S ></a>
-<li><a class="el" href="a00268.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a>
-<li><a class="el" href="a00269.html">tbb::interface6::memory_pool< Alloc ></a>
-<li><a class="el" href="a00270.html">tbb::interface6::memory_pool_allocator< T, P ></a>
-<li><a class="el" href="a00271.html">tbb::interface6::memory_pool_allocator< void, P ></a>
-<li><a class="el" href="a00272.html">tbb::missing_wait</a>
-<li><a class="el" href="a00275.html">tbb::mutex</a>
-<li><a class="el" href="a00276.html">tbb::mutex::scoped_lock</a>
-<li><a class="el" href="a00277.html">tbb::null_mutex</a>
-<li><a class="el" href="a00278.html">tbb::null_mutex::scoped_lock</a>
-<li><a class="el" href="a00279.html">tbb::null_rw_mutex</a>
-<li><a class="el" href="a00280.html">tbb::null_rw_mutex::scoped_lock</a>
-<li><a class="el" href="a00281.html">tbb::parallel_do_feeder< Item ></a>
-<li><a class="el" href="a00282.html">tbb::parallel_while< Body ></a>
-<li><a class="el" href="a00283.html">tbb::internal::partition_type_base</a>
-<li><a class="el" href="a00284.html">tbb::pipeline</a>
-<li><a class="el" href="a00285.html">tbb::pre_scan_tag</a>
-<li><a class="el" href="a00288.html">tbb::queuing_mutex</a>
-<li><a class="el" href="a00289.html">tbb::queuing_mutex::scoped_lock</a>
-<li><a class="el" href="a00290.html">tbb::queuing_rw_mutex</a>
-<li><a class="el" href="a00291.html">tbb::queuing_rw_mutex::scoped_lock</a>
-<li><a class="el" href="a00292.html">tbb::interface5::reader_writer_lock</a>
-<li><a class="el" href="a00293.html">tbb::interface5::reader_writer_lock::scoped_lock</a>
-<li><a class="el" href="a00294.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
-<li><a class="el" href="a00295.html">tbb::flow::interface6::receiver< T ></a>
+<li><a class="el" href="a00336.html">tbb::flow::interface6::split_node< TupleType, Allocator ></a>
+</ul>
+<li><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a>
+</ul>
+<li><a class="el" href="a00290.html">tbb::improper_lock</a>
+<li><b>atomic_impl</b><li><b>multifunction_input</b><ul>
+<li><a class="el" href="a00300.html">tbb::flow::interface6::multifunction_node< TupleType, TupleType, rejecting, Allocator ></a>
+</ul>
+<li><a class="el" href="a00291.html">tbb::invalid_multiple_scheduling</a>
+<li><a class="el" href="a00293.html">tbb::internal::machine_load_store_relaxed< T, S ></a>
+<li><a class="el" href="a00294.html">tbb::internal::machine_load_store_seq_cst< T, 8 ></a>
+<li><a class="el" href="a00295.html">tbb::interface6::memory_pool< Alloc ></a>
+<li><a class="el" href="a00296.html">tbb::interface6::memory_pool_allocator< T, P ></a>
+<li><a class="el" href="a00297.html">tbb::interface6::memory_pool_allocator< void, P ></a>
+<li><a class="el" href="a00298.html">tbb::missing_wait</a>
+<li><a class="el" href="a00301.html">tbb::mutex</a>
+<li><a class="el" href="a00302.html">tbb::mutex::scoped_lock</a>
+<li><b>no_copy</b><li><a class="el" href="a00303.html">tbb::null_mutex</a>
+<li><a class="el" href="a00304.html">tbb::null_mutex::scoped_lock</a>
+<li><a class="el" href="a00305.html">tbb::null_rw_mutex</a>
+<li><a class="el" href="a00306.html">tbb::null_rw_mutex::scoped_lock</a>
+<li><a class="el" href="a00307.html">tbb::parallel_do_feeder< Item ></a>
+<li><a class="el" href="a00308.html">tbb::parallel_while< Body ></a>
+<li><a class="el" href="a00309.html">tbb::internal::partition_type_base</a>
+<li><a class="el" href="a00310.html">tbb::pipeline</a>
+<li><a class="el" href="a00311.html">tbb::pre_scan_tag</a>
+<li><a class="el" href="a00314.html">tbb::queuing_mutex</a>
+<li><a class="el" href="a00315.html">tbb::queuing_mutex::scoped_lock</a>
+<li><a class="el" href="a00316.html">tbb::queuing_rw_mutex</a>
+<li><a class="el" href="a00317.html">tbb::queuing_rw_mutex::scoped_lock</a>
+<li><a class="el" href="a00318.html">tbb::interface5::reader_writer_lock</a>
+<li><a class="el" href="a00319.html">tbb::interface5::reader_writer_lock::scoped_lock</a>
+<li><a class="el" href="a00320.html">tbb::interface5::reader_writer_lock::scoped_lock_read</a>
+<li><a class="el" href="a00321.html">tbb::flow::interface6::receiver< T ></a>
 <ul>
-<li><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a>
-<li><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>
-<li><a class="el" href="a00253.html">tbb::flow::interface6::continue_receiver</a>
-<li><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a>
-</ul>
-<li><a class="el" href="a00295.html">tbb::flow::interface6::receiver< tbb::flow::interface6::continue_msg ></a>
-<li><a class="el" href="a00296.html">tbb::recursive_mutex</a>
-<li><a class="el" href="a00297.html">tbb::recursive_mutex::scoped_lock</a>
-<li><a class="el" href="a00298.html">tbb::interface6::runtime_loader</a>
-<li><a class="el" href="a00299.html">tbb::scalable_allocator< T ></a>
-<li><a class="el" href="a00300.html">tbb::scalable_allocator< void ></a>
-<li><a class="el" href="a00301.html">tbb::flow::interface6::sender< T ></a>
+<li><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a>
+<li><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>
+<li><a class="el" href="a00279.html">tbb::flow::interface6::continue_receiver</a>
+<li><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a>
+</ul>
+<li><a class="el" href="a00321.html">tbb::flow::interface6::receiver< tbb::flow::interface6::continue_msg ></a>
+<li><a class="el" href="a00322.html">tbb::recursive_mutex</a>
+<li><a class="el" href="a00323.html">tbb::recursive_mutex::scoped_lock</a>
+<li><a class="el" href="a00324.html">tbb::interface6::runtime_loader</a>
+<li><a class="el" href="a00325.html">tbb::scalable_allocator< T ></a>
+<li><a class="el" href="a00326.html">tbb::scalable_allocator< void ></a>
+<li><a class="el" href="a00327.html">tbb::flow::interface6::sender< T ></a>
 <ul>
-<li><a class="el" href="a00236.html">tbb::flow::interface6::broadcast_node< T ></a>
-<li><a class="el" href="a00237.html">tbb::flow::interface6::buffer_node< T, A ></a>
-<li><a class="el" href="a00266.html">tbb::flow::interface6::limiter_node< T ></a>
+<li><a class="el" href="a00262.html">tbb::flow::interface6::broadcast_node< T ></a>
+<li><a class="el" href="a00263.html">tbb::flow::interface6::buffer_node< T, A ></a>
+<li><a class="el" href="a00292.html">tbb::flow::interface6::limiter_node< T ></a>
 </ul>
-<li><a class="el" href="a00301.html">tbb::flow::interface6::sender< Output ></a>
+<li><a class="el" href="a00327.html">tbb::flow::interface6::sender< Output ></a>
 <ul>
-<li><a class="el" href="a00304.html">tbb::flow::interface6::source_node< Output ></a>
-</ul>
-<li><a class="el" href="a00303.html">tbb::simple_partitioner</a>
-<li><a class="el" href="a00305.html">tbb::spin_mutex</a>
-<li><a class="el" href="a00306.html">tbb::spin_mutex::scoped_lock</a>
-<li><a class="el" href="a00307.html">tbb::spin_rw_mutex_v3</a>
-<li><a class="el" href="a00308.html">tbb::spin_rw_mutex_v3::scoped_lock</a>
-<li><a class="el" href="a00309.html">tbb::split</a>
-<li><a class="el" href="a00311.html">tbb::task</a>
+<li><a class="el" href="a00330.html">tbb::flow::interface6::source_node< Output ></a>
+</ul>
+<li><a class="el" href="a00329.html">tbb::simple_partitioner</a>
+<li><a class="el" href="a00331.html">tbb::spin_mutex</a>
+<li><a class="el" href="a00332.html">tbb::spin_mutex::scoped_lock</a>
+<li><a class="el" href="a00333.html">tbb::spin_rw_mutex_v3</a>
+<li><a class="el" href="a00334.html">tbb::spin_rw_mutex_v3::scoped_lock</a>
+<li><a class="el" href="a00335.html">tbb::split</a>
+<li><a class="el" href="a00337.html">tbb::task</a>
 <ul>
-<li><a class="el" href="a00254.html">tbb::empty_task</a>
-</ul>
-<li><a class="el" href="a00312.html">tbb::interface5::internal::task_base</a>
-<li><a class="el" href="a00313.html">tbb::task_group_context</a>
-<li><a class="el" href="a00314.html">tbb::task_group_context</a>
-<li><a class="el" href="a00315.html">tbb::task_list</a>
-<li><a class="el" href="a00316.html">tbb::task_scheduler_init</a>
-<li><a class="el" href="a00317.html">tbb::tbb_allocator< T ></a>
-<li><a class="el" href="a00318.html">tbb::tbb_allocator< void ></a>
-<li><a class="el" href="a00319.html">tbb::tbb_exception</a>
+<li><a class="el" href="a00280.html">tbb::empty_task</a>
+</ul>
+<li><a class="el" href="a00338.html">tbb::interface5::internal::task_base</a>
+<li><a class="el" href="a00339.html">tbb::task_group_context</a>
+<li><a class="el" href="a00340.html">tbb::task_group_context</a>
+<li><a class="el" href="a00341.html">tbb::task_list</a>
+<li><a class="el" href="a00342.html">tbb::task_scheduler_init</a>
+<li><a class="el" href="a00343.html">tbb::tbb_allocator< T ></a>
+<li><a class="el" href="a00344.html">tbb::tbb_allocator< void ></a>
+<li><a class="el" href="a00345.html">tbb::tbb_exception</a>
 <ul>
-<li><a class="el" href="a00240.html">tbb::captured_exception</a>
-<li><a class="el" href="a00273.html">tbb::movable_exception< ExceptionData ></a>
+<li><a class="el" href="a00266.html">tbb::captured_exception</a>
+<li><a class="el" href="a00299.html">tbb::movable_exception< ExceptionData ></a>
 </ul>
-<li><a class="el" href="a00320.html">tbb::internal::tbb_exception_ptr</a>
-<li><a class="el" href="a00321.html">tbb::tbb_hash_compare< Key ></a>
-<li><a class="el" href="a00323.html">tbb::tick_count</a>
-<li><a class="el" href="a00324.html">tbb::tick_count::interval_t</a>
-<li><a class="el" href="a00325.html">tbb::internal::work_around_alignment_bug< Size, T ></a>
-<li><a class="el" href="a00326.html">tbb::zero_allocator< T, Allocator ></a>
-<li><a class="el" href="a00327.html">tbb::zero_allocator< void, Allocator ></a>
+<li><a class="el" href="a00346.html">tbb::internal::tbb_exception_ptr</a>
+<li><a class="el" href="a00347.html">tbb::tbb_hash_compare< Key ></a>
+<li><a class="el" href="a00349.html">tbb::tick_count</a>
+<li><a class="el" href="a00350.html">tbb::tick_count::interval_t</a>
+<li><a class="el" href="a00351.html">tbb::user_abort</a>
+<li><a class="el" href="a00352.html">tbb::internal::work_around_alignment_bug< Size, T ></a>
+<li><a class="el" href="a00353.html">tbb::zero_allocator< T, Allocator ></a>
+<li><a class="el" href="a00354.html">tbb::zero_allocator< void, Allocator ></a>
 </ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/index.html b/doc/html/index.html
index a26945c..611b2d7 100644
--- a/doc/html/index.html
+++ b/doc/html/index.html
@@ -23,7 +23,7 @@ Additional pieces of information can be found here<ul>
 <li><a class="el" href="concepts.html">TBB concepts</a></li></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/modules.html b/doc/html/modules.html
index a92e814..f258e2f 100644
--- a/doc/html/modules.html
+++ b/doc/html/modules.html
@@ -15,16 +15,16 @@
     <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="a00395.html">Algorithms</a>
-<li><a class="el" href="a00396.html">Containers</a>
-<li><a class="el" href="a00397.html">Memory Allocation</a>
-<li><a class="el" href="a00398.html">Synchronization</a>
-<li><a class="el" href="a00399.html">Timing</a>
-<li><a class="el" href="a00400.html">Task Scheduling</a>
+<li><a class="el" href="a00426.html">Algorithms</a>
+<li><a class="el" href="a00427.html">Containers</a>
+<li><a class="el" href="a00428.html">Memory Allocation</a>
+<li><a class="el" href="a00429.html">Synchronization</a>
+<li><a class="el" href="a00430.html">Timing</a>
+<li><a class="el" href="a00431.html">Task Scheduling</a>
 </ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers.html b/doc/html/namespacemembers.html
index 64fed08..9a710ac 100644
--- a/doc/html/namespacemembers.html
+++ b/doc/html/namespacemembers.html
@@ -23,7 +23,6 @@
   <ul>
     <li id="current"><a href="namespacemembers.html"><span>All</span></a></li>
     <li><a href="namespacemembers_func.html"><span>Functions</span></a></li>
-    <li><a href="namespacemembers_type.html"><span>Typedefs</span></a></li>
     <li><a href="namespacemembers_enum.html"><span>Enumerations</span></a></li>
     <li><a href="namespacemembers_eval.html"><span>Enumerator</span></a></li>
   </ul>
@@ -32,29 +31,26 @@ 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="a00383.html#ad165cf61abbe349d413df2589679add">tbb</a><li>acquire
-: <a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>assertion_failure()
-: <a class="el" href="a00383.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>assertion_handler_type
-: <a class="el" href="a00383.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a><li>atomic_fence()
-: <a class="el" href="a00383.html#250275615f10d5b5de6ad466ae2f54de">tbb</a><li>ets_key_usage_type
-: <a class="el" href="a00383.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>full_fence
-: <a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">tbb</a><li>memory_semantics
-: <a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fef">tbb</a><li>parallel_deterministic_reduce()
-: <a class="el" href="a00395.html#g0a66bc67567b2d01d709b59b9bddf84a">tbb</a><li>parallel_do()
-: <a class="el" href="a00395.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
-: <a class="el" href="a00395.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
-: <a class="el" href="a00395.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
-: <a class="el" href="a00395.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
-: <a class="el" href="a00395.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
-: <a class="el" href="a00395.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
-: <a class="el" href="a00395.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>relaxed
-: <a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">tbb</a><li>release
-: <a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a><li>set_assertion_handler()
-: <a class="el" href="a00383.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>TBB_runtime_interface_version()
-: <a class="el" href="a00383.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
+: <a class="el" href="a00414.html#ad165cf61abbe349d413df2589679add">tbb</a><li>acquire
+: <a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>atomic_fence()
+: <a class="el" href="a00414.html#250275615f10d5b5de6ad466ae2f54de">tbb</a><li>ets_key_usage_type
+: <a class="el" href="a00414.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>full_fence
+: <a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">tbb</a><li>memory_semantics
+: <a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fef">tbb</a><li>parallel_deterministic_reduce()
+: <a class="el" href="a00426.html#g0a66bc67567b2d01d709b59b9bddf84a">tbb</a><li>parallel_do()
+: <a class="el" href="a00426.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
+: <a class="el" href="a00426.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
+: <a class="el" href="a00426.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
+: <a class="el" href="a00426.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
+: <a class="el" href="a00426.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
+: <a class="el" href="a00426.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
+: <a class="el" href="a00426.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>relaxed
+: <a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">tbb</a><li>release
+: <a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a><li>TBB_runtime_interface_version()
+: <a class="el" href="a00414.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_enum.html b/doc/html/namespacemembers_enum.html
index b9bb315..07bd92e 100644
--- a/doc/html/namespacemembers_enum.html
+++ b/doc/html/namespacemembers_enum.html
@@ -23,7 +23,6 @@
   <ul>
     <li><a href="namespacemembers.html"><span>All</span></a></li>
     <li><a href="namespacemembers_func.html"><span>Functions</span></a></li>
-    <li><a href="namespacemembers_type.html"><span>Typedefs</span></a></li>
     <li id="current"><a href="namespacemembers_enum.html"><span>Enumerations</span></a></li>
     <li><a href="namespacemembers_eval.html"><span>Enumerator</span></a></li>
   </ul>
@@ -32,11 +31,11 @@
 <p>
 <ul>
 <li>ets_key_usage_type
-: <a class="el" href="a00383.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>memory_semantics
-: <a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fef">tbb</a></ul>
+: <a class="el" href="a00414.html#a8622ae61b7e7737dac26542e181178e">tbb</a><li>memory_semantics
+: <a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fef">tbb</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_eval.html b/doc/html/namespacemembers_eval.html
index 921c79f..d8a2486 100644
--- a/doc/html/namespacemembers_eval.html
+++ b/doc/html/namespacemembers_eval.html
@@ -23,7 +23,6 @@
   <ul>
     <li><a href="namespacemembers.html"><span>All</span></a></li>
     <li><a href="namespacemembers_func.html"><span>Functions</span></a></li>
-    <li><a href="namespacemembers_type.html"><span>Typedefs</span></a></li>
     <li><a href="namespacemembers_enum.html"><span>Enumerations</span></a></li>
     <li id="current"><a href="namespacemembers_eval.html"><span>Enumerator</span></a></li>
   </ul>
@@ -32,13 +31,13 @@
 <p>
 <ul>
 <li>acquire
-: <a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>full_fence
-: <a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">tbb</a><li>relaxed
-: <a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">tbb</a><li>release
-: <a class="el" href="a00383.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a></ul>
+: <a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fef5f1fafe8d229d348ff91d937f64e79c7">tbb</a><li>full_fence
+: <a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fef07b959f69a4f70d821c67b85316803ff">tbb</a><li>relaxed
+: <a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fefaba4b1574646947f1b519188a93c1900">tbb</a><li>release
+: <a class="el" href="a00414.html#a8686246bb5d3664bd07563749970fefaa1fa107db0245c41fb109d976ae8d70">tbb</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_func.html b/doc/html/namespacemembers_func.html
index 056f2b6..30db35e 100644
--- a/doc/html/namespacemembers_func.html
+++ b/doc/html/namespacemembers_func.html
@@ -23,7 +23,6 @@
   <ul>
     <li><a href="namespacemembers.html"><span>All</span></a></li>
     <li id="current"><a href="namespacemembers_func.html"><span>Functions</span></a></li>
-    <li><a href="namespacemembers_type.html"><span>Typedefs</span></a></li>
     <li><a href="namespacemembers_enum.html"><span>Enumerations</span></a></li>
     <li><a href="namespacemembers_eval.html"><span>Enumerator</span></a></li>
   </ul>
@@ -32,22 +31,20 @@
 <p>
 <ul>
 <li>__TBB_DECL_ATOMIC_ALT()
-: <a class="el" href="a00383.html#ad165cf61abbe349d413df2589679add">tbb</a><li>assertion_failure()
-: <a class="el" href="a00383.html#3d1252787be39b4aef311f1cadaff9e8">tbb</a><li>atomic_fence()
-: <a class="el" href="a00383.html#250275615f10d5b5de6ad466ae2f54de">tbb</a><li>parallel_deterministic_reduce()
-: <a class="el" href="a00395.html#g0a66bc67567b2d01d709b59b9bddf84a">tbb</a><li>parallel_do()
-: <a class="el" href="a00395.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
-: <a class="el" href="a00395.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
-: <a class="el" href="a00395.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
-: <a class="el" href="a00395.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
-: <a class="el" href="a00395.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
-: <a class="el" href="a00395.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
-: <a class="el" href="a00395.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>set_assertion_handler()
-: <a class="el" href="a00383.html#823fa1c15dd829d1d9167157450ddcd9">tbb</a><li>TBB_runtime_interface_version()
-: <a class="el" href="a00383.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
+: <a class="el" href="a00414.html#ad165cf61abbe349d413df2589679add">tbb</a><li>atomic_fence()
+: <a class="el" href="a00414.html#250275615f10d5b5de6ad466ae2f54de">tbb</a><li>parallel_deterministic_reduce()
+: <a class="el" href="a00426.html#g0a66bc67567b2d01d709b59b9bddf84a">tbb</a><li>parallel_do()
+: <a class="el" href="a00426.html#g2617dc9b88b3285a7212599d49f74228">tbb</a><li>parallel_for()
+: <a class="el" href="a00426.html#g04b4696b67370c01353ff5974c8f1196">tbb</a><li>parallel_for_each()
+: <a class="el" href="a00426.html#gc2d710ca573f0a9bd94379cba3772def">tbb</a><li>parallel_invoke()
+: <a class="el" href="a00426.html#gd3e2998f171494f94c2103f4eb924084">tbb</a><li>parallel_reduce()
+: <a class="el" href="a00426.html#g496bd7eadb3b97495ccb5655ef90319e">tbb</a><li>parallel_scan()
+: <a class="el" href="a00426.html#g62fde400a37bbca1a2fddc8e3d22f556">tbb</a><li>parallel_sort()
+: <a class="el" href="a00426.html#gc7576f82fdedc8a701a6c17ad9415926">tbb</a><li>TBB_runtime_interface_version()
+: <a class="el" href="a00414.html#a6858b22e90041c9c4669674ff39b056">tbb</a></ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_type.html b/doc/html/namespacemembers_type.html
deleted file mode 100644
index 65280f2..0000000
--- a/doc/html/namespacemembers_type.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Class Members</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 id="current"><a href="namespacemembers.html"><span>Namespace Members</span></a></li>
-  </ul></div>
-<div class="tabs">
-  <ul>
-    <li><a href="namespacemembers.html"><span>All</span></a></li>
-    <li><a href="namespacemembers_func.html"><span>Functions</span></a></li>
-    <li id="current"><a href="namespacemembers_type.html"><span>Typedefs</span></a></li>
-    <li><a href="namespacemembers_enum.html"><span>Enumerations</span></a></li>
-    <li><a href="namespacemembers_eval.html"><span>Enumerator</span></a></li>
-  </ul>
-</div>
- 
-<p>
-<ul>
-<li>assertion_handler_type
-: <a class="el" href="a00383.html#ed375248ff6019a70ca0f9da528e5d0b">tbb</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2011 Intel Corporation.  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/namespaces.html b/doc/html/namespaces.html
index c3cca49..f7efd0e 100644
--- a/doc/html/namespaces.html
+++ b/doc/html/namespaces.html
@@ -20,11 +20,12 @@
     <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="a00383.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="a00411.html">rml</a></td><td class="indexvalue">Assert that x is true </td></tr>
+  <tr><td class="indexkey"><a class="el" href="a00414.html">tbb</a></td><td class="indexvalue">The namespace tbb contains all components of the library </td></tr>
 </table>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/pages.html b/doc/html/pages.html
index 09078f3..a336994 100644
--- a/doc/html/pages.html
+++ b/doc/html/pages.html
@@ -22,7 +22,7 @@
 </ul>
 <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_do_body_req.html b/doc/html/parallel_do_body_req.html
index 3d2dbc3..1220998 100644
--- a/doc/html/parallel_do_body_req.html
+++ b/doc/html/parallel_do_body_req.html
@@ -29,7 +29,7 @@
 </pre></div> Copy a work item. -<div class="fragment"><pre class="fragment"> ~item_type() 
 </pre></div> Destroy a work item <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_for_body_req.html b/doc/html/parallel_for_body_req.html
index 9ccf4e9..239c5be 100644
--- a/doc/html/parallel_for_body_req.html
+++ b/doc/html/parallel_for_body_req.html
@@ -21,7 +21,7 @@
 </pre></div> Destructor -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> Body::operator()( Range& r ) <span class="keyword">const</span>; 
 </pre></div> Function call operator applying the body to range <code>r</code>. <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_reduce_body_req.html b/doc/html/parallel_reduce_body_req.html
index 9284f5d..ab7a76f 100644
--- a/doc/html/parallel_reduce_body_req.html
+++ b/doc/html/parallel_reduce_body_req.html
@@ -22,7 +22,7 @@
 </pre></div> Function call operator applying body to range <code>r</code> and accumulating the result -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> Body::join( Body& b ); 
 </pre></div> Join results. The result in <code>b</code> should be merged into the result of <code>this</code> <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_reduce_lambda_req.html b/doc/html/parallel_reduce_lambda_req.html
index 32bef4c..ed51780 100644
--- a/doc/html/parallel_reduce_lambda_req.html
+++ b/doc/html/parallel_reduce_lambda_req.html
@@ -16,7 +16,7 @@
   </ul></div>
 <h1><a class="anchor" name="parallel_reduce_lambda_req">Requirements on parallel_reduce anonymous function objects (lambda functions)</a></h1>TO BE DOCUMENTED <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_scan_body_req.html b/doc/html/parallel_scan_body_req.html
index 9a7908b..afb27ab 100644
--- a/doc/html/parallel_scan_body_req.html
+++ b/doc/html/parallel_scan_body_req.html
@@ -23,7 +23,7 @@
 </pre></div> Do final processing for iterations of range <code>r</code> -<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> Body::reverse_join( Body& a ); 
 </pre></div> Merge preprocessing state of <code>a</code> into <code>this</code>, where <code>a</code> was created earlier from <code>b</code> by b's splitting constructor <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_sort_iter_req.html b/doc/html/parallel_sort_iter_req.html
index 8bda7f8..2dd69f6 100644
--- a/doc/html/parallel_sort_iter_req.html
+++ b/doc/html/parallel_sort_iter_req.html
@@ -20,7 +20,7 @@
 </pre></div> Swaps <code>x</code> and <code>y</code> -<div class="fragment"><pre class="fragment"> <span class="keywordtype">bool</span> Compare::operator()( <span class="keyword">const</span> T& x, <span class="keyword">const</span> T& y ) 
 </pre></div> True if x comes before y; <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/range_req.html b/doc/html/range_req.html
index 68fbcb6..0d72cdc 100644
--- a/doc/html/range_req.html
+++ b/doc/html/range_req.html
@@ -23,7 +23,7 @@
 </pre></div> True if range is empty -<div class="fragment"><pre class="fragment"> R::R( R& r, split ); 
 </pre></div> Split range <code>r</code> into two subranges. <hr>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <p></p>
 Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
 registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/GettingStarted/index.html b/examples/GettingStarted/index.html
index dff3353..3413ef8 100644
--- a/examples/GettingStarted/index.html
+++ b/examples/GettingStarted/index.html
@@ -2,7 +2,7 @@
 <BODY>
 
 <H2>Overview</H2>
-This directory contains the examples referenced by the Threading Building Blocks Getting Started Guide. 
+This directory contains the examples referenced by the Intel® Threading Building Blocks Getting Started Guide. 
 
 <H2>Directories</H2>
 <DL>
@@ -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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/GettingStarted/sub_string_finder/Makefile b/examples/GettingStarted/sub_string_finder/Makefile
index 6fdc52b..4a41000 100644
--- a/examples/GettingStarted/sub_string_finder/Makefile
+++ b/examples/GettingStarted/sub_string_finder/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -34,6 +34,18 @@ ifneq (,$(shell which icc 2>/dev/null))
 CXX=icc
 endif # icc
 
+ifeq ($(offload), mic)
+override CXXFLAGS += -opt-report-phase:offload -D__TBB_MIC=1
+endif
+
+ifeq ($(CXX), icc)
+TBBLIB = -tbb
+TBBLIB_DEBUG = -tbb
+else
+TBBLIB = -ltbb
+TBBLIB_DEBUG = -ltbb_debug
+endif
+
 ifeq ($(shell uname), Linux)
 LIBS+= -lrt 
 endif
@@ -41,14 +53,18 @@ endif
 all:	release test
 
 release: *.cpp
-	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp -ltbb $(LIBS)
-	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp -ltbb $(LIBS)
-	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp -ltbb $(LIBS)
+ifeq ($(offload),)
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp $(TBBLIB) $(LIBS)
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp $(TBBLIB) $(LIBS)
+endif
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp $(TBBLIB) $(LIBS)
 
 debug: *.cpp
-	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp -ltbb_debug $(LIBS)
-	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp -ltbb_debug $(LIBS)
-	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp -ltbb_debug $(LIBS)
+ifeq ($(offload),)
+	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp $(TBBLIB_DEBUG) $(LIBS)
+	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp  $(TBBLIB_DEBUG) $(LIBS)
+endif
+	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp $(TBBLIB_DEBUG) $(LIBS)
 
 clean:
 	$(RM) sub_string_finder sub_string_finder_extended sub_string_finder_pretty *.o *.d
diff --git a/examples/GettingStarted/sub_string_finder/Makefile.windows b/examples/GettingStarted/sub_string_finder/Makefile.windows
index d379d4e..551ecdd 100644
--- a/examples/GettingStarted/sub_string_finder/Makefile.windows
+++ b/examples/GettingStarted/sub_string_finder/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 17acf9e..cd751f6 100644
--- a/examples/GettingStarted/sub_string_finder/index.html
+++ b/examples/GettingStarted/sub_string_finder/index.html
@@ -2,11 +2,15 @@
 <BODY>
 
 <H2>Overview</H2>
-A simple example that uses the parallel_for template in a substring matching program. For each position 
+<DL>
+<DT>A simple example that uses the parallel_for template in a substring matching program. For each position 
 in a string, the program displays the length of the largest matching substring elsewhere in the string. 
 The program also displays the location of a largest match for each position.  Consider the string "babba" 
 as an example. Starting at position 0, "ba" is the largest substring with a match elsewhere in the 
 string (position 3). 
+<DT>The code located in the <A HREF="sub_string_finder_extended.cpp">sub_string_finder_extended.cpp</A> file 
+demonstrates offload programming for Intel&reg Many Integrated Core (Intel&reg MIC) Architecture (see <A HREF=../../index.html#build_4>build instructions</A>).
+</DL>
 
 <H2>Files</H2>
 <DL>
@@ -14,8 +18,10 @@ string (position 3).
 <DD>The example as it appears in the Getting Started Guide.
 <DT><A HREF="sub_string_finder_extended.cpp">sub_string_finder_extended.cpp</A>
 <DD>An example similar to the one in the Getting Started Guide, but with an added sequential
-    implementation.  The two implementations are both timed, by using tick_count,
-    and the speedup of the parallel version is calculated and displayed.
+    implementation, and with an offload region added that can be executed on Intel&reg MIC Architecture based coprocessor.
+    The three implementations are timed, by using tick_count,
+    and the speedup of the parallel version and 
+    the speedup of the parallel version and, if applicable, the offload version is calculated and displayed.
 <DT><A HREF="sub_string_finder_pretty.cpp">sub_string_finder_pretty.cpp</A>
 <DD>An example similar to the one in the Getting Started Guide, but with more attractive printing of the results.
 <DT><A HREF="Makefile">Makefile</A>
@@ -25,9 +31,9 @@ string (position 3).
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example (Windows* systems only).
 <DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example.
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X systems only).
 </DL>
 
 <H2>To Build</H2>
@@ -37,10 +43,10 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
 <DL>
 <DT><TT>sub_string_finder</TT>
 <DD>Runs the example as it appears in the Getting Started Guide.
-<DT><TT>sub_string_finder_extended</TT>
-<DD>Runs the extended example with the added sequential implementation.
 <DT><TT>sub_string_finder_pretty</TT>
 <DD>Runs the similar example with more attractive printing of the results.
+<DT><TT>sub_string_finder_extended</TT>
+<DD>Runs the example extended with a sequential implementation and an offload region that can be executed on Intel&reg MIC Architecture based coprocessor.
 <DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
 <DD>Build a <I>debug</I> version of the <TT>sub_string_finder_pretty</TT> example
     (see the <A HREF=../../index.html#build>build directions</A>).
@@ -50,7 +56,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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp
index 22dc310..491d923 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 8ca1049..4eb5b70 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,9 @@
     the GNU General Public License.
 */
 
+#if __TBB_MIC
+#pragma offload_attribute (push,target(mic))
+#endif // __TBB_MIC
 
 #include <iostream>
 #include <string>
@@ -35,6 +38,11 @@
 #include "tbb/blocked_range.h"
 #include "tbb/tick_count.h"
 
+#if __TBB_MIC
+#pragma offload_attribute (pop)
+
+class __declspec(target(mic)) SubStringFinder;
+#endif // __TBB_MIC
 
 using namespace tbb;
 using namespace std;
@@ -123,6 +131,36 @@ int main(int argc, char *argv[]) {
            << "Parallel version ran in " <<  (parallel_t1 - parallel_t0).seconds() << " seconds" << endl
            << "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_t1 - parallel_t0).seconds() << endl;
 
+#if __TBB_MIC
+ // Do offloadable version. Do the timing on host.
+ size_t *max3 = new size_t[num_elem];
+ size_t *pos3 = new size_t[num_elem];
+ tick_count parallel_tt0 = tick_count::now();
+ const char* to_scan_str = to_scan.c_str();  // Offload the string as a char array.
+ #pragma offload target(mic) in(num_elem) in(to_scan_str:length(num_elem)) out(max3,pos3:length(num_elem))
+ {
+ string to_scan(to_scan_str, num_elem);      // Reconstruct the string in offloadable region.
+                                             // Suboptimal performance because of making a copy from to_scan_str at creating to_scan.
+ parallel_for(blocked_range<size_t>(0, num_elem, 100),
+       SubStringFinder( to_scan, max3, pos3 ) );
+ }
+ tick_count parallel_tt1 = tick_count::now();
+ cout << " Done with offloadable version." << endl;
+
+ // Do validation of offloadable results on host.
+ for (size_t i = 0; i < num_elem; ++i) {
+   if (max3[i] != max2[i] || pos3[i] != pos2[i]) {
+     cout << "ERROR: Serial and Offloadable Results are Different!" << endl;
+   }
+ }
+ cout << " Done validating offloadable results." << endl;
+
+ cout << "Offloadable version ran in " <<  (parallel_tt1 - parallel_tt0).seconds() << " seconds" << endl
+           << "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_tt1 - parallel_tt0).seconds() << " of offloadable version" << endl;
+
+ delete[] max3;
+ delete[] pos3;
+#endif // __TBB_MIC
 
  delete[] max;
  delete[] pos;
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 a228fe7..9160dc4 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/Makefile b/examples/Makefile
index d775633..3e6a265 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/common/copy_libraries.bat b/examples/common/copy_libraries.bat
index eae9e25..ff77b4d 100644
--- a/examples/common/copy_libraries.bat
+++ b/examples/common/copy_libraries.bat
@@ -1,6 +1,6 @@
 @echo off
 REM
-REM Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+REM Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 REM
 REM This file is part of Threading Building Blocks.
 REM
@@ -66,7 +66,7 @@ if exist "%TBBROOT%\%interim_path%\%vc_dir%\tbb_preview%postfix%.pdb" copy "%TBB
 
 goto end
 :error
-echo Error occured in libraries copying during post-build step.
+echo Error occurred in libraries copying during post-build step.
 exit /B 1
 
 :end
diff --git a/examples/common/gui/Makefile.gmake b/examples/common/gui/Makefile.gmake
index ae40dbf..6348aca 100644
--- a/examples/common/gui/Makefile.gmake
+++ b/examples/common/gui/Makefile.gmake
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -61,20 +61,12 @@ endif # libXext
 
 else # ! X
 ifeq ($(UI),mac)
-# TODO: Replace Carbon by Cocoa, SDK10.7 does no support Carbon headers.
-UI_CXXFLAGS += -arch i386 -mmacosx-version-min=10.6 -isysroot /Developer/SDKs/MacOSX10.6.sdk
-# TODO: figure out and comment why these flags are set here (supposedly for Seismic)
-CXXFLAGS += -msse3 -ftree-vectorize
-LIBS += -framework OpenGL -framework AGL -framework Carbon
+CXX_UI?=g++
+LIBS += -framework OpenGL -framework Foundation -framework Cocoa
+MACUISOURCES = ../../common/gui/xcode/tbbExample/OpenGLView.m ../../common/gui/xcode/tbbExample/main.m ../../common/gui/xcode/tbbExample/tbbAppDelegate.m 
+MACUIOBJS = OpenGLView.o main.o tbbAppDelegate.o
 APPRES = $(NAME)$(SUFFIX).app/Contents/Resources
 EXE = $(NAME)$(SUFFIX).app/Contents/MacOS/$(NAME)$(SUFFIX)
-ifneq (,$(shell xcode-select -print-path 2>/dev/null))
-PBXCP = $(shell xcode-select -print-path)/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp
-else
-# look in /System and /Developer
-PBXCP = $(wildcard /[SD]*/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp)
-endif
-PBXCP +=  -resolve-src-symlinks -exclude .DS_Store -exclude CVS -exclude .svn
 
 else # ! Mac
 UI = con
diff --git a/examples/common/gui/Makefile.win b/examples/common/gui/Makefile.win
index 9a9515b..dce2cd8 100644
--- a/examples/common/gui/Makefile.win
+++ b/examples/common/gui/Makefile.win
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 9d02bc3..6d06733 100644
--- a/examples/common/gui/convideo.cpp
+++ b/examples/common/gui/convideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/common/gui/d2dvideo.cpp b/examples/common/gui/d2dvideo.cpp
new file mode 100644
index 0000000..2dd545a
--- /dev/null
+++ b/examples/common/gui/d2dvideo.cpp
@@ -0,0 +1,209 @@
+/*
+    Copyright 2005-2012 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.
+*/
+
+// common Windows parts
+#include "winvideo.h"
+
+// and another headers
+#include <cassert>
+#include <stdio.h>
+#include <dxsdkver.h>
+#if _DXSDK_PRODUCT_MAJOR < 9
+#error DXSDK Version 9 and above required.
+#endif
+#include <d2d1.h>
+#include <d2d1helper.h>
+#pragma comment(lib, "d2d1.lib")
+
+ID2D1Factory *m_pD2DFactory;
+ID2D1HwndRenderTarget *m_pRenderTarget;
+ID2D1Bitmap *m_pBitmap;
+D2D1_SIZE_U bitmapSize;
+
+HANDLE g_hVSync;
+
+#include <DXErr.h>
+#pragma comment(lib, "DxErr.lib")
+
+//! Create a dialog box and tell the user what went wrong
+bool DisplayError(LPSTR lpstrErr, HRESULT hres)
+{
+    if(hres != S_OK){
+        static bool InError = false;
+        int retval = 0;
+        if (!InError)
+        {
+            InError = true;
+            const char *message = hres?DXGetErrorString(hres):0;
+            retval = MessageBoxA(g_hAppWnd, lpstrErr, hres?message:"Error!", MB_OK|MB_ICONERROR);
+            InError = false;
+        }
+    }
+    return false;
+}
+
+void DrawBitmap()
+{
+    HRESULT hr = S_OK;
+    if (m_pRenderTarget) {
+        m_pRenderTarget->BeginDraw();
+        if (m_pBitmap) 
+            hr = m_pBitmap->CopyFromMemory(NULL,(BYTE*)g_pImg, 4*g_sizex);
+        DisplayError( "DrawBitmap error", hr );
+        m_pRenderTarget->DrawBitmap(m_pBitmap);
+        m_pRenderTarget->EndDraw();
+    }
+    return;
+}
+
+inline void mouse(int k, LPARAM lParam)
+{
+    int x = (int)LOWORD(lParam);
+    int y = (int)HIWORD(lParam);
+    RECT rc;
+    GetClientRect(g_hAppWnd, &rc);
+    g_video->on_mouse( x*g_sizex/(rc.right - rc.left), y*g_sizey/(rc.bottom - rc.top), k );
+}
+
+//! Win event processing function
+LRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
+{
+    switch (iMsg)
+    {
+        case WM_MOVE:
+            // Check to make sure our window exists before we tell it to repaint.
+            // This will fail the first time (while the window is being created).
+            if (hwnd) {
+                InvalidateRect(hwnd, NULL, FALSE);
+                UpdateWindow(hwnd);
+            }
+            return 0L;
+
+        case WM_SIZE:
+        case WM_PAINT:
+            if( g_video->running && g_video->updating ) {
+                DrawBitmap();
+                Sleep(0);
+            }
+            break;
+        // Proccess all mouse and keyboard events
+        case WM_LBUTTONDOWN:    mouse( 1, lParam ); break;
+        case WM_LBUTTONUP:      mouse(-1, lParam ); break;
+        case WM_RBUTTONDOWN:    mouse( 2, lParam ); break;
+        case WM_RBUTTONUP:      mouse(-2, lParam ); break;
+        case WM_MBUTTONDOWN:    mouse( 3, lParam ); break;
+        case WM_MBUTTONUP:      mouse(-3, lParam ); break;
+        case WM_CHAR:           g_video->on_key( (int)wParam); break;
+
+        // some useless stuff
+        case WM_ERASEBKGND:     return 1;  // keeps erase-background events from happening, reduces chop
+        case WM_DISPLAYCHANGE:  return 0;
+
+        // Now, shut down the window...
+        case WM_DESTROY:        PostQuitMessage(0); return 0;
+    }
+    // call user defined proc, if exists
+    return g_pUserProc? g_pUserProc(hwnd, iMsg, wParam, lParam) : DefWindowProc(hwnd, iMsg, wParam, lParam);
+}
+
+bool video::init_window(int sizex, int sizey)
+{
+    assert(win_hInstance != 0);
+    g_sizex = sizex; g_sizey = sizey;
+    if (!WinInit(win_hInstance, win_iCmdShow, gWndClass, title, false)) {
+        DisplayError("Unable to initialize the program's window.");
+        return false;
+    }
+    ShowWindow(g_hAppWnd, SW_SHOW);
+    g_pImg = new unsigned int[sizex*sizey];
+
+    HRESULT hr = S_OK;
+
+    hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pD2DFactory);
+    // Create a Direct2D render target.
+    if (SUCCEEDED(hr) && !m_pRenderTarget){
+        RECT rc;
+        GetClientRect(g_hAppWnd, &rc);
+
+        bitmapSize = D2D1::SizeU(
+            rc.right - rc.left,
+            rc.bottom - rc.top
+            );
+
+        hr = m_pD2DFactory->CreateHwndRenderTarget(
+            D2D1::RenderTargetProperties(),
+            D2D1::HwndRenderTargetProperties(g_hAppWnd, bitmapSize),
+            &m_pRenderTarget
+            );
+        if (SUCCEEDED(hr) && !m_pBitmap){
+            D2D1_PIXEL_FORMAT pixelFormat = D2D1::PixelFormat(
+                DXGI_FORMAT_B8G8R8A8_UNORM,
+                D2D1_ALPHA_MODE_IGNORE
+                );
+            D2D1_BITMAP_PROPERTIES bitmapProperties;
+            bitmapProperties.pixelFormat = pixelFormat;
+            m_pRenderTarget->GetDpi( &bitmapProperties.dpiX, &bitmapProperties.dpiY );
+            m_pRenderTarget->CreateBitmap(bitmapSize,bitmapProperties,&m_pBitmap);
+            m_pRenderTarget->DrawBitmap(m_pBitmap);
+        }
+    }
+
+    running = true;
+    return true;
+}
+
+void video::terminate()
+{
+    if (m_pBitmap) m_pBitmap->Release();
+    if (m_pRenderTarget) m_pRenderTarget->Release(); 
+    if (m_pD2DFactory) m_pD2DFactory->Release();
+    g_video = 0; running = false;
+    if(g_pImg) { delete[] g_pImg; g_pImg = 0; }
+}
+
+//////////// drawing area constructor & destructor /////////////
+
+drawing_area::drawing_area(int x, int y, int sizex, int sizey)
+: start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(24),
+    base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+{
+    assert(x < g_sizex); assert(y < g_sizey);
+    assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
+
+    index = base_index; // current index
+}
+
+void drawing_area::update()
+{
+    if(g_video->updating) {
+        RECT r;
+        r.left = start_x; r.right  = start_x + size_x;
+        r.top  = start_y; r.bottom = start_y + size_y;
+        InvalidateRect(g_hAppWnd, &r, false);
+    }
+}
diff --git a/examples/common/gui/ddvideo.cpp b/examples/common/gui/ddvideo.cpp
index f837470..3538b2f 100644
--- a/examples/common/gui/ddvideo.cpp
+++ b/examples/common/gui/ddvideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,6 +28,13 @@
 
 // common Windows parts
 #include "winvideo.h"
+
+#include <dxsdkver.h>
+#if _DXSDK_PRODUCT_MAJOR >= 9
+// new implementation based on Direct2D
+#include "d2dvideo.cpp"
+#else // _DXSDK_PRODUCT_MAJOR >= 9
+
 // and another headers
 #include <cassert>
 #include <stdio.h>
@@ -578,3 +585,5 @@ drawing_area::drawing_area(int x, int y, int sizex, int sizey)
 void drawing_area::update()
 {
 }
+
+#endif //_DXSDK_PRODUCT_MAJOR >= 9
diff --git a/examples/common/gui/dxcheck.bat b/examples/common/gui/dxcheck.bat
index e7013ed..60bd56a 100644
--- a/examples/common/gui/dxcheck.bat
+++ b/examples/common/gui/dxcheck.bat
@@ -1,6 +1,6 @@
 @echo off
 REM
-REM Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+REM Copyright 2005-2012 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 f55813a..3f15121 100644
--- a/examples/common/gui/gdivideo.cpp
+++ b/examples/common/gui/gdivideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 5bbcc74..58863b6 100644
--- a/examples/common/gui/macvideo.cpp
+++ b/examples/common/gui/macvideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,1377 +26,41 @@
     the GNU General Public License.
 */
 
-/*
- *  Based on "OpenGL Image" example from http://developer.apple.com/samplecode/OpenGL_Image/
- */
-
 #include "video.h"
-#include <sched.h>
-#include <sys/time.h>
+#include <cassert>
 #include <stdio.h>
-#include <string.h>
+#include <iostream>
 #include <pthread.h>
 
-#include <AvailabilityMacros.h>
-#undef DEPRECATED_ATTRIBUTE
-#define DEPRECATED_ATTRIBUTE
-#include <Carbon/Carbon.h>
-#include <AGL/agl.h>
-#include <OpenGL/gl.h>    // for OpenGL API
-#include <OpenGL/glext.h> // for OpenGL extension support
-
-unsigned int *      g_pImg = 0;
-int                 g_sizex, g_sizey;
-WindowRef           g_window = 0;
-static video *      g_video = 0;
-static int          g_fps = 0;
-struct timeval      g_time;
-static pthread_mutex_t  g_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-
-static OSStatus     AppEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon );
-WindowRef           HandleNew();
-static OSStatus     WindowEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon );
-
-static IBNibRef     sNibRef;
-
-//--------------------------------------------------------------------------------------------
-
-// structure for creating a fullscreen context
-struct structGLInfo // storage for setup info
-{
-    SInt16 width;               // input: width of drawable (screen width in full screen mode), return: actual width allocated
-    SInt16 height;              // input: height of drawable (screen height in full screen mode), return: actual height allocated
-    UInt32 pixelDepth;          // input: requested pixel depth
-    Boolean fDepthMust;         // input: pixel depth must be set (if false then current depth will be used if able)
-    Boolean fAcceleratedMust;   // input: must renderer be accelerated?
-    GLint aglAttributes[64];    // input: pixel format attributes always required (reset to what was actually allocated)
-    SInt32 VRAM;                // input: minimum VRAM; output: actual (if successful otherwise input)
-    SInt32 textureRAM;          // input: amount of texture RAM required on card; output: same (used in allcoation to ensure enough texture
-    AGLPixelFormat    fmt;      // input: none; output pixel format...
-};
-typedef struct structGLInfo structGLInfo;
-typedef struct structGLInfo * pstructGLInfo;
-
-// structure for creating a context from a window
-struct structGLWindowInfo // storage for setup info
-{
-    Boolean fAcceleratedMust;   // input: must renderer be accelerated?
-    GLint aglAttributes[64];    // input: pixel format attributes always required (reset to what was actually allocated)
-    SInt32 VRAM;                // input: minimum VRAM; output: actual (if successful otherwise input)
-    SInt32 textureRAM;          // input: amount of texture RAM required on card; output: same (used in allcoation to ensure enough texture
-    AGLPixelFormat    fmt;      // input: none; output pixel format...
-    Boolean fDraggable;         // input: is window going to be draggable,
-                                //        if so renderer check (accel, VRAM, textureRAM) will look at all renderers vice just the current one
-                                //        if window is not draggable renderer check will either check the single device or short
-                                //            circuit to software if window spans multiple devices
-                                //        software renderer is consider to have unlimited VRAM, unlimited textureRAM and to not be accelerated
-};
-typedef struct structGLWindowInfo structGLWindowInfo;
-typedef struct structGLWindowInfo * pstructGLWindowInfo;
-
-//--------------------------------------------------------------------------------------------
-
-struct recGLCap // structure to store minimum OpenGL capabilites across all displays and GPUs
-{
-    Boolean f_ext_texture_rectangle; // is texture rectangle extension supported
-    Boolean f_ext_client_storage; // is client storage extension supported
-    Boolean f_ext_packed_pixel; // is packed pixel extension supported
-    Boolean f_ext_texture_edge_clamp; // is SGI texture edge clamp extension supported
-    Boolean f_gl_texture_edge_clamp; // is OpenGL texture edge clamp support (1.2+)
-    unsigned long edgeClampParam; // the param that is passed to the texturing parmeteres
-    long maxTextureSize; // the minimum max texture size across all GPUs
-    long maxNOPTDTextureSize; // the minimum max texture size across all GPUs that support non-power of two texture dimensions
-};
-typedef struct recGLCap recGLCap;
-typedef recGLCap * pRecGLCap;
-
-struct recImage // OpenGL and image information associated with each window
-{
-    // genric OpenGL stuff
-    structGLWindowInfo glInfo;  // gl info used with SetupGL to build context
-    AGLContext aglContext;      // the OpenGL context (read: state)
-    GLuint fontList;            // the display list storing the bitmap font created for the context to display info
-
-    Boolean fAGPTexturing;      // 10.1+ only: texture from AGP memory without loading to GPU
-
-    // texture display stuff
-    Boolean fNPOTTextures; // are we using Non-Power Of Two (NPOT) textures?
-    Boolean fTileTextures; // are multiple tiled textures used to display image?
-    Boolean fOverlapTextures; // do tiled textures overlapped to create correct filtering between tiles? (only applies if using tiled textures)
-    Boolean fClientTextures; // 10.1+ only: texture from client memory
-
-    unsigned char * pImageBuffer; // image buffer that contains data for image (disposed after loading into texture if not using client textures)
-    long imageWidth; // height of orginal image
-    long imageHeight; // width of orginal image
-    float imageAspect; // width / height or aspect ratio of orginal image
-    long imageDepth; // depth of image (after loading into gworld, will be either 32 or 16 bits)
-    long textureX; // number of horizontal textures
-    long textureY; // number of vertical textures
-    long maxTextureSize; // max texture size for image
-    GLuint * pTextureName; // array for texture names (# = textureX * textureY)
-    long textureWidth; // total width of texels with cover image (including any border on image, but not internal texture overlaps)
-    long textureHeight; // total height of texels with cover image (including any border on image, but not internal texture overlaps)
-    float zoomX; // zoom from on texel = one pixel is 1.0
-    float zoomY; // zoom from on texel = one pixel is 1.0
- };
-typedef struct recImage recImage; // typedef for easy declaration
-typedef recImage * pRecImage; // pointer type
-
-// ==================================
-
-// public function declarations -------------------------------------
-
-// Destroys drawable and context
-// Ouputs: *paglDraw, *paglContext should be 0 on exit
-// destorys a context that was associated with an existing window, window is left intacted
-OSStatus DestroyGLFromWindow (AGLContext* paglContext, pstructGLWindowInfo pcontextInfo);
-
-short FindGDHandleFromWindow (WindowPtr pWindow, GDHandle * phgdOnThisDevice);
-
-// disposes OpenGL context, and associated texture list
-OSStatus DisposeGLForWindow (WindowRef window);
-
-// builds the GL context and associated state for the window
-// loads image into a texture or textures
-// disposes of GWorld and image buffer when finished loading textures
-OSStatus BuildGLForWindow (WindowRef window);
-
-// Handle updating context for window moves and resizing
-OSStatus ResizeMoveGLWindow (WindowRef window);
-
-// main GL drawing routine, should be valid window passed in (will setupGL if require).  Draw image
-void DrawGL (WindowRef window);
-
-pRecGLCap gpOpenGLCaps;
-
-// prototypes (internal/private) --------------------------------------------
-
-static Boolean CheckRenderer (GDHandle hGD, long *VRAM, long *textureRAM, GLint*  , Boolean fAccelMust);
-static Boolean CheckAllDeviceRenderers (long* pVRAM, long* pTextureRAM, GLint* pDepthSizeSupport, Boolean fAccelMust);
-static void DumpCurrent (AGLDrawable* paglDraw, AGLContext* paglContext, pstructGLInfo pcontextInfo);
-static OSStatus BuildGLonWindow (WindowPtr pWindow, AGLContext* paglContext, pstructGLWindowInfo pcontextInfo, AGLContext aglShareContext);
-
-static long GetNextTextureSize (long textureDimension, long maxTextureSize, Boolean textureRectangle);
-static long GetTextureNumFromTextureDim (long textureDimension, long maxTextureSize, Boolean texturesOverlap, Boolean textureRectangle);
-
-// ----------------------------------------------------------------------------------------
-
-// functions (internal/private) ---------------------------------------------
-
-#pragma mark -
-// --------------------------------------------------------------------------
-
-// central error reporting
-
-void ReportErrorNum (char * strError, long numError)
-{
-    char errMsgPStr [257];
-
-    errMsgPStr[0] = (char)snprintf (errMsgPStr+1, 255, "%s %ld (0x%lx)\n", strError, numError, numError);
-
-    // ensure we are faded in
-    DebugStr ( (ConstStr255Param) errMsgPStr );
-}
-
-// --------------------------------------------------------------------------
-
-void ReportError (char * strError)
-{
-    char errMsgPStr [257];
-
-    errMsgPStr[0] = (char)snprintf (errMsgPStr+1, 255, "%s\n", strError);
-
-    // ensure we are faded in
-    DebugStr ( (ConstStr255Param) errMsgPStr );
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// if error dump agl errors to debugger string, return error
-
-OSStatus aglReportError (void)
-{
-    GLenum err = aglGetError();
-    if (AGL_NO_ERROR != err)
-        ReportError ((char *)aglErrorString(err));
-    // ensure we are returning an OSStatus noErr if no error condition
-    if (err == AGL_NO_ERROR)
-        return noErr;
-    else
-        return (OSStatus) err;
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// if error dump gl errors to debugger string, return error
-
-OSStatus glReportError (void)
-{
-    GLenum err = glGetError();
-    switch (err)
-    {
-        case GL_NO_ERROR:
-            break;
-        case GL_INVALID_ENUM:
-            ReportError ("GL Error: Invalid enumeration");
-            break;
-        case GL_INVALID_VALUE:
-            ReportError ("GL Error: Invalid value");
-            break;
-        case GL_INVALID_OPERATION:
-            ReportError ("GL Error: Invalid operation");
-            break;
-        case GL_STACK_OVERFLOW:
-            ReportError ("GL Error: Stack overflow");
-            break;
-        case GL_STACK_UNDERFLOW:
-            ReportError ("GL Error: Stack underflow");
-            break;
-        case GL_OUT_OF_MEMORY:
-            ReportError ("GL Error: Out of memory");
-            break;
-    }
-    // ensure we are returning an OSStatus noErr if no error condition
-    if (err == GL_NO_ERROR)
-        return noErr;
-    else
-        return (OSStatus) err;
-}
-
-//--------------------------------------------------------------------------------------------
-
-// functions (internal/private) ---------------------------------------------
-
-// CheckRenderer
-
-// looks at renderer attributes it has at least the VRAM is accelerated
-
-// Inputs:     hGD: GDHandle to device to look at
-//            pVRAM: pointer to VRAM in bytes required; out is actual VRAM if a renderer was found, otherwise it is the input parameter
-//            pTextureRAM:  pointer to texture RAM in bytes required; out is same (implementation assume VRAM returned by card is total so we add texture and VRAM)
-//            fAccelMust: do we check for acceleration
-
-// Returns: true if renderer for the requested device complies, false otherwise
-
-static Boolean CheckRenderer (GDHandle hGD, long* pVRAM, long* pTextureRAM, GLint* pDepthSizeSupport, Boolean fAccelMust)
-{
-    AGLRendererInfo info, head_info;
-    GLint inum;
-    GLint dAccel = 0;
-    GLint dVRAM = 0, dMaxVRAM = 0;
-    Boolean canAccel = false, found = false;
-    head_info = aglQueryRendererInfo(&hGD, 1);
-    aglReportError ();
-    if(!head_info)
-    {
-        ReportError ("aglQueryRendererInfo error");
-        return false;
-    }
-    else
-    {
-        info = head_info;
-        inum = 0;
-        // see if we have an accelerated renderer, if so ignore non-accelerated ones
-        // this prevents returning info on software renderer when actually we'll get the hardware one
-        while (info)
-        {
-            aglDescribeRenderer(info, AGL_ACCELERATED, &dAccel);
-            aglReportError ();
-            if (dAccel)
-                canAccel = true;
-            info = aglNextRendererInfo(info);
-            aglReportError ();
-            inum++;
-        }
-
-        info = head_info;
-        inum = 0;
-        while (info)
-        {
-            aglDescribeRenderer (info, AGL_ACCELERATED, &dAccel);
-            aglReportError ();
-            // if we can accel then we will choose the accelerated renderer
-            // how about compliant renderers???
-            if ((canAccel && dAccel) || (!canAccel && (!fAccelMust || dAccel)))
-            {
-                aglDescribeRenderer (info, AGL_VIDEO_MEMORY, &dVRAM);    // we assume that VRAM returned is total thus add texture and VRAM required
-                aglReportError ();
-                if (dVRAM >= (*pVRAM + *pTextureRAM))
-                {
-                    if (dVRAM >= dMaxVRAM) // find card with max VRAM
-                    {
-                        aglDescribeRenderer (info, AGL_DEPTH_MODES, pDepthSizeSupport);    // which depth buffer modes are supported
-                        aglReportError ();
-                        dMaxVRAM = dVRAM; // store max
-                        found = true;
-                    }
-                }
-            }
-            info = aglNextRendererInfo(info);
-            aglReportError ();
-            inum++;
-        }
-    }
-    aglDestroyRendererInfo(head_info);
-    if (found) // if we found a card that has enough VRAM and meets the accel criteria
-    {
-        *pVRAM = dMaxVRAM; // return VRAM
-        return true;
-    }
-    // VRAM will remain to same as it did when sent in
-    return false;
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// CheckAllDeviceRenderers
-
-// looks at renderer attributes and each device must have at least one renderer that fits the profile
-
-// Inputs:     pVRAM: pointer to VRAM in bytes required; out is actual min VRAM of all renderers found, otherwise it is the input parameter
-//            pTextureRAM:  pointer to texture RAM in bytes required; out is same (implementation assume VRAM returned by card is total so we add texture and VRAM)
-//            fAccelMust: do we check fro acceleration
-
-// Returns: true if any renderer for on each device complies (not necessarily the same renderer), false otherwise
-
-static Boolean CheckAllDeviceRenderers (long* pVRAM, long* pTextureRAM, GLint* pDepthSizeSupport, Boolean fAccelMust)
-{
-    AGLRendererInfo info, head_info;
-    GLint inum;
-    GLint dAccel = 0;
-    GLint dVRAM = 0, dMaxVRAM = 0;
-    Boolean canAccel = false, found = false, goodCheck = true; // can the renderer accelerate, did we find a valid renderer for the device, are we still successfully on all the devices looked at
-    long MinVRAM = 0x8FFFFFFF; // max long
-    GDHandle hGD = GetDeviceList (); // get the first screen
-    while (hGD && goodCheck)
-    {
-        head_info = aglQueryRendererInfo(&hGD, 1);
-        aglReportError ();
-        if(!head_info)
-        {
-            ReportError ("aglQueryRendererInfo error");
-            return false;
-        }
-        else
-        {
-            info = head_info;
-            inum = 0;
-            // see if we have an accelerated renderer, if so ignore non-accelerated ones
-            // this prevents returning info on software renderer when actually we'll get the hardware one
-            while (info)
-            {
-                aglDescribeRenderer(info, AGL_ACCELERATED, &dAccel);
-                aglReportError ();
-                if (dAccel)
-                    canAccel = true;
-                info = aglNextRendererInfo(info);
-                aglReportError ();
-                inum++;
-            }
-
-            info = head_info;
-            inum = 0;
-            while (info)
-            {
-                aglDescribeRenderer(info, AGL_ACCELERATED, &dAccel);
-                aglReportError ();
-                // if we can accel then we will choose the accelerated renderer
-                // how about compliant renderers???
-                if ((canAccel && dAccel) || (!canAccel && (!fAccelMust || dAccel)))
-                {
-                    aglDescribeRenderer(info, AGL_VIDEO_MEMORY, &dVRAM);    // we assume that VRAM returned is total thus add texture and VRAM required
-                    aglReportError ();
-                    if (dVRAM >= (*pVRAM + *pTextureRAM))
-                    {
-                        if (dVRAM >= dMaxVRAM) // find card with max VRAM
-                        {
-                            aglDescribeRenderer(info, AGL_DEPTH_MODES, pDepthSizeSupport);    // which depth buffer modes are supported
-                            aglReportError ();
-                            dMaxVRAM = dVRAM; // store max
-                            found = true;
-                        }
-                    }
-                }
-                info = aglNextRendererInfo(info);
-                aglReportError ();
-                inum++;
-            }
-        }
-        aglDestroyRendererInfo(head_info);
-        if (found) // if we found a card that has enough VRAM and meets the accel criteria
-        {
-            if (MinVRAM > dMaxVRAM)
-                MinVRAM = dMaxVRAM; // return VRAM
-
-        }
-        else
-            goodCheck = false; // one device failed thus entire requirement fails
-        hGD = GetNextDevice (hGD); // get next device
-    } // while
-    if (goodCheck) // we check all devices and each was good
-    {
-        *pVRAM = MinVRAM; // return VRAM
-        return true;
-    }
-    return false; //at least one device failed to have mins
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// DumpCurrent
-
-// Kills currently allocated context
-// does not care about being pretty (assumes display is likely faded)
-
-// Inputs:     paglDraw, paglContext: things to be destroyed
-
-void DumpCurrent (AGLDrawable* paglDraw, AGLContext* paglContext, pstructGLInfo pcontextInfo)
-{
-    if (*paglContext)
-    {
-        aglSetCurrentContext (NULL);
-        aglReportError ();
-        aglSetDrawable (*paglContext, NULL);
-        aglReportError ();
-        aglDestroyContext (*paglContext);
-        aglReportError ();
-        *paglContext = NULL;
-    }
-
-    if (pcontextInfo->fmt)
-    {
-        aglDestroyPixelFormat (pcontextInfo->fmt); // pixel format is no longer needed
-        aglReportError ();
-    }
-    pcontextInfo->fmt = 0;
-
-    if (*paglDraw) // do not destory a window on DSp since there is no window built in X
-        DisposeWindow (GetWindowFromPort (*paglDraw));
-    *paglDraw = NULL;
-}
-
-#pragma mark -
-// --------------------------------------------------------------------------
-
-// BuildGLonWindow
-
-static OSStatus BuildGLonWindow (WindowPtr pWindow, AGLContext* paglContext, pstructGLWindowInfo pcontextInfo, AGLContext aglShareContext)
-{
-    GDHandle hGD = NULL;
-    GrafPtr cgrafSave = NULL;
-    short numDevices;
-    GLint depthSizeSupport;
-    OSStatus err = noErr;
-
-    if (!pWindow || !pcontextInfo)
-    {
-        ReportError ("NULL parameter passed to BuildGLonWindow.");
-        return paramErr;
-    }
-
-    GetPort (&cgrafSave);
-    SetPortWindowPort(pWindow);
-
-    // check renderere VRAM and acceleration
-    numDevices = FindGDHandleFromWindow (pWindow, &hGD);
-    if (!pcontextInfo->fDraggable)     // if numDevices > 1 then we will only be using the software renderer otherwise check only window device
-    {
-        if ((numDevices > 1) || (numDevices == 0)) // this window spans mulitple devices thus will be software only
-        {
-            // software renderer
-            // infinite VRAM, infinite textureRAM, not accelerated
-            if (pcontextInfo->fAcceleratedMust)
-            {
-                ReportError ("Unable to accelerate window that spans multiple devices");
-                return err;
-            }
-        }
-        else // not draggable on single device
-        {
-            if (!CheckRenderer (hGD, &(pcontextInfo->VRAM), &(pcontextInfo->textureRAM), &depthSizeSupport, pcontextInfo->fAcceleratedMust))
-            {
-                ReportError ("Renderer check failed");
-                return err;
-            }
-        }
-    }
-    // else draggable so must check all for support (each device should have at least one renderer that meets the requirements)
-    else if (!CheckAllDeviceRenderers (&(pcontextInfo->VRAM), &(pcontextInfo->textureRAM), &depthSizeSupport, pcontextInfo->fAcceleratedMust))
-    {
-        ReportError ("Renderer check failed");
-        return err;
-    }
-
-    // do agl
-    if ((Ptr) kUnresolvedCFragSymbolAddress == (Ptr) aglChoosePixelFormat) // check for existance of OpenGL
-    {
-        ReportError ("OpenGL not installed");
-        return noErr;
-    }
-    // we successfully passed the renderer check
-
-    if ((!pcontextInfo->fDraggable && (numDevices == 1)))  // not draggable on a single device
-        pcontextInfo->fmt = aglChoosePixelFormat (&hGD, 1, pcontextInfo->aglAttributes); // get an appropriate pixel format
-    else
-        pcontextInfo->fmt = aglChoosePixelFormat (NULL, 0, pcontextInfo->aglAttributes); // get an appropriate pixel format
-    aglReportError ();
-    if (NULL == pcontextInfo->fmt)
-    {
-        ReportError("Could not find valid pixel format");
-        return noErr;
-    }
-
-    *paglContext = aglCreateContext (pcontextInfo->fmt, aglShareContext); // Create an AGL context
-    if (AGL_BAD_MATCH == aglGetError())
-        *paglContext = aglCreateContext (pcontextInfo->fmt, 0); // unable to sahre context, create without sharing
-    aglReportError ();
-    if (NULL == *paglContext)
-    {
-        ReportError ("Could not create context");
-        return noErr;
-    }
-
-    if (!aglSetDrawable (*paglContext, GetWindowPort (pWindow))) // attach the CGrafPtr to the context
-        return aglReportError ();
-
-    if(!aglSetCurrentContext (*paglContext)) // make the context the current context
-        return aglReportError ();
-
-    SetPort (cgrafSave);
-
-    return err;
-}
-
-#pragma mark -
-
-// functions (public) -------------------------------------------------------
-
-// DestroyGLFromWindow
-
-// Destroys context that waas allocated with BuildGLonWindow
-// Ouputs: *paglContext should be NULL on exit
-
-OSStatus DestroyGLFromWindow (AGLContext* paglContext, pstructGLWindowInfo pcontextInfo)
-{
-    OSStatus err;
-
-    if ((!paglContext) || (!*paglContext))
-        return paramErr; // not a valid context
-    glFinish ();
-    aglSetCurrentContext (NULL);
-    err = aglReportError ();
-    aglSetDrawable (*paglContext, NULL);
-    err = aglReportError ();
-    aglDestroyContext (*paglContext);
-    err = aglReportError ();
-    *paglContext = NULL;
-
-    if (pcontextInfo->fmt)
-    {
-        aglDestroyPixelFormat (pcontextInfo->fmt); // pixel format is no longer valid
-        err = aglReportError ();
-    }
-    pcontextInfo->fmt = 0;
-
-    return err;
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// GetWindowDevice
-
-// Inputs:    a valid WindowPtr
-
-// Outputs:    the GDHandle that that window is mostly on
-
-// returns the number of devices that the windows content touches
-
-short FindGDHandleFromWindow (WindowPtr pWindow, GDHandle * phgdOnThisDevice)
-{
-    GrafPtr pgpSave;
-    Rect rectWind, rectSect;
-    long greatestArea, sectArea;
-    short numDevices = 0;
-    GDHandle hgdNthDevice;
-
-    if (!pWindow || !phgdOnThisDevice)
-        return 0;
-
-    *phgdOnThisDevice = NULL;
-
-    GetPort (&pgpSave);
-    SetPortWindowPort (pWindow);
-
-
-    GetWindowPortBounds (pWindow, &rectWind);
-    LocalToGlobal ((Point*)& rectWind.top);    // convert to global coordinates
-    LocalToGlobal ((Point*)& rectWind.bottom);
-    hgdNthDevice = GetDeviceList ();
-    greatestArea = 0;
-    // check window against all gdRects in gDevice list and remember
-    //  which gdRect contains largest area of window}
-    while (hgdNthDevice)
-    {
-        if (TestDeviceAttribute (hgdNthDevice, screenDevice))
-            if (TestDeviceAttribute (hgdNthDevice, screenActive))
-            {
-                // The SectRect routine calculates the intersection
-                //  of the window rectangle and this gDevice
-                //  rectangle and returns TRUE if the rectangles intersect,
-                //  FALSE if they don't.
-                SectRect (&rectWind, &(**hgdNthDevice).gdRect, &rectSect);
-                // determine which screen holds greatest window area
-                //  first, calculate area of rectangle on current device
-                sectArea = (long) (rectSect.right - rectSect.left) * (rectSect.bottom - rectSect.top);
-                if (sectArea > 0)
-                    numDevices++;
-                if (sectArea > greatestArea)
-                {
-                    greatestArea = sectArea; // set greatest area so far
-                    *phgdOnThisDevice = hgdNthDevice; // set zoom device
-                }
-                hgdNthDevice = GetNextDevice(hgdNthDevice);
-            }
-    }
-
-    SetPort (pgpSave);
-    return numDevices;
-}
-
-//--------------------------------------------------------------------------------------------
-// private
-
-// returns the largest power of 2 texture <= textureDimension
-// or in the case of texture rectangle returns the next texture size (can be non-power of two)
+unsigned int* g_pImg = 0;
+int g_sizex=0, g_sizey=0;
+static video *g_video = 0;
+static int g_fps = 0;
+char *window_title=NULL;
+#define WINDOW_TITLE_SIZE 256
+int cocoa_update=0;
 
-static long GetNextTextureSize (long textureDimension, long maxTextureSize, Boolean textureRectangle)
-{
-    long targetTextureSize = maxTextureSize; // start at max texture size
-    if (textureRectangle)
-    {
-        if (textureDimension >= targetTextureSize) // the texture dimension is greater than the target texture size (i.e., it fits)
-            return targetTextureSize; // return corresponding texture size
-        else
-            return textureDimension; // jusr return the dimension
-    }
-    else
-    {
-        do // while we have txture sizes check for texture value being equal or greater
-        {
-            if (textureDimension >= targetTextureSize) // the texture dimension is greater than the target texture size (i.e., it fits)
-                return targetTextureSize; // return corresponding texture size
-        }
-        while (targetTextureSize >>= 1); // step down to next texture size smaller
-    }
-    return 0; // no textures fit so return zero
-}
-
-// ---------------------------------
-
-// returns the nuber of textures need to represent a size of textureDimension given
-// requirement for power of 2 textures as the maximum texture size
-// for the overlap case each texture effectively covers two less pixels so must iterate through using whole statement
-
-static long GetTextureNumFromTextureDim (long textureDimension, long maxTextureSize, Boolean texturesOverlap, Boolean textureRectangle)
-{
-    // start at max texture size
-    // loop through each texture size, removing textures in turn which are less than the remaining texture dimension
-    // each texture has 2 pixels of overlap (one on each side) thus effective texture removed is 2 less than texture size
-
-    long i = 0; // initially no textures
-    long bitValue = maxTextureSize; // start at max texture size
-    long texOverlapx2 = texturesOverlap ? 2 : 0;
-    textureDimension -= texOverlapx2; // ignore texture border since we are using effective texure size (by subtracting 2 from the initial size)
-    if (textureRectangle)
-    {
-        // count number of full textures
-        while (textureDimension > (bitValue - texOverlapx2)) // while our texture dimension is greater than effective texture size (i.e., minus the border)
-        {
-            i++; // count a texture
-            textureDimension -= bitValue - texOverlapx2; // remove effective texture size
-        }
-        // add one partial texture
-        i++;
-    }
-    else
-    {
-        do
-        {
-            while (textureDimension >= (bitValue - texOverlapx2)) // while our texture dimension is greater than effective texture size (i.e., minus the border)
-            {
-                i++; // count a texture
-                textureDimension -= bitValue - texOverlapx2; // remove effective texture size
-            }
-        }
-        while ((bitValue >>= 1) > texOverlapx2); // step down to next texture while we are greater than two (less than 4 can't be used due to 2 pixel overlap)
-    if (textureDimension > 0x0) // if any textureDimension is left there is an error, because we can't texture these small segments and in anycase should not have image pixels left
-        ReportErrorNum ("GetTextureNumFromTextureDim error: Texture to small to draw, should not ever get here, texture size remaining:", textureDimension);
-    }
-    return i; // return textures counted
-}
-
-#pragma mark -
-// ==================================
-// public
-
-// disposes OpenGL context, and associated texture list
-
-OSStatus DisposeGLForWindow (WindowRef window)
-{
-    if (window)
-    {
-        pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // get gl data stored in refcon
-        SetWRefCon (window, 0); // ensure the refcon is not used again
-        if (NULL == pWindowInfo) // if this is non-existant
-            return paramErr; // then drop out
-        if (NULL != pWindowInfo->aglContext)
-        {
-            aglSetCurrentContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
-            aglUpdateContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
-            glFinish (); // ensure all gl commands are complete
-            glDeleteTextures (pWindowInfo->textureX * pWindowInfo->textureY, pWindowInfo->pTextureName); // delete the complete set of textures used for the window
-            DestroyGLFromWindow (&pWindowInfo->aglContext, &pWindowInfo->glInfo); // preoperly destroy GL context and any associated structures
-            pWindowInfo->aglContext = NULL; // ensure we don't use invlad context
-        }
-        if (NULL != pWindowInfo->pTextureName)
-        {
-            DisposePtr ((Ptr) pWindowInfo->pTextureName); // dispose of the allocate4d texture name storage
-            pWindowInfo->pTextureName = NULL; // ensure we do not use it again
-        }
-        if (pWindowInfo->pImageBuffer) // MUST preserve the buffer if texturing from client memory
-        {
-            //DisposePtr ((Ptr) pWindowInfo->pImageBuffer); // or image buffer
-            pWindowInfo->pImageBuffer = NULL;
-        }
-        DisposePtr ((Ptr) pWindowInfo);
-        return noErr; // we are good to go
-    }
-    else
-        return paramErr; // NULL window ref passed in
-}
-
-// ---------------------------------
-
-// builds the GL context and associated state for the window
-// loads image into a texture or textures
-// disposes of GWorld and image buffer when finished loading textures
-
-OSStatus BuildGLForWindow (WindowRef window)
-{
-    GrafPtr portSave = NULL; // port which is set on entrance to this routine
-    pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // the info structure for the window stored in the refcon
-    short i; // iterator
-    GLenum textureTarget = GL_TEXTURE_2D;
-
-    if (!pWindowInfo->aglContext) // if we get here and do not have a context built, build one
-    {
-        GetPort (&portSave);    // save current port
-        SetPort ((GrafPtr) GetWindowPort (window)); // set port to the current window
-        // set parameters for Carbon SetupGL
-        pWindowInfo->glInfo.fAcceleratedMust = false; // must renderer be accelerated?
-        pWindowInfo->glInfo.VRAM = 0 * 1048576; // minimum VRAM (if not zero this is always required)
-        pWindowInfo->glInfo.textureRAM = 0 * 1048576; // minimum texture RAM (if not zero this is always required)
-           pWindowInfo->glInfo.fDraggable = true; // is this a draggable window
-        pWindowInfo->glInfo.fmt = 0; // output pixel format
-
-        i = 0; // first attribute in array
-        pWindowInfo->glInfo.aglAttributes [i++] = AGL_RGBA; // RGB + Alpha pixels
-        pWindowInfo->glInfo.aglAttributes [i++] = AGL_DOUBLEBUFFER; // doble buffered context
-        pWindowInfo->glInfo.aglAttributes [i++] = AGL_ACCELERATED; // require hardware acceleration
-        pWindowInfo->glInfo.aglAttributes [i++] = AGL_NO_RECOVERY; // 10.0.4 has problems with the GL (disregards UNPACK_ROW_LENGTH) resulting from using no recovery
-                                                                   // normally we would use no recovery to ensure the minimum pixel size textures are stored by GL.
-        pWindowInfo->glInfo.aglAttributes [i++] = AGL_NONE; // end parameter list
-        BuildGLonWindow (window, &(pWindowInfo->aglContext), &(pWindowInfo->glInfo), NULL); // build opengl context for our window
-        if (!pWindowInfo->aglContext) // if could not create context
-            DestroyGLFromWindow (&pWindowInfo->aglContext, &pWindowInfo->glInfo); // ensure context is destroyed correctly
-        else // we have a valid context
-        {
-            GLint swap = 0; // swap interval (i.e., VBL sync) setting 1 = sync, 0 = no sync
-            Rect rectPort; // window port rectangle
-            long width = pWindowInfo->imageWidth, height = pWindowInfo->imageHeight; // image width and height
-            GDHandle device; // GDevice to find the constrain the window to
-            Rect deviceRect, availRect, rect; // rect of device which window is on (mostly, area wise at least). avialable area for window (minus dock and menu if req), working rect
-
-            GetWindowGreatestAreaDevice (window, kWindowContentRgn, &device, &deviceRect); // find device the window is mostly on
-            GetAvailableWindowPositioningBounds (device, &availRect); //  get the geretest available area for te windoew (mminus doc and menu if applicable)
-            if (width > (availRect.right - availRect.left)) // adjust window width if it is greater than available area (orginally set to image width, see above)
-                width = (availRect.right - availRect.left);
-            if (height > (availRect.bottom - availRect.top)) // adjust window height if it is greater than available area (orginally set to image width, see above)
-                height = (availRect.bottom - availRect.top);
-            SizeWindow (window, (short) width, (short) height, true); // size the window to new width and height
-            ConstrainWindowToScreen(window, kWindowStructureRgn, kWindowConstrainMayResize, NULL, &rect); // ensure window structure region is on the screen
-            GetWindowPortBounds (window, &rectPort); // get port rect for viewport reset
-
-            aglSetCurrentContext (pWindowInfo->aglContext); // set our GL context to this one
-            aglUpdateContext (pWindowInfo->aglContext); // update the context to account for the resize
-            InvalWindowRect (window, &rectPort); // inval the entire window to ensure we get a redraw
-            glViewport (0, 0, rectPort.right - rectPort.left, rectPort.bottom - rectPort.top); // reset viewport to entier window area
-
-            aglSetInteger (pWindowInfo->aglContext, AGL_SWAP_INTERVAL, &swap); // set swap interval to account for vbl syncing or not
-
-            // set correct texture target // if building on 10.0 or 9 this will be undefined
-        #ifdef GL_TEXTURE_RECTANGLE_EXT
-            if (pWindowInfo->fNPOTTextures)
-                textureTarget = GL_TEXTURE_RECTANGLE_EXT;
-        #endif
-
-            // Set texture mapping parameters
-            glEnable (textureTarget); // enable texturing
-
-            glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // set clear color buffer to dark gray
-            glClear (GL_COLOR_BUFFER_BIT); // clear just to color buffer
-            aglSwapBuffers (pWindowInfo->aglContext); // swap the cleared buffer to front
-
-            //GetFNum ("\pMonaco", &fNum); // get font number for named font
-            //pWindowInfo->fontList = BuildFontGL (pWindowInfo->aglContext, fNum, normal, 9); // build display list for fonts for this context (see aglString for more info)
-
-            // if we can use texture rectangle // if building on 10.0 or 9 this will be undefined
-        #ifdef GL_TEXTURE_RECTANGLE_EXT
-            if (pWindowInfo->fNPOTTextures)
-                glEnable(GL_TEXTURE_RECTANGLE_EXT);
-        #endif
-            if (pWindowInfo->fAGPTexturing)
-                glTextureRangeAPPLE(textureTarget, pWindowInfo->textureHeight * pWindowInfo->textureWidth * (pWindowInfo->imageDepth >> 3), pWindowInfo->pImageBuffer);
-            glPixelStorei (GL_UNPACK_ROW_LENGTH, pWindowInfo->textureWidth); // set image width in groups (pixels), accounts for border this ensures proper image alignment row to row
-            // get number of textures x and y
-                // extract the number of horiz. textures needed to tile image
-            pWindowInfo->textureX = GetTextureNumFromTextureDim (pWindowInfo->textureWidth, pWindowInfo->maxTextureSize, pWindowInfo->fOverlapTextures, pWindowInfo->fNPOTTextures);
-                // extract the number of horiz. textures needed to tile image
-            pWindowInfo->textureY = GetTextureNumFromTextureDim (pWindowInfo->textureHeight, pWindowInfo->maxTextureSize, pWindowInfo->fOverlapTextures, pWindowInfo->fNPOTTextures);
-            pWindowInfo->pTextureName = (GLuint *) NewPtrClear ((long) sizeof (GLuint) * pWindowInfo->textureX * pWindowInfo->textureY); // allocate storage for texture name lists
-            glGenTextures (pWindowInfo->textureX * pWindowInfo->textureY, pWindowInfo->pTextureName); // generate textures names need to support tiling
-            {
-                long x, y, k = 0, offsetY, offsetX = 0, currWidth, currHeight; // texture iterators, texture name iterator, image offsets for tiling, current texture width and height
-                for (x = 0; x < pWindowInfo->textureX; x++) // for all horizontal textures
-                {
-                    currWidth = GetNextTextureSize (pWindowInfo->textureWidth - offsetX, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures); // use remaining to determine next texture size
-                                                                                                                    // (basically greatest power of 2 which fits into remaining space)
-                    offsetY = 0; // reset vertical offest for every column
-                    for (y = 0; y < pWindowInfo->textureY; y++) // for all vertical textures
-                    {
-                        // buffer pointer is at base + rows * row size + columns
-                        unsigned char * pBuffer = pWindowInfo->pImageBuffer +
-                                                   offsetY * pWindowInfo->textureWidth * (pWindowInfo->imageDepth >> 3) +
-                                                   offsetX * (pWindowInfo->imageDepth >> 3);
-                        currHeight = GetNextTextureSize (pWindowInfo->textureHeight - offsetY, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures); // use remaining to determine next texture size
-                        glBindTexture (textureTarget, pWindowInfo->pTextureName[k++]);
-                        if (pWindowInfo->fAGPTexturing) {
-                            glTexParameterf (textureTarget, GL_TEXTURE_PRIORITY, 0.0f); // AGP texturing
-                            glTexParameteri (textureTarget, GL_TEXTURE_STORAGE_HINT_APPLE, GL_STORAGE_SHARED_APPLE);
-                        }
-                        else
-                            glTexParameterf (textureTarget, GL_TEXTURE_PRIORITY, 1.0f);
-
-                    #ifdef GL_UNPACK_CLIENT_STORAGE_APPLE
-                        if (pWindowInfo->fClientTextures)
-                            glPixelStorei (GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
-                        else
-                            glPixelStorei (GL_UNPACK_CLIENT_STORAGE_APPLE, 0);
-                    #endif
-
-                        glTexParameteri (textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-                        glTexParameteri (textureTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-                        glTexParameteri (textureTarget, GL_TEXTURE_WRAP_S, gpOpenGLCaps->edgeClampParam);
-                        glTexParameteri (textureTarget, GL_TEXTURE_WRAP_T, gpOpenGLCaps->edgeClampParam);
-                        glReportError (); // report any errors so far
-                        glTexImage2D (textureTarget, 0, GL_RGBA, currWidth, currHeight, 0,
-                                      GL_BGRA_EXT, pWindowInfo->imageDepth == 32 ? GL_UNSIGNED_INT_8_8_8_8_REV : GL_UNSIGNED_SHORT_1_5_5_5_REV,
-                                      pBuffer); // texture with current width and height at pBuffer location in image buffer with image size as GL_UNPACK_ROW_LENGTH
-                        glReportError (); // report any errors
-                        offsetY += currHeight - 2 * pWindowInfo->fOverlapTextures; // offset in for the amount of texture used,
-                                                                                       //  since we are overlapping the effective texture used is 2 texels less than texture width
-                    }
-                    offsetX += currWidth - 2 * pWindowInfo->fOverlapTextures; // offset in for the amount of texture used,
-                                                                              //  since we are overlapping the effective texture used is 2 texels less than texture width
-                }
-            }
-            if (false == pWindowInfo->fClientTextures) // MUST preserve the buffer if texturing from client memory
-            {
-                DisposePtr ((Ptr) pWindowInfo->pImageBuffer); // or image buffer
-                pWindowInfo->pImageBuffer = NULL;
-            }
-        }
-        SetPort (portSave); //reset port
-    }
-    return noErr; // we done
-}
-
-// ---------------------------------
-
-// Handle updating context for window moves and resizing
-
-OSStatus ResizeMoveGLWindow (WindowRef window)
-{
-    OSStatus err = noErr; // no errors to start
-    Rect rectPort; // new port rect
-    pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // get GL info;
-    if (window && pWindowInfo) // if we have a window
-    {
-        GetWindowPortBounds (window, &rectPort);
-        pWindowInfo->zoomX = (float) (rectPort.right - rectPort.left) / (float) pWindowInfo->imageWidth;
-        pWindowInfo->zoomY = (float) (rectPort.bottom - rectPort.top) / (float) pWindowInfo->imageHeight;
-
-        if (!aglUpdateContext (pWindowInfo->aglContext)) // update the context to ensure gl knows about the move or resize
-               aglReportError (); // report any error with update context
-        if (noErr != err)
-            ReportErrorNum ("ResizeMoveGLWindow error with InvalWindowRect on window: ", err);  // should not get erro here, but who knows
-        err = InvalWindowRect (window, &rectPort);
-    }
-    else
-        err = paramErr; // bad window
-    return err; // return any error
-}
-
-// ---------------------------------
-
-// main GL drawing routine, should be valid window passed in (will setupGL if require).  Draw image
-
-void DrawGL (WindowRef window)
-{
-    Rect rectPort; // rectangle for port
-    pRecImage pWindowInfo; // the gl info for the target window
-    long width, height; // width and height or the port and the row of the raster position
-    long effectiveTextureMod = 0; // texture size modification (inset) to account for borders
-    long x, y, k = 0, offsetY, offsetX = 0, currTextureWidth, currTextureHeight;
-    GLenum textureTarget = GL_TEXTURE_2D;
-
-    if (NULL == window) // if we do not have a window
-        return; // drop out
-    pWindowInfo = (pRecImage) GetWRefCon (window); // get the gl info for the window
-    if (NULL == pWindowInfo) // if this is non-existant
-        return; // then drop out
-    if (NULL == pWindowInfo->aglContext) // try to buld the context if we don't have one (safety check)
-        BuildGLForWindow (window);
-    if (NULL == pWindowInfo->aglContext) // if we still don't have one then drop out
-        return;
-
-    if (pWindowInfo->fOverlapTextures)
-        effectiveTextureMod = 2; // if we overlap then we need to inset the textures passed to the drawing code
-    // set texture target
-#ifdef GL_TEXTURE_RECTANGLE_EXT
-    if (pWindowInfo->fNPOTTextures)
-        textureTarget = GL_TEXTURE_RECTANGLE_EXT;
-#endif
-
-    aglSetCurrentContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
-    aglUpdateContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
-
-    GetWindowPortBounds (window, &rectPort); // get the current port (window) bounds
-    width = rectPort.right - rectPort.left; // find width
-    height = rectPort.bottom - rectPort.top; // and height
-    glViewport (0, 0, width, height); // set the viewport to cover entire window
-
-    glMatrixMode (GL_PROJECTION); // set projection matrix
-    glLoadIdentity (); // to indetity
-    glMatrixMode (GL_MODELVIEW); // set modelview matrix
-    glLoadIdentity (); // to identity
-    glReportError (); // report any GL errors so far
-
-    // set the model view matrix for an orthographic view scaled to one screen pixel equal image pixel (independent of image zoom)
-    glScalef (2.0f / width, -2.0f /  height, 1.0f); // scale to port per pixel scale
-    //glTranslatef (pWindowInfo->centerX, pWindowInfo->centerY, 0.0f); // translate for image movement
-    //glRotatef (0.0f, 0.0f, 0.0f, 1.0f); // ratate matrix for image rotation
-    glReportError (); // report any GL errors
-
-    glClear (GL_COLOR_BUFFER_BIT); // clear the color buffer before drawing
-
-    // draw image
-    glEnable (textureTarget); // enable texturing
-    glColor3f (1.0f, 1.0f, 1.0f); // white polygons
-    // offset x and y are used to draw the polygon and need to represent the texture effective edges (without borders)
-    // so walk the texture size images adjusting for each border
-    for (x = 0; x < pWindowInfo->textureX; x++) // for all horizontal textures
-    {
-        // use remaining to determine next texture size
-        currTextureWidth = GetNextTextureSize (pWindowInfo->textureWidth - offsetX, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures) - effectiveTextureMod; // current effective texture width for drawing
-        offsetY = 0; // start at top
-        for (y = 0; y < pWindowInfo->textureY; y++) // for a complete column
-        {
-            // use remaining to determine next texture size
-            currTextureHeight = GetNextTextureSize (pWindowInfo->textureHeight - offsetY, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures) - effectiveTextureMod; // effective texture height for drawing
-            glBindTexture(textureTarget, pWindowInfo->pTextureName[k++]); // work through textures in same order as stored, setting each texture name as current in turn
-            if (!pWindowInfo->fAGPTexturing)
-                glTexSubImage2D(textureTarget, 0, 0, 0, currTextureWidth, currTextureHeight, GL_BGRA, pWindowInfo->imageDepth == 32 ? GL_UNSIGNED_INT_8_8_8_8_REV : GL_UNSIGNED_SHORT_1_5_5_5_REV, pWindowInfo->pImageBuffer);
-            glReportError (); // report any errors
-            {
-                float endX = pWindowInfo->fTileTextures ? currTextureWidth + offsetX : pWindowInfo->imageWidth;
-                float endY = pWindowInfo->fTileTextures ? currTextureHeight + offsetY : pWindowInfo->imageHeight;
-                float startXDraw = (offsetX - pWindowInfo->imageWidth * 0.5f) * pWindowInfo->zoomX; // left edge of poly: offset is in image local coordinates convert to world coordinates
-                float endXDraw = (endX - pWindowInfo->imageWidth * 0.5f) * pWindowInfo->zoomX; // right edge of poly: offset is in image local coordinates convert to world coordinates
-                float startYDraw = (offsetY - pWindowInfo->imageHeight * 0.5f) * pWindowInfo->zoomY; // top edge of poly: offset is in image local coordinates convert to world coordinates
-                float endYDraw = (endY - pWindowInfo->imageHeight * 0.5f) * pWindowInfo->zoomY; // bottom edge of poly: offset is in image local coordinates convert to world coordinates
-                float texOverlap =  pWindowInfo->fOverlapTextures ? 1.0f : 0.0f; // size of texture overlap, switch based on whether we are using overlap or not
-                float startXTexCoord = texOverlap / (currTextureWidth + 2.0f * texOverlap); // texture right edge coordinate (stepped in one pixel for border if required)
-                float endXTexCoord = 1.0f - startXTexCoord; // texture left edge coordinate (stepped in one pixel for border if required)
-                float startYTexCoord = texOverlap / (currTextureHeight + 2.0f * texOverlap); // texture top edge coordinate (stepped in one pixel for border if required)
-                float endYTexCoord = 1.0f - startYTexCoord; // texture bottom edge coordinate (stepped in one pixel for border if required)
-                if (pWindowInfo->fNPOTTextures)
-                {
-                    startXTexCoord = texOverlap; // texture right edge coordinate (stepped in one pixel for border if required)
-                    endXTexCoord = currTextureWidth + texOverlap; // texture left edge coordinate (stepped in one pixel for border if required)
-                    startYTexCoord = texOverlap; // texture top edge coordinate (stepped in one pixel for border if required)
-                    endYTexCoord = currTextureHeight + texOverlap; // texture bottom edge coordinate (stepped in one pixel for border if required)
-                }
-                if (endX > (pWindowInfo->imageWidth + 0.5)) // handle odd image sizes, (+0.5 is to ensure there is no fp resolution problem in comparing two fp numbers)
-                {
-                    endXDraw = (pWindowInfo->imageWidth * 0.5f) * pWindowInfo->zoomX; // end should never be past end of image, so set it there
-                    if (pWindowInfo->fNPOTTextures)
-                        endXTexCoord -= 1.0f;
-                    else
-                        endXTexCoord = 1.0f -  2.0f * startXTexCoord; // for the last texture in odd size images there are two texels of padding so step in 2
-                }
-                if (endY > (pWindowInfo->imageHeight + 0.5f)) // handle odd image sizes, (+0.5 is to ensure there is no fp resolution problem in comparing two fp numbers)
-                {
-                    endYDraw = (pWindowInfo->imageHeight * 0.5f) * pWindowInfo->zoomY; // end should never be past end of image, so set it there
-                    if (pWindowInfo->fNPOTTextures)
-                        endYTexCoord -= 1.0f;
-                    else
-                        endYTexCoord = 1.0f -  2.0f * startYTexCoord; // for the last texture in odd size images there are two texels of padding so step in 2
-                }
-
-                glBegin (GL_TRIANGLE_STRIP); // draw either tri strips of line strips
-                    glTexCoord2f (startXTexCoord, startYTexCoord); // draw upper left in world coordinates
-                    glVertex3d (startXDraw, startYDraw, 0.0);
-
-                    glTexCoord2f (endXTexCoord, startYTexCoord); // draw lower left in world coordinates
-                    glVertex3d (endXDraw, startYDraw, 0.0);
-
-                    glTexCoord2f (startXTexCoord, endYTexCoord); // draw upper right in world coordinates
-                    glVertex3d (startXDraw, endYDraw, 0.0);
-
-                    glTexCoord2f (endXTexCoord, endYTexCoord); // draw lower right in world coordinates
-                    glVertex3d (endXDraw, endYDraw, 0.0);
-                glEnd();
-
-            }
-
-            //////////////////////
-
-            glReportError (); // report any errors
-            offsetY += currTextureHeight; // offset drawing position for next texture vertically
-        }
-        offsetX += currTextureWidth; // offset drawing position for next texture horizontally
-    }
-    glReportError (); // report any errors
-
-    glDisable (textureTarget); // done with texturing
-
-    aglSwapBuffers (pWindowInfo->aglContext);
-}
-
-// finds the minimum OpenGL capabilites across all displays and GPUs attached to machine.
-
-static void FindMinimumOpenGLCapabilities (pRecGLCap pOpenGLCaps)
-{
-    WindowPtr pWin = NULL;
-    Rect rectWin = {0, 0, 10, 10};
-    GLint attrib[] = { AGL_RGBA, AGL_NONE };
-    AGLPixelFormat fmt = NULL;
-    AGLContext ctx = NULL;
-    GLint deviceMaxTextureSize = 0, NPOTDMaxTextureSize = 0;
-
-    if (NULL != gpOpenGLCaps)
-    {
-        // init desired caps to max values
-        pOpenGLCaps->f_ext_texture_rectangle = true;
-        pOpenGLCaps->f_ext_client_storage = true;
-        pOpenGLCaps->f_ext_packed_pixel = true;
-        pOpenGLCaps->f_ext_texture_edge_clamp = true;
-        pOpenGLCaps->f_gl_texture_edge_clamp = true;
-        pOpenGLCaps->maxTextureSize = 0x7FFFFFFF;
-        pOpenGLCaps->maxNOPTDTextureSize = 0x7FFFFFFF;
-
-        // build window
-        pWin = NewCWindow (0L, &rectWin, NULL, false,
-                plainDBox, (WindowPtr) -1L, true, 0L);
-
-        // build context
-        fmt = aglChoosePixelFormat(NULL, 0, attrib);
-        if (fmt)
-            ctx = aglCreateContext(fmt, NULL);
-        if (ctx)
-        {
-            GDHandle hgdNthDevice;
-
-            aglSetDrawable(ctx, GetWindowPort (pWin));
-            aglSetCurrentContext(ctx);
-
-            // for each display
-            hgdNthDevice = GetDeviceList ();
-            while (hgdNthDevice)
-            {
-                if (TestDeviceAttribute (hgdNthDevice, screenDevice))
-                    if (TestDeviceAttribute (hgdNthDevice, screenActive))
-                    {
-                        // move window to display
-                        MoveWindow (pWin, (**hgdNthDevice).gdRect.left + 5, (**hgdNthDevice).gdRect.top + 5, false);
-                        aglUpdateContext(ctx);
-
-                        // for each cap (this can obviously be expanded)
-                        // if this driver/GPU/display is less capable
-                            // save this minimum capability
-                        {
-                            // get strings
-                            enum { kShortVersionLength = 32 };
-                            const GLubyte * strVersion = glGetString (GL_VERSION); // get version string
-                            const GLubyte * strExtension = glGetString (GL_EXTENSIONS);    // get extension string
-
-                            // get just the non-vendor specific part of version string
-                            GLubyte strShortVersion [kShortVersionLength];
-                            short i = 0;
-                            while ((((strVersion[i] <= '9') && (strVersion[i] >= '0')) || (strVersion[i] == '.')) && (i < kShortVersionLength)) // get only basic version info (until first space)
-                                strShortVersion [i] = strVersion[i++];
-                            strShortVersion [i] = 0; //truncate string
-
-                            // compare capabilities based on extension string and GL version
-                            pOpenGLCaps->f_ext_texture_rectangle =
-                                pOpenGLCaps->f_ext_texture_rectangle && (NULL != strstr ((const char *) strExtension, "GL_EXT_texture_rectangle"));
-                            pOpenGLCaps->f_ext_client_storage =
-                                pOpenGLCaps->f_ext_client_storage && (NULL != strstr ((const char *) strExtension, "GL_APPLE_client_storage"));
-                            pOpenGLCaps->f_ext_packed_pixel =
-                                pOpenGLCaps->f_ext_packed_pixel && (NULL != strstr ((const char *) strExtension, "GL_APPLE_packed_pixel"));
-                            pOpenGLCaps->f_ext_texture_edge_clamp =
-                                pOpenGLCaps->f_ext_texture_edge_clamp && (NULL != strstr ((const char *) strExtension, "GL_SGIS_texture_edge_clamp"));
-                            pOpenGLCaps->f_gl_texture_edge_clamp =
-                                pOpenGLCaps->f_gl_texture_edge_clamp && (!strstr ((const char *) strShortVersion, "1.0") && !strstr ((const char *) strShortVersion, "1.1")); // if not 1.0 and not 1.1 must be 1.2 or greater
-
-                            // get device max texture size
-                            glGetIntegerv (GL_MAX_TEXTURE_SIZE, &deviceMaxTextureSize);
-                            if (deviceMaxTextureSize < pOpenGLCaps->maxTextureSize)
-                                pOpenGLCaps->maxTextureSize = deviceMaxTextureSize;
-                            // get max size of non-power of two texture on devices which support
-                            if (NULL != strstr ((const char *) strExtension, "GL_EXT_texture_rectangle"))
-                            {
-                            #ifdef GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT
-                                glGetIntegerv (GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT, &NPOTDMaxTextureSize);
-                                if (NPOTDMaxTextureSize < pOpenGLCaps->maxNOPTDTextureSize)
-                                    pOpenGLCaps->maxNOPTDTextureSize = NPOTDMaxTextureSize;
-                            #endif
-                            }
-                        }
-                        // next display
-                        hgdNthDevice = GetNextDevice(hgdNthDevice);
-                    }
-            }
-            aglDestroyContext( ctx );
-        }
-        else
-        { // could not build context set caps to min
-            pOpenGLCaps->f_ext_texture_rectangle = false;
-            pOpenGLCaps->f_ext_client_storage = false;
-            pOpenGLCaps->f_ext_packed_pixel = false;
-            pOpenGLCaps->f_ext_texture_edge_clamp = false;
-            pOpenGLCaps->f_gl_texture_edge_clamp = false;
-            pOpenGLCaps->maxTextureSize = 0;
-        }
-
-        // set clamp param based on retrieved capabilities
-        if (pOpenGLCaps->f_gl_texture_edge_clamp) // if OpenGL 1.2 or later and texture edge clamp is supported natively
-                    pOpenGLCaps->edgeClampParam = GL_CLAMP_TO_EDGE;  // use 1.2+ constant to clamp texture coords so as to not sample the border color
-        else if (pOpenGLCaps->f_ext_texture_edge_clamp) // if GL_SGIS_texture_edge_clamp extension supported
-            pOpenGLCaps->edgeClampParam = GL_CLAMP_TO_EDGE_SGIS; // use extension to clamp texture coords so as to not sample the border color
-        else
-            pOpenGLCaps->edgeClampParam = GL_CLAMP; // clamp texture coords to [0, 1]
-
-        aglDestroyPixelFormat( fmt );
-        DisposeWindow( pWin );
-    }
-}
-
-//--------------------------------------------------------------------------------------------
-
-static OSStatus
-WindowEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon )
-{
-    OSStatus    err = eventNotHandledErr;
-    WindowRef    window = (WindowRef) inRefcon;
-
-    if( GetEventClass(inEvent) == kEventClassMouse )
-    {
-        Point mousePoint; // UInt32 modifiers;
-        verify_noerr( GetEventParameter(inEvent, kEventParamMouseLocation, typeQDPoint, NULL, sizeof(Point), NULL, &mousePoint) );
-        pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // get the gl info for the window
-        if(pWindowInfo) {
-            SetPortWindowPort(window);
-            GlobalToLocal (&mousePoint); //convert mouse coordinates to local coordintes prior to recording
-            mousePoint.h /= pWindowInfo->zoomX; mousePoint.v /= pWindowInfo->zoomY;
-            if(mousePoint.h >= 0 && mousePoint.h < pWindowInfo->imageWidth && mousePoint.v >= 0 && mousePoint.v < pWindowInfo->imageHeight)
-                g_video->on_mouse(mousePoint.h, mousePoint.v, GetEventKind(inEvent) == kEventMouseUp?-1:1), err = noErr;
-        }
-    }
-    else if( GetEventClass(inEvent) == kEventClassKeyboard )
-    {
-        char ch;
-        verify_noerr( GetEventParameter( inEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof( ch ), NULL, &ch ) );
-        if(g_video)
-            g_video->on_key(ch);
-    }
-    else //if( GetEventClass(inEvent) == kEventClassWindow )
-    {
-        if (GetEventKind(inEvent) == kEventWindowDrawContent)
-        {
-            //DrawGL(window);
-            err = noErr;
-        }
-        else if (GetEventKind(inEvent) == kEventWindowClose)
-        {
-            if (window)
-            {
-                g_video->running = false;
-            }
-            err = noErr;
-        }
-        else if (GetEventKind(inEvent) == kEventWindowShowing)
-        {
-            err = BuildGLForWindow (window);
-        }
-        else if ((GetEventKind(inEvent) == kEventWindowResizeCompleted) || (GetEventKind(inEvent) == kEventWindowDragCompleted))
-        {
-            err = ResizeMoveGLWindow (window);
-        }
-        else if (GetEventKind(inEvent) == kEventWindowZoomed)
-        {
-            err = ResizeMoveGLWindow (window);
-        }
-    }
-
-    return err;
-}
-//--------------------------------------------------------------------------------------------
-DEFINE_ONE_SHOT_HANDLER_GETTER( WindowEventHandler )
-
-//--------------------------------------------------------------------------------------------
-WindowRef HandleNew()
-{
-    OSStatus  err;
-    WindowRef window;
-    pRecImage pWindowInfo = NULL;
-    static const EventTypeSpec    kWindowEvents[] =
-    {
-       { kEventClassMouse, kEventMouseUp },
-       { kEventClassMouse, kEventMouseDown },
-       { kEventClassKeyboard, kEventRawKeyDown },
-//       { kEventClassCommand, kEventCommandProcess },
-       { kEventClassWindow, kEventWindowShowing },
-       { kEventClassWindow, kEventWindowClose },
-       { kEventClassWindow, kEventWindowDrawContent },
-       { kEventClassWindow, kEventWindowResizeCompleted },
-       { kEventClassWindow, kEventWindowDragCompleted },
-       { kEventClassWindow, kEventWindowZoomed}
-    };
-    if (!gpOpenGLCaps)
-    {
-        gpOpenGLCaps = (pRecGLCap) NewPtrClear (sizeof (recGLCap));
-        FindMinimumOpenGLCapabilities (gpOpenGLCaps);
-    }
-
-    // Create a window. "MainWindow" is the name of the window object. This name is set in
-    // InterfaceBuilder when the nib is created.
-    err = CreateWindowFromNib( sNibRef, CFSTR("MainWindow"), &window );
-    require_noerr( err, CantCreateWindow );
-    // We don't need the nib reference anymore.
-    DisposeNibReference(sNibRef);
-
-    pWindowInfo = (recImage *) NewPtrClear (sizeof (recImage));
-    pWindowInfo->textureWidth = pWindowInfo->imageWidth = g_sizex;
-    pWindowInfo->textureHeight = pWindowInfo->imageHeight = g_sizey;
-    pWindowInfo->imageDepth = 32;
-    pWindowInfo->fTileTextures = true;
-    pWindowInfo->fOverlapTextures = false; // TODO: ???
-    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 = 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
-    pWindowInfo->zoomY = 1.0f; // pixel 1 to 1 size
-    SetWRefCon (window, (long) pWindowInfo);
-    char buffer[256]; buffer[0] = snprintf(buffer+1, 255, "%s", g_video->title);
-    SetWTitle (window, (ConstStr255Param)buffer);
-    // Install a command handler on the window. We don't use this handler yet, but nearly all
-    // Carbon apps will need to handle commands, so this saves everyone a little typing.
-    InstallStandardEventHandler(GetWindowEventTarget(window));
-    InstallWindowEventHandler( window, GetWindowEventHandlerUPP(),
-                               GetEventTypeCount( kWindowEvents ), kWindowEvents, window, NULL );
-    if (noErr != BuildGLForWindow (window))
-    {
-        DisposeGLForWindow (window);
-        DisposeWindow (window);
-        return 0;
-    }
-
-    // Position new windows in a staggered arrangement on the main screen
-    RepositionWindow( window, NULL, kWindowCascadeOnMainScreen );
-
-    // The window was created hidden, so show it
-    ShowWindow( window );
-    return window;
-
-CantCreateWindow:
-    return 0;
-}
-
-
-//--------------------------------------------------------------------------------------------
-static OSStatus
-AppEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon )
-{
-    OSStatus    result = eventNotHandledErr;
-
-    return result;
-}
-
-//=======================================================================================================
+#include <sched.h>
+#include <sys/time.h>
+struct timeval g_time;
 
 video::video()
     : red_mask(0xff0000), red_shift(16), green_mask(0xff00),
       green_shift(8), blue_mask(0xff), blue_shift(0), depth(24)
 {
     assert(g_video == 0);
-    g_video = this; title = "Video"; updating = true; calc_fps = false;
+    g_video = this; title = "Video"; cocoa_update=1; updating = true; calc_fps = false;
 }
 
 bool video::init_window(int x, int y)
 {
-    g_sizex = x; g_sizey = y; g_window = 0;
+    g_sizex = x; g_sizey = y;
     g_pImg = new unsigned int[x*y];
-
-    // Check for graphics availability
-    if( CGGetOnlineDisplayList(0, NULL, NULL) ) {
-        running = true; // console mode
-        return false;
-    }
-
-    OSStatus                    err;
-    static const EventTypeSpec    kAppEvents[] =
-    {
-        { kEventClassCommand, kEventCommandProcess }
-    };
-
-    // Create a Nib reference, passing the name of the nib file (without the .nib extension).
-    // CreateNibReference only searches into the application bundle.
-    err = CreateNibReference( CFSTR("main"), &sNibRef );
-    require_noerr( err, ReturnLabel );
-
-    // Install our handler for common commands on the application target
-    // Register for standard event handlers
-    InstallStandardEventHandler(GetApplicationEventTarget()); // Doesn't work?
-    verify_noerr( InstallApplicationEventHandler( NewEventHandlerUPP( AppEventHandler ),
-                                    GetEventTypeCount( kAppEvents ), kAppEvents, 0, NULL ) );
-
-    // Once the nib reference is created, set the menu bar. "MainMenu" is the name of the menu bar
-    // object. This name is set in InterfaceBuilder when the nib is created.
-    //err = SetMenuBarFromNib( sNibRef, CFSTR("MenuBar") );
-    //require_noerr( err, ReturnLabel );
-    InstallStandardEventHandler(GetMenuEventTarget(AcquireRootMenu()));
-
-    // Create a new window. A full-fledged application would do this from an AppleEvent handler for kAEOpenApplication.
-    g_window = HandleNew();
-
-ReturnLabel:
-    return running = g_window != 0;
+    if( window_title==NULL )
+        window_title = (char*)malloc(WINDOW_TITLE_SIZE);
+    strncpy( window_title, title, WINDOW_TITLE_SIZE-1 );
+    running = true;
+    return true;
 }
 
 bool video::init_console()
@@ -1407,13 +71,14 @@ bool video::init_console()
 
 void video::terminate()
 {
+    if(calc_fps) {
+        double fps = g_fps;
+		struct timezone tz; struct timeval end_time; gettimeofday(&end_time, &tz);
+		fps /= (end_time.tv_sec+1.0*end_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);
+        printf("%s: %.1f fps\n", title, fps);
+  	}
     g_video = 0; running = false;
     if(g_pImg) { delete[] g_pImg; g_pImg = 0; }
-    if(g_window) {
-        DisposeGLForWindow (g_window);
-        DisposeWindow (g_window);
-        g_window = 0;
-    }
 }
 
 video::~video()
@@ -1424,56 +89,63 @@ video::~video()
 //! Count and display FPS count in titlebar
 bool video::next_frame()
 {
-	if(!running) return false;
-	if(!g_window) return running;
-    //! try acquire mutex if threaded code, returns on failure
-    if(threaded && pthread_mutex_trylock(&g_mutex))
-        return running;
-    g_fps++;
+    if(calc_fps){
+	    if(!g_fps) {
+		    struct timezone tz; gettimeofday(&g_time, &tz);
+	    }
+        g_fps++;
+    }
     struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz);
-    double sec = (now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);
-    if(sec > 1) {
-        memcpy(&g_time, &now_time, sizeof(g_time));
+    double sec=((now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0));
+    if( sec>1 ){
         if(calc_fps) {
-            double fps = g_fps; g_fps = 0;
-            char buffer[256]; buffer[0] = snprintf(buffer+1, 255, "%s%s: %d fps", title, updating?"":" (no updating)", int(fps/sec));
-            SetWTitle (g_window, (ConstStr255Param) buffer );
+            memcpy(&g_time, &now_time, sizeof(g_time));
+            int fps; 
+            fps = g_fps/sec;
+            cocoa_update = (int)updating;
+            snprintf(window_title,WINDOW_TITLE_SIZE, "%s%s: %d fps", title, updating?"":" (no updating)", int(fps));
+            g_fps=0;
         }
-      }
+    }
+    return running;
+}
 
-    EventRef theEvent;
-    EventTargetRef theTarget;
-    OSStatus                    err;
-    // Run the event loop
 
-    theTarget = GetEventDispatcherTarget();
-    while( (err = ReceiveNextEvent(0, NULL, kEventDurationNoWait, true, &theEvent)) == noErr)
-    {
-        SendEventToEventTarget(theEvent, theTarget);
-        ReleaseEvent(theEvent);
-    }
-    if(err != eventLoopTimedOutErr) running = false;
-    if(updating) {
-        pRecImage pWindowInfo = (pRecImage) GetWRefCon (g_window); // get the gl info for the window
-        if(pWindowInfo) DrawGL(g_window);
-    }
-  	if(threaded) pthread_mutex_unlock(&g_mutex);
-    return true;
+void* thread_func(void*)
+{
+    g_video->on_process();
+    exit(EXIT_SUCCESS);
 }
 
+extern "C" void on_mouse_func(int x, int y, int k)
+{
+    g_video->on_mouse(x, y, k);
+    return;
+}
+ 
+extern "C" void on_key_func(int x)
+{
+    g_video->on_key(x);
+    return;
+}
+
+extern "C" int cocoa_main( int argc, char *argv[] );
 //! Do standard loop
 void video::main_loop()
 {
-    struct timezone tz; gettimeofday(&g_time, &tz);
-    //RunApplicationEventLoop(); -- using another application loop model
-    on_process();
+    pthread_t handle;
+    pthread_attr_t attr;
+    pthread_attr_init(&attr);
+    pthread_create(&handle,&attr,&thread_func,(void*)NULL);
+    pthread_detach(handle);
+    cocoa_main( NULL, NULL );    
 }
 
 //! Change window title
 void video::show_title()
 {
-    char buffer[256]; buffer[0] = snprintf(buffer+1, 255, "%s", title);
-    SetWTitle (g_window, (ConstStr255Param) buffer );
+    strncpy( window_title, title, WINDOW_TITLE_SIZE );
+    return;
 }
 
 ///////////////////////////////////////////// public methods of video class ///////////////////////
@@ -1488,4 +160,7 @@ drawing_area::drawing_area(int x, int y, int sizex, int sizey)
     index = base_index; // current index
 }
 
-void drawing_area::update() {}
+void drawing_area::update() 
+{
+    //nothing to do, updating via timer in cocoa part. 
+}
diff --git a/examples/common/gui/video.h b/examples/common/gui/video.h
index 5e733d0..4c8ef90 100644
--- a/examples/common/gui/video.h
+++ b/examples/common/gui/video.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -48,8 +48,10 @@ typedef signed char depth_t;
 //! Class for getting access to drawing memory
 class drawing_memory
 {
+#ifdef __TBB_MIC
     // The address is kept as uintptr_t since
     // the compiler could not offload a pointer
+#endif
     uintptr_t   my_address;
 public:
     depth_t     pixel_depth;
@@ -105,6 +107,8 @@ public:
     //! Get drawing memory descriptor
     inline drawing_memory get_drawing_memory() const;
 
+    //! code of the ESCape key
+    static const int esc_key = 27;
     //! Mouse events handler.
     virtual void on_mouse(int x, int y, int key) { }
     //! Mouse events handler.
@@ -213,7 +217,9 @@ inline void drawing_area::put_pixel(color_t color)
 
 inline drawing_area::~drawing_area()
 {
+#if ! __TBB_DEFINE_MIC
     update();
+#endif
 }
 
 #if defined(_WINDOWS) && (defined(VIDEO_WINMAIN) || defined(VIDEO_WINMAIN_ARGS) )
diff --git a/examples/common/gui/winvideo.h b/examples/common/gui/winvideo.h
index a5a22db..00b6152 100644
--- a/examples/common/gui/winvideo.h
+++ b/examples/common/gui/winvideo.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,6 +29,9 @@
 /////// Common internal implementation of Windows-specific stuff //////////////
 ///////                  Must be the first included header       //////////////
 
+#ifndef __WINVIDEO_H__
+#define __WINVIDEO_H__
+
 #ifndef _CRT_SECURE_NO_DEPRECATE
 #define _CRT_SECURE_NO_DEPRECATE
 #endif
@@ -217,11 +220,9 @@ static bool loop_once(video *v)
     }
     // event processing, including painting
     MSG msg;
-    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
-    {
+    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
         if( msg.message == WM_QUIT ) { v->running = false; return false; }
-        if( !hAccelTable || !TranslateAccelerator(msg.hwnd, hAccelTable, &msg) )
-        {
+        if( !hAccelTable || !TranslateAccelerator(msg.hwnd, hAccelTable, &msg) ){
             TranslateMessage(&msg);
             DispatchMessage(&msg);
         }
@@ -256,8 +257,10 @@ void video::main_loop()
             if(r == WAIT_OBJECT_0) break; // thread terminated
         }
         running = false;
-        if(WaitForSingleObject(g_handles[0], 300) == WAIT_TIMEOUT)
-            TerminateThread(g_handles[0], 0);
+        if(WaitForSingleObject(g_handles[0], 3000) == WAIT_TIMEOUT){
+            // there was not enough time for graceful shutdown, killing the example with code 1.
+            exit(1);
+        }
         if(g_handles[0]) CloseHandle(g_handles[0]);
         if(g_handles[1]) CloseHandle(g_handles[1]);
         g_handles[0] = g_handles[1] = 0;
@@ -284,3 +287,5 @@ void video::show_title()
     if(g_hAppWnd)
         SetWindowTextA(g_hAppWnd, title);
 }
+
+#endif //__WINVIDEO_H__
diff --git a/examples/common/gui/xcode/tbbExample/Info.plist b/examples/common/gui/xcode/tbbExample/Info.plist
new file mode 100644
index 0000000..b94b968
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/Info.plist
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>BuildMachineOSBuild</key>
+	<string>11D50d</string>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleDisplayName</key>
+	<string></string>
+	<key>CFBundleExecutable</key>
+	<string>tbbExample</string>
+	<key>CFBundleIdentifier</key>
+	<string>Intel.tbbExample</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>tbbExample</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>DTCompiler</key>
+	<string>com.apple.compilers.llvm.clang.1_0</string>
+	<key>DTPlatformBuild</key>
+	<string>4E1019</string>
+	<key>DTPlatformVersion</key>
+	<string>GM</string>
+	<key>DTSDKBuild</key>
+	<string>11D50a</string>
+	<key>DTSDKName</key>
+	<string>macosx10.7</string>
+	<key>DTXcode</key>
+	<string>0431</string>
+	<key>DTXcodeBuild</key>
+	<string>4E1019</string>
+	<key>LSApplicationCategoryType</key>
+	<string>public.app-category.business</string>
+	<key>LSEnvironment</key>
+	<dict>
+		<key>DYLD_LIBRARY_PATH</key>
+		<string>Contents/Resources:.:../Resources:/tmp:$DYLD_LIBRARY_PATH</string>
+		<key>LIBRARY_PATH</key>
+		<string>Contents/Resources:.:../:/tmp:$DYLD_LIBRARY_PATH</string>
+	</dict>
+	<key>LSMinimumSystemVersion</key>
+	<string>10.7</string>
+	<key>NSHumanReadableCopyright</key>
+	<string>Copyright 2005-2012 Intel Corporation.  All Rights Reserved.</string>
+	<key>NSMainNibFile</key>
+	<string>MainMenu</string>
+	<key>NSPrincipalClass</key>
+	<string>NSApplication</string>
+</dict>
+</plist>
diff --git a/examples/common/gui/xcode/tbbExample/OpenGLView.h b/examples/common/gui/xcode/tbbExample/OpenGLView.h
new file mode 100644
index 0000000..61f3616
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/OpenGLView.h
@@ -0,0 +1,35 @@
+/*
+ Copyright 2005-2012 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
+ suppliers or licensors.  Title to the Material remains with Intel
+ Corporation or its suppliers and licensors.  The Material is protected
+ by worldwide copyright laws and treaty provisions.  No part of the
+ Material may be used, copied, reproduced, modified, published, uploaded,
+ posted, transmitted, distributed, or disclosed in any way without
+ Intel's prior express written permission.
+ 
+ No license under any patent, copyright, trade secret or other
+ intellectual property right is granted to or conferred upon you by
+ disclosure or delivery of the Materials, either expressly, by
+ implication, inducement, estoppel or otherwise.  Any license under such
+ intellectual property rights must be express and approved by Intel in
+ writing.
+ */
+
+#import <Foundation/Foundation.h>
+#import <Cocoa/Cocoa.h>
+
+ at interface OpenGLView : NSOpenGLView
+{}
+
+ at property (nonatomic,retain) NSTimer *timer;
+
+- (void) drawRect:(NSRect)start;
+- (void) mouseDown:(NSEvent *)theEvent;
+- (void) keyDown:(NSEvent *)theEvent;
+- (BOOL) acceptsFirstResponder;
+- (void) viewDidEndLiveResize;
+
+ at end
diff --git a/examples/common/gui/xcode/tbbExample/OpenGLView.m b/examples/common/gui/xcode/tbbExample/OpenGLView.m
new file mode 100644
index 0000000..9c0c410
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/OpenGLView.m
@@ -0,0 +1,106 @@
+/*
+ Copyright 2005-2012 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
+ suppliers or licensors.  Title to the Material remains with Intel
+ Corporation or its suppliers and licensors.  The Material is protected
+ by worldwide copyright laws and treaty provisions.  No part of the
+ Material may be used, copied, reproduced, modified, published, uploaded,
+ posted, transmitted, distributed, or disclosed in any way without
+ Intel's prior express written permission.
+ 
+ No license under any patent, copyright, trade secret or other
+ intellectual property right is granted to or conferred upon you by
+ disclosure or delivery of the Materials, either expressly, by
+ implication, inducement, estoppel or otherwise.  Any license under such
+ intellectual property rights must be express and approved by Intel in
+ writing.
+ */
+
+#import "OpenGLView.h"
+#import <OpenGL/gl.h>
+#import "tbbAppDelegate.h"
+
+int x,y;
+void on_mouse_func(int x, int y, int k);
+void on_key_func(int x);
+void* windows_ptr=0;
+
+//defined in cpp-file
+extern char* window_title;
+extern int cocoa_update;
+extern int g_sizex, g_sizey;
+extern unsigned int *g_pImg;
+
+void draw(void)
+{
+    glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+    glClearColor(0, 0, 0, 0);
+    glClear(GL_COLOR_BUFFER_BIT);
+    glBegin(GL_POINT);
+    glDrawPixels(g_sizex, g_sizey, GL_BGRA_EXT, GL_UNSIGNED_INT_8_8_8_8_REV, g_pImg);
+    glEnd();
+    glFlush();
+}
+
+ at implementation OpenGLView
+
+ at synthesize timer;
+
+- (void) drawRect:(NSRect)start
+{
+    x=g_sizex;
+    y=g_sizey;
+    glClearColor(0, 0, 0, 0);
+    glClear(GL_COLOR_BUFFER_BIT);
+    draw();
+    glFlush();
+    timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(update_window) userInfo:nil repeats:YES];
+}
+
+-(void) update_window{
+    if( cocoa_update ) draw();
+    if( window_title )[_window setTitle:[NSString stringWithFormat:@"%s", window_title]];
+    return;
+}
+
+-(void) keyDown:(NSEvent *)theEvent{
+    on_key_func([theEvent.characters characterAtIndex:0]);
+    return;
+}
+
+-(void) mouseDown:(NSEvent *)theEvent{
+    // mouse event for seismic and fractal
+    NSPoint point= theEvent.locationInWindow;
+    x = point.x;
+    y = point.y;
+    NSRect rect = self.visibleRect;
+    on_mouse_func(x*g_sizex/rect.size.width,y*g_sizey/rect.size.height,1);
+    draw();
+    return;
+    
+}
+
+- (BOOL) acceptsFirstResponder
+{
+    return YES;
+}
+
+- (void) rightMouseDown:(NSEvent *)theEvent
+{
+    return;
+}
+
+-(void) viewDidEndLiveResize
+{
+    NSRect rect = self.visibleRect;
+    x=rect.size.width;
+    y=rect.size.height;
+    glPixelZoom((float)x/(float)g_sizex, (float)y/(float)g_sizey);
+    [_window setTitle:[NSString stringWithFormat:@"X=%d Y=%d", x,y]];
+    draw();
+    return;
+}
+
+ at end
diff --git a/examples/common/gui/xcode/tbbExample/PkgInfo b/examples/common/gui/xcode/tbbExample/PkgInfo
new file mode 100644
index 0000000..bd04210
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/PkgInfo
@@ -0,0 +1 @@
+APPL????
\ No newline at end of file
diff --git a/examples/common/gui/xcode/tbbExample/en.lproj/InfoPlist.strings b/examples/common/gui/xcode/tbbExample/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.nib b/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.nib
new file mode 100644
index 0000000..bbcd005
Binary files /dev/null and b/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.nib differ
diff --git a/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib b/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib
new file mode 100644
index 0000000..14faab3
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1070</int>
+		<string key="IBDocument.SystemVersion">11D50d</string>
+		<string key="IBDocument.InterfaceBuilderVersion">2182</string>
+		<string key="IBDocument.AppKitVersion">1138.32</string>
+		<string key="IBDocument.HIToolboxVersion">568.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">2182</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>NSWindowTemplate</string>
+			<string>NSView</string>
+			<string>NSMenu</string>
+			<string>NSMenuItem</string>
+			<string>NSCustomObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
+			<object class="NSCustomObject" id="1021">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSCustomObject" id="1014">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="1050">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSMenu" id="649796088">
+				<string key="NSTitle">AMainMenu</string>
+				<array class="NSMutableArray" key="NSMenuItems">
+					<object class="NSMenuItem" id="694149608">
+						<reference key="NSMenu" ref="649796088"/>
+						<string key="NSTitle">tbbExample</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<object class="NSCustomResource" key="NSOnImage" id="35465992">
+							<string key="NSClassName">NSImage</string>
+							<string key="NSResourceName">NSMenuCheckmark</string>
+						</object>
+						<object class="NSCustomResource" key="NSMixedImage" id="502551668">
+							<string key="NSClassName">NSImage</string>
+							<string key="NSResourceName">NSMenuMixedState</string>
+						</object>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="110575045">
+							<string key="NSTitle">tbbExample</string>
+							<array class="NSMutableArray" key="NSMenuItems">
+								<object class="NSMenuItem" id="632727374">
+									<reference key="NSMenu" ref="110575045"/>
+									<string key="NSTitle">Quit tbbExample</string>
+									<string key="NSKeyEquiv">q</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="35465992"/>
+									<reference key="NSMixedImage" ref="502551668"/>
+								</object>
+							</array>
+							<string key="NSName">_NSAppleMenu</string>
+						</object>
+					</object>
+				</array>
+				<string key="NSName">_NSMainMenu</string>
+			</object>
+			<object class="NSWindowTemplate" id="972006081">
+				<int key="NSWindowStyleMask">15</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{100, 100}, {480, 360}}</string>
+				<int key="NSWTFlags">1148718080</int>
+				<string key="NSWindowTitle">tbbExample</string>
+				<string key="NSWindowClass">NSWindow</string>
+				<nil key="NSViewClass"/>
+				<nil key="NSUserInterfaceItemIdentifier"/>
+				<object class="NSView" key="NSWindowView" id="439893737">
+					<reference key="NSNextResponder"/>
+					<int key="NSvFlags">4352</int>
+					<string key="NSFrameSize">{480, 360}</string>
+					<reference key="NSSuperview"/>
+					<reference key="NSWindow"/>
+					<int key="NSViewLayerContentsRedrawPolicy">2</int>
+					<string key="NSHuggingPriority">{1, 9}</string>
+					<string key="NSAntiCompressionPriority">{1, 1}</string>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1280, 1002}}</string>
+				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
+				<bool key="NSWindowIsRestorable">YES</bool>
+			</object>
+			<object class="NSCustomObject" id="976324537">
+				<string key="NSClassName">tbbAppDelegate</string>
+			</object>
+			<object class="NSCustomObject" id="755631768">
+				<string key="NSClassName">NSFontManager</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">terminate:</string>
+						<reference key="source" ref="1050"/>
+						<reference key="destination" ref="632727374"/>
+					</object>
+					<int key="connectionID">449</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="1021"/>
+						<reference key="destination" ref="976324537"/>
+					</object>
+					<int key="connectionID">495</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">window</string>
+						<reference key="source" ref="976324537"/>
+						<reference key="destination" ref="972006081"/>
+					</object>
+					<int key="connectionID">532</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1048"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="1021"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="1014"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">First Responder</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-3</int>
+						<reference key="object" ref="1050"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Application</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">29</int>
+						<reference key="object" ref="649796088"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="694149608"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">56</int>
+						<reference key="object" ref="694149608"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="110575045"/>
+						</array>
+						<reference key="parent" ref="649796088"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">57</int>
+						<reference key="object" ref="110575045"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="632727374"/>
+						</array>
+						<reference key="parent" ref="694149608"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">136</int>
+						<reference key="object" ref="632727374"/>
+						<reference key="parent" ref="110575045"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">371</int>
+						<reference key="object" ref="972006081"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="439893737"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">372</int>
+						<reference key="object" ref="439893737"/>
+						<reference key="parent" ref="972006081"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">420</int>
+						<reference key="object" ref="755631768"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">494</int>
+						<reference key="object" ref="976324537"/>
+						<reference key="parent" ref="0"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="136.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="29.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="NO" key="371.IBNSWindowAutoPositionCentersHorizontal"/>
+				<boolean value="NO" key="371.IBNSWindowAutoPositionCentersVertical"/>
+				<string key="371.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="371.IBWindowTemplateEditedContentRect">{{380, 496}, {480, 360}}</string>
+				<integer value="1" key="371.NSWindowTemplate.visibleAtLaunch"/>
+				<string key="372.CustomClassName">OpenGLView</string>
+				<dictionary class="NSMutableDictionary" key="372.IBAttributePlaceholdersKey"/>
+				<string key="372.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="420.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="494.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="56.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="57.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">539</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">OpenGLView</string>
+					<string key="superclassName">NSOpenGLView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/OpenGLView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">tbbAppDelegate</string>
+					<string key="superclassName">NSObject</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">saveAction:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">saveAction:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">saveAction:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">window</string>
+						<string key="NS.object.0">NSWindow</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">window</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">window</string>
+							<string key="candidateClassName">NSWindow</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/tbbAppDelegate.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1070" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<dictionary class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+			<string key="NSMenuCheckmark">{11, 11}</string>
+			<string key="NSMenuMixedState">{10, 3}</string>
+		</dictionary>
+	</data>
+</archive>
diff --git a/examples/common/gui/xcode/tbbExample/main.m b/examples/common/gui/xcode/tbbExample/main.m
new file mode 100644
index 0000000..82436a4
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/main.m
@@ -0,0 +1,27 @@
+/*
+ Copyright 2005-2012 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
+ suppliers or licensors.  Title to the Material remains with Intel
+ Corporation or its suppliers and licensors.  The Material is protected
+ by worldwide copyright laws and treaty provisions.  No part of the
+ Material may be used, copied, reproduced, modified, published, uploaded,
+ posted, transmitted, distributed, or disclosed in any way without
+ Intel's prior express written permission.
+ 
+ No license under any patent, copyright, trade secret or other
+ intellectual property right is granted to or conferred upon you by
+ disclosure or delivery of the Materials, either expressly, by
+ implication, inducement, estoppel or otherwise.  Any license under such
+ intellectual property rights must be express and approved by Intel in
+ writing.
+ */
+
+
+#import <Cocoa/Cocoa.h>
+
+int cocoa_main(int argc, char *argv[])
+{
+    return NSApplicationMain(argc, (const char **)argv);
+}
diff --git a/examples/common/gui/xcode/tbbExample/tbbAppDelegate.h b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.h
new file mode 100644
index 0000000..3470b5a
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.h
@@ -0,0 +1,33 @@
+/*
+ Copyright 2005-2012 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
+ suppliers or licensors.  Title to the Material remains with Intel
+ Corporation or its suppliers and licensors.  The Material is protected
+ by worldwide copyright laws and treaty provisions.  No part of the
+ Material may be used, copied, reproduced, modified, published, uploaded,
+ posted, transmitted, distributed, or disclosed in any way without
+ Intel's prior express written permission.
+ 
+ No license under any patent, copyright, trade secret or other
+ intellectual property right is granted to or conferred upon you by
+ disclosure or delivery of the Materials, either expressly, by
+ implication, inducement, estoppel or otherwise.  Any license under such
+ intellectual property rights must be express and approved by Intel in
+ writing.
+ */
+
+//
+//  Created by Xcode* 4.3.2
+//
+
+#import <Cocoa/Cocoa.h>
+
+ at interface tbbAppDelegate : NSObject <NSApplicationDelegate>
+
+ at property (assign) IBOutlet NSWindow *window;
+
+- (BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *) sender;
+
+ at end
diff --git a/examples/common/gui/xcode/tbbExample/tbbAppDelegate.m b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.m
new file mode 100644
index 0000000..f39dff6
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.m
@@ -0,0 +1,51 @@
+/*
+ Copyright 2005-2012 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
+ suppliers or licensors.  Title to the Material remains with Intel
+ Corporation or its suppliers and licensors.  The Material is protected
+ by worldwide copyright laws and treaty provisions.  No part of the
+ Material may be used, copied, reproduced, modified, published, uploaded,
+ posted, transmitted, distributed, or disclosed in any way without
+ Intel's prior express written permission.
+ 
+ No license under any patent, copyright, trade secret or other
+ intellectual property right is granted to or conferred upon you by
+ disclosure or delivery of the Materials, either expressly, by
+ implication, inducement, estoppel or otherwise.  Any license under such
+ intellectual property rights must be express and approved by Intel in
+ writing.
+ */
+
+//
+//  Created by Xcode* 4.3.2
+//
+
+#import "tbbAppDelegate.h"
+#import <pthread.h>
+
+ at implementation tbbAppDelegate
+
+ at synthesize window = _window;
+
+//declared in macvideo.cpp file
+extern int g_sizex, g_sizey;
+
+- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
+{
+    // Insert code here to initialize your application
+    NSRect windowSize;
+    windowSize.size.height = g_sizey;
+    windowSize.size.width = g_sizex;
+    windowSize.origin=_window.frame.origin;
+    [_window setFrame:windowSize display:YES];
+
+}
+
+- (BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *) sender
+{
+    return YES;
+}
+
+ at end
diff --git a/examples/common/gui/xcode/tbbExample/tbbExample-Info.plist b/examples/common/gui/xcode/tbbExample/tbbExample-Info.plist
new file mode 100644
index 0000000..9a0148a
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/tbbExample-Info.plist
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIconFile</key>
+	<string></string>
+	<key>CFBundleIdentifier</key>
+	<string>Intel.${PRODUCT_NAME:rfc1034identifier}</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>LSEnvironment</key>
+	<dict>
+		<key>DYLD_LIBRARY_PATH</key>
+		<string>Contents/Resources:.:../Resources:/tmp:$DYLD_LIBRARY_PATH</string>
+		<key>LIBRARY_PATH</key>
+		<string>Contents/Resources:.:../:/tmp:$DYLD_LIBRARY_PATH</string>
+	</dict>
+	<key>CFBundleDisplayName</key>
+	<string></string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSApplicationCategoryType</key>
+	<string>public.app-category.business</string>
+	<key>LSMinimumSystemVersion</key>
+	<string>${MACOSX_DEPLOYMENT_TARGET}</string>
+	<key>NSHumanReadableCopyright</key>
+	<string>Copyright 2005-2012 Intel Corporation.  All Rights Reserved.</string>
+	<key>NSMainNibFile</key>
+	<string>MainMenu</string>
+	<key>NSPrincipalClass</key>
+	<string>NSApplication</string>
+</dict>
+</plist>
diff --git a/examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch b/examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch
new file mode 100644
index 0000000..a5f51a8
--- /dev/null
+++ b/examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch
@@ -0,0 +1,27 @@
+/*
+ Copyright 2005-2012 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
+ suppliers or licensors.  Title to the Material remains with Intel
+ Corporation or its suppliers and licensors.  The Material is protected
+ by worldwide copyright laws and treaty provisions.  No part of the
+ Material may be used, copied, reproduced, modified, published, uploaded,
+ posted, transmitted, distributed, or disclosed in any way without
+ Intel's prior express written permission.
+ 
+ No license under any patent, copyright, trade secret or other
+ intellectual property right is granted to or conferred upon you by
+ disclosure or delivery of the Materials, either expressly, by
+ implication, inducement, estoppel or otherwise.  Any license under such
+ intellectual property rights must be express and approved by Intel in
+ writing.
+ */
+
+//
+// Prefix header for all source files of the 'tbbExample' target in the 'tbbExample' project
+//
+
+#ifdef __OBJC__
+    #import <Cocoa/Cocoa.h>
+#endif
diff --git a/examples/common/gui/xvideo.cpp b/examples/common/gui/xvideo.cpp
index acf99aa..47dcb84 100644
--- a/examples/common/gui/xvideo.cpp
+++ b/examples/common/gui/xvideo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -227,7 +227,7 @@ bool video::init_window(int xsize, int ysize)
             XSetWindowBackgroundPixmap(dpy, win, pixmap);
         } else
 #endif//!X_NOSHMPIX
-        { // Standart
+        { // Standard
             vidtype = 1; vidstr = "X11 shared memory";
             ximage = XShmCreateImage(dpy, vis, dispdepth,
                 ZPixmap, 0, &shmseginfo, xsize, ysize);
@@ -241,7 +241,9 @@ bool video::init_window(int xsize, int ysize)
     } else
 #endif
     {
+#ifndef X_NOSHMEM
 generic:
+#endif
         vidtype = 0; vidstr = "generic X11";
         g_pImg = new unsigned int[imgbytes/sizeof(int)];
         ximage = XCreateImage(dpy, vis, dispdepth, ZPixmap, 0, (char*)g_pImg, xsize, ysize, 32, imgbytes/ysize);
@@ -253,7 +255,7 @@ generic:
     printf("Note: using %s with %s visual for %d-bit color depth\n", vidstr, vis==DefaultVisual(dpy, theScreen)?"default":"non-default", dispdepth);
     running = true;
     return true;
-    } // end of enclosing local varables
+    } // end of enclosing local variables
 fail:
     terminate(); init_console();
     return false;
diff --git a/examples/common/index.html b/examples/common/index.html
index 18785f5..3817f05 100644
--- a/examples/common/index.html
+++ b/examples/common/index.html
@@ -2,7 +2,7 @@
 <BODY>
 
 <H2>Overview</H2>
-This directory contains common code that is used in the Threading Building Blocks examples.
+This directory contains common code that is used in the Intel® Threading Building Blocks examples.
 
 <P>
 This code is not intended to be used directly.  It is incorporated automatically by the examples that need it.
@@ -13,9 +13,9 @@ This code is not intended to be used directly.  It is incorporated automatically
 <DT><A HREF="gui">gui</A>
 <DD>GUI code for examples that have graphical user interfaces.  Currently supports:
     <UL>
-    <LI>GDI+*, Direct Draw (Windows* systems)
+    <LI>GDI+*, DirectDraw*, Direct2D* (Windows* systems)
     <LI>OpenGL* (Mac OS* X systems)
-    <LI>X-windows (Linux* or Mac OS* X systems)
+    <LI>X window (Linux* or Mac OS* X systems)
     </UL>
     See the examples that use the GUI
     (<A HREF=../parallel_for/tachyon/index.html>tachyon</A> and <A HREF=../parallel_for/seismic/index.html>seismic</A>)
@@ -29,7 +29,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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/common/utility/fast_random.h b/examples/common/utility/fast_random.h
index 7616455..c1b8d28 100644
--- a/examples/common/utility/fast_random.h
+++ b/examples/common/utility/fast_random.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/common/utility/utility.h b/examples/common/utility/utility.h
index 66877fc..4f6939b 100644
--- a/examples/common/utility/utility.h
+++ b/examples/common/utility/utility.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/concurrent_hash_map/count_strings/Makefile b/examples/concurrent_hash_map/count_strings/Makefile
index c8f698f..2ecd86c 100644
--- a/examples/concurrent_hash_map/count_strings/Makefile
+++ b/examples/concurrent_hash_map/count_strings/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 7e183c9..ba04a1c 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-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 f820968..bd671e1 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/concurrent_hash_map/count_strings/index.html b/examples/concurrent_hash_map/count_strings/index.html
index 41888b6..bf78a8e 100644
--- a/examples/concurrent_hash_map/count_strings/index.html
+++ b/examples/concurrent_hash_map/count_strings/index.html
@@ -16,9 +16,9 @@ The example counts the number of unique words in a text.
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example (Windows* systems only). 
 <DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example.
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X systems only). 
 </DL>
 
 <H2>To Build</H2>
@@ -44,7 +44,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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/concurrent_hash_map/index.html b/examples/concurrent_hash_map/index.html
index 0949575..4b4db68 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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/concurrent_priority_queue/shortpath/Makefile b/examples/concurrent_priority_queue/shortpath/Makefile
index a9c358a..5bc5133 100644
--- a/examples/concurrent_priority_queue/shortpath/Makefile
+++ b/examples/concurrent_priority_queue/shortpath/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -34,7 +34,7 @@ ifneq (,$(shell which icc 2>/dev/null))
 CXX=icc
 endif # which icc
 ifeq ($(CXX),icc)
-CXX0XFLAGS=-std=c++0x -D_TBB_CPP0X
+CXX0XFLAGS?=-std=c++0x -D_TBB_CPP0X
 endif # icc
 
 ifeq ($(shell uname), Linux)
diff --git a/examples/concurrent_priority_queue/shortpath/Makefile.windows b/examples/concurrent_priority_queue/shortpath/Makefile.windows
index 529e930..d77b56d 100644
--- a/examples/concurrent_priority_queue/shortpath/Makefile.windows
+++ b/examples/concurrent_priority_queue/shortpath/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/concurrent_priority_queue/shortpath/index.html b/examples/concurrent_priority_queue/shortpath/index.html
index a6bfdbe..1262435 100644
--- a/examples/concurrent_priority_queue/shortpath/index.html
+++ b/examples/concurrent_priority_queue/shortpath/index.html
@@ -40,9 +40,9 @@ etc.
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example with the Intel® C++ compiler.
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example with the Intel® C++ compiler (Windows* systems only).
 <DT><A HREF="xcode">xcode</A>
-<DD>Contains Mac OS* Xcode* workspace for building and running the example.
+<DD>Contains Mac OS* Xcode* workspace for building and running the example (Mac OS* X systems only).
 </DL>
 
 <H2>To Build</H2>
@@ -72,7 +72,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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/concurrent_priority_queue/shortpath/shortpath.cpp b/examples/concurrent_priority_queue/shortpath/shortpath.cpp
index a4cd148..a28166e 100644
--- a/examples/concurrent_priority_queue/shortpath/shortpath.cpp
+++ b/examples/concurrent_priority_queue/shortpath/shortpath.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -45,7 +45,13 @@
     #pragma warning (disable: 4267)
 #endif /* _MSC_VER && _Wp64 */
 
-#define __TBB_LAMBDAS_PRESENT  ( _MSC_VER >= 1600 && !__INTEL_COMPILER || __INTEL_COMPILER > 1100 && _TBB_CPP0X )
+#if __INTEL_COMPILER
+#define __TBB_LAMBDAS_PRESENT ( _TBB_CPP0X && __INTEL_COMPILER > 1100 )
+#elif __GNUC__
+#define __TBB_LAMBDAS_PRESENT ( _TBB_CPP0X && __TBB_GCC_VERSION >= 40500 )
+#elif _MSC_VER
+#define __TBB_LAMBDAS_PRESENT ( _MSC_VER>=1600 )
+#endif
 
 using namespace std;
 using namespace tbb;
diff --git a/examples/concurrent_priority_queue/shortpath/xcode/shortpath.xcodeproj/project.pbxproj b/examples/concurrent_priority_queue/shortpath/xcode/shortpath.xcodeproj/project.pbxproj
index 112449b..41a4747 100644
--- a/examples/concurrent_priority_queue/shortpath/xcode/shortpath.xcodeproj/project.pbxproj
+++ b/examples/concurrent_priority_queue/shortpath/xcode/shortpath.xcodeproj/project.pbxproj
@@ -1,329 +1,305 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };
-		0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };
-		61C4771B13CE199D0022F8F6 /* shortpath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61C4771A13CE199D0022F8F6 /* shortpath.cpp */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		8DD76F690486A84900D96B5E /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 12;
-			dstPath = "";
-			dstSubfolderSpec = 16;
-			files = (
-				0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		0E8A7310136F4A4600453C80 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libtbb.dylib; sourceTree = "<group>"; };
-		61C4771A13CE199D0022F8F6 /* shortpath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = shortpath.cpp; path = ../shortpath.cpp; sourceTree = "<group>"; };
-		8DD76F6C0486A84900D96B5E /* Shortpath */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Shortpath; sourceTree = BUILT_PRODUCTS_DIR; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		8DD76F660486A84900D96B5E /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		08FB7794FE84155DC02AAC07 /* Shortpath */ = {
-			isa = PBXGroup;
-			children = (
-				08FB7795FE84155DC02AAC07 /* Source */,
-				A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
-				1AB674ADFE9D54B511CA2CBB /* Products */,
-			);
-			name = Shortpath;
-			sourceTree = "<group>";
-		};
-		08FB7795FE84155DC02AAC07 /* Source */ = {
-			isa = PBXGroup;
-			children = (
-				61C4771A13CE199D0022F8F6 /* shortpath.cpp */,
-			);
-			name = Source;
-			sourceTree = "<group>";
-		};
-		1AB674ADFE9D54B511CA2CBB /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				8DD76F6C0486A84900D96B5E /* Shortpath */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
-			isa = PBXGroup;
-			children = (
-				0E8A7310136F4A4600453C80 /* libtbb.dylib */,
-			);
-			name = "External Frameworks and Libraries";
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		8DD76F620486A84900D96B5E /* Shortpath */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Shortpath" */;
-			buildPhases = (
-				8DD76F640486A84900D96B5E /* Sources */,
-				8DD76F660486A84900D96B5E /* Frameworks */,
-				8DD76F690486A84900D96B5E /* CopyFiles */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = Shortpath;
-			productInstallPath = "$(HOME)/bin";
-			productName = Shortpath;
-			productReference = 8DD76F6C0486A84900D96B5E /* Shortpath */;
-			productType = "com.apple.product-type.tool";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		08FB7793FE84155DC02AAC07 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastUpgradeCheck = 0410;
-			};
-			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "shortpath" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 1;
-			knownRegions = (
-				en,
-			);
-			mainGroup = 08FB7794FE84155DC02AAC07 /* Shortpath */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				8DD76F620486A84900D96B5E /* Shortpath */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXSourcesBuildPhase section */
-		8DD76F640486A84900D96B5E /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				61C4771B13CE199D0022F8F6 /* shortpath.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
-		1DEB923208733DC60010E9CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				HEADER_SEARCH_PATHS = ../../../../include;
-				INSTALL_PATH = "$(HOME)/bin";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(SRCROOT)\"";
-				PRODUCT_NAME = Shortpath;
-				ZERO_LINK = NO;
-			};
-			name = Debug;
-		};
-		1DEB923308733DC60010E9CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				HEADER_SEARCH_PATHS = ../../../../include;
-				INSTALL_PATH = "$(HOME)/bin";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(SRCROOT)\"";
-				PRODUCT_NAME = Shortpath;
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		1DEB923608733DC60010E9CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = i386;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_VERSION = 4.0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Debug;
-		};
-		1DEB923708733DC60010E9CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = i386;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_VERSION = 4.0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Release;
-		};
-		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				HEADER_SEARCH_PATHS = ../../../../include;
-				INSTALL_PATH = "$(HOME)/bin";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(SRCROOT)\"";
-				PRODUCT_NAME = Shortpath;
-				ZERO_LINK = NO;
-			};
-			name = Debug64;
-		};
-		A1F593C70B8F0E6E00073279 /* Release64 */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				HEADER_SEARCH_PATHS = ../../../../include;
-				INSTALL_PATH = "$(HOME)/bin";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(SRCROOT)\"";
-				PRODUCT_NAME = Shortpath;
-				ZERO_LINK = NO;
-			};
-			name = Release64;
-		};
-		A1F593C80B8F0E6E00073279 /* Debug64 */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = i386;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_VERSION = 4.0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				OTHER_CPLUSPLUSFLAGS = (
-					"$(OTHER_CFLAGS)",
-					"-m64",
-				);
-				OTHER_LDFLAGS = "-m64";
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Debug64;
-		};
-		A1F593C90B8F0E6E00073279 /* Release64 */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = i386;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_VERSION = 4.0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				OTHER_CPLUSPLUSFLAGS = (
-					"$(OTHER_CFLAGS)",
-					"-m64",
-				);
-				OTHER_LDFLAGS = "-m64";
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Release64;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Shortpath" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1DEB923208733DC60010E9CD /* Debug */,
-				A1F593C60B8F0E6E00073279 /* Debug64 */,
-				1DEB923308733DC60010E9CD /* Release */,
-				A1F593C70B8F0E6E00073279 /* Release64 */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "shortpath" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1DEB923608733DC60010E9CD /* Debug */,
-				A1F593C80B8F0E6E00073279 /* Debug64 */,
-				1DEB923708733DC60010E9CD /* Release */,
-				A1F593C90B8F0E6E00073279 /* Release64 */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
-}
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };
+		0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };
+		61C4771B13CE199D0022F8F6 /* shortpath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61C4771A13CE199D0022F8F6 /* shortpath.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		8DD76F690486A84900D96B5E /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 12;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		0E8A7310136F4A4600453C80 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
+		61C4771A13CE199D0022F8F6 /* shortpath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = shortpath.cpp; path = ../shortpath.cpp; sourceTree = "<group>"; };
+		8DD76F6C0486A84900D96B5E /* Shortpath */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Shortpath; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8DD76F660486A84900D96B5E /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		08FB7794FE84155DC02AAC07 /* Shortpath */ = {
+			isa = PBXGroup;
+			children = (
+				08FB7795FE84155DC02AAC07 /* Source */,
+				A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+				1AB674ADFE9D54B511CA2CBB /* Products */,
+			);
+			name = Shortpath;
+			sourceTree = "<group>";
+		};
+		08FB7795FE84155DC02AAC07 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				61C4771A13CE199D0022F8F6 /* shortpath.cpp */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		1AB674ADFE9D54B511CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8DD76F6C0486A84900D96B5E /* Shortpath */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				0E8A7310136F4A4600453C80 /* libtbb.dylib */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8DD76F620486A84900D96B5E /* Shortpath */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Shortpath" */;
+			buildPhases = (
+				8DD76F640486A84900D96B5E /* Sources */,
+				8DD76F660486A84900D96B5E /* Frameworks */,
+				8DD76F690486A84900D96B5E /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = Shortpath;
+			productInstallPath = "$(HOME)/bin";
+			productName = Shortpath;
+			productReference = 8DD76F6C0486A84900D96B5E /* Shortpath */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		08FB7793FE84155DC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0410;
+			};
+			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "shortpath" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 1;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 08FB7794FE84155DC02AAC07 /* Shortpath */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8DD76F620486A84900D96B5E /* Shortpath */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8DD76F640486A84900D96B5E /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				61C4771B13CE199D0022F8F6 /* shortpath.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		1DEB923208733DC60010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Shortpath;
+				ZERO_LINK = NO;
+			};
+			name = Debug;
+		};
+		1DEB923308733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Shortpath;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		1DEB923608733DC60010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug;
+		};
+		1DEB923708733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release;
+		};
+		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Shortpath;
+				ZERO_LINK = NO;
+			};
+			name = Debug64;
+		};
+		A1F593C70B8F0E6E00073279 /* Release64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Shortpath;
+				ZERO_LINK = NO;
+			};
+			name = Release64;
+		};
+		A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				OTHER_CPLUSPLUSFLAGS = (
+					"$(OTHER_CFLAGS)",
+					"-m64",
+				);
+				OTHER_LDFLAGS = "-m64";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug64;
+		};
+		A1F593C90B8F0E6E00073279 /* Release64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				OTHER_CPLUSPLUSFLAGS = (
+					"$(OTHER_CFLAGS)",
+					"-m64",
+				);
+				OTHER_LDFLAGS = "-m64";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release64;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Shortpath" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923208733DC60010E9CD /* Debug */,
+				A1F593C60B8F0E6E00073279 /* Debug64 */,
+				1DEB923308733DC60010E9CD /* Release */,
+				A1F593C70B8F0E6E00073279 /* Release64 */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "shortpath" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923608733DC60010E9CD /* Debug */,
+				A1F593C80B8F0E6E00073279 /* Debug64 */,
+				1DEB923708733DC60010E9CD /* Release */,
+				A1F593C90B8F0E6E00073279 /* Release64 */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/graph/binpack/Makefile b/examples/graph/binpack/Makefile
index 8379b1e..570a369 100644
--- a/examples/graph/binpack/Makefile
+++ b/examples/graph/binpack/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/graph/binpack/Makefile.windows b/examples/graph/binpack/Makefile.windows
index 00c1e4e..9f8fcbe 100644
--- a/examples/graph/binpack/Makefile.windows
+++ b/examples/graph/binpack/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/graph/binpack/binpack.cpp b/examples/graph/binpack/binpack.cpp
index 0391a78..5da84cf 100644
--- a/examples/graph/binpack/binpack.cpp
+++ b/examples/graph/binpack/binpack.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -295,8 +295,13 @@ int main(int argc, char *argv[]) {
             make_edge(the_bin_buffer, the_writer);
             the_source.activate();
             g.wait_for_all();
+            for (int i=0; i<num_bin_packers; ++i) {
+                delete bins[i];
+            }
+            delete[] bins;
         }
         utility::report_elapsed_time((tbb::tick_count::now() - start).seconds());
+        delete[] input_array;
         return 0;
     } catch(std::exception& e) {
         cerr<<"error occurred. error text is :\"" <<e.what()<<"\"\n";
diff --git a/examples/graph/binpack/index.html b/examples/graph/binpack/index.html
index 14908aa..0ae3e8e 100644
--- a/examples/graph/binpack/index.html
+++ b/examples/graph/binpack/index.html
@@ -29,9 +29,9 @@ summary of the quality of the bin-packing.
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example with the Intel® C++ compiler.
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example with the Intel® C++ compiler (Windows* systems only).
 <DT><A HREF="xcode">xcode</A>
-<DD>Contains Mac OS* Xcode* workspace for building and running the example.
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X systems only).
 </DL>
 
 <H2>To Build</H2>
@@ -62,7 +62,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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj b/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj
index fe95d4d..18c42f4 100644
--- a/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj
+++ b/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj
@@ -1,329 +1,305 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };
-		0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };
-		A1F593A60B8F042A00073279 /* binpack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* binpack.cpp */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		8DD76F690486A84900D96B5E /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 12;
-			dstPath = "";
-			dstSubfolderSpec = 16;
-			files = (
-				0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		0E8A7310136F4A4600453C80 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libtbb.dylib; sourceTree = "<group>"; };
-		8DD76F6C0486A84900D96B5E /* Binpack */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Binpack; sourceTree = BUILT_PRODUCTS_DIR; };
-		A1F593A50B8F042A00073279 /* binpack.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = binpack.cpp; path = ../binpack.cpp; sourceTree = SOURCE_ROOT; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		8DD76F660486A84900D96B5E /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		08FB7794FE84155DC02AAC07 /* Binpack */ = {
-			isa = PBXGroup;
-			children = (
-				08FB7795FE84155DC02AAC07 /* Source */,
-				A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
-				1AB674ADFE9D54B511CA2CBB /* Products */,
-			);
-			name = Binpack;
-			sourceTree = "<group>";
-		};
-		08FB7795FE84155DC02AAC07 /* Source */ = {
-			isa = PBXGroup;
-			children = (
-				A1F593A50B8F042A00073279 /* binpack.cpp */,
-			);
-			name = Source;
-			sourceTree = "<group>";
-		};
-		1AB674ADFE9D54B511CA2CBB /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				8DD76F6C0486A84900D96B5E /* Binpack */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
-			isa = PBXGroup;
-			children = (
-				0E8A7310136F4A4600453C80 /* libtbb.dylib */,
-			);
-			name = "External Frameworks and Libraries";
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		8DD76F620486A84900D96B5E /* Binpack */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Binpack" */;
-			buildPhases = (
-				8DD76F640486A84900D96B5E /* Sources */,
-				8DD76F660486A84900D96B5E /* Frameworks */,
-				8DD76F690486A84900D96B5E /* CopyFiles */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = Binpack;
-			productInstallPath = "$(HOME)/bin";
-			productName = Binpack;
-			productReference = 8DD76F6C0486A84900D96B5E /* Binpack */;
-			productType = "com.apple.product-type.tool";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		08FB7793FE84155DC02AAC07 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastUpgradeCheck = 0410;
-			};
-			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "binpack" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 1;
-			knownRegions = (
-				en,
-			);
-			mainGroup = 08FB7794FE84155DC02AAC07 /* Binpack */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				8DD76F620486A84900D96B5E /* Binpack */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXSourcesBuildPhase section */
-		8DD76F640486A84900D96B5E /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A1F593A60B8F042A00073279 /* binpack.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
-		1DEB923208733DC60010E9CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				HEADER_SEARCH_PATHS = ../../../../include;
-				INSTALL_PATH = "$(HOME)/bin";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(SRCROOT)\"";
-				PRODUCT_NAME = Binpack;
-				ZERO_LINK = NO;
-			};
-			name = Debug;
-		};
-		1DEB923308733DC60010E9CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				HEADER_SEARCH_PATHS = ../../../../include;
-				INSTALL_PATH = "$(HOME)/bin";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(SRCROOT)\"";
-				PRODUCT_NAME = Binpack;
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		1DEB923608733DC60010E9CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = i386;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_VERSION = 4.0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Debug;
-		};
-		1DEB923708733DC60010E9CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = i386;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_VERSION = 4.0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Release;
-		};
-		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				HEADER_SEARCH_PATHS = ../../../../include;
-				INSTALL_PATH = "$(HOME)/bin";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(SRCROOT)\"";
-				PRODUCT_NAME = Binpack;
-				ZERO_LINK = NO;
-			};
-			name = Debug64;
-		};
-		A1F593C70B8F0E6E00073279 /* Release64 */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				HEADER_SEARCH_PATHS = ../../../../include;
-				INSTALL_PATH = "$(HOME)/bin";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
-					"$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
-				);
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)\"";
-				LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(SRCROOT)\"";
-				PRODUCT_NAME = Binpack;
-				ZERO_LINK = NO;
-			};
-			name = Release64;
-		};
-		A1F593C80B8F0E6E00073279 /* Debug64 */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = i386;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_VERSION = 4.0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				OTHER_CPLUSPLUSFLAGS = (
-					"$(OTHER_CFLAGS)",
-					"-m64",
-				);
-				OTHER_LDFLAGS = "-m64";
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Debug64;
-		};
-		A1F593C90B8F0E6E00073279 /* Release64 */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = i386;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_VERSION = 4.0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				OTHER_CPLUSPLUSFLAGS = (
-					"$(OTHER_CFLAGS)",
-					"-m64",
-				);
-				OTHER_LDFLAGS = "-m64";
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Release64;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Binpack" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1DEB923208733DC60010E9CD /* Debug */,
-				A1F593C60B8F0E6E00073279 /* Debug64 */,
-				1DEB923308733DC60010E9CD /* Release */,
-				A1F593C70B8F0E6E00073279 /* Release64 */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "binpack" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1DEB923608733DC60010E9CD /* Debug */,
-				A1F593C80B8F0E6E00073279 /* Debug64 */,
-				1DEB923708733DC60010E9CD /* Release */,
-				A1F593C90B8F0E6E00073279 /* Release64 */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
-}
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };
+		0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; };
+		A1F593A60B8F042A00073279 /* binpack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* binpack.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		8DD76F690486A84900D96B5E /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 12;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		0E8A7310136F4A4600453C80 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
+		8DD76F6C0486A84900D96B5E /* Binpack */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Binpack; sourceTree = BUILT_PRODUCTS_DIR; };
+		A1F593A50B8F042A00073279 /* binpack.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = binpack.cpp; path = ../binpack.cpp; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8DD76F660486A84900D96B5E /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		08FB7794FE84155DC02AAC07 /* Binpack */ = {
+			isa = PBXGroup;
+			children = (
+				08FB7795FE84155DC02AAC07 /* Source */,
+				A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+				1AB674ADFE9D54B511CA2CBB /* Products */,
+			);
+			name = Binpack;
+			sourceTree = "<group>";
+		};
+		08FB7795FE84155DC02AAC07 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				A1F593A50B8F042A00073279 /* binpack.cpp */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		1AB674ADFE9D54B511CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8DD76F6C0486A84900D96B5E /* Binpack */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				0E8A7310136F4A4600453C80 /* libtbb.dylib */,
+			);
+			name = "External Frameworks and Libraries";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8DD76F620486A84900D96B5E /* Binpack */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Binpack" */;
+			buildPhases = (
+				8DD76F640486A84900D96B5E /* Sources */,
+				8DD76F660486A84900D96B5E /* Frameworks */,
+				8DD76F690486A84900D96B5E /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = Binpack;
+			productInstallPath = "$(HOME)/bin";
+			productName = Binpack;
+			productReference = 8DD76F6C0486A84900D96B5E /* Binpack */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		08FB7793FE84155DC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0410;
+			};
+			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "binpack" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 1;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 08FB7794FE84155DC02AAC07 /* Binpack */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8DD76F620486A84900D96B5E /* Binpack */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8DD76F640486A84900D96B5E /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A1F593A60B8F042A00073279 /* binpack.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		1DEB923208733DC60010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Binpack;
+				ZERO_LINK = NO;
+			};
+			name = Debug;
+		};
+		1DEB923308733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Binpack;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		1DEB923608733DC60010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug;
+		};
+		1DEB923708733DC60010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release;
+		};
+		A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Binpack;
+				ZERO_LINK = NO;
+			};
+			name = Debug64;
+		};
+		A1F593C70B8F0E6E00073279 /* Release64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				HEADER_SEARCH_PATHS = ../../../../include;
+				INSTALL_PATH = "$(HOME)/bin";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					../../../../lib,
+				);
+				PRODUCT_NAME = Binpack;
+				ZERO_LINK = NO;
+			};
+			name = Release64;
+		};
+		A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				OTHER_CPLUSPLUSFLAGS = (
+					"$(OTHER_CFLAGS)",
+					"-m64",
+				);
+				OTHER_LDFLAGS = "-m64";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Debug64;
+		};
+		A1F593C90B8F0E6E00073279 /* Release64 */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = i386;
+				GCC_ENABLE_CPP_RTTI = YES;
+				GCC_MODEL_TUNING = "";
+				GCC_VERSION = 4.0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				OTHER_CPLUSPLUSFLAGS = (
+					"$(OTHER_CFLAGS)",
+					"-m64",
+				);
+				OTHER_LDFLAGS = "-m64";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SYMROOT = "/tmp/tbb-$(USER)";
+			};
+			name = Release64;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Binpack" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923208733DC60010E9CD /* Debug */,
+				A1F593C60B8F0E6E00073279 /* Debug64 */,
+				1DEB923308733DC60010E9CD /* Release */,
+				A1F593C70B8F0E6E00073279 /* Release64 */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "binpack" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB923608733DC60010E9CD /* Debug */,
+				A1F593C80B8F0E6E00073279 /* Debug64 */,
+				1DEB923708733DC60010E9CD /* Release */,
+				A1F593C90B8F0E6E00073279 /* Release64 */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/graph/dining_philosophers/Makefile b/examples/graph/dining_philosophers/Makefile
index a80a4f9..89ad152 100644
--- a/examples/graph/dining_philosophers/Makefile
+++ b/examples/graph/dining_philosophers/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -39,10 +39,10 @@ endif
 
 all:	release test
 
-release: src/dining_philosophers.cpp
+release: dining_philosophers.cpp
 	$(CXX) -O2 -DNDEBUG -D_CONSOLE $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
 
-debug:  src/dining_philosophers.cpp
+debug:  dining_philosophers.cpp
 	$(CXX) -O0 -D_CONSOLE -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
 
 clean:
diff --git a/examples/graph/dining_philosophers/Makefile.windows b/examples/graph/dining_philosophers/Makefile.windows
index a63b74a..f955886 100644
--- a/examples/graph/dining_philosophers/Makefile.windows
+++ b/examples/graph/dining_philosophers/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -42,9 +42,9 @@ MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
 
 all: release test
 release: 
-	$(CXX) ./src/dining_philosophers.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+	$(CXX) ./dining_philosophers.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
 debug: 
-	$(CXX) ./src/dining_philosophers.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+	$(CXX) ./dining_philosophers.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
 clean:
 	@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
 test:
diff --git a/examples/graph/dining_philosophers/dining_philosophers.cpp b/examples/graph/dining_philosophers/dining_philosophers.cpp
new file mode 100644
index 0000000..b1b447d
--- /dev/null
+++ b/examples/graph/dining_philosophers/dining_philosophers.cpp
@@ -0,0 +1,324 @@
+/*
+    Copyright 2005-2012 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.
+*/
+
+#if _MSC_VER
+    // Suppress "decorated name length exceeded, name was truncated" warning
+    #pragma warning (disable: 4503)
+#endif
+
+#include "tbb/flow_graph.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include "tbb/atomic.h"
+#include "tbb/spin_mutex.h"
+#include <iostream>
+#include "../../common/utility/utility.h"
+#include <cstdlib>
+#include <cstdio>
+
+#if _WIN32 || _WIN64
+#include "windows.h"
+#define SLEEP(a) Sleep(a*1000)
+#else
+#define SLEEP(a) sleep(a)
+#endif
+
+// Each philosopher is an object, and is invoked in the think() function_node, the
+// eat() function_node and forward() multifunction_node.
+//
+// The graph is constructed, and each think() function_node is started with a continue_msg.
+//
+// The philosopher will think, then gather two chopsticks, eat, place the chopsticks back,
+// and if they have not completed the required number of cycles, will start to think() again
+// by sending a continue_msg to their corresponding think() function_node.
+//
+// The reserving join has as its inputs the left and right chopstick queues an a queue
+// that stores the continue_msg emitted by the function_node after think()ing is done.
+// When all three inputs are available, a tuple of the inputs will be forwarded to the
+// eat() function_node.  The output of the eat() function_node is sent to the forward()
+// multifunction_node.
+
+const int think_time = 1;
+const int eat_time = 1;
+const int num_times = 10;
+
+tbb::tick_count t0;
+bool verbose = false;
+
+const char *names[] = { "Archimedes", "Bakunin", "Confucius", "Democritus", "Euclid"
+                      , "Favorinus", "Geminus", "Heraclitus", "Ichthyas", "Jason of Nysa",
+                          "Kant", "Lavrov", "Metrocles", "Nausiphanes", "Onatas", "Phaedrus",
+                          "Quillot", "Russell", "Socrates", "Thales", "Udayana",
+                          "Vernadsky", "Wittgenstein", "Xenophilus", "Yen Yuan", "Zenodotus"
+};
+const int NumPhilosophers = sizeof(names) / sizeof(char*);
+
+struct RunOptions {
+    utility::thread_number_range threads;
+    int number_of_philosophers;
+    bool silent;
+    RunOptions(utility::thread_number_range threads_, int number_of_philosophers_, bool silent_) :
+        threads(threads_), number_of_philosophers(number_of_philosophers_), silent(silent_) { }
+};
+
+RunOptions ParseCommandLine(int argc, char *argv[]) {
+    int auto_threads = tbb::task_scheduler_init::default_num_threads();
+    utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads, auto_threads, auto_threads);
+    int nPhilosophers = 5;
+    bool verbose = false;
+    char charbuf[100];
+    std::sprintf(charbuf, "%d", NumPhilosophers);
+    std::string pCount = "how many philosophers, from 2-";
+    pCount += charbuf;
+
+    utility::cli_argument_pack cli_pack;
+    cli_pack.positional_arg(threads, "n-of_threads", "number of threads to use, a range of the form low[:high], where low and high are non-negative integers or 'auto' for the TBB default.")
+            .positional_arg(nPhilosophers, "n-of-philosophers", pCount)
+            .arg(verbose,"verbose","verbose output");
+    utility::parse_cli_arguments(argc, argv, cli_pack);
+    if(nPhilosophers < 2 || nPhilosophers > NumPhilosophers) {
+        std::cout << "Number of philosophers (" << nPhilosophers << ") out of range [2:" << NumPhilosophers << "]\n";
+        std::cout << cli_pack.usage_string(argv[0]) << std::flush;
+        std::exit(1);
+    }
+    return RunOptions(threads, nPhilosophers,!verbose);
+}
+
+
+tbb::spin_mutex my_mutex;
+
+class chopstick {};
+
+using namespace tbb::flow;
+
+typedef std::tuple<continue_msg, chopstick, chopstick> join_output;
+typedef join_node< join_output, reserving > join_node_type;
+
+typedef function_node<continue_msg, continue_msg> think_node_type;
+typedef function_node<join_output, continue_msg> eat_node_type;
+typedef multifunction_node<continue_msg, join_output> forward_node_type;
+
+class philosopher {
+public:
+
+    philosopher( const char *name ) : 
+        my_name(name), my_count(num_times) { }
+
+    ~philosopher() {
+    }
+
+    void check();
+    const char *name() const { return my_name; }
+
+private:
+
+    friend std::ostream& operator<<(std::ostream& o, philosopher const &p);
+
+    const char *my_name;
+    int my_count;
+
+    friend class think_node_body;
+    friend class eat_node_body;
+    friend class forward_node_body;
+
+    void think( );
+    void eat();
+    void forward( const continue_msg &in, forward_node_type::output_ports_type &out_ports );
+};
+
+std::ostream& operator<<(std::ostream& o, philosopher const &p) {
+    o << "< philosopher[" << reinterpret_cast<uintptr_t>(const_cast<philosopher *>(&p)) << "] " << p.name() 
+        << ", my_count=" << p.my_count;
+    return o;
+}
+
+class think_node_body {
+    philosopher& my_philosopher;
+public:
+    think_node_body( philosopher &p ) : my_philosopher(p) { }
+    think_node_body( const think_node_body &other ) : my_philosopher(other.my_philosopher) { }
+    continue_msg operator()( continue_msg /*m*/) {
+        my_philosopher.think();
+        return continue_msg();
+    } 
+};
+
+class eat_node_body {
+    philosopher &my_philosopher;
+public:
+    eat_node_body( philosopher &p) : my_philosopher(p) {}
+    eat_node_body( const eat_node_body &other ) : my_philosopher(other.my_philosopher) { }
+    continue_msg operator()(const join_output &in) {
+        my_philosopher.eat();
+        return continue_msg();
+    }
+};
+
+class forward_node_body {
+    philosopher &my_philosopher;
+public:
+    forward_node_body( philosopher &p) : my_philosopher(p) {}
+    forward_node_body( const forward_node_body &other ) : my_philosopher(other.my_philosopher) { }
+    void operator()( const continue_msg &in, forward_node_type::output_ports_type &out) {
+        my_philosopher.forward( in, out);
+    }
+};
+
+void philosopher::check() {
+    if ( my_count != 0 ) {
+        std::printf("ERROR: philosopher %s still had to run %d more times\n", name(), my_count);
+        std::exit(1);
+    }
+}
+
+void philosopher::forward( const continue_msg &/*in*/, forward_node_type::output_ports_type &out_ports ) {
+    if(my_count < 0) abort();
+    --my_count;
+    (void)std::get<1>(out_ports).try_put(chopstick());
+    (void)std::get<2>(out_ports).try_put(chopstick());
+    if (my_count > 0) {
+        (void)std::get<0>(out_ports).try_put(continue_msg());  //start thinking again
+    } else {
+        if(verbose) {
+            tbb::spin_mutex::scoped_lock lock(my_mutex);
+            std::printf("%s has left the building\n", name());
+        }
+    }
+}
+
+void philosopher::eat() {
+    if(verbose) {
+        tbb::spin_mutex::scoped_lock lock(my_mutex);
+        std::printf("%s eating\n", name());
+    }
+    SLEEP(eat_time); 
+    if(verbose) {
+        tbb::spin_mutex::scoped_lock lock(my_mutex);
+        std::printf("%s done eating\n", name());
+    }
+}
+
+void philosopher::think() { 
+    if(verbose) {
+        tbb::spin_mutex::scoped_lock lock(my_mutex);
+        std::printf("%s thinking\n", name());
+    }
+    SLEEP(think_time); 
+    if(verbose) {
+        tbb::spin_mutex::scoped_lock lock(my_mutex);
+        std::printf("%s done thinking\n", name());
+    }
+}
+
+typedef queue_node<continue_msg> thinking_done_type;
+
+int main(int argc, char *argv[]) {
+    try {
+        tbb::tick_count main_time = tbb::tick_count::now();
+        int num_threads;
+        int num_philosophers;
+
+        RunOptions options = ParseCommandLine(argc, argv);
+        num_philosophers = options.number_of_philosophers;
+        verbose = !options.silent;
+
+        for(num_threads = options.threads.first; num_threads <= options.threads.last; ++num_threads) {
+
+            tbb::task_scheduler_init init(num_threads);
+
+            graph g;
+
+            if(verbose) std::cout << std::endl << num_philosophers << " philosophers with "
+                << num_threads << " threads" << std::endl << std::endl;
+            t0 = tbb::tick_count::now();
+
+            std::vector<queue_node<chopstick> > places(num_philosophers, queue_node<chopstick>(g));
+            std::vector<philosopher> philosophers;
+            philosophers.reserve(num_philosophers);
+            std::vector<think_node_type *> think_nodes;
+            think_nodes.reserve(num_philosophers);
+            std::vector<thinking_done_type> done_vector(num_philosophers, thinking_done_type(g));
+            std::vector<join_node_type> join_vector(num_philosophers,join_node_type(g));
+            std::vector<eat_node_type *> eat_nodes;
+            eat_nodes.reserve(num_philosophers);
+            std::vector<forward_node_type *> forward_nodes;
+            forward_nodes.reserve(num_philosophers);
+            for ( int i = 0; i < num_philosophers; ++i ) {
+                places[i].try_put(chopstick());
+                philosophers.push_back( philosopher( names[i] ) );  // allowed because of default generated assignment
+                if(verbose) {
+                    tbb::spin_mutex::scoped_lock lock(my_mutex);
+                    std::cout << "Built philosopher " << philosophers[i] << std::endl;
+                }
+                think_nodes.push_back(new think_node_type(g, unlimited, think_node_body(philosophers[i])));
+                eat_nodes.push_back( new eat_node_type(g, unlimited, eat_node_body(philosophers[i])));
+                forward_nodes.push_back( new forward_node_type(g, unlimited, forward_node_body(philosophers[i])));
+            }
+
+            // attach chopstick buffers and think function_nodes to joins
+            for(int i = 0; i < num_philosophers; ++i) {
+                think_nodes[i]->register_successor(done_vector[i]);
+                done_vector[i].register_successor(input_port<0>(join_vector[i]));
+                places[i].register_successor(input_port<1>(join_vector[i])); // left chopstick
+                places[(i+1) % num_philosophers].register_successor(input_port<2>(join_vector[i]));  // right chopstick
+                // attach join to eat function_node
+                join_vector[i].register_successor(*(eat_nodes[i]));
+                // attach eat to forward mofn
+                make_edge(*(eat_nodes[i]), *(forward_nodes[i]));
+                // attach mofn to think function_nodes
+                output_port<0>(*(forward_nodes[i])).register_successor(*(think_nodes[i]));
+                // attach mofn to chopstick queues
+                output_port<1>(*(forward_nodes[i])).register_successor(places[i]);
+                output_port<2>(*(forward_nodes[i])).register_successor(places[(i+1) % num_philosophers]);
+            }
+
+            // start all the philosophers thinking
+            for(int i = 0; i < num_philosophers; ++i) think_nodes[i]->try_put(continue_msg());
+
+            g.wait_for_all();
+
+            tbb::tick_count t1 = tbb::tick_count::now();
+            if(verbose) std::cout << std::endl << num_philosophers << " philosophers with "
+                << num_threads << " threads have taken " << (t1-t0).seconds() << "seconds" << std::endl;
+
+            for ( int i = 0; i < num_philosophers; ++i ) philosophers[i].check();
+
+            for(int i = 0; i < num_philosophers; ++i) {
+                delete think_nodes[i];
+                delete eat_nodes[i];
+                delete forward_nodes[i];
+            }
+        }
+
+        utility::report_elapsed_time((tbb::tick_count::now() - main_time).seconds());
+        return 0;
+    } catch(std::exception& e) {
+        std::cerr<<"error occurred. error text is :\"" <<e.what()<<"\"\n";
+        return 1;
+    }
+}
diff --git a/examples/graph/dining_philosophers/index.html b/examples/graph/dining_philosophers/index.html
index 3cd6177..2cf345b 100644
--- a/examples/graph/dining_philosophers/index.html
+++ b/examples/graph/dining_philosophers/index.html
@@ -20,24 +20,19 @@ to be available before eating.  Eating and thinking are implemented with sleep()
 <DT><A HREF="src">src</A>
 <DD>Contains source file mentioned above.
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Mac OS* Xcode* workspace for building and running the example.
-</DL>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the 
+    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X 
+    systems only).</DL>
 
 <H2>To Build</H2>
 General build directions can be found <A HREF=../../index.html#build>here</A>.
 <P></P>
 
-<H2>Usage</H2>
-<DL>
-For Windows* systems, Microsoft* Visual Studio* projects are provided for each of the above versions. 
-</DL>
-
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/graph/dining_philosophers/msvs/dining_philosophers.vcproj b/examples/graph/dining_philosophers/msvs/dining_philosophers.vcproj
index 431b47a..d49c0b1 100644
--- a/examples/graph/dining_philosophers/msvs/dining_philosophers.vcproj
+++ b/examples/graph/dining_philosophers/msvs/dining_philosophers.vcproj
@@ -342,7 +342,7 @@
 			UniqueIdentifier="{64630469-f82d-4c18-a957-20e5b93130f8}"
 			>
 			<File
-				RelativePath="..\src\dining_philosophers.cpp"
+				RelativePath="..\dining_philosophers.cpp"
 				>
 			</File>
 		</Filter>
diff --git a/examples/graph/dining_philosophers/src/dining_philosophers.cpp b/examples/graph/dining_philosophers/src/dining_philosophers.cpp
deleted file mode 100644
index 03d7f71..0000000
--- a/examples/graph/dining_philosophers/src/dining_philosophers.cpp
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
-    Copyright 2005-2011 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.
-*/
-
-#if _MSC_VER
-    // Suppress "decorated name length exceeded, name was truncated" warning
-    #pragma warning (disable: 4503)
-#endif
-
-#include "tbb/flow_graph.h"
-#include "tbb/task_scheduler_init.h"
-#include "tbb/tick_count.h"
-#include "tbb/atomic.h"
-#include "tbb/spin_mutex.h"
-#include <iostream>
-#include "../../../common/utility/utility.h"
-#include <cstdlib>
-#include <cstdio>
-
-#if _WIN32 || _WIN64
-#include "windows.h"
-#define SLEEP(a) Sleep(a*1000)
-#else
-#define SLEEP(a) sleep(a)
-#endif
-
-// Each philosopher is run as a task in the graph, and its first action is to execute
-// a think(), and then call make_my_node().  make_my_node() will
-//
-//     1) allocate a join_node,
-//     2) link the left and right chopstick queues to the join,
-//     3) allocate a function_node with a node_body that calls eat_and_think().
-//     4) link the join_node to the function_node.
-//
-// While the philosopher participates in the game, it will (when eat_and_think() is invoked)
-//
-//     a) eat (the funtion_node will be invoked only when both chopsticks are available)
-//     b) if we are going to eventually eat again, we just try_put() the chopsticks
-//        back into our queues.  If not, we disconnect our join_node from the queues,
-//        and then place the chopsticks back.
-//     c) If we are going to eat again, we think().
-//
-// philosopher_by_ref allows us to pass an object to g.run() that can be copied, but will
-// retain a reference to our original philosopher.  If this wasn't done, g.run() would store a
-// copy of philosopher, and the original wouldn't be used.
-
-const int think_time = 1;
-const int eat_time = 1;
-const int num_times = 10;
-
-tbb::tick_count t0;
-bool verbose = false;
-
-const char *names[] = { "Archimedes", "Bakunin", "Confucius", "Democritus", "Euclid"
-                      , "Favorinus", "Geminus", "Heraclitus", "Ichthyas", "Jason of Nysa",
-                          "Kant", "Lavrov", "Metrocles", "Nausiphanes", "Onatas", "Phaedrus",
-                          "Quillot", "Russell", "Socrates", "Thales", "Udayana",
-                          "Vernadsky", "Wittgenstein", "Xenophilus", "Yen Yuan", "Zenodotus"
-};
-const int NumPhilosophers = sizeof(names) / sizeof(char*);
-
-// from seismic
-int get_default_num_threads() {
-    static int threads = 0;
-    if ( threads == 0 )
-        threads = tbb::task_scheduler_init::default_num_threads();
-    return threads;
-}
-
-struct RunOptions {
-    utility::thread_number_range threads;
-    int number_of_philosophers;
-    bool silent;
-    RunOptions(utility::thread_number_range threads_, int number_of_philosophers_, bool silent_) :
-        threads(threads_), number_of_philosophers(number_of_philosophers_), silent(silent_) { }
-};
-
-RunOptions ParseCommandLine(int argc, char *argv[]) {
-    int auto_threads = get_default_num_threads();
-    utility::thread_number_range threads(get_default_num_threads, auto_threads, auto_threads);
-    int nPhilosophers = 5;
-    bool verbose = false;
-    char charbuf[100];
-    std::sprintf(charbuf, "%d", NumPhilosophers);
-    std::string pCount = "how many philosophers, from 2-";
-    pCount += charbuf;
-
-    utility::cli_argument_pack cli_pack;
-    cli_pack.positional_arg(threads, "n-of_threads", "number of threads to use, a range of the form low[:high], where low and high are non-negative integers or 'auto' for the TBB default.")
-            .positional_arg(nPhilosophers, "n-of-philosophers", pCount)
-            .arg(verbose,"verbose","verbose output");
-    utility::parse_cli_arguments(argc, argv, cli_pack);
-    if(nPhilosophers < 2 || nPhilosophers > NumPhilosophers) {
-        std::cout << "Number of philosophers (" << nPhilosophers << ") out of range [2:" << NumPhilosophers << "]\n";
-        std::cout << cli_pack.usage_string(argv[0]) << std::flush;
-        std::exit(1);
-    }
-    return RunOptions(threads, nPhilosophers,!verbose);
-}
-
-
-tbb::spin_mutex my_mutex;
-
-class chopstick {};
-
-class philosopher {
-public:
-
-    typedef tbb::flow::queue_node< chopstick > chopstick_buffer;
-    typedef tbb::flow::join_node< std::tuple<chopstick, chopstick>, tbb::flow::reserving > join_type;
-
-    philosopher( const char *name, tbb::flow::graph &the_graph, chopstick_buffer *left, chopstick_buffer *right ) : 
-        my_name(name), my_graph(&the_graph), my_left_chopstick(left), my_right_chopstick(right),
-        my_join(NULL), my_function_node(NULL), my_count(num_times) { }
-
-    ~philosopher() {
-        if(my_join) delete my_join;
-        if(my_function_node) delete my_function_node;
-    }
-
-    void operator()();
-    void check();
-
-    void link_left_chopstick() { my_left_chopstick->register_successor( std::get<0>(my_join->inputs()) ); }
-    void link_right_chopstick() { my_right_chopstick->register_successor( std::get<1>(my_join->inputs()) ); }
-    const char *name() const { return my_name; }
-
-private:
-
-  friend std::ostream& operator<<(std::ostream& o, philosopher const &p);
-
-  const char *my_name;
-  tbb::flow::graph *my_graph;
-  chopstick_buffer *my_left_chopstick;
-  chopstick_buffer *my_right_chopstick;
-  join_type *my_join;
-  tbb::flow::function_node< join_type::output_type, tbb::flow::continue_msg, tbb::flow::rejecting > *my_function_node;
-  int my_count;
-
-  friend class node_body;
-
-  void eat_and_think( );
-  void eat( );
-  void think( );
-  void make_my_node();
-
-};
-
-class philosopher_by_ref {
-    philosopher &my_guy;
-public:
-    philosopher_by_ref(philosopher &_my_guy) : my_guy(_my_guy) { }
-    void operator()() {
-        my_guy();
-    };
-};
-
-std::ostream& operator<<(std::ostream& o, philosopher const &p) {
-    o << "< philosopher[" << reinterpret_cast<uintptr_t>(const_cast<philosopher *>(&p)) << "] " << p.name() 
-        << ", my_count=" << p.my_count;
-    return o;
-}
-
-class node_body {
-  philosopher& my_philosopher;
-public:
-  node_body( philosopher &p ) : my_philosopher(p) { }
-  void operator()( philosopher::join_type::output_type ) {
-    my_philosopher.eat_and_think();
-  } 
-};
-
-void philosopher::operator()() {
-  think();
-  make_my_node(); 
-} 
-
-void philosopher::check() {
-  if ( my_count != 0 ) {
-    std::printf("ERROR: philosopher %s still had to run %d more times\n", name(), my_count);
-    std::exit(1);
-  } else {
-    if(verbose) std::printf("%s done.\n", name());
-  }
-}
-
-void philosopher::eat_and_think( ) { 
-  eat();
-  if(my_count < 0) abort();
-  --my_count;
-
-  if (my_count > 0) {
-    my_left_chopstick->try_put( chopstick() );
-    my_right_chopstick->try_put( chopstick() );
-    think();
-  } else {
-    my_left_chopstick->remove_successor( std::get<0>(my_join->inputs()) );
-    my_right_chopstick->remove_successor( std::get<1>(my_join->inputs()) );
-    my_left_chopstick->try_put( chopstick() );
-    my_right_chopstick->try_put( chopstick() );
-    if(verbose) {
-      tbb::spin_mutex::scoped_lock lock(my_mutex);
-      std::printf("%s has left the building\n", name());
-    }
- 
-  }
-}
-
-void philosopher::eat() { 
-  if(verbose) {
-    tbb::spin_mutex::scoped_lock lock(my_mutex);
-    std::printf("%s eating\n", name());
-  }
-  SLEEP(eat_time); 
-  if(verbose) {
-    tbb::spin_mutex::scoped_lock lock(my_mutex);
-    std::printf("%s done eating\n", name());
-  }
-}
-
-void philosopher::think() { 
-  if(verbose) {
-    tbb::spin_mutex::scoped_lock lock(my_mutex);
-    std::printf("%s thinking\n", name());
-  }
-  SLEEP(think_time); 
-  if(verbose) {
-    tbb::spin_mutex::scoped_lock lock(my_mutex);
-    std::printf("%s done thinking\n", name());
-  }
-}
-
-void philosopher::make_my_node() {
-  my_join = new join_type(*my_graph);
-  link_left_chopstick();
-  link_right_chopstick();
-  my_function_node = 
-    new tbb::flow::function_node< join_type::output_type, tbb::flow::continue_msg , tbb::flow::rejecting >( *my_graph, 
-                                                                         tbb::flow::serial, 
-                                                                         node_body( *this ) );
-  tbb::flow::make_edge( *my_join, *my_function_node );
-}
-
-typedef std::vector<philosopher> p_vector;
-typedef std::vector<tbb::flow::queue_node< chopstick > > chopstick_places;
-
-int main(int argc, char *argv[]) {
-    int num_threads;
-    int num_philosophers;
-
-    RunOptions options = ParseCommandLine(argc, argv);
-    num_philosophers = options.number_of_philosophers;
-    verbose = !options.silent;
-
-    for(num_threads = options.threads.first; num_threads <= options.threads.last; ++num_threads) {
-    
-        tbb::task_scheduler_init init(num_threads);
-
-        tbb::flow::graph g;
-
-        if(verbose) std::printf("\n%d philosophers with %d threads", num_philosophers, num_threads);
-
-        if(verbose) std::printf("\n\n");
-        t0 = tbb::tick_count::now();
-
-        // create queues of (one) chopstick
-        chopstick_places places(num_philosophers, tbb::flow::queue_node<chopstick>(g));
-        for ( int i = 0; i < num_philosophers; ++i ) {
-            places[i].try_put(chopstick());
-        }
-  
-       p_vector philosophers;
-       // must reserve the vector so no reallocation occurs (we're passing references to the vector elements)
-       philosophers.reserve(num_philosophers);
-       for ( int i = 0; i < num_philosophers; ++i ) {
-           philosophers.push_back( philosopher( names[i], g, &(places[i]), &(places[(i+1)%num_philosophers]) ) );
-           if(verbose) {
-               tbb::spin_mutex::scoped_lock lock(my_mutex);
-               std::cout << "Built philosopher " << philosophers[i] << std::endl;
-           }
-           g.run( philosopher_by_ref(philosophers[i]) );
-       }
-
-       g.wait_for_all();
-
-       tbb::tick_count t1 = tbb::tick_count::now();
-       if(verbose) utility::report_elapsed_time((t1-t0).seconds());
-
-       for ( int i = 0; i < num_philosophers; ++i ) 
-           philosophers[i].check();
-   }
-
-   return 0;
-}
diff --git a/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj b/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj
index 477fde1..fc04882 100644
--- a/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj
+++ b/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj
@@ -27,7 +27,7 @@
 
 /* Begin PBXFileReference section */
 		8DD76F6C0486A84900D96B5E /* dining_philosophers */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dining_philosophers; sourceTree = BUILT_PRODUCTS_DIR; };
-		A1F593A50B8F042A00073279 /* dining_philosophers.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = dining_philosophers.cpp; path = ../src/dining_philosophers.cpp; sourceTree = SOURCE_ROOT; };
+		A1F593A50B8F042A00073279 /* dining_philosophers.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = dining_philosophers.cpp; path = ../dining_philosophers.cpp; sourceTree = SOURCE_ROOT; };
 		A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
 /* End PBXFileReference section */
 
diff --git a/examples/graph/index.html b/examples/graph/index.html
index 5b9e942..dd28c46 100644
--- a/examples/graph/index.html
+++ b/examples/graph/index.html
@@ -10,12 +10,14 @@ This directory has examples of <code>tbb::flow</code>.
 <DD>An implementation of dining philosophers in graph using the reserving join node.
 <DT><A HREF="binpack/index.html">binpack</A>
 <DD>A solution to the binpacking problem using a queue_node, a buffer_node and function_nodes.
+<DT><A HREF="logic_sim/index.html">logic_sim</A>
+<DD>A simplistic example of a collection of digital logic gates that can be easily composed into larger circuits.
 </DL>
 
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/graph/logic_sim/D_latch.h b/examples/graph/logic_sim/D_latch.h
new file mode 100644
index 0000000..15fd82e
--- /dev/null
+++ b/examples/graph/logic_sim/D_latch.h
@@ -0,0 +1,64 @@
+/*
+    Copyright 2005-2012 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 __TBBexample_graph_logicsim_dlatch_H
+#define __TBBexample_graph_logicsim_dlatch_H 1
+
+#include "basics.h"
+
+class D_latch {
+    broadcast_node<signal_t> D_port;
+    broadcast_node<signal_t> E_port;
+    not_gate a_not;
+    and_gate<two_input> first_and;
+    and_gate<two_input> second_and;
+    nor_gate<two_input> first_nor;
+    nor_gate<two_input> second_nor;
+    graph& my_graph;
+ public:
+    D_latch(graph& g) : my_graph(g), D_port(g), E_port(g), a_not(g), first_and(g), second_and(g), 
+                        first_nor(g), second_nor(g) 
+    {
+        make_edge(D_port, a_not.get_in(0));
+        make_edge(D_port, second_and.get_in(1));
+        make_edge(E_port, first_and.get_in(1));
+        make_edge(E_port, second_and.get_in(0));
+        make_edge(a_not.get_out(), first_and.get_in(0));
+        make_edge(first_and.get_out(), first_nor.get_in(0));
+        make_edge(second_and.get_out(), second_nor.get_in(1));
+        make_edge(first_nor.get_out(), second_nor.get_in(0));
+        make_edge(second_nor.get_out(), first_nor.get_in(1));
+    }
+    ~D_latch() {}
+    receiver<signal_t>& get_D() { return D_port; }
+    receiver<signal_t>& get_E() { return E_port; }
+    sender<signal_t>& get_Q() { return first_nor.get_out(); }
+    sender<signal_t>& get_notQ() { return second_nor.get_out(); }
+};
+
+#endif /* __TBBexample_graph_logicsim_dlatch_H */
diff --git a/examples/graph/logic_sim/Makefile b/examples/graph/logic_sim/Makefile
new file mode 100644
index 0000000..c069095
--- /dev/null
+++ b/examples/graph/logic_sim/Makefile
@@ -0,0 +1,57 @@
+# Copyright 2005-2012 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.
+
+# GNU Makefile that builds and runs example.
+PROG=test_all
+ARGS=4
+PERF_RUN_ARGS=auto silent
+
+# The C++ compiler
+ifneq (,$(shell which icc 2>/dev/null))
+CXX=icc
+endif # which icc
+
+ifeq ($(shell uname), Linux)
+LIBS+= -lrt 
+endif
+
+all:    release test
+
+release: *.cpp
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $(PROG).cpp -ltbb $(LIBS) $(CXX0XFLAGS)
+
+debug: *.cpp
+	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $(PROG).cpp -ltbb_debug $(LIBS) $(CXX0XFLAGS)
+clean:
+	$(RM) $(PROG) *.o *.d
+
+test:
+	./$(PROG) $(ARGS)
+
+perf_build: release
+
+perf_run:
+	./$(PROG) $(PERF_RUN_ARGS)
diff --git a/examples/graph/logic_sim/Makefile.windows b/examples/graph/logic_sim/Makefile.windows
new file mode 100644
index 0000000..8e3bde4
--- /dev/null
+++ b/examples/graph/logic_sim/Makefile.windows
@@ -0,0 +1,61 @@
+# Copyright 2005-2012 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.
+
+# Common Makefile that builds and runs example.
+PROG=test_all
+ARGS=4
+PERF_RUN_ARGS=auto silent
+
+# Try to find icl.exe
+CXX1 = $(TBB_CXX)-
+CXX2 = $(CXX1:icl.exe-=icl.exe)
+CXX  = $(CXX2:-=cl.exe)
+
+# The C++ compiler options
+MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all:	release test
+
+release: *.cpp
+	$(CXX) $(PROG).cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+
+debug: *.cpp
+	$(CXX) $(PROG).cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+
+clean:
+	@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+
+test:
+	$(PROG) $(ARGS)
+
+compiler_check:
+	@$(CXX) >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly"
+
+perf_build: release
+
+perf_run:
+	$(PROG) $(PERF_RUN_ARGS)
diff --git a/examples/graph/logic_sim/basics.h b/examples/graph/logic_sim/basics.h
new file mode 100644
index 0000000..00e91cc
--- /dev/null
+++ b/examples/graph/logic_sim/basics.h
@@ -0,0 +1,543 @@
+/*
+    Copyright 2005-2012 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 __TBBexample_graph_logicsim_basics_H
+#define __TBBexample_graph_logicsim_basics_H 1
+
+#define TBB_PREVIEW_GRAPH_NODES 1
+
+#include <cstdio>
+#include <string>
+#include "tbb/atomic.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include "tbb/flow_graph.h"
+#include "../../common/utility/utility.h"
+
+#ifndef _WIN32
+#include <sys/time.h>
+#include <unistd.h>
+
+void rt_sleep(int msec) {
+    usleep(msec*1000);
+}
+
+#else //_WIN32
+
+#undef OLDUNIXTIME
+#undef STDTIME
+
+#include <windows.h>
+
+void rt_sleep(int msec) {
+    Sleep(msec);
+}
+#endif  /*  _WIN32  */
+
+
+using namespace std;
+using namespace tbb;
+using namespace tbb::flow;
+
+typedef enum { low=0, high, undefined } signal_t;
+
+typedef tuple<signal_t> one_input;
+typedef tuple<signal_t, signal_t> two_input;
+typedef tuple<signal_t, signal_t, signal_t> three_input;
+typedef tuple<signal_t, signal_t, signal_t, signal_t> four_input;
+
+template <int N>
+struct gate_helper {
+    template <typename TupleType>
+    static inline receiver<signal_t>& get_inport(or_node<TupleType>& in_ports, int port) {
+        if (N-1 == port) return input_port<N-1>(in_ports);
+        else return gate_helper<N-1>::get_inport(in_ports, port);
+    }
+};
+template <>
+struct gate_helper<1> {
+    template <typename TupleType>
+    static inline receiver<signal_t>& get_inport(or_node<TupleType>& in_ports, int port) {
+        return input_port<0>(in_ports);
+    }
+};
+
+template <typename GateInput>
+class gate {
+protected:
+    typedef or_node<GateInput> input_port_t;
+    typedef multifunction_node< typename input_port_t::output_type, tuple<signal_t> > gate_fn_t;
+    typedef typename gate_fn_t::output_ports_type ports_type;
+public:
+    static const int N = std::tuple_size<GateInput>::value;
+
+    template <typename Body>
+    gate(graph& g, Body b) : my_graph(g), in_ports(g), gate_fn(g, 1, b) {
+        make_edge(in_ports, gate_fn);
+    }
+    virtual ~gate() {}
+    gate& operator=(const gate& src) { return *this; }
+    sender<signal_t>& get_out() { return output_port<0>(gate_fn); }
+    receiver<signal_t>& get_in(size_t port) {
+        return gate_helper<N>::get_inport(in_ports, (int)port);
+    }
+protected:
+    graph& my_graph;
+private:
+    input_port_t in_ports;
+    gate_fn_t gate_fn;
+};
+
+
+template <int N>
+struct or_output_helper {
+    template <typename OrOutputType>
+    static inline signal_t get_or_output(const OrOutputType& out) {
+        if (N-1 == out.indx) return std::get<N-1>(out.result);
+        else return or_output_helper<N-1>::get_or_output(out);
+    }
+};
+template <>
+struct or_output_helper<1> {
+    template <typename OrOutputType>
+    static inline signal_t get_or_output(const OrOutputType& out) {
+        return std::get<0>(out.result);
+    }
+};
+
+// Input devices
+class steady_signal {
+    graph& my_graph;
+    signal_t init_signal;
+    write_once_node<signal_t> signal_node;
+ public:
+    steady_signal(graph& g, signal_t v) :
+        my_graph(g), init_signal(v), signal_node(g) {}
+    steady_signal(const steady_signal& src) : 
+        my_graph(src.my_graph), init_signal(src.init_signal), 
+        signal_node(src.my_graph) {}
+    ~steady_signal() {}
+    // Assignment is ignored
+    steady_signal& operator=(const steady_signal& src) { return *this; }
+    sender<signal_t>& get_out() { return signal_node; }
+    void activate() { signal_node.try_put(init_signal); }
+};
+
+class pulse {
+    class clock_body {
+        size_t& ms;
+        int& reps;
+        signal_t val;
+    public:
+        clock_body(size_t& _ms, int& _reps) : ms(_ms), reps(_reps), val(low) {}
+        bool operator()(signal_t& out) {
+            rt_sleep((int)ms);
+            if (reps>0) --reps;
+            if (val==low) val = high;
+            else val = low;
+            out = val;
+            return reps>0 || reps == -1;
+        }
+    };
+    graph& my_graph;
+    size_t ms, init_ms;
+    int reps, init_reps;
+    source_node<signal_t> clock_node;
+
+public:
+    pulse(graph& g, size_t _ms=1000, int _reps=-1) : 
+        my_graph(g), ms(_ms), init_ms(_ms), reps(_reps), init_reps(_reps),
+        clock_node(g, clock_body(ms, reps), false)
+    {}
+    pulse(const pulse& src) : 
+        my_graph(src.my_graph), ms(src.init_ms), init_ms(src.init_ms),
+        reps(src.init_reps), init_reps(src.init_reps), 
+        clock_node(src.my_graph, clock_body(ms, reps), false)
+    {}
+    ~pulse() {}
+    // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph
+    pulse& operator=(const pulse& src) {
+        ms = src.ms; init_ms = src.init_ms; reps = src.reps; init_reps = src.init_reps;
+        return *this; 
+    }
+    sender<signal_t>& get_out() { return clock_node; }
+    void activate() { clock_node.activate(); }
+    void reset() { reps = init_reps; }
+};
+    
+class push_button {
+    graph& my_graph;
+    overwrite_node<signal_t> push_button_node;
+ public:
+    push_button(graph& g) : my_graph(g), push_button_node(g) { 
+        push_button_node.try_put(low);
+    }
+    push_button(const push_button& src) : 
+        my_graph(src.my_graph), push_button_node(src.my_graph) { 
+        push_button_node.try_put(low);
+    }
+    ~push_button() {}
+    // Assignment is ignored
+    push_button& operator=(const push_button& src) { return *this; }
+    sender<signal_t>& get_out() { return push_button_node; }
+    void press() { push_button_node.try_put(high); }
+    void release() { push_button_node.try_put(low); }
+};
+
+class toggle {
+    graph& my_graph;
+    signal_t state;
+    overwrite_node<signal_t> toggle_node;
+ public:
+    toggle(graph& g) : my_graph(g), state(undefined), toggle_node(g) {}
+    toggle(const toggle& src) : my_graph(src.my_graph), state(undefined), 
+                                toggle_node(src.my_graph) {}
+    ~toggle() {}
+    // Assignment ignored
+    toggle& operator=(const toggle& src) { return *this; }
+    sender<signal_t>& get_out() { return toggle_node; }
+    void flip() { 
+        if (state==high) state = low; 
+        else state = high;
+        toggle_node.try_put(state); 
+    }
+    void activate() { 
+        state = low;
+        toggle_node.try_put(state);
+    }
+};
+
+// Basic gates
+class buffer : public gate<one_input> {
+    using gate<one_input>::my_graph;
+    typedef gate<one_input>::ports_type ports_type;
+    class buffer_body {
+        signal_t state;
+        bool touched;
+    public:
+        buffer_body() : state(undefined), touched(false) {}
+        void operator()(const input_port_t::output_type &v, ports_type& p) { 
+            if (!touched || state != std::get<0>(v.result)) {
+                state = std::get<0>(v.result); 
+                std::get<0>(p).try_put(state); 
+                touched = true;
+            }
+        }
+    };
+public: 
+    buffer(graph& g) : gate<one_input>(g, buffer_body()) {}
+    buffer(const buffer& src) : gate<one_input>(src.my_graph, buffer_body()) {}
+    ~buffer() {}
+};
+
+class not_gate : public gate<one_input> {
+    using gate<one_input>::my_graph;
+    typedef gate<one_input>::ports_type ports_type;
+    class not_body {
+        signal_t port;
+        bool touched;
+    public:
+    not_body() : port(undefined), touched(false) {}
+        void operator()(const input_port_t::output_type &v, ports_type& p) {
+            if (!touched || port != std::get<0>(v.result)) {
+                port = std::get<0>(v.result);
+                signal_t state = low;
+                if (port==low) state = high; 
+                std::get<0>(p).try_put(state);
+                touched = true;
+            }
+        }
+    };
+ public: 
+    not_gate(graph& g) : gate<one_input>(g, not_body()) {}
+    not_gate(const not_gate& src) : gate<one_input>(src.my_graph, not_body()) {}
+    ~not_gate() {}
+};
+
+template <typename GateInput>
+class and_gate : public gate<GateInput> {
+    using gate<GateInput>::N;
+    using gate<GateInput>::my_graph;
+    typedef typename gate<GateInput>::ports_type ports_type;
+    typedef typename gate<GateInput>::input_port_t::output_type from_input;
+    typedef or_output_helper< gate<GateInput>::N > or_output;
+    class and_body {
+        signal_t *ports;
+        signal_t state;
+        bool touched;
+    public:
+        and_body() : state(undefined), touched(false) {
+            ports = new signal_t[N];
+            for (int i=0; i<N; ++i) ports[i] = undefined;
+        }
+        void operator()(const from_input& v, ports_type& p) {
+            ports[v.indx] = or_output::get_or_output(v);
+            signal_t new_state=high;
+            size_t i=0;
+            while (i<N) {
+                if (ports[i] == low) { new_state = low; break; }
+                else if (ports[i] == undefined && new_state != low) { new_state = undefined; }
+                ++i;
+            }
+            if (!touched || state != new_state) {
+                state = new_state;
+                std::get<0>(p).try_put(state);
+                touched = true;
+            }
+        }
+    };
+ public:
+    and_gate(graph& g) : gate<GateInput>(g, and_body()) {}
+    and_gate(const and_gate<GateInput>& src) : gate<GateInput>(src.my_graph, and_body()) {}
+    ~and_gate() {}
+};
+
+template <typename GateInput>
+class or_gate : public gate<GateInput> {
+    using gate<GateInput>::N;
+    using gate<GateInput>::my_graph;
+    typedef typename gate<GateInput>::ports_type ports_type;
+    typedef typename gate<GateInput>::input_port_t::output_type from_input;
+    typedef or_output_helper< gate<GateInput>::N > or_output;
+    class or_body {
+        signal_t *ports;
+        signal_t state;
+        bool touched;
+    public:
+        or_body() : state(undefined), touched(false) {
+            ports = new signal_t[N];
+            for (int i=0; i<N; ++i) ports[i] = undefined;
+        }
+        void operator()(const from_input& v, ports_type& p) {
+            ports[v.indx] = or_output::get_or_output(v);
+            signal_t new_state=low;
+            size_t i=0;
+            while (i<N) {
+                if (ports[i] == high) { new_state = high; break; }
+                else if (ports[i] == undefined && new_state != high) { new_state = undefined; }
+                ++i;
+            }
+            if (!touched || state != new_state) {
+                state = new_state;
+                std::get<0>(p).try_put(state);
+                touched = true;
+            }
+        }
+    };
+public:
+    or_gate(graph& g) : gate<GateInput>(g, or_body()) {}
+    or_gate(const or_gate& src) : gate<GateInput>(src.my_graph, or_body()) {}
+    ~or_gate() {}
+};
+
+template <typename GateInput>
+class xor_gate : public gate<GateInput> {
+    using gate<GateInput>::N;
+    using gate<GateInput>::my_graph;
+    typedef typename gate<GateInput>::ports_type ports_type;
+    typedef typename gate<GateInput>::input_port_t input_port_t;
+    typedef or_output_helper< gate<GateInput>::N > or_output;
+    class xor_body {
+        signal_t *ports;
+        signal_t state;
+        bool touched;
+    public:
+        xor_body() : state(undefined), touched(false) {
+            ports = new signal_t[N];
+            for (int i=0; i<N; ++i) ports[i] = undefined;
+        }
+        void operator()(const typename input_port_t::output_type &v, ports_type& p) {
+            ports[v.indx] = or_output::get_or_output(v);
+            signal_t new_state=low;
+            size_t i=0, highs=0;
+            while (i<N) {
+                if (ports[i] == undefined) { new_state = undefined; }  
+                else if (ports[i] == high && new_state == low) { new_state = high; ++highs; }
+                else if (ports[i] == high && highs > 0) { new_state = low; break; }
+                else if (ports[i] == high ) { ++highs; }
+                ++i;
+            }
+            if (!touched || state != new_state) {
+                state = new_state;
+                std::get<0>(p).try_put(state);
+                touched = true;
+            }
+        }
+    };
+ public:
+    xor_gate(graph& g) : gate<GateInput>(g, xor_body()) {}
+    xor_gate(const xor_gate& src) : gate<GateInput>(src.my_graph, xor_body()) {}
+    ~xor_gate() {}
+};
+
+template <typename GateInput>
+class nor_gate : public gate<GateInput> {
+    using gate<GateInput>::N;
+    using gate<GateInput>::my_graph;
+    typedef typename gate<GateInput>::ports_type ports_type;
+    typedef typename gate<GateInput>::input_port_t input_port_t;
+    typedef or_output_helper< gate<GateInput>::N > or_output;
+    class nor_body {
+        signal_t *ports;
+        signal_t state;
+        bool touched;
+    public:
+        nor_body() : state(undefined), touched(false) {
+            ports = new signal_t[N];
+            for (int i=0; i<N; ++i) ports[i] = undefined;
+        }
+        void operator()(const typename input_port_t::output_type &v, ports_type& p) {
+            ports[v.indx] = or_output::get_or_output(v);
+            signal_t new_state=low;
+            size_t i=0;
+            while (i<N) {
+                if (ports[i] == high) { new_state = high; break; }
+                else if (ports[i] == undefined && new_state != high) { new_state = undefined; }
+                ++i;
+            }
+            if (new_state == high) new_state = low;
+            else if (new_state == low) new_state = high;
+            if (!touched || state != new_state) {
+                state = new_state;
+                std::get<0>(p).try_put(state);
+                touched = true;
+            }
+        }
+    };
+ public:
+    nor_gate(graph& g) : gate<GateInput>(g, nor_body()) {}
+    nor_gate(const nor_gate& src) : gate<GateInput>(src.my_graph, nor_body()) {}
+    ~nor_gate() {}
+};
+
+// Output devices
+class led {
+    class led_body {
+        signal_t &state;
+        string &label;
+        bool report_changes;
+        bool touched;
+    public:
+        led_body(signal_t &s, string &l, bool r) :
+            state(s), label(l), report_changes(r), touched(false)
+        {}
+        continue_msg operator()(signal_t b) {
+            if (!touched || b!=state) {
+                state = b;
+                if (state != undefined && report_changes) {
+                    if (state) printf("%s: (*)\n", label.c_str());
+                    else printf("%s: ( )\n", label.c_str());
+                }
+                touched = false;
+            }
+            return continue_msg();
+        }
+    };
+    graph& my_graph;
+    string label;
+    signal_t state;
+    bool report_changes;
+    function_node<signal_t, continue_msg> led_node;
+ public:
+    led(graph& g, string l, bool rc=false) : my_graph(g), label(l), state(undefined), 
+                                             report_changes(rc), 
+                                             led_node(g, 1, led_body(state, label, report_changes))
+    {}
+    led(const led& src) : my_graph(src.my_graph), label(src.label), state(undefined), 
+                          report_changes(src.report_changes), 
+                          led_node(src.my_graph, 1, led_body(state, label, report_changes)) 
+    {}
+    ~led() {}
+    // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph
+    // state is set to undefined so that next signal changes it
+    led& operator=(const led& src) { 
+        label = src.label; state = undefined; report_changes = src.report_changes; 
+        return *this;
+    }
+    receiver<signal_t>& get_in() { return led_node; }
+    void display() { 
+        if (state == high) printf("%s: (*)\n", label.c_str());
+        else if (state == low) printf("%s: ( )\n", label.c_str());
+        else printf("%s: (u)\n", label.c_str());
+    }
+    signal_t get_value() { return state; }
+};
+
+class digit : public gate<four_input> {
+    using gate<four_input>::my_graph;
+    typedef gate<four_input>::ports_type ports_type;
+    typedef gate<four_input>::input_port_t input_port_t;
+    class digit_body {
+        signal_t ports[4];
+        unsigned int &state;
+        string &label;
+        bool& report_changes;
+    public:
+        digit_body(unsigned int &s, string &l, bool& r) : state(s), label(l), report_changes(r) {
+            for (int i=0; i<N; ++i) ports[i] = undefined;
+        }
+        void operator()(const input_port_t::output_type& v, ports_type& p) {
+            unsigned int new_state = 0;
+            if (v.indx == 0) ports[0] = std::get<0>(v.result);
+            else if (v.indx == 1) ports[1] = std::get<1>(v.result);
+            else if (v.indx == 2) ports[2] = std::get<2>(v.result);
+            else if (v.indx == 3) ports[3] = std::get<3>(v.result);
+            if (ports[0] == high) ++new_state;
+            if (ports[1] == high) new_state += 2;
+            if (ports[2] == high) new_state += 4;
+            if (ports[3] == high) new_state += 8;
+            if (state != new_state) {
+                state = new_state;
+                if (report_changes) {
+                    printf("%s: %x\n", label.c_str(), state);
+                }
+            }
+        }
+    };
+    string label;
+    unsigned int state;
+    bool report_changes;
+ public:
+    digit(graph& g, string l, bool rc=false) : 
+        gate<four_input>(g, digit_body(state, label, report_changes)), 
+        label(l), state(0), report_changes(rc) {}
+    digit(const digit& src) : 
+        gate<four_input>(src.my_graph, digit_body(state, label, report_changes)), 
+        label(src.label), state(0), report_changes(src.report_changes) {}
+    ~digit() {}
+    // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph.
+    // state is reset as in constructors
+    digit& operator=(const digit& src) { 
+        label = src.label; state = 0; report_changes = src.report_changes; 
+        return *this;
+    }
+    void display() { printf("%s: %x\n", label.c_str(), state); }
+    unsigned int get_value() { return state; }
+};
+
+#endif /* __TBBexample_graph_logicsim_basics_H */
diff --git a/examples/graph/logic_sim/four_bit_adder.h b/examples/graph/logic_sim/four_bit_adder.h
new file mode 100644
index 0000000..ca4185b
--- /dev/null
+++ b/examples/graph/logic_sim/four_bit_adder.h
@@ -0,0 +1,70 @@
+/*
+    Copyright 2005-2012 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 __TBBexample_graph_logicsim_fba_H
+#define __TBBexample_graph_logicsim_fba_H 1
+
+#include "one_bit_adder.h"
+
+class four_bit_adder {
+    graph& my_graph;
+    std::vector<one_bit_adder> four_adders; 
+ public:
+    four_bit_adder(graph& g) : my_graph(g), four_adders(4, one_bit_adder(g)) {
+        make_connections();
+    }
+    four_bit_adder(const four_bit_adder& src) : 
+        my_graph(src.my_graph), four_adders(4, one_bit_adder(src.my_graph)) 
+    {
+        make_connections();
+    }
+    ~four_bit_adder() {}
+    receiver<signal_t>& get_A(size_t bit) {
+        return four_adders[bit].get_A();
+    }
+    receiver<signal_t>& get_B(size_t bit) {
+        return four_adders[bit].get_B();
+    }
+    receiver<signal_t>& get_CI() {
+        return four_adders[0].get_CI();
+    }
+    sender<signal_t>& get_out(size_t bit) {
+        return four_adders[bit].get_out();
+    }
+    sender<signal_t>& get_CO() {
+        return four_adders[3].get_CO();
+    }
+private:
+    void make_connections() {
+        make_edge(four_adders[0].get_CO(), four_adders[1].get_CI());
+        make_edge(four_adders[1].get_CO(), four_adders[2].get_CI());
+        make_edge(four_adders[2].get_CO(), four_adders[3].get_CI());
+    }
+};
+
+#endif /* __TBBexample_graph_logicsim_fba_H */
diff --git a/examples/graph/logic_sim/index.html b/examples/graph/logic_sim/index.html
new file mode 100644
index 0000000..d3940b4
--- /dev/null
+++ b/examples/graph/logic_sim/index.html
@@ -0,0 +1,67 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+
+This directory contains a simple tbb::flow example that performs
+simplistic digital logic simulations with basic logic gates that can
+be easily composed to create more interesting circuits.  It
+exemplifies the multifunction_node and the or_node CPF, among others.
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="basics.h">basics.h</A>
+<DD>Several I/O devices and basic gates.
+<DT><A HREF="one_bit_adder.h">one_bit_adder.h</A>
+<DD>A one-bit full adder composed of basic gates.
+<DT><A HREF="four_bit_adder.h">four_bit_adder.h</A>
+<DD>A four-bit full adder composed of one-bit adders.
+<DT><A HREF="D_latch.h">D_latch.h</A>
+<DD>A D-latch composed of basic gates.
+<DT><A HREF="test_all.cpp">test_all.cpp</A>
+<DD>A simple test program that exercises the code in the headers.
+
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="msvs">msvs</A>
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example with the Intel® C++ compiler (Windows* systems only).
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X systems only).
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+<P></P>
+
+<H2>Usage</H2>
+<DL>
+
+<DT><TT>test_all <I>-h</I></TT>
+<DD>Prints the help for command line options
+<DT><TT>test_all [<I>#threads</I>=value] [<I>verbose</I>] [<I>silent</I>] [<I>#threads</I>]</TT>
+<DD><I>#threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>] where low and optional high are non-negative integers, or 'auto' for the TBB default.<BR>
+    <I>verbose</I> print diagnostic output to screen<BR>
+    <I>silent</I> limits output to timing info; overrides verbose<BR>
+
+<DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
+<DD>Build a <I>debug</I> version of the example
+    (see the <A HREF=../../index.html#build>build directions</A>).
+    <BR>Run it with the desired number of threads, e.g., <TT>test_all 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
+<P></P>
+Intel is a registered trademark or trademark 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.
+</BODY>
+</HTML>
diff --git a/examples/graph/logic_sim/msvs/logic_sim_cl.sln b/examples/graph/logic_sim/msvs/logic_sim_cl.sln
new file mode 100644
index 0000000..7865512
--- /dev/null
+++ b/examples/graph/logic_sim/msvs/logic_sim_cl.sln
@@ -0,0 +1,52 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_all", "test_all.vcproj", "{6E9B1702-78E0-4D64-B771-8B274D963B58}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|Win32.Build.0 = Debug|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|x64.ActiveCfg = Debug|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|x64.Build.0 = Debug|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|Win32.ActiveCfg = Release|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|Win32.Build.0 = Release|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|x64.ActiveCfg = Release|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|x64.Build.0 = Release|x64
+
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.Debug|Win32.ActiveCfg = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.Debug|Win32.Build.0 = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.Debug|x64.ActiveCfg = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.Debug|x64.Build.0 = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.Release|Win32.ActiveCfg = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.Release|Win32.Build.0 = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.Release|x64.Build.0 = Release|x64
+
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.Debug|Win32.Build.0 = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.Debug|x64.ActiveCfg = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.Debug|x64.Build.0 = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.Release|Win32.ActiveCfg = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.Release|Win32.Build.0 = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.Release|x64.Build.0 = Release|x64
+
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.Debug|Win32.Build.0 = Debug|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.Debug|x64.ActiveCfg = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.Debug|x64.Build.0 = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.Release|Win32.ActiveCfg = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.Release|Win32.Build.0 = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/examples/graph/logic_sim/msvs/logic_sim_icl.sln b/examples/graph/logic_sim/msvs/logic_sim_icl.sln
new file mode 100644
index 0000000..b62ecdd
--- /dev/null
+++ b/examples/graph/logic_sim/msvs/logic_sim_icl.sln
@@ -0,0 +1,132 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{EAF909A5-FA59-4C3D-9431-0FCC20D5BCF9}") = "test_all", "test_all.icproj", "{2D08E05F-D0E0-48A7-9597-28B95ACE70B6}"
+        ProjectSection(ProjectDependencies) = postProject
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830} = {5F685DBD-9A04-4E94-A1CA-FC48FE799830}
+        EndProjectSection
+EndProject
+Global
+        GlobalSection(SolutionConfigurationPlatforms) = preSolution
+                DD Debug|Win32 = DD Debug|Win32
+                DD Debug|x64 = DD Debug|x64
+                DD Release|Win32 = DD Release|Win32
+                DD Release|x64 = DD Release|x64
+        EndGlobalSection
+        GlobalSection(ProjectConfigurationPlatforms) = postSolution
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.DD Debug|Win32.Build.0 = DDDebug|Win32
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.DD Debug|x64.ActiveCfg = DDDebug|x64
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.DD Debug|x64.Build.0 = DDDebug|x64
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.DD Release|Win32.Build.0 = DDRelease|Win32
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.DD Release|x64.ActiveCfg = DDRelease|x64
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.DD Release|x64.Build.0 = DDRelease|x64
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.GDI Debug|Win32.Build.0 = Debug|Win32
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.GDI Debug|x64.ActiveCfg = Debug|x64
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}.GDI Debug|x64.Build.0 = Debug|x64
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}._GDI Release|Win32.ActiveCfg = Release|Win32
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}._GDI Release|Win32.Build.0 = Release|Win32
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}._GDI Release|x64.ActiveCfg = Release|x64
+                {2D08E05F-D0E0-48A7-9597-28B95ACE70B6}._GDI Release|x64.Build.0 = Release|x64
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.DD Debug|Win32.Build.0 = DDDebug|Win32
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.DD Debug|x64.ActiveCfg = DDDebug|x64
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.DD Debug|x64.Build.0 = DDDebug|x64
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.DD Release|Win32.Build.0 = DDRelease|Win32
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.DD Release|x64.ActiveCfg = DDRelease|x64
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.DD Release|x64.Build.0 = DDRelease|x64
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.GDI Debug|Win32.Build.0 = Debug|Win32
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.GDI Debug|x64.ActiveCfg = Debug|x64
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}.GDI Debug|x64.Build.0 = Debug|x64
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}._GDI Release|Win32.ActiveCfg = Release|Win32
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}._GDI Release|Win32.Build.0 = Release|Win32
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}._GDI Release|x64.ActiveCfg = Release|x64
+                {5F685DBD-9A04-4E94-A1CA-FC48FE799830}._GDI Release|x64.Build.0 = Release|x64
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.DD Debug|Win32.Build.0 = DDDebug|Win32
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.DD Debug|x64.ActiveCfg = DDDebug|x64
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.DD Debug|x64.Build.0 = DDDebug|x64
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.DD Release|Win32.Build.0 = DDRelease|Win32
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.DD Release|x64.ActiveCfg = DDRelease|x64
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.DD Release|x64.Build.0 = DDRelease|x64
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.GDI Debug|Win32.Build.0 = Debug|Win32
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.GDI Debug|x64.ActiveCfg = Debug|x64
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}.GDI Debug|x64.Build.0 = Debug|x64
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}._GDI Release|Win32.ActiveCfg = Release|Win32
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}._GDI Release|Win32.Build.0 = Release|Win32
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}._GDI Release|x64.ActiveCfg = Release|x64
+                {E085A8DB-75D4-4927-9631-6368E6D0EE72}._GDI Release|x64.Build.0 = Release|x64
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.DD Debug|Win32.Build.0 = DDDebug|Win32
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.DD Debug|x64.ActiveCfg = DDDebug|x64
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.DD Debug|x64.Build.0 = DDDebug|x64
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.DD Release|Win32.Build.0 = DDRelease|Win32
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.DD Release|x64.ActiveCfg = DDRelease|x64
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.DD Release|x64.Build.0 = DDRelease|x64
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.GDI Debug|Win32.Build.0 = Debug|Win32
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.GDI Debug|x64.ActiveCfg = Debug|x64
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}.GDI Debug|x64.Build.0 = Debug|x64
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}._GDI Release|Win32.ActiveCfg = Release|Win32
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}._GDI Release|Win32.Build.0 = Release|Win32
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}._GDI Release|x64.ActiveCfg = Release|x64
+                {4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}._GDI Release|x64.Build.0 = Release|x64
+                {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.ActiveCfg = Debug|Win32
+                {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = Debug|x64
+                {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.ActiveCfg = Release|Win32
+                {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = Release|x64
+                {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+                {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.Build.0 = Debug|Win32
+                {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.ActiveCfg = Debug|x64
+y                {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.Build.0 = Debug|x64
+                {6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.ActiveCfg = Release|Win32
+                {6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.Build.0 = Release|Win32
+                {6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.ActiveCfg = Release|x64
+                {6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.Build.0 = Release|x64
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.ActiveCfg = Debug|Win32
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = Debug|x64
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.ActiveCfg = Release|Win32
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = Release|x64
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.Build.0 = Debug|Win32
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.ActiveCfg = Debug|x64
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.Build.0 = Debug|x64
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.ActiveCfg = Release|Win32
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.Build.0 = Release|Win32
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.ActiveCfg = Release|x64
+                {924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.Build.0 = Release|x64
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.ActiveCfg = Debug|Win32
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = Debug|x64
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.ActiveCfg = Release|Win32
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = Release|x64
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64
+                {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.Build.0 = Release|x64
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.ActiveCfg = Debug|Win32
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = Debug|x64
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.ActiveCfg = Release|Win32
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = Release|x64
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64
+                {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.Build.0 = Release|x64
+        EndGlobalSection
+        GlobalSection(SolutionProperties) = preSolution
+                HideSolutionNode = FALSE
+        EndGlobalSection
+EndGlobal
diff --git a/examples/graph/logic_sim/msvs/test_all.icproj b/examples/graph/logic_sim/msvs/test_all.icproj
new file mode 100644
index 0000000..f10414a
--- /dev/null
+++ b/examples/graph/logic_sim/msvs/test_all.icproj
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Intel C++ Project"
+	Version="11.1"
+	Name="test_all"
+	ProjectGUID="{CB292CD9-903E-464C-AAFE-E7A49003565C}"
+	VCNestedProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411E}"
+	VCNestedProjectFileName="test_all.vcproj">
+	<Configurations/>
+	<Files/>
+</VisualStudioProject>
diff --git a/examples/graph/logic_sim/msvs/test_all.vcproj b/examples/graph/logic_sim/msvs/test_all.vcproj
new file mode 100644
index 0000000..2a258a8
--- /dev/null
+++ b/examples/graph/logic_sim/msvs/test_all.vcproj
@@ -0,0 +1,356 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="test_all"
+	ProjectGUID="{6E9B1702-78E0-4D64-B771-8B274D963B58}"
+	RootNamespace="test_all"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc8;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+				FixedBaseAddress="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"
+				Description="Copying DLLs and PDBs"
+				CommandLine="call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 debug "$(OutDir)""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
+				PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc8;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="17"
+				FixedBaseAddress="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"
+				Description="Copying DLLs and PDBs"
+				CommandLine="call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 debug "$(OutDir)""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb.lib tbbmalloc.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc8;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+				FixedBaseAddress="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"
+				Description="Copying DLLs and PDBs"
+				CommandLine="call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  ia32 release "$(OutDir)""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
+				PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="tbb.lib tbbmalloc.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc8;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc8"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="17"
+				FixedBaseAddress="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"
+				Description="Copying DLLs and PDBs"
+				CommandLine="call "$(SolutionDir)\..\..\..\common\copy_libraries.bat"  intel64 release "$(OutDir)""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</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="..\test_all.cpp"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\index.html"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/examples/graph/logic_sim/one_bit_adder.h b/examples/graph/logic_sim/one_bit_adder.h
new file mode 100644
index 0000000..1f3ea08
--- /dev/null
+++ b/examples/graph/logic_sim/one_bit_adder.h
@@ -0,0 +1,82 @@
+/*
+    Copyright 2005-2012 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 __TBBexample_graph_logicsim_oba_H
+#define __TBBexample_graph_logicsim_oba_H 1
+
+#include "basics.h"
+
+class one_bit_adder {
+    broadcast_node<signal_t> A_port;
+    broadcast_node<signal_t> B_port;
+    broadcast_node<signal_t> CI_port;
+    xor_gate<two_input> FirstXOR;
+    xor_gate<two_input> SecondXOR;
+    and_gate<two_input> FirstAND;
+    and_gate<two_input> SecondAND;
+    or_gate<two_input> FirstOR;
+    graph& my_graph;
+public:
+    one_bit_adder(graph& g) : my_graph(g), A_port(g), B_port(g), CI_port(g), FirstXOR(g), 
+                              SecondXOR(g), FirstAND(g), SecondAND(g), FirstOR(g) {
+        make_connections();
+    }
+    one_bit_adder(const one_bit_adder& src) : 
+        my_graph(src.my_graph), A_port(src.my_graph), B_port(src.my_graph), 
+        CI_port(src.my_graph), FirstXOR(src.my_graph), SecondXOR(src.my_graph), 
+        FirstAND(src.my_graph), SecondAND(src.my_graph), FirstOR(src.my_graph) 
+    {
+        make_connections();
+    }
+        
+    ~one_bit_adder() {}
+    receiver<signal_t>& get_A() { return A_port; }
+    receiver<signal_t>& get_B() { return B_port; }
+    receiver<signal_t>& get_CI() { return CI_port; }
+    sender<signal_t>& get_out() {
+        return SecondXOR.get_out();
+    }
+    sender<signal_t>& get_CO() {
+        return FirstOR.get_out();
+    }
+private:
+    void make_connections() {
+        make_edge(A_port, FirstXOR.get_in(0));
+        make_edge(A_port, FirstAND.get_in(0));
+        make_edge(B_port, FirstXOR.get_in(1));
+        make_edge(B_port, FirstAND.get_in(1));
+        make_edge(CI_port, SecondXOR.get_in(1));
+        make_edge(CI_port, SecondAND.get_in(1));
+        make_edge(FirstXOR.get_out(), SecondXOR.get_in(0));
+        make_edge(FirstXOR.get_out(), SecondAND.get_in(0));
+        make_edge(SecondAND.get_out(), FirstOR.get_in(0));
+        make_edge(FirstAND.get_out(), FirstOR.get_in(1));
+    }
+};
+
+#endif /* __TBBexample_graph_logicsim_oba_H */
diff --git a/examples/graph/logic_sim/test_all.cpp b/examples/graph/logic_sim/test_all.cpp
new file mode 100644
index 0000000..719d950
--- /dev/null
+++ b/examples/graph/logic_sim/test_all.cpp
@@ -0,0 +1,580 @@
+/*
+    Copyright 2005-2012 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.
+*/
+
+#if _MSC_VER
+#pragma warning (disable: 4503) // Suppress "decorated name length exceeded, name was truncated" warning
+#endif
+
+#include "basics.h"
+#include "one_bit_adder.h"
+#include "four_bit_adder.h"
+#include "D_latch.h"
+#include <cassert>
+
+// User-specified globals with default values
+bool verbose = false;            // prints bin details and other diagnostics to screen
+bool silent = false;             // suppress all output except for time
+
+int get_default_num_threads() {
+    static int threads = 0;
+    if (threads == 0)
+        threads = tbb::task_scheduler_init::default_num_threads();
+    return threads;
+}
+
+int main(int argc, char *argv[]) {
+    try {
+        utility::thread_number_range threads(get_default_num_threads);
+        utility::parse_cli_arguments(argc, argv,
+                                     utility::cli_argument_pack()
+                                     //"-h" option for for displaying help is present implicitly
+                                     .positional_arg(threads,"#threads","  number of threads to use; a range of the "
+                                                     "form low[:high]\n              where low and optional high are "
+                                                     "non-negative integers,\n              or 'auto' for the TBB "
+                                                     "default")
+                                     .arg(verbose,"verbose","   print diagnostic output to screen")
+                                     .arg(silent,"silent","    limits output to timing info; overrides verbose")
+        );
+
+        if (silent) verbose = false;  // make silent override verbose
+
+        tick_count start = tick_count::now();
+        for(int p = threads.first; p <= threads.last; ++p ) {
+            task_scheduler_init init(p);
+            if (!silent)  cout << "graph test running on " << p << " threads.\n";
+            
+            graph g;
+
+            { // test buffer: 0, 1
+                buffer b(g);
+                toggle input(g);
+                led output(g, "OUTPUT", false); // false means we will explicitly call display to see LED
+                
+                make_edge(input.get_out(), b.get_in(0));
+                make_edge(b.get_out(), output.get_in());
+                
+                if (!silent) printf("Testing buffer...\n");
+                input.activate(); // 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == low);
+                input.flip(); // 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+            }
+
+            { // test not_gate: 0, 1
+                not_gate n(g);
+                toggle input(g);
+                led output(g, "OUTPUT", false);
+                
+                make_edge(input.get_out(), n.get_in(0));
+                make_edge(n.get_out(), output.get_in());
+                
+                if (!silent) printf("Testing not_gate...\n");
+                input.activate(); // 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+                input.flip(); // 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == low);
+            }
+
+            { // test two-input and_gate: 00, 01, 10, 11
+                and_gate<two_input> a(g);
+                toggle input0(g);
+                toggle input1(g);
+                led output(g, "OUTPUT", false);
+                
+                make_edge(input0.get_out(), a.get_in(0));
+                make_edge(input1.get_out(), a.get_in(1));
+                make_edge(a.get_out(), output.get_in());
+                
+                if (!silent) printf("Testing and_gate...\n");
+                input1.activate();  input0.activate();  // 0 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == low);
+                input0.flip();  // 0 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == low);
+                input1.flip(); input0.flip();  // 1 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == low);
+                input0.flip();  // 1 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+            }
+
+            { // test three-input or_gate: 000, 001, 010, 100, 011, 101, 110, 111
+                or_gate<three_input> o(g);
+                toggle input0(g);
+                toggle input1(g);
+                toggle input2(g);
+                led output(g, "OUTPUT", false);
+                
+                make_edge(input0.get_out(), o.get_in(0));
+                make_edge(input1.get_out(), o.get_in(1));
+                make_edge(input2.get_out(), o.get_in(2));
+                make_edge(o.get_out(), output.get_in());
+                
+                if (!silent) printf("Testing or_gate...\n");
+                input2.activate();  input1.activate();  input0.activate();  // 0 0 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == low);
+                input0.flip();  // 0 0 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+                input1.flip(); input0.flip();  // 0 1 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+                input2.flip();  input1.flip();  // 1 0 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+                input2.flip();  input1.flip();  input0.flip();  // 0 1 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+                input2.flip();  input1.flip();  // 1 0 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+                input1.flip();  input0.flip();  // 1 1 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+                input0.flip();  // 1 1 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+            }
+
+            { // test two-input xor_gate: 00, 01, 10, 11
+                xor_gate<two_input> x(g);
+                toggle input0(g);
+                toggle input1(g);
+                led output(g, "OUTPUT", false);
+                
+                make_edge(input0.get_out(), x.get_in(0));
+                make_edge(input1.get_out(), x.get_in(1));
+                make_edge(x.get_out(), output.get_in());
+                
+                if (!silent) printf("Testing xor_gate...\n");
+                input1.activate();  input0.activate();  // 0 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == low);
+                input0.flip();  // 0 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+                input1.flip();  input0.flip();  // 1 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+                input0.flip();  // 1 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == low);
+            }
+
+
+            { // test two-input nor_gate: 00, 01, 10, 11
+                nor_gate<two_input> n(g);
+                toggle input0(g);
+                toggle input1(g);
+                led output(g, "OUTPUT", false);
+                
+                make_edge(input0.get_out(), n.get_in(0));
+                make_edge(input1.get_out(), n.get_in(1));
+                make_edge(n.get_out(), output.get_in());
+                
+                if (!silent) printf("Testing nor_gate...\n");
+                input1.activate();  input0.activate();  // 0 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == high);
+                input0.flip();  // 0 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == low);
+                input1.flip();  input0.flip();  // 1 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == low);
+                input0.flip();  // 1 1
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == low);
+            }
+
+            { // test steady_signal and digit
+                steady_signal input0(g, high);
+                steady_signal input1(g, low);
+                and_gate<two_input> a(g);
+                or_gate<two_input> o(g);
+                xor_gate<two_input> x(g);
+                nor_gate<two_input> n(g);
+                digit output(g, "OUTPUT", false);
+                
+                make_edge(input0.get_out(), a.get_in(0));
+                make_edge(input1.get_out(), a.get_in(1));
+                make_edge(a.get_out(), output.get_in(0));
+
+                make_edge(input0.get_out(), o.get_in(0));
+                make_edge(input1.get_out(), o.get_in(1));
+                make_edge(o.get_out(), output.get_in(1));
+
+                make_edge(input0.get_out(), x.get_in(0));
+                make_edge(input1.get_out(), x.get_in(1));
+                make_edge(x.get_out(), output.get_in(2));
+
+                make_edge(input0.get_out(), n.get_in(0));
+                make_edge(input1.get_out(), n.get_in(1));
+                make_edge(n.get_out(), output.get_in(3));
+                
+                if (!silent) printf("Testing steady_signal...\n");
+                input0.activate();  // 1
+                input1.activate();  // 0
+                g.wait_for_all();
+                if (!silent) output.display();
+                assert(output.get_value() == 6);
+            }
+
+            { // test push_button
+                push_button p(g);
+                buffer b(g);
+                led output(g, "OUTPUT", !silent); // true means print all LED state changes
+
+                make_edge(p.get_out(), b.get_in(0));
+                make_edge(b.get_out(), output.get_in());
+
+                if (!silent) printf("Testing push_button...\n");
+                p.press();
+                p.release();
+                p.press();
+                p.release();
+                g.wait_for_all();
+            }
+
+            { // test one_bit_adder
+                one_bit_adder my_adder(g);
+                toggle A(g);
+                toggle B(g);
+                toggle CarryIN(g);
+                led Sum(g, "SUM");
+                led CarryOUT(g, "CarryOUT");
+                
+                make_edge(A.get_out(), my_adder.get_A());
+                make_edge(B.get_out(), my_adder.get_B());
+                make_edge(CarryIN.get_out(), my_adder.get_CI());
+                make_edge(my_adder.get_out(), Sum.get_in());
+                make_edge(my_adder.get_CO(), CarryOUT.get_in());
+                
+                A.activate();
+                B.activate();
+                CarryIN.activate();
+                
+                if (!silent) printf("A on\n");
+                A.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == high) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("A off\n");
+                A.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("B on\n");
+                B.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == high) && (CarryOUT.get_value() == low));
+                if (!silent) printf("B off\n");
+                B.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("CarryIN on\n");
+                CarryIN.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == high) && (CarryOUT.get_value() == low));
+                if (!silent) printf("CarryIN off\n");
+                CarryIN.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("A&B on\n");
+                A.flip();
+                B.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == low) && (CarryOUT.get_value() == high));
+                if (!silent) printf("A&B off\n");
+                A.flip();
+                B.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("A&CarryIN on\n");
+                A.flip();
+                CarryIN.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == low) && (CarryOUT.get_value() == high));
+                if (!silent) printf("A&CarryIN off\n");
+                A.flip();
+                CarryIN.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("B&CarryIN on\n");
+                B.flip();
+                CarryIN.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == low) && (CarryOUT.get_value() == high));
+                if (!silent) printf("B&CarryIN off\n");
+                B.flip();
+                CarryIN.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("A&B&CarryIN on\n");
+                A.flip();
+                B.flip();
+                CarryIN.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == high) && (CarryOUT.get_value() == high));
+                if (!silent) printf("A&B&CarryIN off\n");
+                A.flip();
+                B.flip();
+                CarryIN.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == low) && (CarryOUT.get_value() == low));
+            }
+
+            { // test four_bit_adder
+                four_bit_adder four_adder(g);
+                std::vector<toggle> A(4, toggle(g));
+                std::vector<toggle> B(4, toggle(g));
+                toggle CarryIN(g);
+                digit Sum(g, "SUM");
+                led CarryOUT(g, "CarryOUT");
+                
+                for (int i=0; i<4; ++i) {
+                    make_edge(A[i].get_out(), four_adder.get_A(i));
+                    make_edge(B[i].get_out(), four_adder.get_B(i));
+                    make_edge(four_adder.get_out(i), Sum.get_in(i));
+                }
+                make_edge(CarryIN.get_out(), four_adder.get_CI());
+                make_edge(four_adder.get_CO(), CarryOUT.get_in());
+                
+                // Activate all switches at low state
+                for (int i=0; i<4; ++i) {
+                    A[i].activate();
+                    B[i].activate();
+                }
+                CarryIN.activate();
+                
+                if (!silent) printf("1+0\n");
+                A[0].flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("0+1\n");
+                A[0].flip();
+                B[0].flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("3+4\n");
+                A[0].flip();
+                A[1].flip();
+                B[0].flip();
+                B[2].flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == 7) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("6+1\n");
+                A[0].flip();
+                A[2].flip();
+                B[0].flip();
+                B[2].flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == 7) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("0+0+carry\n");
+                A[1].flip();
+                A[2].flip();
+                B[0].flip();
+                CarryIN.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low));
+                
+                if (!silent) printf("15+15+carry\n");
+                A[0].flip();
+                A[1].flip();
+                A[2].flip();
+                A[3].flip();
+                B[0].flip();
+                B[1].flip();
+                B[2].flip();
+                B[3].flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == 0xf) && (CarryOUT.get_value() == high));
+                
+                if (!silent) printf("8+8\n");
+                A[0].flip();
+                A[1].flip();
+                A[2].flip();
+                B[0].flip();
+                B[1].flip();
+                B[2].flip();
+                CarryIN.flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == 0) && (CarryOUT.get_value() == high));
+                
+                if (!silent) printf("0+0\n");
+                A[3].flip();
+                B[3].flip();
+                g.wait_for_all();
+                if (!silent) Sum.display();
+                if (!silent) CarryOUT.display();
+                assert((Sum.get_value() == 0) && (CarryOUT.get_value() == low));
+            }
+
+            { // test D_latch
+                D_latch my_d_latch(g);
+                toggle D(g);
+                pulse E(g, 500, 4); // clock changes every 500ms; stops after 4 changes
+                led Q(g, " Q", verbose); // if true, LEDs print at every state change
+                led notQ(g, "~Q", verbose);
+                
+                make_edge(D.get_out(), my_d_latch.get_D());
+                make_edge(E.get_out(), my_d_latch.get_E());
+                make_edge(my_d_latch.get_Q(), Q.get_in());
+                make_edge(my_d_latch.get_notQ(), notQ.get_in());
+                
+                D.activate();
+                
+                if (!silent) printf("Toggling D\n");
+                E.activate();
+                D.flip();
+                g.wait_for_all();
+                if (!silent && !verbose) { Q.display(); notQ.display(); }
+                assert((Q.get_value() == high) && (notQ.get_value() == low));
+                E.reset();
+                
+                if (!silent) printf("Toggling D\n");
+                E.activate();
+                D.flip();
+                g.wait_for_all();
+                if (!silent && !verbose) { Q.display(); notQ.display(); }
+                assert((Q.get_value() == low) && (notQ.get_value() == high));
+                E.reset();
+                
+                if (!silent) printf("Toggling D\n");
+                E.activate();
+                D.flip();
+                g.wait_for_all();
+                if (!silent && !verbose) { Q.display(); notQ.display(); }
+                assert((Q.get_value() == high) && (notQ.get_value() == low));
+                E.reset();
+                
+                if (!silent) printf("Toggling D\n");
+                E.activate();
+                D.flip();
+                g.wait_for_all();
+                if (!silent && !verbose) { Q.display(); notQ.display(); }
+                assert((Q.get_value() == low) && (notQ.get_value() == high));
+                E.reset();
+                
+                if (!silent) printf("Toggling D\n");
+                E.activate();
+                D.flip();
+                g.wait_for_all();
+                if (!silent && !verbose) { Q.display(); notQ.display(); }
+                assert((Q.get_value() == high) && (notQ.get_value() == low));
+            }
+        }
+        utility::report_elapsed_time((tbb::tick_count::now() - start).seconds());
+        return 0;
+    } catch(std::exception& e) {
+        cerr<<"error occurred. error text is :\"" <<e.what()<<"\"\n";
+        return 1;
+    }
+}
diff --git a/examples/index.html b/examples/index.html
index e4d1cc0..67279c8 100644
--- a/examples/index.html
+++ b/examples/index.html
@@ -2,7 +2,7 @@
 <BODY>
 
 <H2>Overview</H2>
-This directory has example usages of Threading Building Blocks.
+This directory has example usages of Intel® Threading Building Blocks (Intel® TBB).
 
 <H2>Directories</H2>
 <DL>
@@ -31,7 +31,7 @@ This directory has example usages of Threading Building Blocks.
 <DT><A HREF="test_all/index.html">test_all</A>
 <DD>Examples that test all the parts of the package.
 <DT><A HREF="common/index.html">common</A>
-<DD>Common files for building various examples.  Not used directly.
+<DD>Common files for building various examples.  Should not be used directly. But if you copy an example to other place this folder should be copied also and should have the same relative path for copied example.
 </DL>
 
 <A NAME=build><H2>To Build</H2></A>
@@ -50,7 +50,7 @@ A shell might be a cmd.exe command prompt window (Windows* systems), or a
 sh, bash, csh, ksh, etc. (or compatible) shell window (Windows*, Linux* or Mac OS* X systems).
 </P>
 
-<A NAME=build_1><H4>To build by using a Microsoft* Visual Studio* project (Windows* systems):</H4></A>
+<A name="build_1"><H4>To build by using a Microsoft* Visual Studio* project (Windows* systems):</H4></A>
 Perform the following steps:
 <OL>
 <LI>Identify the solution (*.sln) file for the example you wish to build and run.For Microsoft* Visual Studio* 2005, the *.sln file is in the example's msvs sub-directory. For other versions please use Microsoft*
@@ -60,45 +60,46 @@ Perform the following steps:
       </li>
         <li><example_name>_icl.sln - Solution for Intel® C++ Compiler </li>
     </UL>
+</LI>
 <LI>Open the project by using one of the following methods:
     <UL>
-    <LI>Navigate to the *.sln file from My Computer, by using Windows Explorer, or by using another file browser.
-	Double-click the *.sln file to invoke Microsoft* Visual Studio* and open the project.
-    <LI>Invoke Microsoft* Visual Studio* from the Start menu and use the "Open Project" dialog to navigate to
-	and open the project.
+    <LI>Navigate to the *.sln file from My Computer, by using Windows Explorer, or by using another file browser. Double-click the *.sln file to invoke Microsoft* Visual Studio* and open the project.</LI>
+    <LI>Invoke Microsoft* Visual Studio* from the Start menu and use the "Open Project" dialog to navigate to and open the project.</LI>
     </UL>
-<LI>Press <ctrl-F5> to build and run the example.
+</LI>
+<LI>Press <ctrl-F5> to build and run the example.</LI>
+<li>If you copied an example to another place separately from libraries you need to 
+    set %TBBROOT% variable pointing to <installdir> folder.</li>
 </OL>
 
-<A NAME=build_2><H4>To build by using a Xcode* IDE project (Mac OS* X systems):</H4></A>
+<A name="build_2"><H4>To build by using a Xcode* IDE project (Mac OS* X systems):</H4></A>
 Perform the following steps:
 <OL>
 <LI>Identify the project (*.xcodeproj) file for the example you wish to build and run.
     <UL>
     <LI>The *.xcodeproj file is in the example's xcode sub-directory.
     </UL>
+</LI>
 <LI>Open the project by using one of the following methods:
     <UL>
-    <LI>Navigate to the *.xcodeproj file by using the Finder.
-	Double-click the *.xcodeproj file to invoke the Xcode* IDE and open the project.
-    <LI>Invoke the Xcode* IDE and use the "File ⇒ Open…" dialog to navigate to
-	and open the project.
+    <LI>Navigate to the *.xcodeproj file by using the Finder.Double-click the *.xcodeproj file to invoke the Xcode* IDE and open the project.</LI>
+    <LI>Invoke the Xcode* IDE and use the "File -> Open" dialog to navigate to and open the project.</LI>
     </UL>
+</LI>
 <LI>Press <Apple-R>, or press the "Build and Go" button in the toolbox, to build and run the example.
+</LI>
 </OL>
 
-<A NAME=build_3><H4>To build by using a Makefile (Windows*, Linux* or Mac OS* X systems):</H4></A>
+<A name="build_3"><H4>To build by using a Makefile (Windows*, Linux* or Mac OS* X systems):</H4></A>
 Perform the following steps:
 <OL>
 <LI>Open a shell window.  For Windows* systems, make sure this shell window has the proper environment
     defined for use with Microsoft* Visual Studio* (.NET 2003 or 2005); such a shell can be invoked
     from the Start menu, under Visual Studio, Visual Studio Tools, Visual Studio Command Prompt.
-<LI>Set up the environment in this shell window for use with Threading Building Blocks.
-    <BR>See below for how to set up the environment for
-	<A HREF=#env_1>Windows*</A>, <A HREF=#env_23>Linux*</A> or <A HREF=#env_23>Mac OS* X</A> systems.
-<LI>Unless you installed Threading Building Blocks yourself, you may not have write permissions
-    to the directory containing the example.  In this case, make a copy of the example, and use the copy
-    for the following steps.
+<LI>Set up the environment in this shell window for use with Intel TBB.
+    <BR>See below for how to set up the environment for <A href="#env_1">Windows*</A>, <A href="#env_23">Linux*</A> or <A href="#env_23">Mac OS* X</A> systems.
+<LI>Unless you installed Intel TBB yourself, you may not have write permissions to the directory 
+    containing the example.  In this case, make a copy of the example, and use the copy for the following steps.
 <LI>In the shell window, navigate to the directory for the example
     (or to the directory for the copy of the example if you made one in the previous step).
 <LI>Use one or more of the following commands to build and run the example.
@@ -108,61 +109,59 @@ Perform the following steps:
     <DT><TT>make</TT>
     <DD>Default build and run.  Equivalent to 'make release test'.
     <DT><TT>make release</TT>
-    <DD>Compile and link against the release version of the Threading Building Blocks library.
-	The resulting executable is left in the directory for the example.
+    <DD>Compile and link against the release version of Intel TBB runtime library. The resulting executable is left in the directory for the example.
     <DT><TT>make debug</TT>
-    <DD>Compile and link against the debug version of the Threading Building Blocks library.
-	The resulting executable is left in the directory for the example.
+    <DD>Compile and link against the debug version of Intel TBB runtime library. The resulting executable is left in the directory for the example.
     <DT><TT>make test</TT>
     <DD>Run an executable previously produced by one of the above commands.
     <DT><TT>make <B>[</B>(above options or targets)<B>]</B> CXX=<B>{</B>icl, icc<B>}</B></TT>
-    <DD>Build and run as above, but use Intel® compilers instead of default, native compilers
-	(e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or Mac OS* X systems).
+    <DD>Build and run as above, but use Intel® compilers instead of default, native compilers (e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or Mac OS* X systems).
+    <DT><A NAME=build_4><TT>make <B>[</B>(above options or targets)<B>]</B> offload=mic</B></TT></A>
+    <DD>Build and run the offload version of an example for Intel&reg Many Integrated Core (Intel&reg MIC) Architecture.
+    <DD><I>Note: Only Intel&reg MIC Architecture with Linux* based host is currently supported.</I>
     <DT><TT>make clean</TT>
     <DD>Remove any executables or intermediate files produced by the above commands.
     </DL>
 </OL>
 
-<A NAME=env_1><H4>To set up the environment (Windows* systems):</H4></A>
-It is <B>strongly</B> recommended that the environment be set up when installing Threading Building Blocks.
+<A name="env_1"><H4>To set up the environment (Windows* systems):</H4></A>
+It is <B>strongly</B> recommended that the environment be set up when installing Intel TBB.
 Do this by selecting the appropriate check-box during the install.  However, if the environment is not set up
 during installation, or you wish to build for an alternate architecture or Microsoft* Visual Studio* version,
 it may be set up, for a given type of shell window, by using one of the following commands:
 <DL>
 <DT>For cmd.exe (command prompt):
-<DD><TT><<I>installdir</I>>\{ia32,intel64}\{vc8,vc9,vc_mt}\bin\tbbvars.bat</TT>
-<DT>For sh, bash, ksh (or compatibles):
-<DD><TT>. <<I>installdir</I>>\{ia32,intel64}\{vc8,vc9,vc_mt}\bin\tbbvars.sh</TT>
-<DT>For csh (or compatibles):
-<DD><TT>source <<I>installdir</I>>\{ia32,intel64}\{vc8,vc9,vc_mt}\bin\tbbvars.csh</TT>
-<DT><I>Notes:</I>
-<DD><I><SL>
-    <LI>Choose one of {ia32,intel64} depending on the architecture to be used.
-    <LI>Environment setup need only be performed once per shell window to be used.
-    <LI>Always source tbbvars.sh or tbbvars.csh rather than executing them directly.
-    </SL>
-          {<span style="font-family: Courier New">vc8,vc9,vc_mt</span>}
-      {<span style="font-family: Courier New">vc8,vc9,vc_mt</span>} depending on which
-      Microsoft* Visual Studio* </I>
+<DD><TT><<I>installdir</I>>\bin\tbbvars.bat (arch) (vs)</TT>
+<pre>
+    where (arch) must be is one of the following
+       ia32         : Set up for IA-32  architecture
+       intel64      : Set up for Intel® 64  architecture
+   (vs) should be one of the following
+       vs2005      : Set to use with Microsoft Visual Studio 2005 runtime DLLs
+       vs2008      : Set to use with Microsoft Visual Studio 2008 runtime DLLs
+       vs2010      : Set to use with Microsoft Visual Studio 2010 runtime DLLs
+       all         : Set to use TBB statically linked with Microsoft Visual C++ runtime
+   if (vs) is not set TBB statically linked with Microsoft Visual C++ runtime will be used.
+</pre>
 </DL>
-
-<A NAME=env_23><H4>To set up the environment (Linux* or Mac OS* X systems):</H4></A>
+<A name="env_23">
+    <H4>To set up the environment (Linux* or Mac OS* X systems):</H4></A>
 The environment may be set up, for a given type of shell window, by using one of the following commands:
 <DL>
 <DT>For sh, bash, ksh (or compatibles):
-<DD>. <<I>installdir</I>>/bin/tbbvars.sh
+<DD>. <<I>installdir</I>>/bin/tbbvars.sh (arch)
 <DT>For csh (or compatibles):
 <DD>source <<I>installdir</I>>/bin/tbbvars.csh
-<DT>For sh, bash, ksh (or compatibles), when using an alternate architecture or platform:
-<DD>. <<I>installdir</I>>/{ia32,intel64,ia64}/cc<<I>gccversion</I>>_libc<<I>libcversion</I>>_kernel<<I>kernelversion</I>>/bin/tbbvars.sh
+    (arch)<DT>For sh, bash, ksh (or compatibles), when using an alternate architecture or platform:
+<DD>. <<I>installdir</I>>/{ia32,intel64}/cc<<I>gccversion</I>>_libc<<I>libcversion</I>>_kernel<<I>kernelversion</I>>/bin/tbbvars.sh
 <DT>For csh (or compatibles), when using an alternate architecture or platform:
-<DD>source <<I>installdir</I>>/{ia32,intel64,ia64}/cc<<I>gccversion</I>>_libc<<I>libcversion</I>>_kernel<<I>kernelversion</I>>/bin/tbbvars.csh
+<DD>source <<I>installdir</I>>/{ia32,intel64}/cc<<I>gccversion</I>>_libc<<I>libcversion</I>>_kernel<<I>kernelversion</I>>/bin/tbbvars.csh
 <DT><I>Notes:</I>
 <DD><I><SL>
-    <LI>Choose one of {ia32,intel64,ia64} depending on the architecture to be used.
+    <LI>Choose one of {ia32,intel64} depending on the architecture to be used.
     <LI>Choose a cc<<I>gccversion</I>>_libc<<I>libcversion</I>>_kernel<<I>kernelversion</I>>
-	value, from among the available platforms installed with Threading Building Blocks
-	(for <A HREF=../ia32>ia32</A>, <A HREF=../intel64>intel64</A> or <A HREF=../ia64>ia64</A>),
+	value, from among the available platforms installed with Intel TBB
+	(for <A HREF=../ia32>ia32</A> or <A HREF=../intel64>intel64</A>),
 	depending on the platform to be used.
     <LI>Environment setup need only be performed once per shell window to be used.
     <LI>Always source tbbvars.sh or tbbvars.csh rather than executing them directly.
@@ -170,9 +169,9 @@ The environment may be set up, for a given type of shell window, by using one of
 </DL>
 
 <HR>
-<A HREF="../index.html">Up to parent directory</A>
+<A href="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/parallel_do/index.html b/examples/parallel_do/index.html
index 1bb68b3..a72e1e6 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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/parallel_do/parallel_preorder/Graph.cpp b/examples/parallel_do/parallel_preorder/Graph.cpp
index 99fef73..6d9655f 100644
--- a/examples/parallel_do/parallel_preorder/Graph.cpp
+++ b/examples/parallel_do/parallel_preorder/Graph.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 ae983c0..0b6d5ea 100644
--- a/examples/parallel_do/parallel_preorder/Graph.h
+++ b/examples/parallel_do/parallel_preorder/Graph.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_do/parallel_preorder/Makefile b/examples/parallel_do/parallel_preorder/Makefile
index 5eea72c..84c110f 100644
--- a/examples/parallel_do/parallel_preorder/Makefile
+++ b/examples/parallel_do/parallel_preorder/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 d60f15e..37b92a6 100644
--- a/examples/parallel_do/parallel_preorder/Makefile.windows
+++ b/examples/parallel_do/parallel_preorder/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 0de3319..9b0a2f3 100644
--- a/examples/parallel_do/parallel_preorder/Matrix.h
+++ b/examples/parallel_do/parallel_preorder/Matrix.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 f1a059c..860ad6f 100644
--- a/examples/parallel_do/parallel_preorder/index.html
+++ b/examples/parallel_do/parallel_preorder/index.html
@@ -56,9 +56,9 @@ if the cell values are changed to type "float".  The reason is twofold.
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example (Windows* systems only).
 <DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example.
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X systems only).
 </DL>
 
 <H2>To Build</H2>
@@ -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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/parallel_do/parallel_preorder/main.cpp b/examples/parallel_do/parallel_preorder/main.cpp
index 913fcd1..a437172 100644
--- a/examples/parallel_do/parallel_preorder/main.cpp
+++ b/examples/parallel_do/parallel_preorder/main.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_do/parallel_preorder/parallel_preorder.cpp b/examples/parallel_do/parallel_preorder/parallel_preorder.cpp
index 700e490..0e0ca3a 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life/Makefile b/examples/parallel_for/game_of_life/Makefile
index 39091c2..3d4b182 100644
--- a/examples/parallel_for/game_of_life/Makefile
+++ b/examples/parallel_for/game_of_life/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/game_of_life/Makefile.windows b/examples/parallel_for/game_of_life/Makefile.windows
index d6c81ac..adbadc6 100644
--- a/examples/parallel_for/game_of_life/Makefile.windows
+++ b/examples/parallel_for/game_of_life/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/parallel_for/game_of_life/index.html b/examples/parallel_for/game_of_life/index.html
index ebf0c86..67f096d 100644
--- a/examples/parallel_for/game_of_life/index.html
+++ b/examples/parallel_for/game_of_life/index.html
@@ -26,9 +26,9 @@ The visualization is written in managed C++ and uses .NET CLR.
 <DT><A HREF="src">src</A>
 <DD>Contains source files mentioned above.
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example (Windows* systems only).
 <DT><A HREF="xcode">xcode</A>
-<DD>Contains Mac OS* Xcode* workspace for building and running the example.
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X systems only).
 </DL>
 
 <H2>To Build</H2>
@@ -43,7 +43,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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp b/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp
index 79a2884..2f33826 100644
--- a/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp
+++ b/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life/src/Board.h b/examples/parallel_for/game_of_life/src/Board.h
index f3e3efb..54fcac2 100644
--- a/examples/parallel_for/game_of_life/src/Board.h
+++ b/examples/parallel_for/game_of_life/src/Board.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life/src/Evolution.cpp b/examples/parallel_for/game_of_life/src/Evolution.cpp
index 392aff8..5b7cabc 100644
--- a/examples/parallel_for/game_of_life/src/Evolution.cpp
+++ b/examples/parallel_for/game_of_life/src/Evolution.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life/src/Evolution.h b/examples/parallel_for/game_of_life/src/Evolution.h
index 62357e5..e9fe10f 100644
--- a/examples/parallel_for/game_of_life/src/Evolution.h
+++ b/examples/parallel_for/game_of_life/src/Evolution.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -41,7 +41,6 @@
 
 #define WIN32_LEAN_AND_MEAN
 
-//! Threading Building Blocks includes
 #include "tbb/task_scheduler_init.h"
 #include "tbb/blocked_range.h"
 #include "tbb/parallel_for.h"
diff --git a/examples/parallel_for/game_of_life/src/Form1.h b/examples/parallel_for/game_of_life/src/Form1.h
index 59bcfba..531c4c2 100644
--- a/examples/parallel_for/game_of_life/src/Form1.h
+++ b/examples/parallel_for/game_of_life/src/Form1.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life/src/Game_of_life.cpp b/examples/parallel_for/game_of_life/src/Game_of_life.cpp
index da3d783..bfb6402 100644
--- a/examples/parallel_for/game_of_life/src/Game_of_life.cpp
+++ b/examples/parallel_for/game_of_life/src/Game_of_life.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/game_of_life/src/Update_state.cpp b/examples/parallel_for/game_of_life/src/Update_state.cpp
index 3f55559..594391a 100644
--- a/examples/parallel_for/game_of_life/src/Update_state.cpp
+++ b/examples/parallel_for/game_of_life/src/Update_state.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 95f226c..64078eb 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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/parallel_for/polygon_overlay/Makefile b/examples/parallel_for/polygon_overlay/Makefile
index 2c4061d..e73f0d8 100644
--- a/examples/parallel_for/polygon_overlay/Makefile
+++ b/examples/parallel_for/polygon_overlay/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -52,21 +52,28 @@ all:	release test
 
 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)
-endif
+	mkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS
+	cp ../../common/gui/xcode/tbbExample/Info.plist $(NAME).app/Contents
+	cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents
+	cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj
+endif # Mac
 
 release: $(SRCFILES) resources
 ifeq ($(compiler),xl)
 	# Avoiding "1586-346 (U) An error occurred during code generation.  The code generation return code was 40." with -O3.
 	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS)
 else
-	$(CXX) -O3 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS)
+ifeq ($(UI),mac)
+	$(CXX_UI) -O3 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)
+endif # Mac
+	$(CXX) -O3 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) $(MACUIOBJS) -ltbb -ltbbmalloc $(LIBS)
 endif
 
 debug:  $(SRCFILES) resources
-	$(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb_debug -ltbbmalloc_debug $(LIBS)
+ifeq ($(UI),mac)
+	$(CXX_UI) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)
+endif # Mac
+	$(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) $(MACUIOBJS) -ltbb_debug -ltbbmalloc_debug $(LIBS)
 
 clean:
 	$(RM) $(EXE) *.o *.d
diff --git a/examples/parallel_for/polygon_overlay/Makefile.windows b/examples/parallel_for/polygon_overlay/Makefile.windows
index 2e5b9f6..3f344fe 100644
--- a/examples/parallel_for/polygon_overlay/Makefile.windows
+++ b/examples/parallel_for/polygon_overlay/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 19d3f46..2dd18c9 100644
--- a/examples/parallel_for/polygon_overlay/index.html
+++ b/examples/parallel_for/polygon_overlay/index.html
@@ -80,18 +80,14 @@ One limitation of the program is that if the number of polygons in the source ma
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Mac OS* Xcode* workspace for building and running the example.
-</DL>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the 
+    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X 
+    systems only).</DL>
 
 <H2>To Build</H2>
 General build directions can be found <A HREF="../../index.html#build">here</A>.  For the various UI options, see the <A HREF="../../common/index.html">common GUI code</A> build instructions.
 
-<P>
-For Windows* systems, Microsoft* Visual Studio* projects are provided for each of the above versions.
-</P>
-
 <H2>Usage</H2>
 Building via the above make commands, or via Visual Studio projects on Windows* systems, produces executable files
 named pover.exe.  To run these executables directly, use one or more of the following commands.
@@ -110,15 +106,12 @@ named pover.exe.  To run these executables directly, use one or more of the foll
 <UL>
 <LI>While running with the GUI display should yield reasonable performance in most cases, <I>running with no GUI
     display is strongly recommended</I> in order to demonstrate the full performance and scalability of the example.
-<LI>If using the X-windows (X11) GUI on Mac OS* systems, X11 might not be installed on the system by default.
-    To install X11 on Mac OS* systems, use the operating system install disk, choose "Optional installs" and select X11 from
-    the "Applications" list.  Alternatively, if X11 is not available, build without the GUI (see build targets above).
 </UL>
 
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/parallel_for/polygon_overlay/polymain.cpp b/examples/parallel_for/polygon_overlay/polymain.cpp
index eab2b23..6cb1257 100644
--- a/examples/parallel_for/polygon_overlay/polymain.cpp
+++ b/examples/parallel_for/polygon_overlay/polymain.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 88ce6fb..97f0545 100644
--- a/examples/parallel_for/polygon_overlay/polymain.h
+++ b/examples/parallel_for/polygon_overlay/polymain.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 9fa7c0b..d249446 100644
--- a/examples/parallel_for/polygon_overlay/polyover.cpp
+++ b/examples/parallel_for/polygon_overlay/polyover.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 4345d38..a7a0c3d 100644
--- a/examples/parallel_for/polygon_overlay/polyover.h
+++ b/examples/parallel_for/polygon_overlay/polyover.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 52ff5cc..8024d30 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 d6b0c84..b75aa03 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 ab81956..5a543e5 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 b6e36f6..daba51c 100644
--- a/examples/parallel_for/polygon_overlay/rpolygon.h
+++ b/examples/parallel_for/polygon_overlay/rpolygon.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/classes.nib b/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/classes.nib
deleted file mode 100644
index ea58db1..0000000
--- a/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/classes.nib
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-IBClasses = ();
-IBVersion = 1;
-}
diff --git a/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/info.nib b/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/info.nib
deleted file mode 100644
index 97a70e1..0000000
--- a/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/info.nib
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IBDocumentLocation</key>
-	<string>662 774 356 240 0 0 1680 1028 </string>
-	<key>IBEditorPositions</key>
-	<dict>
-		<key>29</key>
-		<string>863 618 271 44 0 0 1680 1028 </string>
-	</dict>
-	<key>IBFramework Version</key>
-	<string>446.1</string>
-	<key>IBOldestOS</key>
-	<integer>3</integer>
-	<key>IBOpenObjects</key>
-	<array>
-		<integer>29</integer>
-		<integer>166</integer>
-	</array>
-	<key>IBSystem Version</key>
-	<string>8J2135a</string>
-	<key>targetFramework</key>
-	<string>IBCarbonFramework</string>
-</dict>
-</plist>
diff --git a/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/objects.xib b/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/objects.xib
deleted file mode 100644
index 99f4f8a..0000000
--- a/examples/parallel_for/polygon_overlay/xcode/English.lproj/main.nib/objects.xib
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-<object class="NSIBObjectData">
-  <string name="targetFramework">IBCarbonFramework</string>
-  <object name="rootObject" class="NSCustomObject" id="1">
-    <string name="customClass">NSApplication</string>
-  </object>
-  <array count="22" name="allObjects">
-    <object class="IBCarbonMenu" id="29">
-      <string name="title">main</string>
-      <array count="3" name="items">
-        <object class="IBCarbonMenuItem" id="210">
-          <boolean name="updateSingleItem">TRUE</boolean>
-          <string name="title">PolygonOverlay</string>
-          <object name="submenu" class="IBCarbonMenu" id="211">
-            <string name="title">Seismic Simulation</string>
-            <array count="7" name="items">
-              <object class="IBCarbonMenuItem" id="215">
-                <boolean name="checked">TRUE</boolean>
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Parallel</string>
-                <ostype name="command">para</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="214">
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Serial</string>
-                <ostype name="command">seri</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="216">
-                <boolean name="separator">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-              </object>
-              <object class="IBCarbonMenuItem" id="217">
-                <boolean name="checked">TRUE</boolean>
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Enable GUI</string>
-                <ostype name="command">egui</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="218">
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Disable GUI</string>
-                <ostype name="command">dgui</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="213">
-                <boolean name="separator">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-              </object>
-              <object class="IBCarbonMenuItem" id="212">
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">About PolygonOverlay</string>
-                <int name="keyEquivalentModifier">0</int>
-                <ostype name="command">abou</ostype>
-              </object>
-            </array>
-            <string name="name">_NSAppleMenu</string>
-          </object>
-        </object>
-        <object class="IBCarbonMenuItem" id="127">
-          <string name="title">File</string>
-          <object name="submenu" class="IBCarbonMenu" id="131">
-            <string name="title">File</string>
-            <array count="1" name="items">
-              <object class="IBCarbonMenuItem" id="200">
-                <string name="title">Close</string>
-                <string name="keyEquivalent">w</string>
-                <ostype name="command">clos</ostype>
-              </object>
-            </array>
-          </object>
-        </object>
-        <object class="IBCarbonMenuItem" id="192">
-          <string name="title">Window</string>
-          <object name="submenu" class="IBCarbonMenu" id="195">
-            <string name="title">Window</string>
-            <array count="5" name="items">
-              <object class="IBCarbonMenuItem" id="190">
-                <boolean name="dynamic">TRUE</boolean>
-                <string name="title">Minimize</string>
-                <string name="keyEquivalent">m</string>
-                <ostype name="command">mini</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="197">
-                <string name="title">Zoom</string>
-                <ostype name="command">zoom</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="194">
-                <boolean name="separator">TRUE</boolean>
-              </object>
-              <object class="IBCarbonMenuItem" id="196">
-                <boolean name="dynamic">TRUE</boolean>
-                <string name="title">Bring All to Front</string>
-                <ostype name="command">bfrt</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="193">
-                <boolean name="dynamic">TRUE</boolean>
-                <string name="title">Arrange in Front</string>
-                <int name="keyEquivalentModifier">1572864</int>
-                <ostype name="command">frnt</ostype>
-              </object>
-            </array>
-            <string name="name">_NSWindowsMenu</string>
-          </object>
-        </object>
-      </array>
-      <string name="name">_NSMainMenu</string>
-    </object>
-    <reference idRef="127"/>
-    <reference idRef="131"/>
-    <object class="IBCarbonWindow" id="166">
-      <string name="windowRect">338 353 698 833 </string>
-      <string name="title">PolygonOverlay</string>
-      <object name="rootControl" class="IBCarbonRootControl" id="167">
-        <string name="bounds">0 0 360 480 </string>
-        <string name="viewFrame">0 0 480 360 </string>
-      </object>
-      <boolean name="receiveUpdates">FALSE</boolean>
-      <boolean name="compositing">TRUE</boolean>
-      <int name="themeBrush">-1</int>
-      <boolean name="asyncDrag">TRUE</boolean>
-      <boolean name="doesNotCycle">TRUE</boolean>
-      <int name="WindowMinWidth">320</int>
-      <int name="WindowMinHeight">200</int>
-    </object>
-    <reference idRef="167"/>
-    <reference idRef="190"/>
-    <reference idRef="192"/>
-    <reference idRef="193"/>
-    <reference idRef="194"/>
-    <reference idRef="195"/>
-    <reference idRef="196"/>
-    <reference idRef="197"/>
-    <reference idRef="200"/>
-    <reference idRef="210"/>
-    <reference idRef="211"/>
-    <reference idRef="212"/>
-    <reference idRef="213"/>
-    <reference idRef="214"/>
-    <reference idRef="215"/>
-    <reference idRef="216"/>
-    <reference idRef="217"/>
-    <reference idRef="218"/>
-  </array>
-  <array count="22" name="allParents">
-    <reference idRef="1"/>
-    <reference idRef="29"/>
-    <reference idRef="127"/>
-    <reference idRef="1"/>
-    <reference idRef="166"/>
-    <reference idRef="195"/>
-    <reference idRef="29"/>
-    <reference idRef="195"/>
-    <reference idRef="195"/>
-    <reference idRef="192"/>
-    <reference idRef="195"/>
-    <reference idRef="195"/>
-    <reference idRef="131"/>
-    <reference idRef="29"/>
-    <reference idRef="210"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-  </array>
-  <dictionary count="3" name="nameTable">
-    <string>Files Owner</string>
-    <reference idRef="1"/>
-    <string>MainWindow</string>
-    <reference idRef="166"/>
-    <string>MenuBar</string>
-    <reference idRef="29"/>
-  </dictionary>
-  <unsigned_int name="nextObjectID">219</unsigned_int>
-</object>
diff --git a/examples/parallel_for/polygon_overlay/xcode/Info.plist b/examples/parallel_for/polygon_overlay/xcode/Info.plist
deleted file mode 100644
index 8ed9e6b..0000000
--- a/examples/parallel_for/polygon_overlay/xcode/Info.plist
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.intel.tbb.PolygonOverlay</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>CSResourcesFileMapped</key>
-	<true/>
-</dict>
-</plist>
diff --git a/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.pch b/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.pch
deleted file mode 100644
index 17ad8b0..0000000
--- a/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.pch
+++ /dev/null
@@ -1,5 +0,0 @@
-//
-// Prefix header for all source files of the 'PolygonOverlay' target in the 'PolygonOverlay' project.
-//
-
-#include <Carbon/Carbon.h>
diff --git a/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj b/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj
deleted file mode 100644
index b31a8db..0000000
--- a/examples/parallel_for/polygon_overlay/xcode/PolygonOverlay.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,317 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	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 */; };
-		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 = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
-		A1976AD90DF6A6910032C3EA /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = SOURCE_ROOT; };
-		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 */,
-				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;
-			attributes = {
-				LastUpgradeCheck = 0410;
-			};
-			buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "PolygonOverlay" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 1;
-			knownRegions = (
-				en,
-			);
-			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_MODEL_TUNING = "";
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_VERSION = "";
-				HEADER_SEARCH_PATHS = ../../../../include;
-				IBC_STRIP_NIBS = NO;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-				);
-				PRODUCT_NAME = PolygonOverlay;
-			};
-			name = Debug;
-		};
-		C0E91AC708A95435008D54AB /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_MODEL_TUNING = "";
-				GCC_VERSION = "";
-				HEADER_SEARCH_PATHS = ../../../../include;
-				IBC_STRIP_NIBS = NO;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-				);
-				PRODUCT_NAME = PolygonOverlay;
-			};
-			name = Release;
-		};
-		C0E91ACA08A95435008D54AB /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
-				GCC_AUTO_VECTORIZATION = YES;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_ENABLE_SSE3_EXTENSIONS = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_VERSION = "";
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				IBC_STRIP_NIBS = NO;
-				MACH_O_TYPE = mh_execute;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SDKROOT = macosx10.6;
-				SYMROOT = "/tmp/tbb-$(USER)";
-			};
-			name = Debug;
-		};
-		C0E91ACB08A95435008D54AB /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
-				GCC_AUTO_VECTORIZATION = YES;
-				GCC_ENABLE_CPP_RTTI = YES;
-				GCC_ENABLE_SSE3_EXTENSIONS = YES;
-				GCC_MODEL_TUNING = "";
-				GCC_OPTIMIZATION_LEVEL = 3;
-				GCC_VERSION = "";
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				IBC_STRIP_NIBS = NO;
-				MACH_O_TYPE = mh_execute;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SDKROOT = macosx10.6;
-				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/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..4ada999
--- /dev/null
+++ b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj
@@ -0,0 +1,355 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		84011603152CB4AD00B07E4D /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84011602152CB4AD00B07E4D /* libtbbmalloc.dylib */; };
+		84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };
+		84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
+		84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
+		84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
+		84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; };
+		84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };
+		84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };
+		84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		84B8DAAC152CB05200D59B95 /* polymain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA4152CB05200D59B95 /* polymain.cpp */; };
+		84B8DAAD152CB05200D59B95 /* polyover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA6152CB05200D59B95 /* polyover.cpp */; };
+		84B8DAAE152CB05200D59B95 /* pover_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA9152CB05200D59B95 /* pover_video.cpp */; };
+		84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };
+		84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		84011602152CB4AD00B07E4D /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = "<group>"; };
+		84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
+		84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = "<group>"; };
+		84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = "<group>"; };
+		84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = "<group>"; };
+		84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = "<group>"; };
+		84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = "<group>"; };
+		84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tbbExample-Prefix.pch"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; sourceTree = "<group>"; };
+		84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = "<group>"; };
+		84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = "<group>"; };
+		84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = "<group>"; };
+		84B8DAA4152CB05200D59B95 /* polymain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = polymain.cpp; path = ../polymain.cpp; sourceTree = "<group>"; };
+		84B8DAA5152CB05200D59B95 /* polymain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = polymain.h; path = ../polymain.h; sourceTree = "<group>"; };
+		84B8DAA6152CB05200D59B95 /* polyover.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = polyover.cpp; path = ../polyover.cpp; sourceTree = "<group>"; };
+		84B8DAA7152CB05200D59B95 /* polyover.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = polyover.h; path = ../polyover.h; sourceTree = "<group>"; };
+		84B8DAA8152CB05200D59B95 /* pover_global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pover_global.h; path = ../pover_global.h; sourceTree = "<group>"; };
+		84B8DAA9152CB05200D59B95 /* pover_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pover_video.cpp; path = ../pover_video.cpp; sourceTree = "<group>"; };
+		84B8DAAA152CB05200D59B95 /* pover_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pover_video.h; path = ../pover_video.h; sourceTree = "<group>"; };
+		84B8DAAB152CB05200D59B95 /* rpolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rpolygon.h; path = ../rpolygon.h; sourceTree = "<group>"; };
+		84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+		84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
+		84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
+		84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		84D0174E1527431F0008A4E0 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,
+				84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,
+				84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */,
+				84011603152CB4AD00B07E4D /* libtbbmalloc.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		84B8DA6C152CA8D900D59B95 /* tbbExample */ = {
+			isa = PBXGroup;
+			children = (
+				84B8DAA4152CB05200D59B95 /* polymain.cpp */,
+				84B8DAA5152CB05200D59B95 /* polymain.h */,
+				84B8DAA6152CB05200D59B95 /* polyover.cpp */,
+				84B8DAA7152CB05200D59B95 /* polyover.h */,
+				84B8DAA8152CB05200D59B95 /* pover_global.h */,
+				84B8DAA9152CB05200D59B95 /* pover_video.cpp */,
+				84B8DAAA152CB05200D59B95 /* pover_video.h */,
+				84B8DAAB152CB05200D59B95 /* rpolygon.h */,
+				84B8DA98152CAD8600D59B95 /* Gui layer */,
+				84B8DA7B152CA97B00D59B95 /* Resources */,
+			);
+			name = tbbExample;
+			sourceTree = "<group>";
+		};
+		84B8DA7B152CA97B00D59B95 /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,
+				84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,
+			);
+			name = Resources;
+			path = ../../../common/gui/xcode/tbbExample/en.lproj;
+			sourceTree = "<group>";
+		};
+		84B8DA98152CAD8600D59B95 /* Gui layer */ = {
+			isa = PBXGroup;
+			children = (
+				84B8DA99152CADF400D59B95 /* macvideo.cpp */,
+				84B8DA6F152CA90100D59B95 /* main.m */,
+				84B8DA70152CA90100D59B95 /* OpenGLView.h */,
+				84B8DA71152CA90100D59B95 /* OpenGLView.m */,
+				84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */,
+				84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */,
+				84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */,
+			);
+			name = "Gui layer";
+			sourceTree = "<group>";
+		};
+		84D017461527431F0008A4E0 = {
+			isa = PBXGroup;
+			children = (
+				84B8DA6C152CA8D900D59B95 /* tbbExample */,
+				84D017541527431F0008A4E0 /* Frameworks */,
+				84D017521527431F0008A4E0 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		84D017521527431F0008A4E0 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				84D017511527431F0008A4E0 /* tbbExample.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		84D017541527431F0008A4E0 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				84D01775152744BD0008A4E0 /* OpenGL.framework */,
+				84D017551527431F0008A4E0 /* Cocoa.framework */,
+				84D017571527431F0008A4E0 /* Other Frameworks */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		84D017571527431F0008A4E0 /* Other Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				84011602152CB4AD00B07E4D /* libtbbmalloc.dylib */,
+				84B8DA13152C9AC600D59B95 /* libtbb.dylib */,
+				84D017581527431F0008A4E0 /* AppKit.framework */,
+				84D017591527431F0008A4E0 /* CoreData.framework */,
+				84D0175A1527431F0008A4E0 /* Foundation.framework */,
+			);
+			name = "Other Frameworks";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		84D017501527431F0008A4E0 /* tbbExample */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */;
+			buildPhases = (
+				84D0174D1527431F0008A4E0 /* Sources */,
+				84D0174E1527431F0008A4E0 /* Frameworks */,
+				84D0174F1527431F0008A4E0 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = tbbExample;
+			productName = tbbExample;
+			productReference = 84D017511527431F0008A4E0 /* tbbExample.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		84D017481527431F0008A4E0 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				CLASSPREFIX = tbb;
+				LastUpgradeCheck = 0430;
+			};
+			buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "polygon_overlay" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 84D017461527431F0008A4E0;
+			productRefGroup = 84D017521527431F0008A4E0 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				84D017501527431F0008A4E0 /* tbbExample */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		84D0174F1527431F0008A4E0 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				84B8DA7A152CA90100D59B95 /* (null) in Resources */,
+				84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */,
+				84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		84D0174D1527431F0008A4E0 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				84B8DA77152CA90100D59B95 /* main.m in Sources */,
+				84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */,
+				84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */,
+				84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */,
+				84B8DAAC152CB05200D59B95 /* polymain.cpp in Sources */,
+				84B8DAAD152CB05200D59B95 /* polyover.cpp in Sources */,
+				84B8DAAE152CB05200D59B95 /* pover_video.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				84B8DA7D152CA97B00D59B95 /* en */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				84B8DA7F152CA97B00D59B95 /* en */,
+			);
+			name = MainMenu.xib;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		84D01770152743200008A4E0 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = YES;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
+			};
+			name = Debug;
+		};
+		84D01771152743200008A4E0 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = YES;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				SDKROOT = macosx;
+			};
+			name = Release;
+		};
+		84D01773152743200008A4E0 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\"";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Debug;
+		};
+		84D01774152743200008A4E0 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"\"$(SRCROOT)/../../../../lib\"",
+					"\"$(SRCROOT)\"",
+				);
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "polygon_overlay" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				84D01770152743200008A4E0 /* Debug */,
+				84D01771152743200008A4E0 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				84D01773152743200008A4E0 /* Debug */,
+				84D01774152743200008A4E0 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 84D017481527431F0008A4E0 /* Project object */;
+}
diff --git a/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
new file mode 100644
index 0000000..37d4ac6
--- /dev/null
+++ b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "84D017501527431F0008A4E0"
+               BuildableName = "tbbExample.app"
+               BlueprintName = "tbbExample"
+               ReferencedContainer = "container:tbbExample.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample"
+            ReferencedContainer = "container:polygon_overlay.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      customWorkingDirectory = "/tmp"
+      buildConfiguration = "Debug"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "NO"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample"
+            ReferencedContainer = "container:polygon_overlay.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <EnvironmentVariables>
+         <EnvironmentVariable
+            key = "DYLD_LIBRARY_PATH"
+            value = "$(SRCROOT)/../../../../lib"
+            isEnabled = "YES">
+         </EnvironmentVariable>
+      </EnvironmentVariables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample"
+            ReferencedContainer = "container:tbbExample.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/examples/parallel_for/seismic/Makefile b/examples/parallel_for/seismic/Makefile
index 4f57ee6..414b570 100644
--- a/examples/parallel_for/seismic/Makefile
+++ b/examples/parallel_for/seismic/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -35,11 +35,28 @@ ifneq (,$(shell which icc 2>/dev/null))
 CXX=icc
 endif # icc
 
+ifeq ($(offload), mic)
+override CXXFLAGS += -D__TBB_MIC=1
+# Currently only console mode is supported in offload version
+override UI=con
+SOURCES = $(UI)video.o universe.cpp seismic_video.cpp main.cpp
+OFFLOAD_SOURCES = ../../common/gui/$(UI)video.cpp
+else
+SOURCES = ../../common/gui/$(UI)video.cpp universe.cpp seismic_video.cpp main.cpp
+PERFFLAGS=-msse2
+endif
+
+ifeq ($(CXX), icc)
+TBBLIB = -tbb
+TBBLIB_DEBUG = -tbb
+else
+TBBLIB = -ltbb
+TBBLIB_DEBUG = -ltbb_debug
+endif
+
 include ../../common/gui/Makefile.gmake
 override CXXFLAGS += $(UI_CXXFLAGS)
 
-SOURCES= ../../common/gui/$(UI)video.cpp universe.cpp seismic_video.cpp main.cpp
-
 ifeq ($(shell uname), Linux)
 LIBS+= -lrt 
 endif
@@ -48,16 +65,29 @@ all:	release test
 
 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)
-endif
+	mkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS
+	cp ../../common/gui/xcode/tbbExample/Info.plist $(NAME).app/Contents
+	cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents
+	cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj
+endif # Mac
 
 release: $(SOURCES) resources
-	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) -ltbb $(LIBS)
+ifeq ($(offload), mic)
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -c -offload-attribute-target=mic $(OFFLOAD_SOURCES)
+endif
+ifeq ($(UI),mac)
+	$(CXX_UI) -O2 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)
+endif # Mac
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) $(TBBLIB) $(LIBS)
 
 debug: resources
-	$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) -ltbb_debug $(LIBS)
+ifeq ($(offload), mic)
+	$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -c -offload-attribute-target=mic $(OFFLOAD_SOURCES)
+endif
+ifeq ($(UI),mac)
+	$(CXX_UI) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)
+endif # Mac
+	$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) $(TBBLIB_DEBUG) $(LIBS)
 
 clean:
 	$(RM) $(EXE) *.o *.d
@@ -72,8 +102,8 @@ else
 	./$(EXE) $(ARGS)
 endif
 
-perf_build: resources
-	$(CXX) -O2 -msse2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) -ltbb $(LIBS)
+perf_build: override CXXFLAGS+=$(PERFFLAGS)
+perf_build: release
 
 perf_run:
 	./$(EXE) $(PERF_RUN_ARGS)
diff --git a/examples/parallel_for/seismic/Makefile.windows b/examples/parallel_for/seismic/Makefile.windows
index eb92761..f973982 100644
--- a/examples/parallel_for/seismic/Makefile.windows
+++ b/examples/parallel_for/seismic/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 453cdad..49d11be 100644
--- a/examples/parallel_for/seismic/index.html
+++ b/examples/parallel_for/seismic/index.html
@@ -2,7 +2,11 @@
 <BODY>
 
 <H2>Overview</H2>
-Parallel seismic wave simulation that demonstrates use of parallel_for and affinity_partitioner.
+<DL>
+<DT>Parallel seismic wave simulation that demonstrates use of parallel_for and affinity_partitioner.
+<DT>The example can be built in the offload version to run on Intel&reg Many Integrated Core (Intel&reg MIC) Architecture based coprocessor (see <A HREF=../../index.html#build_4>build instructions</A>).
+NOTE: Currently, the offload version does not support GUI and can only be used with console mode.
+</DL>
 
 <H2>Files</H2>
 <DL>
@@ -23,22 +27,24 @@ Parallel seismic wave simulation that demonstrates use of parallel_for and affin
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example.
-</DL>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the 
+    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X 
+    systems only).</DL>
 
 <H2>To Build</H2>
 General build directions can be found <A HREF=../../index.html#build>here</A>.
 The following additional options are supported:
 <DL>
-<DT><TT>make [(general targets: {release, debug} [test])] UI={con, gdi, dd, x, mac}</TT>
-<DD>Build and run as usual, but build with the specified GUI driver: console, GDI+*, Direct Draw*, X11, or OpenGL*
+<DT><TT>make [(general targets: {release, debug} [test])] UI={con, gdi, dd, d2d, x, mac}</TT>
+<DD>Build and run as usual, but build with the specified GUI driver: console, GDI+*, DirectDraw*, 
+    Direct2D*, X11, or OpenGL*
     (see the description of the <A HREF=../../common/index.html>common GUI code</A>
     for more information on available graphics support).
     For Linux* and Mac OS* X systems, the best available driver is detected automatically by the Makefile.
-    For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=dd may offer superior
-    performance, but can only be used if the Microsoft* Direct Draw* SDK is installed on your system 
+    For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=dd or 
+    UI=d2d may offer superior
+    performance, but can only be used if the Microsoft* DirectX* SDK is installed on your system 
     and if overlay is supported by your graphics card.
     Use UI=con to build without the GUI for use in making performance measurements
     <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
@@ -92,15 +98,12 @@ user interface:
 <UL>
 <LI>While running with the GUI display turned on should yield reasonable performance in most cases, <I>running with the GUI
     display turned off is strongly recommended</I> in order to demonstrate the full performance and scalability of the example.
-<LI>If using the X-windows (X11) GUI on Mac OS* X systems, X11 might not be installed on the system by default.
-    To install X11 on Mac OS* X systems, use the operating system install disk, choose "Optional installs" and select X11 from
-    the "Applications" list.  Alternatively, if X11 is not available, build without the GUI (see build targets above).
 </UL>
 
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/parallel_for/seismic/main.cpp b/examples/parallel_for/seismic/main.cpp
index d9e3f92..8f33720 100644
--- a/examples/parallel_for/seismic/main.cpp
+++ b/examples/parallel_for/seismic/main.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,11 +32,17 @@
 #include "tbb/tick_count.h"
 #include "../../common/utility/utility.h"
 
+#if __TBB_MIC
+#pragma offload_attribute (push,target(mic))
+#endif // __TBB_MIC
 #include "seismic_video.h"
 #include "universe.h"
 #include "tbb/task_scheduler_init.h"
 
 Universe u;
+#if __TBB_MIC
+#pragma offload_attribute (pop)
+#endif // __TBB_MIC
 
 struct RunOptions {
     //! It is used for console mode for test with different number of threads and also has
@@ -52,10 +58,17 @@ struct RunOptions {
     }
 };
 
+int do_get_default_num_threads() {
+    int threads;
+    #if __TBB_MIC
+    #pragma offload target(mic) out(threads)
+    #endif // __TBB_MIC
+    threads = tbb::task_scheduler_init::default_num_threads();
+    return threads;
+}
+
 int get_default_num_threads() {
-    static int threads = 0;
-    if ( threads == 0 )
-        threads = tbb::task_scheduler_init::default_num_threads();
+    static int threads = do_get_default_num_threads();
     return threads;
 }
 
@@ -100,6 +113,18 @@ int main(int argc, char *argv[])
                 tbb::tick_count xwayParallelismStartTime = tbb::tick_count::now();
                 u.InitializeUniverse(video);
                 int numberOfFrames = options.numberOfFrames;
+                #if __TBB_MIC
+                drawing_memory dmem = video.get_drawing_memory();
+                char *pMem = dmem.get_address();
+                size_t memSize = dmem.get_size();
+
+                #pragma offload target(mic) in(u, numberOfFrames, p, dmem), out(pMem:length(memSize))
+                {
+                    // It is necessary to update the pointer on mic 
+                    // since the address spaces on host and on target are different
+                    dmem.set_address(pMem);
+                    u.SetDrawingMemory(dmem);
+                #endif // __TBB_MIC
                 if (p==0){
                     //run a serial version
                     for( int i=0; i<numberOfFrames; ++i ){
@@ -111,6 +136,9 @@ int main(int argc, char *argv[])
                         u.ParallelUpdateUniverse();
                     }
                 }
+                #if __TBB_MIC
+                }
+                #endif // __TBB_MIC
 
                 if (!options.silent){
                     double fps =  options.numberOfFrames/((tbb::tick_count::now()-xwayParallelismStartTime).seconds());
diff --git a/examples/parallel_for/seismic/seismic_video.cpp b/examples/parallel_for/seismic/seismic_video.cpp
index c916f85..e3072a8 100644
--- a/examples/parallel_for/seismic/seismic_video.cpp
+++ b/examples/parallel_for/seismic/seismic_video.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/seismic/seismic_video.h b/examples/parallel_for/seismic/seismic_video.h
index d9d2dd1..3e5ba1d 100644
--- a/examples/parallel_for/seismic/seismic_video.h
+++ b/examples/parallel_for/seismic/seismic_video.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/seismic/universe.cpp b/examples/parallel_for/seismic/universe.cpp
index fcaae06..78557d4 100644
--- a/examples/parallel_for/seismic/universe.cpp
+++ b/examples/parallel_for/seismic/universe.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,9 @@
     the GNU General Public License.
 */
 
+#if __TBB_MIC
+#pragma offload_attribute (target(mic))
+#endif // __TBB_MIC
 
 #include "../../common/gui/video.h"
 #include <cmath>
diff --git a/examples/parallel_for/seismic/universe.h b/examples/parallel_for/seismic/universe.h
index 4ebb2c1..54cadfd 100644
--- a/examples/parallel_for/seismic/universe.h
+++ b/examples/parallel_for/seismic/universe.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/parallel_for/seismic/xcode/English.lproj/main.nib/classes.nib b/examples/parallel_for/seismic/xcode/English.lproj/main.nib/classes.nib
deleted file mode 100644
index ea58db1..0000000
--- a/examples/parallel_for/seismic/xcode/English.lproj/main.nib/classes.nib
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-IBClasses = ();
-IBVersion = 1;
-}
diff --git a/examples/parallel_for/seismic/xcode/English.lproj/main.nib/info.nib b/examples/parallel_for/seismic/xcode/English.lproj/main.nib/info.nib
deleted file mode 100644
index 642ec2d..0000000
--- a/examples/parallel_for/seismic/xcode/English.lproj/main.nib/info.nib
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IBDocumentLocation</key>
-	<string>662 774 356 240 0 0 1680 1028 </string>
-	<key>IBEditorPositions</key>
-	<dict>
-		<key>29</key>
-		<string>863 618 271 44 0 0 1680 1028 </string>
-	</dict>
-	<key>IBFramework Version</key>
-	<string>443.0</string>
-	<key>IBOldestOS</key>
-	<integer>3</integer>
-	<key>IBOpenObjects</key>
-	<array>
-		<integer>29</integer>
-		<integer>166</integer>
-	</array>
-	<key>IBSystem Version</key>
-	<string>8I1119</string>
-	<key>targetFramework</key>
-	<string>IBCarbonFramework</string>
-</dict>
-</plist>
diff --git a/examples/parallel_for/seismic/xcode/English.lproj/main.nib/objects.xib b/examples/parallel_for/seismic/xcode/English.lproj/main.nib/objects.xib
deleted file mode 100644
index 1d06d6c..0000000
--- a/examples/parallel_for/seismic/xcode/English.lproj/main.nib/objects.xib
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-<object class="NSIBObjectData">
-  <string name="targetFramework">IBCarbonFramework</string>
-  <object name="rootObject" class="NSCustomObject" id="1">
-    <string name="customClass">NSApplication</string>
-  </object>
-  <array count="22" name="allObjects">
-    <object class="IBCarbonMenu" id="29">
-      <string name="title">main</string>
-      <array count="3" name="items">
-        <object class="IBCarbonMenuItem" id="210">
-          <boolean name="updateSingleItem">TRUE</boolean>
-          <string name="title">Seismic Simulation</string>
-          <object name="submenu" class="IBCarbonMenu" id="211">
-            <string name="title">Seismic Simulation</string>
-            <array count="7" name="items">
-              <object class="IBCarbonMenuItem" id="215">
-                <boolean name="checked">TRUE</boolean>
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Parallel</string>
-                <ostype name="command">para</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="214">
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Serial</string>
-                <ostype name="command">seri</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="216">
-                <boolean name="separator">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-              </object>
-              <object class="IBCarbonMenuItem" id="217">
-                <boolean name="checked">TRUE</boolean>
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Enable GUI</string>
-                <ostype name="command">egui</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="218">
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Disable GUI</string>
-                <ostype name="command">dgui</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="213">
-                <boolean name="separator">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-              </object>
-              <object class="IBCarbonMenuItem" id="212">
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">About Seismic</string>
-                <int name="keyEquivalentModifier">0</int>
-                <ostype name="command">abou</ostype>
-              </object>
-            </array>
-            <string name="name">_NSAppleMenu</string>
-          </object>
-        </object>
-        <object class="IBCarbonMenuItem" id="127">
-          <string name="title">File</string>
-          <object name="submenu" class="IBCarbonMenu" id="131">
-            <string name="title">File</string>
-            <array count="1" name="items">
-              <object class="IBCarbonMenuItem" id="200">
-                <string name="title">Close</string>
-                <string name="keyEquivalent">w</string>
-                <ostype name="command">clos</ostype>
-              </object>
-            </array>
-          </object>
-        </object>
-        <object class="IBCarbonMenuItem" id="192">
-          <string name="title">Window</string>
-          <object name="submenu" class="IBCarbonMenu" id="195">
-            <string name="title">Window</string>
-            <array count="5" name="items">
-              <object class="IBCarbonMenuItem" id="190">
-                <boolean name="dynamic">TRUE</boolean>
-                <string name="title">Minimize</string>
-                <string name="keyEquivalent">m</string>
-                <ostype name="command">mini</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="197">
-                <string name="title">Zoom</string>
-                <ostype name="command">zoom</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="194">
-                <boolean name="separator">TRUE</boolean>
-              </object>
-              <object class="IBCarbonMenuItem" id="196">
-                <boolean name="dynamic">TRUE</boolean>
-                <string name="title">Bring All to Front</string>
-                <ostype name="command">bfrt</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="193">
-                <boolean name="dynamic">TRUE</boolean>
-                <string name="title">Arrange in Front</string>
-                <int name="keyEquivalentModifier">1572864</int>
-                <ostype name="command">frnt</ostype>
-              </object>
-            </array>
-            <string name="name">_NSWindowsMenu</string>
-          </object>
-        </object>
-      </array>
-      <string name="name">_NSMainMenu</string>
-    </object>
-    <reference idRef="127"/>
-    <reference idRef="131"/>
-    <object class="IBCarbonWindow" id="166">
-      <string name="windowRect">338 353 698 833 </string>
-      <string name="title">Seismic Simulation</string>
-      <object name="rootControl" class="IBCarbonRootControl" id="167">
-        <string name="bounds">0 0 360 480 </string>
-        <string name="viewFrame">0 0 480 360 </string>
-      </object>
-      <boolean name="receiveUpdates">FALSE</boolean>
-      <boolean name="compositing">TRUE</boolean>
-      <int name="themeBrush">-1</int>
-      <boolean name="asyncDrag">TRUE</boolean>
-      <boolean name="doesNotCycle">TRUE</boolean>
-      <int name="WindowMinWidth">320</int>
-      <int name="WindowMinHeight">200</int>
-    </object>
-    <reference idRef="167"/>
-    <reference idRef="190"/>
-    <reference idRef="192"/>
-    <reference idRef="193"/>
-    <reference idRef="194"/>
-    <reference idRef="195"/>
-    <reference idRef="196"/>
-    <reference idRef="197"/>
-    <reference idRef="200"/>
-    <reference idRef="210"/>
-    <reference idRef="211"/>
-    <reference idRef="212"/>
-    <reference idRef="213"/>
-    <reference idRef="214"/>
-    <reference idRef="215"/>
-    <reference idRef="216"/>
-    <reference idRef="217"/>
-    <reference idRef="218"/>
-  </array>
-  <array count="22" name="allParents">
-    <reference idRef="1"/>
-    <reference idRef="29"/>
-    <reference idRef="127"/>
-    <reference idRef="1"/>
-    <reference idRef="166"/>
-    <reference idRef="195"/>
-    <reference idRef="29"/>
-    <reference idRef="195"/>
-    <reference idRef="195"/>
-    <reference idRef="192"/>
-    <reference idRef="195"/>
-    <reference idRef="195"/>
-    <reference idRef="131"/>
-    <reference idRef="29"/>
-    <reference idRef="210"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-  </array>
-  <dictionary count="3" name="nameTable">
-    <string>Files Owner</string>
-    <reference idRef="1"/>
-    <string>MainWindow</string>
-    <reference idRef="166"/>
-    <string>MenuBar</string>
-    <reference idRef="29"/>
-  </dictionary>
-  <unsigned_int name="nextObjectID">219</unsigned_int>
-</object>
diff --git a/examples/parallel_for/seismic/xcode/Info.plist b/examples/parallel_for/seismic/xcode/Info.plist
deleted file mode 100644
index d435fca..0000000
--- a/examples/parallel_for/seismic/xcode/Info.plist
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.intel.tbb.SeismicSimulation</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>CSResourcesFileMapped</key>
-	<true/>
-</dict>
-</plist>
diff --git a/examples/parallel_for/seismic/xcode/SeismicSimulation.pch b/examples/parallel_for/seismic/xcode/SeismicSimulation.pch
deleted file mode 100644
index bacf499..0000000
--- a/examples/parallel_for/seismic/xcode/SeismicSimulation.pch
+++ /dev/null
@@ -1,5 +0,0 @@
-//
-// Prefix header for all source files of the 'SeismicSimulation' target in the 'SeismicSimulation' project.
-//
-
-#include <Carbon/Carbon.h>
diff --git a/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj b/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj
deleted file mode 100644
index e2ddd98..0000000
--- a/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,303 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		61C4770113CE179A0022F8F6 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61C4770013CE179A0022F8F6 /* main.cpp */; };
-		61C4770813CE17B40022F8F6 /* seismic_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61C4770313CE17B40022F8F6 /* seismic_video.cpp */; };
-		61C4770A13CE17B40022F8F6 /* universe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61C4770613CE17B40022F8F6 /* universe.cpp */; };
-		8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
-		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 */; };
-		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>"; };
-		61C4770013CE179A0022F8F6 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = "<group>"; };
-		61C4770313CE17B40022F8F6 /* seismic_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = seismic_video.cpp; path = ../seismic_video.cpp; sourceTree = "<group>"; };
-		61C4770413CE17B40022F8F6 /* seismic_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = seismic_video.h; path = ../seismic_video.h; sourceTree = "<group>"; };
-		61C4770613CE17B40022F8F6 /* universe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = universe.cpp; path = ../universe.cpp; sourceTree = "<group>"; };
-		61C4770713CE17B40022F8F6 /* universe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = universe.h; path = ../universe.h; 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 = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
-		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 */,
-				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 = (
-				61C4770313CE17B40022F8F6 /* seismic_video.cpp */,
-				61C4770413CE17B40022F8F6 /* seismic_video.h */,
-				61C4770613CE17B40022F8F6 /* universe.cpp */,
-				61C4770713CE17B40022F8F6 /* universe.h */,
-				61C4770013CE179A0022F8F6 /* main.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;
-			attributes = {
-				LastUpgradeCheck = 0410;
-			};
-			buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "SeismicSimulation" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 1;
-			knownRegions = (
-				en,
-			);
-			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 = (
-				A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */,
-				61C4770113CE179A0022F8F6 /* main.cpp in Sources */,
-				61C4770813CE17B40022F8F6 /* seismic_video.cpp in Sources */,
-				61C4770A13CE17B40022F8F6 /* universe.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_MODEL_TUNING = "";
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_VERSION = "";
-				HEADER_SEARCH_PATHS = ../../../../include;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-				);
-				PRODUCT_NAME = SeismicSimulation;
-			};
-			name = Debug;
-		};
-		C0E91AC708A95435008D54AB /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_MODEL_TUNING = "";
-				GCC_VERSION = "";
-				HEADER_SEARCH_PATHS = ../../../../include;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-				);
-				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_VERSION = "";
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				IBC_STRIP_NIBS = NO;
-				MACH_O_TYPE = mh_execute;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SDKROOT = macosx10.6;
-				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_VERSION = "";
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				IBC_STRIP_NIBS = NO;
-				MACH_O_TYPE = mh_execute;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SDKROOT = macosx10.6;
-				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/seismic/xcode/seismic.xcodeproj/project.pbxproj b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..ff39465
--- /dev/null
+++ b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj
@@ -0,0 +1,345 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };
+		84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
+		84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
+		84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
+		84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; };
+		84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };
+		84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };
+		84B8DA87152CA99C00D59B95 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; };
+		84B8DA88152CA99C00D59B95 /* seismic_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA83152CA99C00D59B95 /* seismic_video.cpp */; };
+		84B8DA89152CA99C00D59B95 /* universe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA85152CA99C00D59B95 /* universe.cpp */; };
+		84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };
+		84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
+		84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = "<group>"; };
+		84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = "<group>"; };
+		84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = "<group>"; };
+		84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = "<group>"; };
+		84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = "<group>"; };
+		84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tbbExample-Prefix.pch"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; sourceTree = "<group>"; };
+		84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = "<group>"; };
+		84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = "<group>"; };
+		84B8DA82152CA99C00D59B95 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = "<group>"; };
+		84B8DA83152CA99C00D59B95 /* seismic_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = seismic_video.cpp; path = ../seismic_video.cpp; sourceTree = "<group>"; };
+		84B8DA84152CA99C00D59B95 /* seismic_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = seismic_video.h; path = ../seismic_video.h; sourceTree = "<group>"; };
+		84B8DA85152CA99C00D59B95 /* universe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = universe.cpp; path = ../universe.cpp; sourceTree = "<group>"; };
+		84B8DA86152CA99C00D59B95 /* universe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = universe.h; path = ../universe.h; sourceTree = "<group>"; };
+		84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = "<group>"; };
+		84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+		84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
+		84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
+		84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		84D0174E1527431F0008A4E0 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,
+				84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,
+				84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		84B8DA6C152CA8D900D59B95 /* tbbExample */ = {
+			isa = PBXGroup;
+			children = (
+				84B8DA98152CAD8600D59B95 /* Gui layer */,
+				84B8DA7B152CA97B00D59B95 /* Resources */,
+				84B8DA82152CA99C00D59B95 /* main.cpp */,
+				84B8DA83152CA99C00D59B95 /* seismic_video.cpp */,
+				84B8DA84152CA99C00D59B95 /* seismic_video.h */,
+				84B8DA85152CA99C00D59B95 /* universe.cpp */,
+				84B8DA86152CA99C00D59B95 /* universe.h */,
+			);
+			name = tbbExample;
+			sourceTree = "<group>";
+		};
+		84B8DA7B152CA97B00D59B95 /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,
+				84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,
+			);
+			name = Resources;
+			path = ../../../common/gui/xcode/tbbExample/en.lproj;
+			sourceTree = "<group>";
+		};
+		84B8DA98152CAD8600D59B95 /* Gui layer */ = {
+			isa = PBXGroup;
+			children = (
+				84B8DA99152CADF400D59B95 /* macvideo.cpp */,
+				84B8DA6F152CA90100D59B95 /* main.m */,
+				84B8DA70152CA90100D59B95 /* OpenGLView.h */,
+				84B8DA71152CA90100D59B95 /* OpenGLView.m */,
+				84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */,
+				84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */,
+				84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */,
+			);
+			name = "Gui layer";
+			sourceTree = "<group>";
+		};
+		84D017461527431F0008A4E0 = {
+			isa = PBXGroup;
+			children = (
+				84B8DA6C152CA8D900D59B95 /* tbbExample */,
+				84D017541527431F0008A4E0 /* Frameworks */,
+				84D017521527431F0008A4E0 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		84D017521527431F0008A4E0 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				84D017511527431F0008A4E0 /* tbbExample.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		84D017541527431F0008A4E0 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				84D01775152744BD0008A4E0 /* OpenGL.framework */,
+				84D017551527431F0008A4E0 /* Cocoa.framework */,
+				84D017571527431F0008A4E0 /* Other Frameworks */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		84D017571527431F0008A4E0 /* Other Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				84B8DA13152C9AC600D59B95 /* libtbb.dylib */,
+				84D017581527431F0008A4E0 /* AppKit.framework */,
+				84D017591527431F0008A4E0 /* CoreData.framework */,
+				84D0175A1527431F0008A4E0 /* Foundation.framework */,
+			);
+			name = "Other Frameworks";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		84D017501527431F0008A4E0 /* tbbExample */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */;
+			buildPhases = (
+				84D0174D1527431F0008A4E0 /* Sources */,
+				84D0174E1527431F0008A4E0 /* Frameworks */,
+				84D0174F1527431F0008A4E0 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = tbbExample;
+			productName = tbbExample;
+			productReference = 84D017511527431F0008A4E0 /* tbbExample.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		84D017481527431F0008A4E0 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				CLASSPREFIX = tbb;
+				LastUpgradeCheck = 0430;
+			};
+			buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "tbbExample" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 84D017461527431F0008A4E0;
+			productRefGroup = 84D017521527431F0008A4E0 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				84D017501527431F0008A4E0 /* tbbExample */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		84D0174F1527431F0008A4E0 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				84B8DA7A152CA90100D59B95 /* (null) in Resources */,
+				84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */,
+				84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		84D0174D1527431F0008A4E0 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				84B8DA77152CA90100D59B95 /* main.m in Sources */,
+				84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */,
+				84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */,
+				84B8DA87152CA99C00D59B95 /* main.cpp in Sources */,
+				84B8DA88152CA99C00D59B95 /* seismic_video.cpp in Sources */,
+				84B8DA89152CA99C00D59B95 /* universe.cpp in Sources */,
+				84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				84B8DA7D152CA97B00D59B95 /* en */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				84B8DA7F152CA97B00D59B95 /* en */,
+			);
+			name = MainMenu.xib;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		84D01770152743200008A4E0 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = YES;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
+			};
+			name = Debug;
+		};
+		84D01771152743200008A4E0 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = YES;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				SDKROOT = macosx;
+			};
+			name = Release;
+		};
+		84D01773152743200008A4E0 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\"";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Debug;
+		};
+		84D01774152743200008A4E0 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"\"$(SRCROOT)/../../../../lib\"",
+					"\"$(SRCROOT)\"",
+				);
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "tbbExample" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				84D01770152743200008A4E0 /* Debug */,
+				84D01771152743200008A4E0 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				84D01773152743200008A4E0 /* Debug */,
+				84D01774152743200008A4E0 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 84D017481527431F0008A4E0 /* Project object */;
+}
diff --git a/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
new file mode 100644
index 0000000..1dd33ab
--- /dev/null
+++ b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "84D017501527431F0008A4E0"
+               BuildableName = "tbbExample.app"
+               BlueprintName = "tbbExample"
+               ReferencedContainer = "container:tbbExample.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample"
+            ReferencedContainer = "container:seismic.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      customWorkingDirectory = "/tmp"
+      buildConfiguration = "Debug"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "NO"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample"
+            ReferencedContainer = "container:seismic.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <EnvironmentVariables>
+         <EnvironmentVariable
+            key = "DYLD_LIBRARY_PATH"
+            value = "$(SRCROOT)/../../../../lib"
+            isEnabled = "YES">
+         </EnvironmentVariable>
+      </EnvironmentVariables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample"
+            ReferencedContainer = "container:tbbExample.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/examples/parallel_for/tachyon/Makefile b/examples/parallel_for/tachyon/Makefile
index 9ab1b51..88d7458 100644
--- a/examples/parallel_for/tachyon/Makefile
+++ b/examples/parallel_for/tachyon/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -173,11 +173,13 @@ light_test_one:
 
 $(EXE): $(SOURCE)
 ifeq ($(UI),mac)
-	mkdir -p $(APPRES)/English.lproj $(NAME).$(VERSION).app/Contents/MacOS
-	$(PBXCP) xcode/English.lproj/main.nib $(APPRES)/English.lproj
-	$(PBXCP) xcode/Info.plist $(APPRES)
-endif
-	$(CXX) $(MYCXXFLAGS) -o $@ $(SOURCE) $(LIBS)
+	mkdir -p $(APPRES)/en.lproj $(NAME)$(SUFFIX).app/Contents/MacOS
+	cp ../../common/gui/xcode/tbbExample/Info.plist $(NAME)$(SUFFIX).app/Contents
+	cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME)$(SUFFIX).app/Contents
+	cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj
+	$(CXX_UI) $(MYCXXFLAGS) $(CXXFLAGS) -c $(MACUISOURCES)
+endif # Mac
+	$(CXX) $(MYCXXFLAGS) -o $@ $(SOURCE) $(MACUIOBJS) $(LIBS)
 	$(RM) *.o
 
 clean: VERSION = *
diff --git a/examples/parallel_for/tachyon/Makefile.windows b/examples/parallel_for/tachyon/Makefile.windows
index 7c3bad4..4449216 100644
--- a/examples/parallel_for/tachyon/Makefile.windows
+++ b/examples/parallel_for/tachyon/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 91caf79..8d07c41 100644
--- a/examples/parallel_for/tachyon/index.html
+++ b/examples/parallel_for/tachyon/index.html
@@ -24,7 +24,7 @@ The following versions of the example are provided:
 <DT>serial
 <DD>Original sequential version.
 <DT>tbb1d
-<DD>Parallel version that uses Threading Building Blocks and blocked_range to parallelize
+<DD>Parallel version that uses Intel® Threading Building Blocks (Intel TBB) and blocked_range to parallelize
 	over tasks that are groups of scan-lines.
     <UL>
     <LI>By default, this version uses one thread per available processor.  To change this
@@ -34,7 +34,7 @@ The following versions of the example are provided:
         controls the amount of range splitting dynamically at runtime, resulting in sub-ranges of varying sizes.  
     </UL>
 <DT>tbb
-<DD>Parallel version that uses Threading Building Blocks and blocked_range2d to parallelize
+<DD>Parallel version that uses Intel TBB and blocked_range2d to parallelize
 	over tasks that are rectangular sub-areas.
     <UL>
     <LI>By default, this version uses one thread per available processor.  To change this
@@ -56,9 +56,9 @@ The following versions of the example are provided:
 <DT><A HREF="src/trace.serial.cpp">src/trace.serial.cpp</A>
 <DD>Source code for original sequential version of example.
 <DT><A HREF="src/trace.tbb1d.cpp">src/trace.tbb1d.cpp</A>
-<DD>Source code for Threading Building Blocks blocked_range (scan-line) version of example.
+<DD>Source code for Intel TBB blocked_range (scan-line) version of example.
 <DT><A HREF="src/trace.tbb.cpp">src/trace.tbb.cpp</A>
-<DD>Source code for Threading Building Blocks blocked_range2d (rectangular sub-area) version of example.
+<DD>Source code for Intel TBB blocked_range2d (rectangular sub-area) version of example.
 <DT>(src/*.cpp)
 <DD>Remainder of source code for example.
 <DT>(src/*.h)
@@ -74,16 +74,17 @@ The following versions of the example are provided:
 <DT><A HREF="dat">dat</A>
 <DD>Contains data sets for running the example.
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example.
-</DL>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the 
+    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X 
+    systems only).</DL>
 
 <H2>To Build</H2>
 General build directions can be found <A HREF=../../index.html#build>here</A>.
 
 <P>
-For Windows* systems, Microsoft* Visual Studio* projects are provided for each of the above versions.
+For Windows* systems Microsoft* Visual Studio* projects are provided for each of the above 
+    example versions.
 </P>
 
 <P>
@@ -105,14 +106,15 @@ Here, <<I>version</I>> is one of the above versions of the example, i.e.,
 <DT><TT>make [(above options or targets)] ARGS=-D</TT>
 <DD>Build and run as above, but run with disabled run-time display updating for use in making performance measurements
     <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
-<DT><TT>make [(above options or targets)] UI={con, gdi, dd, x, mac}</TT>
-<DD>Build and run as usual, but build with the specified GUI driver: console, GDI+*, Direct Draw*, X11, or OpenGL*
+<DT><TT>make [(above options or targets)] UI={con, gdi, dd, d2d, x, mac}</TT>
+<DD>Build and run as usual, but build with the specified GUI driver: console, GDI+*, DirectDraw*, 
+    Direct2D*, X11, or OpenGL*
 	(see the description of the <A HREF=../../common/index.html>common GUI code</A>
 	for more information on available graphics support).
     For Linux* and Mac OS* X systems, the best available driver is detected automatically by the Makefile.
-    For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=dd may offer superior
-	performance, but can only be used if the Microsoft* Direct Draw* SDK is installed on your system 
-	and if overlay is supported by your graphics card.
+    For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=dd or 
+    UI=d2d may offer superior
+	performance, but can only be used if the Microsoft* DirectX* SDK is installed on your system.
     Use UI=con to build without the GUI for use in making performance measurements
 	<I>(strongly recommended when measuring performance or scalability; see note below)</I>.
 <DT><TT>make [(above options or targets)] XARCH=x64</TT>
@@ -145,13 +147,23 @@ named <TT>tachyon.<<I>version</I>>.exe</TT>.  To run these executables dir
     <BR>Run it with a small dataset, e.g., <TT>tachyon.tbb.exe dat/820spheres.dat no-display-updating</TT>.
 </DL>
 
+<H2>Keys</H2>
+While running with the GUI display turned on the following keyboard keys can be used:
+<DL>
+<DT><TT>ESC</TT>
+<DD>Interrupt the rendering and exit
+<DT><TT><I>Any key</I></TT>
+<DD>Enable repetition of rendering after the pause. Press ESC to stop the application.
+<DT><TT>Space</TT>
+<DD>Toggle run-time display updating mode while rendering (see no-display-updating above).
+<DT><TT>p</TT>
+<DD>Holds the picture after rendering completion. Press 'p' again to continue.
+</DL>
+
 <H2>Notes</H2>
 <UL>
 <LI>While running with the GUI display turned on should yield reasonable performance in most cases, <I>running with the GUI
     display turned off is strongly recommended</I> in order to demonstrate the full performance and scalability of the example.
-<LI>If using the X-windows (X11) GUI on Mac OS* X systems, X11 might not be installed on the system by default.
-    To install X11 on Mac OS* X systems, use the operating system install disk, choose "Optional installs" and select X11 from
-    the "Applications" list.  Alternatively, if X11 is not available, build without the GUI (see build targets above).
 </UL>
 
 <a name="copyright"/>
@@ -159,7 +171,7 @@ named <TT>tachyon.<<I>version</I>>.exe</TT>.  To run these executables dir
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.serial.vcproj b/examples/parallel_for/tachyon/msvs/tachyon.serial.vcproj
index e100afc..e5a13b2 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.serial.vcproj
+++ b/examples/parallel_for/tachyon/msvs/tachyon.serial.vcproj
@@ -46,7 +46,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
@@ -129,7 +129,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
@@ -537,7 +537,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
@@ -621,7 +621,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcproj b/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcproj
index 1e104a2..2e4a465 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcproj
+++ b/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcproj
@@ -46,7 +46,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
 				PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
@@ -134,7 +134,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
 				PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
@@ -565,7 +565,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
 				PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
@@ -653,7 +653,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
 				PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcproj b/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcproj
index d30edec..5044e56 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcproj
+++ b/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcproj
@@ -46,7 +46,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
 				PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
@@ -134,7 +134,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
 				PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
@@ -565,7 +565,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
 				PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
@@ -653,7 +653,7 @@
 				EnableIntrinsicFunctions="true"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				AdditionalIncludeDirectories=""$(TBBROOT)\include";"$(SolutionDir)\..\..\..\..\include";"
 				PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
 				BasicRuntimeChecks="3"
diff --git a/examples/parallel_for/tachyon/msvs/tachyon.vcproj b/examples/parallel_for/tachyon/msvs/tachyon.vcproj
index 97da311..ec91a77 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon.vcproj
+++ b/examples/parallel_for/tachyon/msvs/tachyon.vcproj
@@ -24,7 +24,7 @@
 			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
 			ConfigurationType="4"
 			CharacterSet="2"
-			WholeProgramOptimization="1"
+			WholeProgramOptimization="0"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -46,7 +46,7 @@
 				Optimization="0"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
@@ -92,7 +92,7 @@
 			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
 			ConfigurationType="4"
 			CharacterSet="2"
-			WholeProgramOptimization="1"
+			WholeProgramOptimization="0"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -115,7 +115,7 @@
 				Optimization="0"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
@@ -423,7 +423,7 @@
 			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
 			ConfigurationType="4"
 			CharacterSet="2"
-			WholeProgramOptimization="1"
+			WholeProgramOptimization="0"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -446,7 +446,7 @@
 				Optimization="0"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
@@ -492,7 +492,7 @@
 			IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
 			ConfigurationType="4"
 			CharacterSet="2"
-			WholeProgramOptimization="1"
+			WholeProgramOptimization="0"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -516,7 +516,7 @@
 				Optimization="0"
 				FavorSizeOrSpeed="1"
 				OmitFramePointers="true"
-				WholeProgramOptimization="true"
+				WholeProgramOptimization="false"
 				PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
diff --git a/examples/parallel_for/tachyon/msvs/tachyon_cl.sln b/examples/parallel_for/tachyon/msvs/tachyon_cl.sln
index 602c949..8b2ff25 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon_cl.sln
+++ b/examples/parallel_for/tachyon/msvs/tachyon_cl.sln
@@ -16,75 +16,75 @@ Global
 		DD Release|x64 = DD Release|x64
 		GDI Debug|Win32 = GDI Debug|Win32
 		GDI Debug|x64 = GDI Debug|x64
-		_GDI Release Release|Win32 = _GDI Release Release|Win32
-		_GDI Release Release|x64 = _GDI Release Release|x64
+		_GDI Release|Win32 = _GDI Release|Win32
+		_GDI Release|x64 = _GDI Release|x64
 		Description = Tachyon ray-tracer example
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.Build.0 = DDDebug|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.Build.0 = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.Build.0 = DDDebug|x64
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.ActiveCfg = DDRelease|Win32
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.Build.0 = DDRelease|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.Build.0 = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = DDRelease|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.Build.0 = DDRelease|x64
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.ActiveCfg = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.Build.0 = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.ActiveCfg = Debug|x64
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.Build.0 = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release Release|Win32.ActiveCfg = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release Release|Win32.Build.0 = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release Release|x64.ActiveCfg = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release Release|x64.Build.0 = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.ActiveCfg = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.Build.0 = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.Build.0 = Release|x64
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.Build.0 = DDDebug|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.Build.0 = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.Build.0 = DDDebug|x64
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.Build.0 = DDRelease|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.Build.0 = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.Build.0 = DDRelease|x64
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release Release|Win32.ActiveCfg = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release Release|Win32.Build.0 = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release Release|x64.ActiveCfg = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release Release|x64.Build.0 = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.Build.0 = Release|x64
 		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
 		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.Build.0 = DDDebug|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.Build.0 = Debug|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.Build.0 = DDDebug|x64
 		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32
 		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.Build.0 = DDRelease|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.Build.0 = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.Build.0 = DDRelease|x64
 		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
 		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release Release|Win32.ActiveCfg = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release Release|Win32.Build.0 = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release Release|x64.ActiveCfg = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release Release|x64.Build.0 = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.Build.0 = Release|x64
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.Build.0 = DDDebug|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = Debug|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.Build.0 = Debug|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.Build.0 = DDDebug|x64
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.ActiveCfg = DDRelease|Win32
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.Build.0 = DDRelease|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = Release|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.Build.0 = Release|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = DDRelease|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.Build.0 = DDRelease|x64
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.ActiveCfg = Debug|Win32
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.Build.0 = Debug|Win32
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.ActiveCfg = Debug|x64
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.Build.0 = Debug|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release Release|Win32.ActiveCfg = Release|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release Release|Win32.Build.0 = Release|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release Release|x64.ActiveCfg = Release|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release Release|x64.Build.0 = Release|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.ActiveCfg = Release|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.Build.0 = Release|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.ActiveCfg = Release|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/examples/parallel_for/tachyon/msvs/tachyon_icl.sln b/examples/parallel_for/tachyon/msvs/tachyon_icl.sln
index 3f2ae66..f4eca61 100644
--- a/examples/parallel_for/tachyon/msvs/tachyon_icl.sln
+++ b/examples/parallel_for/tachyon/msvs/tachyon_icl.sln
@@ -94,10 +94,10 @@ Global
 		{4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}._GDI Release|Win32.Build.0 = Release|Win32
 		{4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}._GDI Release|x64.ActiveCfg = Release|x64
 		{4F173D3A-AE8C-4F7E-A4D0-6527F46B8495}._GDI Release|x64.Build.0 = Release|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.ActiveCfg = Debug|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = Debug|x64
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.ActiveCfg = Release|Win32
-		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = Release|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+		{6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = DDRelease|x64
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.ActiveCfg = Debug|Win32
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.Build.0 = Debug|Win32
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.ActiveCfg = Debug|x64
@@ -106,10 +106,10 @@ Global
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.Build.0 = Release|Win32
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.ActiveCfg = Release|x64
 		{6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.Build.0 = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.ActiveCfg = Debug|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.ActiveCfg = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = DDRelease|x64
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.ActiveCfg = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.Build.0 = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.ActiveCfg = Debug|x64
@@ -118,10 +118,10 @@ Global
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.Build.0 = Release|Win32
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.ActiveCfg = Release|x64
 		{924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.Build.0 = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.ActiveCfg = Debug|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.ActiveCfg = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
@@ -130,10 +130,10 @@ Global
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64
 		{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.Build.0 = Release|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.ActiveCfg = Debug|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = Debug|x64
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.ActiveCfg = Release|Win32
-		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = Release|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32
+		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64
 		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
 		{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
diff --git a/examples/parallel_for/tachyon/src/api.cpp b/examples/parallel_for/tachyon/src/api.cpp
index e59b5fb..1aac39a 100644
--- a/examples/parallel_for/tachyon/src/api.cpp
+++ b/examples/parallel_for/tachyon/src/api.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,7 +59,7 @@
  * api.c - This file contains all of the API calls that are defined for
  *         external driver code to use.  
  * 
- *  $Id: api.cpp,v 1.5 2007-02-22 17:54:14 dpoulsen Exp $
+ *  $Id: api.cpp,v 1.5 2007-02-22 17:54:14 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/api.h b/examples/parallel_for/tachyon/src/api.h
index f68068c..94f7b2d 100644
--- a/examples/parallel_for/tachyon/src/api.h
+++ b/examples/parallel_for/tachyon/src/api.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -64,7 +64,7 @@
 
 
 /* 
- *  $Id: api.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: api.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 
diff --git a/examples/parallel_for/tachyon/src/apigeom.cpp b/examples/parallel_for/tachyon/src/apigeom.cpp
index b7d99a8..f07a2b5 100644
--- a/examples/parallel_for/tachyon/src/apigeom.cpp
+++ b/examples/parallel_for/tachyon/src/apigeom.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,7 +59,7 @@
  * api.c - This file contains all of the API calls that are defined for
  *         external driver code to use.  
  * 
- *  $Id: apigeom.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: apigeom.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/apitrigeom.cpp b/examples/parallel_for/tachyon/src/apitrigeom.cpp
index c5220d6..2901df3 100644
--- a/examples/parallel_for/tachyon/src/apitrigeom.cpp
+++ b/examples/parallel_for/tachyon/src/apitrigeom.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,7 +59,7 @@
  * apitrigeom.c - This file contains code for generating triangle tesselated
  *                geometry, for use with OpenGL, XGL, etc.
  * 
- *  $Id: apitrigeom.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: apitrigeom.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/apitrigeom.h b/examples/parallel_for/tachyon/src/apitrigeom.h
index 64fae4f..5b6a9eb 100644
--- a/examples/parallel_for/tachyon/src/apitrigeom.h
+++ b/examples/parallel_for/tachyon/src/apitrigeom.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 b524d5f..b72b6ce 100644
--- a/examples/parallel_for/tachyon/src/bndbox.cpp
+++ b/examples/parallel_for/tachyon/src/bndbox.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * bndbox.c - This file contains the functions for dealing with bounding boxes.
  *
- *  $Id: bndbox.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: bndbox.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
  
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/bndbox.h b/examples/parallel_for/tachyon/src/bndbox.h
index 891d487..6bcfcf6 100644
--- a/examples/parallel_for/tachyon/src/bndbox.h
+++ b/examples/parallel_for/tachyon/src/bndbox.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * bndbox.h - This file contains the defines for bounding boxes etc.
  *
- *  $Id: bndbox.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: bndbox.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
  
 typedef struct {
diff --git a/examples/parallel_for/tachyon/src/box.cpp b/examples/parallel_for/tachyon/src/box.cpp
index be8ecd5..c90f1c8 100644
--- a/examples/parallel_for/tachyon/src/box.cpp
+++ b/examples/parallel_for/tachyon/src/box.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * box.c - This file contains the functions for dealing with boxes.
  *
- *  $Id: box.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: box.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
  
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/box.h b/examples/parallel_for/tachyon/src/box.h
index 22f59b2..db3d073 100644
--- a/examples/parallel_for/tachyon/src/box.h
+++ b/examples/parallel_for/tachyon/src/box.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * box.h - This file contains the defines for boxes etc.
  *
- *  $Id: box.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: box.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
  
diff --git a/examples/parallel_for/tachyon/src/camera.cpp b/examples/parallel_for/tachyon/src/camera.cpp
index 342a3c1..a5a9053 100644
--- a/examples/parallel_for/tachyon/src/camera.cpp
+++ b/examples/parallel_for/tachyon/src/camera.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * camera.c - This file contains all of the functions for doing camera work.
  *
- *  $Id: camera.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: camera.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/camera.h b/examples/parallel_for/tachyon/src/camera.h
index ef6d6a9..d75abb2 100644
--- a/examples/parallel_for/tachyon/src/camera.h
+++ b/examples/parallel_for/tachyon/src/camera.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * camera.h - This file contains the defines for camera routines etc.
  *
- *  $Id: camera.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: camera.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 ray  camray(scenedef *, int, int);
diff --git a/examples/parallel_for/tachyon/src/coordsys.cpp b/examples/parallel_for/tachyon/src/coordsys.cpp
index c7db36b..c21c00a 100644
--- a/examples/parallel_for/tachyon/src/coordsys.cpp
+++ b/examples/parallel_for/tachyon/src/coordsys.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * coordsys.c -  Routines to translate from one coordinate system to another.
  *
- *  $Id: coordsys.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: coordsys.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/coordsys.h b/examples/parallel_for/tachyon/src/coordsys.h
index 3d7b459..32870a5 100644
--- a/examples/parallel_for/tachyon/src/coordsys.h
+++ b/examples/parallel_for/tachyon/src/coordsys.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * coordsys.h - defines for coordinate system routines.
  *  
- *  $Id: coordsys.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: coordsys.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #define TWOPI 6.2831853
diff --git a/examples/parallel_for/tachyon/src/cylinder.cpp b/examples/parallel_for/tachyon/src/cylinder.cpp
index e96a54c..07822a0 100644
--- a/examples/parallel_for/tachyon/src/cylinder.cpp
+++ b/examples/parallel_for/tachyon/src/cylinder.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * cylinder.c - This file contains the functions for dealing with cylinders.
  *
- *  $Id: cylinder.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: cylinder.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
  
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/cylinder.h b/examples/parallel_for/tachyon/src/cylinder.h
index 56e3311..3f92778 100644
--- a/examples/parallel_for/tachyon/src/cylinder.h
+++ b/examples/parallel_for/tachyon/src/cylinder.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * cylinder.h - This file contains the defines for cylinders etc.
  *
- *  $Id: cylinder.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: cylinder.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 object * newcylinder(void *, vector, vector, flt);
diff --git a/examples/parallel_for/tachyon/src/extvol.cpp b/examples/parallel_for/tachyon/src/extvol.cpp
index 42f3bfc..33c6489 100644
--- a/examples/parallel_for/tachyon/src/extvol.cpp
+++ b/examples/parallel_for/tachyon/src/extvol.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * extvol.c - Volume rendering helper routines etc.
  *
- *  $Id: extvol.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: extvol.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #include<stdio.h>
diff --git a/examples/parallel_for/tachyon/src/extvol.h b/examples/parallel_for/tachyon/src/extvol.h
index f593f6d..e973278 100644
--- a/examples/parallel_for/tachyon/src/extvol.h
+++ b/examples/parallel_for/tachyon/src/extvol.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,7 +59,7 @@
  * vol.h - Volume rendering definitions etc.
  *
  *
- *  $Id: extvol.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: extvol.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 typedef struct {
diff --git a/examples/parallel_for/tachyon/src/global.cpp b/examples/parallel_for/tachyon/src/global.cpp
index 248d05f..05d4be1 100644
--- a/examples/parallel_for/tachyon/src/global.cpp
+++ b/examples/parallel_for/tachyon/src/global.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * global.c - any/all global data items etc should be in this file
  *
- *  $Id: global.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: global.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  *
  */
 
diff --git a/examples/parallel_for/tachyon/src/global.h b/examples/parallel_for/tachyon/src/global.h
index a43edf2..ebfbc95 100644
--- a/examples/parallel_for/tachyon/src/global.h
+++ b/examples/parallel_for/tachyon/src/global.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * global.h - any/all global data items etc should be in this file
  *
- *  $Id: global.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: global.h,v 1.2 2007-02-22 17:54:15 Exp $
  *
  */
 
diff --git a/examples/parallel_for/tachyon/src/grid.cpp b/examples/parallel_for/tachyon/src/grid.cpp
index 1d733d3..b96989d 100644
--- a/examples/parallel_for/tachyon/src/grid.cpp
+++ b/examples/parallel_for/tachyon/src/grid.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * grid.c - spatial subdivision efficiency structures
  *
- * $Id: grid.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ * $Id: grid.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  * 
  */
 
diff --git a/examples/parallel_for/tachyon/src/grid.h b/examples/parallel_for/tachyon/src/grid.h
index 2790683..3670313 100644
--- a/examples/parallel_for/tachyon/src/grid.h
+++ b/examples/parallel_for/tachyon/src/grid.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * grid.h - spatial subdivision efficiency structures
  *
- * $Id: grid.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ * $Id: grid.h,v 1.2 2007-02-22 17:54:15 Exp $
  * 
  */
 
diff --git a/examples/parallel_for/tachyon/src/imageio.cpp b/examples/parallel_for/tachyon/src/imageio.cpp
index 95425a1..f405418 100644
--- a/examples/parallel_for/tachyon/src/imageio.cpp
+++ b/examples/parallel_for/tachyon/src/imageio.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  *  imageio.c - This file deals with reading/writing image files
  *
- *  $Id: imageio.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: imageio.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */ 
 
 /* For our puposes, we're interested only in the 3 byte per pixel 24 bit
diff --git a/examples/parallel_for/tachyon/src/imageio.h b/examples/parallel_for/tachyon/src/imageio.h
index dbcbea8..f28117e 100644
--- a/examples/parallel_for/tachyon/src/imageio.h
+++ b/examples/parallel_for/tachyon/src/imageio.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  *  imageio.h - This file deals with reading/writing image files 
  *
- *  $Id: imageio.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: imageio.h,v 1.2 2007-02-22 17:54:15 Exp $
  */ 
 
 /* For our puposes, we're interested only in the 3 byte per pixel 24 bit
diff --git a/examples/parallel_for/tachyon/src/imap.cpp b/examples/parallel_for/tachyon/src/imap.cpp
index b2699f4..663be61 100644
--- a/examples/parallel_for/tachyon/src/imap.cpp
+++ b/examples/parallel_for/tachyon/src/imap.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * imap.c - This file contains code for doing image map type things.  
  *
- *  $Id: imap.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: imap.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/imap.h b/examples/parallel_for/tachyon/src/imap.h
index 593ac44..824928b 100644
--- a/examples/parallel_for/tachyon/src/imap.h
+++ b/examples/parallel_for/tachyon/src/imap.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * imap.h - This file contains defines etc for doing image map type things.  
  *
- *  $Id: imap.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: imap.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 void       ResetImage(void);
diff --git a/examples/parallel_for/tachyon/src/intersect.cpp b/examples/parallel_for/tachyon/src/intersect.cpp
index aeb240b..8c719fd 100644
--- a/examples/parallel_for/tachyon/src/intersect.cpp
+++ b/examples/parallel_for/tachyon/src/intersect.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * intersect.c - This file contains code for CSG and intersection routines.
  *
- *  $Id: intersect.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: intersect.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/intersect.h b/examples/parallel_for/tachyon/src/intersect.h
index b75f602..a783cc4 100644
--- a/examples/parallel_for/tachyon/src/intersect.h
+++ b/examples/parallel_for/tachyon/src/intersect.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,7 +59,7 @@
  * intersect.h - This file contains the declarations and defines for the
  *               functions that manage intersection, bounding and CSG..
  *
- *  $Id: intersect.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: intersect.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 unsigned int  new_objectid(void);
diff --git a/examples/parallel_for/tachyon/src/jpeg.cpp b/examples/parallel_for/tachyon/src/jpeg.cpp
index c17fc7d..d2c3a82 100644
--- a/examples/parallel_for/tachyon/src/jpeg.cpp
+++ b/examples/parallel_for/tachyon/src/jpeg.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  *  jpeg.c - This file deals with JPEG format image files (reading/writing)
  *
- *  $Id: jpeg.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: jpeg.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */ 
 
 /*
diff --git a/examples/parallel_for/tachyon/src/jpeg.h b/examples/parallel_for/tachyon/src/jpeg.h
index 54136da..d6b99dc 100644
--- a/examples/parallel_for/tachyon/src/jpeg.h
+++ b/examples/parallel_for/tachyon/src/jpeg.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  *  jpeg.h - This file deals with JPEG format image files (reading/writing)
  *
- *  $Id: jpeg.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: jpeg.h,v 1.2 2007-02-22 17:54:15 Exp $
  */ 
 
 int readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata);
diff --git a/examples/parallel_for/tachyon/src/light.cpp b/examples/parallel_for/tachyon/src/light.cpp
index 9d10488..eac02a2 100644
--- a/examples/parallel_for/tachyon/src/light.cpp
+++ b/examples/parallel_for/tachyon/src/light.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * light.c - This file contains declarations and defines for light sources.
  *
- *  $Id: light.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: light.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/light.h b/examples/parallel_for/tachyon/src/light.h
index a1e1006..404ee13 100644
--- a/examples/parallel_for/tachyon/src/light.h
+++ b/examples/parallel_for/tachyon/src/light.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * light.h - this file includes declarations and defines for light sources.
  *
- *  $Id: light.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: light.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 typedef struct {
diff --git a/examples/parallel_for/tachyon/src/machine.h b/examples/parallel_for/tachyon/src/machine.h
index ed7e570..e8e4196 100644
--- a/examples/parallel_for/tachyon/src/machine.h
+++ b/examples/parallel_for/tachyon/src/machine.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * machine.h - This is the machine specific include file
  *
- *  $Id: machine.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: machine.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #include <stdio.h>
diff --git a/examples/parallel_for/tachyon/src/macros.h b/examples/parallel_for/tachyon/src/macros.h
index 1705ff9..c7d8a3e 100644
--- a/examples/parallel_for/tachyon/src/macros.h
+++ b/examples/parallel_for/tachyon/src/macros.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,7 +59,7 @@
  * macros.h - This file contains macro versions of functions that would be best 
  * used as inlined code rather than function calls.
  *
- *  $Id: macros.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: macros.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #define MYMAX(a , b) ((a) > (b) ? (a) : (b))
diff --git a/examples/parallel_for/tachyon/src/main.cpp b/examples/parallel_for/tachyon/src/main.cpp
index 54b1a01..ef4483b 100644
--- a/examples/parallel_for/tachyon/src/main.cpp
+++ b/examples/parallel_for/tachyon/src/main.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -78,7 +78,7 @@ bool global_usegraphics;
 
 bool silent_mode = false; /* silent mode */
 
-class video *video = 0;
+class tachyon_video *video = 0;
 
 typedef struct {
   int foundfilename;      /* was a model file name found in the args? */
@@ -100,10 +100,13 @@ static char *window_title_string (int argc, const char **argv)
     char *name;
 
     name = (char *) malloc (8192);
-    
-    if(strrchr(argv[0], '\\')) strcpy (name, strrchr(argv[0], '\\')+1);
-    else if(strrchr(argv[0], '/')) strcpy (name, strrchr(argv[0], '/')+1);
-    else strcpy (name, *argv[0]?argv[0]:"Tachyon");
+    char *title = getenv ("TITLE");
+    if( title ) strcpy( name, title );
+    else {
+        if(strrchr(argv[0], '\\')) strcpy (name, strrchr(argv[0], '\\')+1);
+        else if(strrchr(argv[0], '/')) strcpy (name, strrchr(argv[0], '/')+1);
+        else strcpy (name, *argv[0]?argv[0]:"Tachyon");
+    }
     for (i = 1; i < argc; i++) {
         strcat (name, " ");
         strcat (name, argv[i]);
@@ -114,17 +117,6 @@ static char *window_title_string (int argc, const char **argv)
     return name;
 }
 
-void rt_finalize(void) {
-    timer t0, t1;
-    t0 = gettimer();
-    if(global_usegraphics)
-        do { rt_sleep(10); t1 = gettimer(); }
-        while(timertime(t0, t1) < 10 && video->next_frame());
-#ifdef _WINDOWS
-    else rt_sleep(10000);
-#endif
-}
-
 void initoptions(argoptions * opt) {
     memset(opt, 0, sizeof(argoptions));
     opt->foundfilename = -1;
@@ -227,7 +219,6 @@ int CreateScene(argoptions &opt) {
     global_ysize = scene->vres;
     global_xwinsize = global_xsize;
     global_ywinsize = global_ysize;  // add some here to leave extra blank space on bottom for status etc.
-    global_usegraphics = (scene->displaymode == RT_DISPLAY_ENABLED);
 
     return 0;
 }
@@ -248,7 +239,6 @@ int main (int argc, char *argv[]) {
         tachyon.init_console();
 
         tachyon.title = global_window_title;
-        tachyon.updating = global_usegraphics;
         // always using window even if(!global_usegraphics)
         global_usegraphics = 
             tachyon.init_window(global_xwinsize, global_ywinsize);
diff --git a/examples/parallel_for/tachyon/src/objbound.cpp b/examples/parallel_for/tachyon/src/objbound.cpp
index 655cc34..0735365 100644
--- a/examples/parallel_for/tachyon/src/objbound.cpp
+++ b/examples/parallel_for/tachyon/src/objbound.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,7 +59,7 @@
  * objbound.c - This file contains the functions to find bounding boxes
  *              for the various primitives 
  *
- *  $Id: objbound.cpp,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: objbound.cpp,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/objbound.h b/examples/parallel_for/tachyon/src/objbound.h
index 1e6ea69..c2b7535 100644
--- a/examples/parallel_for/tachyon/src/objbound.h
+++ b/examples/parallel_for/tachyon/src/objbound.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*  
  * objbound.h - defines for object bounding code.
  *
- *  $Id: objbound.h,v 1.2 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: objbound.h,v 1.2 2007-02-22 17:54:15 Exp $
  */
 
 void dividespace(int, object **);
diff --git a/examples/parallel_for/tachyon/src/parse.cpp b/examples/parallel_for/tachyon/src/parse.cpp
index afa2bd7..cc4083c 100644
--- a/examples/parallel_for/tachyon/src/parse.cpp
+++ b/examples/parallel_for/tachyon/src/parse.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * parse.c - an UltraLame (tm) parser for simple data files...
  *
- *  $Id: parse.cpp,v 1.3 2007-02-22 17:54:15 dpoulsen Exp $
+ *  $Id: parse.cpp,v 1.3 2007-02-22 17:54:15 Exp $
  */
 
 // Try preventing lots of GCC warnings about ignored results of fscanf etc.
@@ -66,6 +66,7 @@
 
 #if __GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<5
 // For older versions of GCC, disable use of __wur in GLIBC
+#undef _FORTIFY_SOURCE
 #define _FORTIFY_SOURCE 0
 #else
 // Starting from 4.5, GCC has a suppression option
diff --git a/examples/parallel_for/tachyon/src/parse.h b/examples/parallel_for/tachyon/src/parse.h
index de2ac7b..b1f8a63 100644
--- a/examples/parallel_for/tachyon/src/parse.h
+++ b/examples/parallel_for/tachyon/src/parse.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * parse.h - this file contains defines for model file reading.
  *
- *  $Id: parse.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: parse.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 #define PARSENOERR       0
diff --git a/examples/parallel_for/tachyon/src/plane.cpp b/examples/parallel_for/tachyon/src/plane.cpp
index 4131cca..2e4bbbc 100644
--- a/examples/parallel_for/tachyon/src/plane.cpp
+++ b/examples/parallel_for/tachyon/src/plane.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * plane.c - This file contains the functions for dealing with planes.
  *
- *  $Id: plane.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: plane.cpp,v 1.2 2007-02-22 17:54:16 Exp $
  */
  
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/plane.h b/examples/parallel_for/tachyon/src/plane.h
index 1301176..050e7e5 100644
--- a/examples/parallel_for/tachyon/src/plane.h
+++ b/examples/parallel_for/tachyon/src/plane.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * plane.h - This file contains the defines for planes etc.
  *
- *  $Id: plane.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: plane.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
  
diff --git a/examples/parallel_for/tachyon/src/ppm.cpp b/examples/parallel_for/tachyon/src/ppm.cpp
index c0578f7..c3e99db 100644
--- a/examples/parallel_for/tachyon/src/ppm.cpp
+++ b/examples/parallel_for/tachyon/src/ppm.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  *  ppm.c - This file deals with PPM format image files (reading/writing)
  *
- *  $Id: ppm.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: ppm.cpp,v 1.2 2007-02-22 17:54:16 Exp $
  */ 
 
 /* For our puposes, we're interested only in the 3 byte per pixel 24 bit
@@ -70,6 +70,7 @@
 
 #if __GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<5
 // For older versions of GCC, disable use of __wur in GLIBC
+#undef _FORTIFY_SOURCE
 #define _FORTIFY_SOURCE 0
 #else
 // Starting from 4.5, GCC has a suppression option
diff --git a/examples/parallel_for/tachyon/src/ppm.h b/examples/parallel_for/tachyon/src/ppm.h
index 2386c57..a13c21f 100644
--- a/examples/parallel_for/tachyon/src/ppm.h
+++ b/examples/parallel_for/tachyon/src/ppm.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  *  ppm.h - This file deals with PPM format image files (reading/writing)
  *
- *  $Id: ppm.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: ppm.h,v 1.2 2007-02-22 17:54:16 Exp $
  */ 
 
 /* For our puposes, we're interested only in the 3 byte per pixel 24 bit
diff --git a/examples/parallel_for/tachyon/src/pthread.cpp b/examples/parallel_for/tachyon/src/pthread.cpp
index fc020b6..93b7f2a 100644
--- a/examples/parallel_for/tachyon/src/pthread.cpp
+++ b/examples/parallel_for/tachyon/src/pthread.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 702c0ff..1f518fd 100644
--- a/examples/parallel_for/tachyon/src/pthread.h
+++ b/examples/parallel_for/tachyon/src/pthread.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 65ef85d..5d6ac8a 100644
--- a/examples/parallel_for/tachyon/src/quadric.cpp
+++ b/examples/parallel_for/tachyon/src/quadric.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * quadric.c - This file contains the functions for dealing with quadrics.
  *
- *  $Id: quadric.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: quadric.cpp,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/quadric.h b/examples/parallel_for/tachyon/src/quadric.h
index 1e09ff3..508546a 100644
--- a/examples/parallel_for/tachyon/src/quadric.h
+++ b/examples/parallel_for/tachyon/src/quadric.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * quadric.h - This file contains the defines for quadrics.
  *
- *  $Id: quadric.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: quadric.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 typedef struct {
diff --git a/examples/parallel_for/tachyon/src/render.cpp b/examples/parallel_for/tachyon/src/render.cpp
index a1c2bd8..3ad0f2f 100644
--- a/examples/parallel_for/tachyon/src/render.cpp
+++ b/examples/parallel_for/tachyon/src/render.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 38da384..30990bb 100644
--- a/examples/parallel_for/tachyon/src/render.h
+++ b/examples/parallel_for/tachyon/src/render.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * render.h - This file contains the defines for the top level functions 
  *
- *  $Id: render.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: render.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 
diff --git a/examples/parallel_for/tachyon/src/ring.cpp b/examples/parallel_for/tachyon/src/ring.cpp
index d4e75a5..f8ec449 100644
--- a/examples/parallel_for/tachyon/src/ring.cpp
+++ b/examples/parallel_for/tachyon/src/ring.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * ring.c - This file contains the functions for dealing with rings.
  *
- *  $Id: ring.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: ring.cpp,v 1.2 2007-02-22 17:54:16 Exp $
  */
  
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/ring.h b/examples/parallel_for/tachyon/src/ring.h
index 4bc04f8..b3b66be 100644
--- a/examples/parallel_for/tachyon/src/ring.h
+++ b/examples/parallel_for/tachyon/src/ring.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * ring.h - This file contains the defines for rings etc.
  *
- *  $Id: ring.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: ring.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 object * newring(void * tex, vector ctr, vector norm, flt in, flt out);
diff --git a/examples/parallel_for/tachyon/src/shade.cpp b/examples/parallel_for/tachyon/src/shade.cpp
index 4fb74da..c081680 100644
--- a/examples/parallel_for/tachyon/src/shade.cpp
+++ b/examples/parallel_for/tachyon/src/shade.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * shade.c - This file contains the functions that perform surface shading.
  *
- *  $Id: shade.cpp,v 1.3 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: shade.cpp,v 1.3 2007-02-22 17:54:16 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/shade.h b/examples/parallel_for/tachyon/src/shade.h
index c210e5f..6d3a736 100644
--- a/examples/parallel_for/tachyon/src/shade.h
+++ b/examples/parallel_for/tachyon/src/shade.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * shade.h - This file contains declarations and definitions for the shader.
  *
- *  $Id: shade.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: shade.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
  
 void reset_lights(void);
diff --git a/examples/parallel_for/tachyon/src/sphere.cpp b/examples/parallel_for/tachyon/src/sphere.cpp
index 2d23a67..b71bb19 100644
--- a/examples/parallel_for/tachyon/src/sphere.cpp
+++ b/examples/parallel_for/tachyon/src/sphere.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * sphere.c - This file contains the functions for dealing with spheres.
  *
- *  $Id: sphere.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: sphere.cpp,v 1.2 2007-02-22 17:54:16 Exp $
  */
  
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/sphere.h b/examples/parallel_for/tachyon/src/sphere.h
index ebf6af7..4d25441 100644
--- a/examples/parallel_for/tachyon/src/sphere.h
+++ b/examples/parallel_for/tachyon/src/sphere.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * sphere.h - This file contains the defines for spheres etc.
  *
- *  $Id: sphere.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: sphere.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 object * newsphere(void *, vector, flt);
diff --git a/examples/parallel_for/tachyon/src/tachyon_video.cpp b/examples/parallel_for/tachyon/src/tachyon_video.cpp
index f04923a..64ee65e 100644
--- a/examples/parallel_for/tachyon/src/tachyon_video.cpp
+++ b/examples/parallel_for/tachyon/src/tachyon_video.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -70,20 +70,59 @@ extern char *global_window_title;
 extern bool global_usegraphics;
 
 void tachyon_video::on_process() {
-    char buf[128];
+    char buf[8192];
     flt runtime;
-    timer start_timer = gettimer();
-    rt_renderscene(global_scene);
-    timer end_timer = gettimer();
-    runtime=timertime(start_timer, end_timer);
-    sprintf(buf, "\nCPU Time: %.3f seconds.", runtime);
-    rt_ui_message(MSG_0, buf); buf[0] = ' ';
-    strcat(global_window_title, buf);
-    title = global_window_title; updating = true;
-    show_title();
-    rt_finalize();
+    scenedef *scene = (scenedef *) global_scene;
+    updating_mode = scene->displaymode == RT_DISPLAY_ENABLED;
+    recycling = false;
+    pausing = false;
+    do {
+        updating = updating_mode;
+        timer start_timer = gettimer();
+        rt_renderscene(global_scene);
+        timer end_timer = gettimer();
+        runtime = timertime(start_timer, end_timer);
+        sprintf(buf, "%s: %.3f seconds", global_window_title, runtime);
+        rt_ui_message(MSG_0, buf);
+        title = buf; show_title(); // show time spent for rendering
+        if(!updating) {
+            updating = true;
+            drawing_memory dm = get_drawing_memory();
+            drawing_area drawing(0, 0, dm.sizex, dm.sizey);// invalidate whole screen
+        }
+        rt_finalize();
+        title = global_window_title; show_title(); // reset title to default
+    } while(recycling && running);
 }
 
 void tachyon_video::on_key(int key) {
-    key &= 0xff; if(key == 27) running = false;
+    key &= 0xff;
+    recycling = true;
+    if(key == esc_key) running = false;
+    else if(key == ' ') {
+        if(!updating) {
+            updating = true;
+            drawing_memory dm = get_drawing_memory();
+            drawing_area drawing(0, 0, dm.sizex, dm.sizey);// invalidate whole screen
+        }
+        updating = updating_mode = !updating_mode;
+    }
+    else if(key == 'p') {
+        pausing = !pausing;
+        if(pausing) {
+            title = "Press ESC to exit or 'p' to continue after rendering completion";
+            show_title();
+        }
+    }
+}
+
+void rt_finalize(void) {
+    timer t0, t1;
+    t0 = gettimer();
+    if(global_usegraphics)
+        do { rt_sleep(1); t1 = gettimer(); }
+        while( (timertime(t0, t1) < 10 || video->pausing) && video->next_frame());
+#ifdef _WINDOWS
+    else rt_sleep(10000);
+#endif
 }
diff --git a/examples/parallel_for/tachyon/src/tachyon_video.h b/examples/parallel_for/tachyon/src/tachyon_video.h
index 94370ac..e87157b 100644
--- a/examples/parallel_for/tachyon/src/tachyon_video.h
+++ b/examples/parallel_for/tachyon/src/tachyon_video.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -56,10 +56,15 @@
 */
 
 #include "../../../common/gui/video.h"
-extern class video *video;
 
 class tachyon_video : public video
 {
+public:
+    bool updating_mode;
+    bool recycling;
+    bool pausing;
     void on_process();
     void on_key(int key);
 };
+
+extern class tachyon_video *video;
diff --git a/examples/parallel_for/tachyon/src/texture.cpp b/examples/parallel_for/tachyon/src/texture.cpp
index 1c49016..5849c3a 100644
--- a/examples/parallel_for/tachyon/src/texture.cpp
+++ b/examples/parallel_for/tachyon/src/texture.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * texture.c - This file contains functions for implementing textures.
  * 
- *  $Id: texture.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $ 
+ *  $Id: texture.cpp,v 1.2 2007-02-22 17:54:16 Exp $ 
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/texture.h b/examples/parallel_for/tachyon/src/texture.h
index b7c5383..6b825d7 100644
--- a/examples/parallel_for/tachyon/src/texture.h
+++ b/examples/parallel_for/tachyon/src/texture.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,7 +59,7 @@
  * texture.h This file contains all of the includes and defines for the texture 
  * mapping part of the shader.
  *
- *  $Id: texture.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: texture.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 void InitTextures(void);
diff --git a/examples/parallel_for/tachyon/src/tgafile.cpp b/examples/parallel_for/tachyon/src/tgafile.cpp
index 8eee052..895ec53 100644
--- a/examples/parallel_for/tachyon/src/tgafile.cpp
+++ b/examples/parallel_for/tachyon/src/tgafile.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * tgafile.c - This file contains the code to write 24 bit targa files...
  *
- *  $Id: tgafile.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: tgafile.cpp,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/tgafile.h b/examples/parallel_for/tachyon/src/tgafile.h
index e7572a1..f326f17 100644
--- a/examples/parallel_for/tachyon/src/tgafile.h
+++ b/examples/parallel_for/tachyon/src/tgafile.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * tgafile.h - this file contains defines and structures for tgafile.c
  *
- *  $Id: tgafile.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: tgafile.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 /* declare other functions */
diff --git a/examples/parallel_for/tachyon/src/trace.h b/examples/parallel_for/tachyon/src/trace.h
index 4d1c9a8..caa9e52 100644
--- a/examples/parallel_for/tachyon/src/trace.h
+++ b/examples/parallel_for/tachyon/src/trace.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * trace.h - This file contains the declarations and defines for the trace module
  *
- *   $Id: trace.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *   $Id: trace.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 extern char *global_buffer;
diff --git a/examples/parallel_for/tachyon/src/trace.serial.cpp b/examples/parallel_for/tachyon/src/trace.serial.cpp
index e4ffb47..d239499 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 dab32f3..ea6fb0e 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -80,6 +80,28 @@ static int stopy;
 static flt jitterscale;
 static int totaly;
 
+#ifdef MARK_RENDERING_AREA
+
+// rgb colors list for coloring image by each thread
+static const float inner_alpha = 0.3;
+static const float border_alpha = 0.5;
+#define NUM_COLORS 24
+static int colors[NUM_COLORS][3] = {
+    {255,110,0},    {220,254,0},    {102,254,0},    {0,21,254},     {97,0,254},     {254,30,0},
+    {20,41,8},      {144,238,38},   {184,214,139},  {28,95,20},     {139,173,148},  {188,228,183},
+    {145,47,56},    {204,147,193},  {45,202,143},   {204,171,143},  {143,160,204},  {220,173,3},
+    {1,152,231},    {79,235,237},   {52,193,72},    {67,136,151},   {78,87,179},    {143,255,9},
+};
+
+#include "tbb/atomic.h"
+#include "tbb/enumerable_thread_specific.h"
+// storage and counter for thread numbers in order of first task run
+typedef tbb::enumerable_thread_specific< int > thread_id_t;
+thread_id_t thread_ids (-1);
+tbb::atomic<int> thread_number;
+
+#endif
+
 #include "tbb/task_scheduler_init.h"
 #include "tbb/parallel_for.h"
 #include "tbb/spin_mutex.h"
@@ -88,7 +110,11 @@ static int totaly;
 static tbb::spin_mutex MyMutex, MyMutex2;
 
 static color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,
-                                 int startx, int stopx, int starty, int stopy)
+                                 int startx, int stopx, int starty, int stopy
+#ifdef MARK_RENDERING_AREA
+                                 , int *blend, float alpha
+#endif
+)
 {
     /* private vars moved inside loop */
     ray primary, sample;
@@ -153,6 +179,12 @@ static color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigne
     if (B > 255) B = 255;
     else if (B < 0) B = 0;
 
+#ifdef MARK_RENDERING_AREA
+    R = int((1.0 - alpha) * R + alpha * blend[0]);
+    G = int((1.0 - alpha) * G + alpha * blend[1]);
+    B = int((1.0 - alpha) * B + alpha * blend[2]);
+#endif
+    
     return video->get_color(R, G, B);
 }
 
@@ -160,18 +192,40 @@ class parallel_task {
 public:
     void operator() (const tbb::blocked_range2d<int> &r) const
     {
-        // task-local storage
+       // task-local storage
         unsigned int serial = 1;
         unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);
         unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);
         memset(local_mbox,0,mboxsize);
-        if(video->next_frame())
-        {
+#ifdef MARK_RENDERING_AREA
+        // compute thread number while first task run
+        thread_id_t::reference thread_id = thread_ids.local();
+        if (thread_id == -1) thread_id = thread_number++;
+        // choose thread color
+        int pos = thread_id % NUM_COLORS;
+        if(video->running) {
+            drawing_area drawing(r.cols().begin(), totaly-r.rows().end(), r.cols().end() - r.cols().begin(), r.rows().end()-r.rows().begin());
+            for (int i = 1, y = r.rows().begin(); y != r.rows().end(); ++y, i++) {
+                drawing.set_pos(0, drawing.size_y-i);
+                for (int x = r.cols().begin(); x != r.cols().end(); x++) {
+                    int d = (y % 3 == 0) ? 2 : 1;
+                    drawing.put_pixel(video->get_color(colors[pos][0]/d, colors[pos][1]/d, colors[pos][2]/d));
+                }
+            }
+        }
+#endif
+        if(video->next_frame()) {
             drawing_area drawing(r.cols().begin(), totaly-r.rows().end(), r.cols().end() - r.cols().begin(), r.rows().end()-r.rows().begin());
             for (int i = 1, y = r.rows().begin(); y != r.rows().end(); ++y, i++) {
                 drawing.set_pos(0, drawing.size_y-i);
                 for (int x = r.cols().begin(); x != r.cols().end(); x++) {
+#ifdef MARK_RENDERING_AREA
+                    float alpha = y==r.rows().begin()||y==r.rows().end()-1||x==r.cols().begin()||x==r.cols().end()-1
+                                ? border_alpha : inner_alpha;
+                    color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy, colors[pos], alpha);
+#else
                     color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);
+#endif
                     drawing.put_pixel(c);
                 }
             }
@@ -197,11 +251,21 @@ void * thread_trace(thr_parms * parms)
     stopy = parms->stopy;
     jitterscale = 40.0*(scene.hres + scene.vres);
     totaly = parms->scene.vres;
+#ifdef MARK_RENDERING_AREA
+    thread_ids.clear();
+#endif
 
-    int g, grain_size = 50;
+    int g, grain_size = 8;
     char *grain_str = getenv ("TBB_GRAINSIZE");
     if (grain_str && (sscanf (grain_str, "%d", &g) > 0) && (g > 0)) grain_size = g;
-    tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task (), tbb::simple_partitioner());
+    char *sched_str = getenv ("TBB_PARTITIONER");
+    static tbb::affinity_partitioner g_ap; // reused across calls to thread_trace
+    if ( sched_str && !strncmp(sched_str, "aff", 3) )
+        tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task (), g_ap);
+    else if ( sched_str && !strncmp(sched_str, "simp", 4) )
+        tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task (), tbb::simple_partitioner());
+    else
+        tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task (), tbb::auto_partitioner());
 
     return(NULL);  
 }
diff --git a/examples/parallel_for/tachyon/src/trace.tbb1d.cpp b/examples/parallel_for/tachyon/src/trace.tbb1d.cpp
index dd1e787..0f93f36 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -197,13 +197,17 @@ void * thread_trace(thr_parms * parms)
     jitterscale = 40.0*(scene.hres + scene.vres);
     totaly = parms->scene.vres-1;
 
-    int g, grain_size = 50;
+    int g, grain_size = 1;
     char *grain_str = getenv ("TBB_GRAINSIZE");
     if (grain_str && (sscanf (grain_str, "%d", &g) > 0) && (g > 0)) grain_size = g;
-  
-    // Uses the preview feature: auto_partitioner.
-    // Note that no grainsize is provided to the blocked_range object.
-    tbb::parallel_for (tbb::blocked_range<int> (starty, stopy), parallel_task (), tbb::auto_partitioner() );
+    char *sched_str = getenv ("TBB_PARTITIONER");
+    static tbb::affinity_partitioner g_ap;
+    if ( sched_str && !strncmp(sched_str, "aff", 3) )
+        tbb::parallel_for (tbb::blocked_range<int> (starty, stopy, grain_size), parallel_task (), g_ap );
+    else if ( sched_str && !strncmp(sched_str, "simp", 4) )
+        tbb::parallel_for (tbb::blocked_range<int> (starty, stopy, grain_size), parallel_task (), tbb::simple_partitioner() );
+    else
+        tbb::parallel_for (tbb::blocked_range<int> (starty, stopy, grain_size), parallel_task (), tbb::auto_partitioner() );
 
     return(NULL);  
 }
diff --git a/examples/parallel_for/tachyon/src/trace_rest.cpp b/examples/parallel_for/tachyon/src/trace_rest.cpp
index ec27cb5..00ca172 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,7 +59,7 @@
  * trace.c - This file contains the functions for firing primary rays
  *           and handling subsequent calculations
  *
- *   $Id: trace_rest.cpp,v 1.4 2007-02-22 17:54:16 dpoulsen Exp $
+ *   $Id: trace_rest.cpp,v 1.4 2007-02-22 17:54:16 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/triangle.cpp b/examples/parallel_for/tachyon/src/triangle.cpp
index 96b9df4..8f10735 100644
--- a/examples/parallel_for/tachyon/src/triangle.cpp
+++ b/examples/parallel_for/tachyon/src/triangle.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * triangle.c - This file contains the functions for dealing with triangles.
  *
- *  $Id: triangle.cpp,v 1.3 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: triangle.cpp,v 1.3 2007-02-22 17:54:16 Exp $
  */
  
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/triangle.h b/examples/parallel_for/tachyon/src/triangle.h
index 328cf5c..d3e71aa 100644
--- a/examples/parallel_for/tachyon/src/triangle.h
+++ b/examples/parallel_for/tachyon/src/triangle.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * triangle.h - This file contains the defines for triangles etc.
  *
- *  $Id: triangle.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: triangle.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 object * newtri(void *, vector, vector, vector);
diff --git a/examples/parallel_for/tachyon/src/types.h b/examples/parallel_for/tachyon/src/types.h
index 52a5991..273493e 100644
--- a/examples/parallel_for/tachyon/src/types.h
+++ b/examples/parallel_for/tachyon/src/types.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -69,7 +69,7 @@
 /* 
  * types.h - This file contains all of the type definitions for the raytracer
  *
- *  $Id: types.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: types.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 #define MAXOCTNODES 25       /* subdivide octants /w > # of children */
diff --git a/examples/parallel_for/tachyon/src/ui.cpp b/examples/parallel_for/tachyon/src/ui.cpp
index 7b272a2..160d96c 100644
--- a/examples/parallel_for/tachyon/src/ui.cpp
+++ b/examples/parallel_for/tachyon/src/ui.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * ui.c - Contains functions for dealing with user interfaces
  *
- *  $Id: ui.cpp,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: ui.cpp,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/ui.h b/examples/parallel_for/tachyon/src/ui.h
index c15daeb..b3a7f3c 100644
--- a/examples/parallel_for/tachyon/src/ui.h
+++ b/examples/parallel_for/tachyon/src/ui.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * ui.h - defines for user interface functions
  *
- *  $Id: ui.h,v 1.2 2007-02-22 17:54:16 dpoulsen Exp $
+ *  $Id: ui.h,v 1.2 2007-02-22 17:54:16 Exp $
  */
 
 /* Different types of message, for levels of verbosity etc */
diff --git a/examples/parallel_for/tachyon/src/util.cpp b/examples/parallel_for/tachyon/src/util.cpp
index cb9f5c1..de2e83a 100644
--- a/examples/parallel_for/tachyon/src/util.cpp
+++ b/examples/parallel_for/tachyon/src/util.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 4f2a989..26b7ef6 100644
--- a/examples/parallel_for/tachyon/src/util.h
+++ b/examples/parallel_for/tachyon/src/util.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * util.h - This file contains defines for the timer functions...
  *
- *  $Id: util.h,v 1.3 2007-02-22 17:54:17 dpoulsen Exp $
+ *  $Id: util.h,v 1.3 2007-02-22 17:54:17 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/vector.cpp b/examples/parallel_for/tachyon/src/vector.cpp
index 2ef46b3..a7dff76 100644
--- a/examples/parallel_for/tachyon/src/vector.cpp
+++ b/examples/parallel_for/tachyon/src/vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /* 
  * vector.c - This file contains all of the vector arithmetic functions.
  *
- *  $Id: vector.cpp,v 1.2 2007-02-22 17:54:17 dpoulsen Exp $
+ *  $Id: vector.cpp,v 1.2 2007-02-22 17:54:17 Exp $
  */
 
 #include "machine.h"
diff --git a/examples/parallel_for/tachyon/src/vector.h b/examples/parallel_for/tachyon/src/vector.h
index fe77ab2..5b7e659 100644
--- a/examples/parallel_for/tachyon/src/vector.h
+++ b/examples/parallel_for/tachyon/src/vector.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@
 /*
  * vector.h - This file contains declarations of vector functions
  *
- *  $Id: vector.h,v 1.2 2007-02-22 17:54:17 dpoulsen Exp $
+ *  $Id: vector.h,v 1.2 2007-02-22 17:54:17 Exp $
  */
 
 flt VDot(vector *, vector *);
diff --git a/examples/parallel_for/tachyon/src/vol.cpp b/examples/parallel_for/tachyon/src/vol.cpp
index 0879b45..7a33172 100644
--- a/examples/parallel_for/tachyon/src/vol.cpp
+++ b/examples/parallel_for/tachyon/src/vol.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 fc786e8..130608a 100644
--- a/examples/parallel_for/tachyon/src/vol.h
+++ b/examples/parallel_for/tachyon/src/vol.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,7 +59,7 @@
  * vol.h - Volume rendering definitions etc.
  *
  *
- *  $Id: vol.h,v 1.2 2007-02-22 17:54:17 dpoulsen Exp $
+ *  $Id: vol.h,v 1.2 2007-02-22 17:54:17 Exp $
  */
 
 
diff --git a/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/classes.nib b/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/classes.nib
deleted file mode 100644
index ea58db1..0000000
--- a/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/classes.nib
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-IBClasses = ();
-IBVersion = 1;
-}
diff --git a/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/info.nib b/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/info.nib
deleted file mode 100644
index 97a70e1..0000000
--- a/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/info.nib
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IBDocumentLocation</key>
-	<string>662 774 356 240 0 0 1680 1028 </string>
-	<key>IBEditorPositions</key>
-	<dict>
-		<key>29</key>
-		<string>863 618 271 44 0 0 1680 1028 </string>
-	</dict>
-	<key>IBFramework Version</key>
-	<string>446.1</string>
-	<key>IBOldestOS</key>
-	<integer>3</integer>
-	<key>IBOpenObjects</key>
-	<array>
-		<integer>29</integer>
-		<integer>166</integer>
-	</array>
-	<key>IBSystem Version</key>
-	<string>8J2135a</string>
-	<key>targetFramework</key>
-	<string>IBCarbonFramework</string>
-</dict>
-</plist>
diff --git a/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/objects.xib b/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/objects.xib
deleted file mode 100644
index 96b2990..0000000
--- a/examples/parallel_for/tachyon/xcode/English.lproj/main.nib/objects.xib
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-<object class="NSIBObjectData">
-  <string name="targetFramework">IBCarbonFramework</string>
-  <object name="rootObject" class="NSCustomObject" id="1">
-    <string name="customClass">NSApplication</string>
-  </object>
-  <array count="22" name="allObjects">
-    <object class="IBCarbonMenu" id="29">
-      <string name="title">main</string>
-      <array count="3" name="items">
-        <object class="IBCarbonMenuItem" id="210">
-          <boolean name="updateSingleItem">TRUE</boolean>
-          <string name="title">Tachyon</string>
-          <object name="submenu" class="IBCarbonMenu" id="211">
-            <string name="title">Seismic Simulation</string>
-            <array count="7" name="items">
-              <object class="IBCarbonMenuItem" id="215">
-                <boolean name="checked">TRUE</boolean>
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Parallel</string>
-                <ostype name="command">para</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="214">
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Serial</string>
-                <ostype name="command">seri</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="216">
-                <boolean name="separator">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-              </object>
-              <object class="IBCarbonMenuItem" id="217">
-                <boolean name="checked">TRUE</boolean>
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Enable GUI</string>
-                <ostype name="command">egui</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="218">
-                <boolean name="dynamic">TRUE</boolean>
-                <boolean name="autoDisable">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">Disable GUI</string>
-                <ostype name="command">dgui</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="213">
-                <boolean name="separator">TRUE</boolean>
-                <boolean name="updateSingleItem">TRUE</boolean>
-              </object>
-              <object class="IBCarbonMenuItem" id="212">
-                <boolean name="updateSingleItem">TRUE</boolean>
-                <string name="title">About Tachyon</string>
-                <int name="keyEquivalentModifier">0</int>
-                <ostype name="command">abou</ostype>
-              </object>
-            </array>
-            <string name="name">_NSAppleMenu</string>
-          </object>
-        </object>
-        <object class="IBCarbonMenuItem" id="127">
-          <string name="title">File</string>
-          <object name="submenu" class="IBCarbonMenu" id="131">
-            <string name="title">File</string>
-            <array count="1" name="items">
-              <object class="IBCarbonMenuItem" id="200">
-                <string name="title">Close</string>
-                <string name="keyEquivalent">w</string>
-                <ostype name="command">clos</ostype>
-              </object>
-            </array>
-          </object>
-        </object>
-        <object class="IBCarbonMenuItem" id="192">
-          <string name="title">Window</string>
-          <object name="submenu" class="IBCarbonMenu" id="195">
-            <string name="title">Window</string>
-            <array count="5" name="items">
-              <object class="IBCarbonMenuItem" id="190">
-                <boolean name="dynamic">TRUE</boolean>
-                <string name="title">Minimize</string>
-                <string name="keyEquivalent">m</string>
-                <ostype name="command">mini</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="197">
-                <string name="title">Zoom</string>
-                <ostype name="command">zoom</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="194">
-                <boolean name="separator">TRUE</boolean>
-              </object>
-              <object class="IBCarbonMenuItem" id="196">
-                <boolean name="dynamic">TRUE</boolean>
-                <string name="title">Bring All to Front</string>
-                <ostype name="command">bfrt</ostype>
-              </object>
-              <object class="IBCarbonMenuItem" id="193">
-                <boolean name="dynamic">TRUE</boolean>
-                <string name="title">Arrange in Front</string>
-                <int name="keyEquivalentModifier">1572864</int>
-                <ostype name="command">frnt</ostype>
-              </object>
-            </array>
-            <string name="name">_NSWindowsMenu</string>
-          </object>
-        </object>
-      </array>
-      <string name="name">_NSMainMenu</string>
-    </object>
-    <reference idRef="127"/>
-    <reference idRef="131"/>
-    <object class="IBCarbonWindow" id="166">
-      <string name="windowRect">338 353 698 833 </string>
-      <string name="title">Tachyon</string>
-      <object name="rootControl" class="IBCarbonRootControl" id="167">
-        <string name="bounds">0 0 360 480 </string>
-        <string name="viewFrame">0 0 480 360 </string>
-      </object>
-      <boolean name="receiveUpdates">FALSE</boolean>
-      <boolean name="compositing">TRUE</boolean>
-      <int name="themeBrush">-1</int>
-      <boolean name="asyncDrag">TRUE</boolean>
-      <boolean name="doesNotCycle">TRUE</boolean>
-      <int name="WindowMinWidth">320</int>
-      <int name="WindowMinHeight">200</int>
-    </object>
-    <reference idRef="167"/>
-    <reference idRef="190"/>
-    <reference idRef="192"/>
-    <reference idRef="193"/>
-    <reference idRef="194"/>
-    <reference idRef="195"/>
-    <reference idRef="196"/>
-    <reference idRef="197"/>
-    <reference idRef="200"/>
-    <reference idRef="210"/>
-    <reference idRef="211"/>
-    <reference idRef="212"/>
-    <reference idRef="213"/>
-    <reference idRef="214"/>
-    <reference idRef="215"/>
-    <reference idRef="216"/>
-    <reference idRef="217"/>
-    <reference idRef="218"/>
-  </array>
-  <array count="22" name="allParents">
-    <reference idRef="1"/>
-    <reference idRef="29"/>
-    <reference idRef="127"/>
-    <reference idRef="1"/>
-    <reference idRef="166"/>
-    <reference idRef="195"/>
-    <reference idRef="29"/>
-    <reference idRef="195"/>
-    <reference idRef="195"/>
-    <reference idRef="192"/>
-    <reference idRef="195"/>
-    <reference idRef="195"/>
-    <reference idRef="131"/>
-    <reference idRef="29"/>
-    <reference idRef="210"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-    <reference idRef="211"/>
-  </array>
-  <dictionary count="3" name="nameTable">
-    <string>Files Owner</string>
-    <reference idRef="1"/>
-    <string>MainWindow</string>
-    <reference idRef="166"/>
-    <string>MenuBar</string>
-    <reference idRef="29"/>
-  </dictionary>
-  <unsigned_int name="nextObjectID">219</unsigned_int>
-</object>
diff --git a/examples/parallel_for/tachyon/xcode/Info.plist b/examples/parallel_for/tachyon/xcode/Info.plist
deleted file mode 100644
index 4ff1738..0000000
--- a/examples/parallel_for/tachyon/xcode/Info.plist
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.intel.tbb.tachyon</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>CSResourcesFileMapped</key>
-	<true/>
-</dict>
-</plist>
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.pch b/examples/parallel_for/tachyon/xcode/tachyon.pch
deleted file mode 100644
index 9d5e3ce..0000000
--- a/examples/parallel_for/tachyon/xcode/tachyon.pch
+++ /dev/null
@@ -1,5 +0,0 @@
-//
-// Prefix header for all source files of the 'tachyon' target in the 'tachyon' project.
-//
-
-#include <Carbon/Carbon.h>
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
index b9386b7..b4ee8cc 100644
--- a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
+++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj
@@ -7,936 +7,932 @@
 	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 */; };
-		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 */; };
-		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 */; };
-		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 */; };
-		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 */; };
-		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 */; };
-		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 */; };
-		EA135ECB13123E2200807847 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA135EC813123E2200807847 /* main.cpp */; };
-		EA135ECC13123E2200807847 /* tachyon_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA135EC913123E2200807847 /* tachyon_video.cpp */; };
-		EA135ECD13123E2200807847 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA135EC813123E2200807847 /* main.cpp */; };
-		EA135ECE13123E2200807847 /* tachyon_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA135EC913123E2200807847 /* tachyon_video.cpp */; };
-		EA135ECF13123E2200807847 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA135EC813123E2200807847 /* main.cpp */; };
-		EA135ED013123E2200807847 /* tachyon_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA135EC913123E2200807847 /* tachyon_video.cpp */; };
+		840116E1152CBBF600B07E4D /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B6152CBBF600B07E4D /* api.cpp */; };
+		840116E2152CBBF600B07E4D /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B7152CBBF600B07E4D /* apigeom.cpp */; };
+		840116E3152CBBF600B07E4D /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B8152CBBF600B07E4D /* apitrigeom.cpp */; };
+		840116E4152CBBF600B07E4D /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B9152CBBF600B07E4D /* bndbox.cpp */; };
+		840116E5152CBBF600B07E4D /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BA152CBBF600B07E4D /* box.cpp */; };
+		840116E6152CBBF600B07E4D /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BB152CBBF600B07E4D /* camera.cpp */; };
+		840116E7152CBBF600B07E4D /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BC152CBBF600B07E4D /* coordsys.cpp */; };
+		840116E8152CBBF600B07E4D /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BD152CBBF600B07E4D /* cylinder.cpp */; };
+		840116E9152CBBF600B07E4D /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BE152CBBF600B07E4D /* extvol.cpp */; };
+		840116EA152CBBF600B07E4D /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BF152CBBF600B07E4D /* global.cpp */; };
+		840116EB152CBBF600B07E4D /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C0152CBBF600B07E4D /* grid.cpp */; };
+		840116EC152CBBF600B07E4D /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C1152CBBF600B07E4D /* imageio.cpp */; };
+		840116ED152CBBF600B07E4D /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C2152CBBF600B07E4D /* imap.cpp */; };
+		840116EE152CBBF600B07E4D /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C3152CBBF600B07E4D /* intersect.cpp */; };
+		840116EF152CBBF600B07E4D /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C4152CBBF600B07E4D /* jpeg.cpp */; };
+		840116F0152CBBF600B07E4D /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C5152CBBF600B07E4D /* light.cpp */; };
+		840116F1152CBBF600B07E4D /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C6152CBBF600B07E4D /* main.cpp */; };
+		840116F2152CBBF600B07E4D /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C7152CBBF600B07E4D /* objbound.cpp */; };
+		840116F3152CBBF600B07E4D /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C8152CBBF600B07E4D /* parse.cpp */; };
+		840116F4152CBBF600B07E4D /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C9152CBBF600B07E4D /* plane.cpp */; };
+		840116F5152CBBF600B07E4D /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CA152CBBF600B07E4D /* ppm.cpp */; };
+		840116F6152CBBF600B07E4D /* pthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CB152CBBF600B07E4D /* pthread.cpp */; };
+		840116F7152CBBF600B07E4D /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CC152CBBF600B07E4D /* quadric.cpp */; };
+		840116F8152CBBF600B07E4D /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CD152CBBF600B07E4D /* render.cpp */; };
+		840116F9152CBBF600B07E4D /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CE152CBBF600B07E4D /* ring.cpp */; };
+		840116FA152CBBF600B07E4D /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CF152CBBF600B07E4D /* shade.cpp */; };
+		840116FB152CBBF600B07E4D /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D0152CBBF600B07E4D /* sphere.cpp */; };
+		840116FC152CBBF600B07E4D /* tachyon_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D1152CBBF600B07E4D /* tachyon_video.cpp */; };
+		840116FD152CBBF600B07E4D /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D2152CBBF600B07E4D /* texture.cpp */; };
+		840116FE152CBBF600B07E4D /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D3152CBBF600B07E4D /* tgafile.cpp */; };
+		840116FF152CBBF600B07E4D /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D4152CBBF600B07E4D /* trace_rest.cpp */; };
+		84011707152CBBF600B07E4D /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DC152CBBF600B07E4D /* triangle.cpp */; };
+		84011708152CBBF600B07E4D /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DD152CBBF600B07E4D /* ui.cpp */; };
+		84011709152CBBF600B07E4D /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DE152CBBF600B07E4D /* util.cpp */; };
+		8401170A152CBBF600B07E4D /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DF152CBBF600B07E4D /* vector.cpp */; };
+		8401170B152CBBF600B07E4D /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116E0152CBBF600B07E4D /* vol.cpp */; };
+		8401172A152D6E3E00B07E4D /* trace.tbb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84011729152D6E3E00B07E4D /* trace.tbb.cpp */; };
+		8401172D152D6F6C00B07E4D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
+		8401172E152D6F6C00B07E4D /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
+		8401172F152D6F6C00B07E4D /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
+		84011730152D6F6C00B07E4D /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		84011731152D6F6C00B07E4D /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B6152CBBF600B07E4D /* api.cpp */; };
+		84011732152D6F6C00B07E4D /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B7152CBBF600B07E4D /* apigeom.cpp */; };
+		84011733152D6F6C00B07E4D /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B8152CBBF600B07E4D /* apitrigeom.cpp */; };
+		84011734152D6F6C00B07E4D /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B9152CBBF600B07E4D /* bndbox.cpp */; };
+		84011735152D6F6C00B07E4D /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BA152CBBF600B07E4D /* box.cpp */; };
+		84011736152D6F6C00B07E4D /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BB152CBBF600B07E4D /* camera.cpp */; };
+		84011737152D6F6C00B07E4D /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BC152CBBF600B07E4D /* coordsys.cpp */; };
+		84011738152D6F6C00B07E4D /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BD152CBBF600B07E4D /* cylinder.cpp */; };
+		84011739152D6F6C00B07E4D /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BE152CBBF600B07E4D /* extvol.cpp */; };
+		8401173A152D6F6C00B07E4D /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BF152CBBF600B07E4D /* global.cpp */; };
+		8401173B152D6F6C00B07E4D /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C0152CBBF600B07E4D /* grid.cpp */; };
+		8401173C152D6F6C00B07E4D /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C1152CBBF600B07E4D /* imageio.cpp */; };
+		8401173D152D6F6C00B07E4D /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C2152CBBF600B07E4D /* imap.cpp */; };
+		8401173E152D6F6C00B07E4D /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C3152CBBF600B07E4D /* intersect.cpp */; };
+		8401173F152D6F6C00B07E4D /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C4152CBBF600B07E4D /* jpeg.cpp */; };
+		84011740152D6F6C00B07E4D /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C5152CBBF600B07E4D /* light.cpp */; };
+		84011741152D6F6C00B07E4D /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C6152CBBF600B07E4D /* main.cpp */; };
+		84011742152D6F6C00B07E4D /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C7152CBBF600B07E4D /* objbound.cpp */; };
+		84011743152D6F6C00B07E4D /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C8152CBBF600B07E4D /* parse.cpp */; };
+		84011744152D6F6C00B07E4D /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C9152CBBF600B07E4D /* plane.cpp */; };
+		84011745152D6F6C00B07E4D /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CA152CBBF600B07E4D /* ppm.cpp */; };
+		84011746152D6F6C00B07E4D /* pthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CB152CBBF600B07E4D /* pthread.cpp */; };
+		84011747152D6F6C00B07E4D /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CC152CBBF600B07E4D /* quadric.cpp */; };
+		84011748152D6F6C00B07E4D /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CD152CBBF600B07E4D /* render.cpp */; };
+		84011749152D6F6C00B07E4D /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CE152CBBF600B07E4D /* ring.cpp */; };
+		8401174A152D6F6C00B07E4D /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CF152CBBF600B07E4D /* shade.cpp */; };
+		8401174B152D6F6C00B07E4D /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D0152CBBF600B07E4D /* sphere.cpp */; };
+		8401174C152D6F6C00B07E4D /* tachyon_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D1152CBBF600B07E4D /* tachyon_video.cpp */; };
+		8401174D152D6F6C00B07E4D /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D2152CBBF600B07E4D /* texture.cpp */; };
+		8401174E152D6F6C00B07E4D /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D3152CBBF600B07E4D /* tgafile.cpp */; };
+		8401174F152D6F6C00B07E4D /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D4152CBBF600B07E4D /* trace_rest.cpp */; };
+		84011750152D6F6C00B07E4D /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DC152CBBF600B07E4D /* triangle.cpp */; };
+		84011751152D6F6C00B07E4D /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DD152CBBF600B07E4D /* ui.cpp */; };
+		84011752152D6F6C00B07E4D /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DE152CBBF600B07E4D /* util.cpp */; };
+		84011753152D6F6C00B07E4D /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DF152CBBF600B07E4D /* vector.cpp */; };
+		84011754152D6F6C00B07E4D /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116E0152CBBF600B07E4D /* vol.cpp */; };
+		84011757152D6F6C00B07E4D /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };
+		84011758152D6F6C00B07E4D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };
+		84011759152D6F6C00B07E4D /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };
+		8401175B152D6F6C00B07E4D /* (null) in Resources */ = {isa = PBXBuildFile; };
+		8401175C152D6F6C00B07E4D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };
+		8401175D152D6F6C00B07E4D /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };
+		84011766152D6F8400B07E4D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
+		84011767152D6F8400B07E4D /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
+		84011768152D6F8400B07E4D /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
+		84011769152D6F8400B07E4D /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		8401176A152D6F8400B07E4D /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B6152CBBF600B07E4D /* api.cpp */; };
+		8401176B152D6F8400B07E4D /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B7152CBBF600B07E4D /* apigeom.cpp */; };
+		8401176C152D6F8400B07E4D /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B8152CBBF600B07E4D /* apitrigeom.cpp */; };
+		8401176D152D6F8400B07E4D /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116B9152CBBF600B07E4D /* bndbox.cpp */; };
+		8401176E152D6F8400B07E4D /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BA152CBBF600B07E4D /* box.cpp */; };
+		8401176F152D6F8400B07E4D /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BB152CBBF600B07E4D /* camera.cpp */; };
+		84011770152D6F8400B07E4D /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BC152CBBF600B07E4D /* coordsys.cpp */; };
+		84011771152D6F8400B07E4D /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BD152CBBF600B07E4D /* cylinder.cpp */; };
+		84011772152D6F8400B07E4D /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BE152CBBF600B07E4D /* extvol.cpp */; };
+		84011773152D6F8400B07E4D /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116BF152CBBF600B07E4D /* global.cpp */; };
+		84011774152D6F8400B07E4D /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C0152CBBF600B07E4D /* grid.cpp */; };
+		84011775152D6F8400B07E4D /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C1152CBBF600B07E4D /* imageio.cpp */; };
+		84011776152D6F8400B07E4D /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C2152CBBF600B07E4D /* imap.cpp */; };
+		84011777152D6F8400B07E4D /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C3152CBBF600B07E4D /* intersect.cpp */; };
+		84011778152D6F8400B07E4D /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C4152CBBF600B07E4D /* jpeg.cpp */; };
+		84011779152D6F8400B07E4D /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C5152CBBF600B07E4D /* light.cpp */; };
+		8401177A152D6F8400B07E4D /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C6152CBBF600B07E4D /* main.cpp */; };
+		8401177B152D6F8400B07E4D /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C7152CBBF600B07E4D /* objbound.cpp */; };
+		8401177C152D6F8400B07E4D /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C8152CBBF600B07E4D /* parse.cpp */; };
+		8401177D152D6F8400B07E4D /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116C9152CBBF600B07E4D /* plane.cpp */; };
+		8401177E152D6F8400B07E4D /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CA152CBBF600B07E4D /* ppm.cpp */; };
+		8401177F152D6F8400B07E4D /* pthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CB152CBBF600B07E4D /* pthread.cpp */; };
+		84011780152D6F8400B07E4D /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CC152CBBF600B07E4D /* quadric.cpp */; };
+		84011781152D6F8400B07E4D /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CD152CBBF600B07E4D /* render.cpp */; };
+		84011782152D6F8400B07E4D /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CE152CBBF600B07E4D /* ring.cpp */; };
+		84011783152D6F8400B07E4D /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116CF152CBBF600B07E4D /* shade.cpp */; };
+		84011784152D6F8400B07E4D /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D0152CBBF600B07E4D /* sphere.cpp */; };
+		84011785152D6F8400B07E4D /* tachyon_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D1152CBBF600B07E4D /* tachyon_video.cpp */; };
+		84011786152D6F8400B07E4D /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D2152CBBF600B07E4D /* texture.cpp */; };
+		84011787152D6F8400B07E4D /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D3152CBBF600B07E4D /* tgafile.cpp */; };
+		84011788152D6F8400B07E4D /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116D4152CBBF600B07E4D /* trace_rest.cpp */; };
+		84011789152D6F8400B07E4D /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DC152CBBF600B07E4D /* triangle.cpp */; };
+		8401178A152D6F8400B07E4D /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DD152CBBF600B07E4D /* ui.cpp */; };
+		8401178B152D6F8400B07E4D /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DE152CBBF600B07E4D /* util.cpp */; };
+		8401178C152D6F8400B07E4D /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DF152CBBF600B07E4D /* vector.cpp */; };
+		8401178D152D6F8400B07E4D /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116E0152CBBF600B07E4D /* vol.cpp */; };
+		84011790152D6F8400B07E4D /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };
+		84011791152D6F8400B07E4D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };
+		84011792152D6F8400B07E4D /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };
+		84011794152D6F8400B07E4D /* (null) in Resources */ = {isa = PBXBuildFile; };
+		84011795152D6F8400B07E4D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };
+		84011796152D6F8400B07E4D /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };
+		840117A1152D6FF900B07E4D /* trace.serial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8401179F152D6FD100B07E4D /* trace.serial.cpp */; };
+		840117A2152D701A00B07E4D /* trace.tbb1d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8401179D152D6FC600B07E4D /* trace.tbb1d.cpp */; };
+		84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };
+		84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
+		84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
+		84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
+		84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; };
+		84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };
+		84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };
+		84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };
+		84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };
 /* 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 = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
-		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; };
-		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; };
-		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; };
-		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; };
-		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; };
-		EA135EC813123E2200807847 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../src/main.cpp; sourceTree = SOURCE_ROOT; };
-		EA135EC913123E2200807847 /* tachyon_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tachyon_video.cpp; path = ../src/tachyon_video.cpp; sourceTree = SOURCE_ROOT; };
-		EA135ECA13123E2200807847 /* tachyon_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tachyon_video.h; path = ../src/tachyon_video.h; sourceTree = SOURCE_ROOT; };
+		84011691152CBBC900B07E4D /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = api.h; path = ../src/api.h; sourceTree = "<group>"; };
+		84011692152CBBC900B07E4D /* apitrigeom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = apitrigeom.h; path = ../src/apitrigeom.h; sourceTree = "<group>"; };
+		84011693152CBBC900B07E4D /* bndbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bndbox.h; path = ../src/bndbox.h; sourceTree = "<group>"; };
+		84011694152CBBC900B07E4D /* box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = box.h; path = ../src/box.h; sourceTree = "<group>"; };
+		84011695152CBBC900B07E4D /* camera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = camera.h; path = ../src/camera.h; sourceTree = "<group>"; };
+		84011696152CBBC900B07E4D /* coordsys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = coordsys.h; path = ../src/coordsys.h; sourceTree = "<group>"; };
+		84011697152CBBC900B07E4D /* cylinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cylinder.h; path = ../src/cylinder.h; sourceTree = "<group>"; };
+		84011698152CBBC900B07E4D /* extvol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = extvol.h; path = ../src/extvol.h; sourceTree = "<group>"; };
+		84011699152CBBC900B07E4D /* global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = global.h; path = ../src/global.h; sourceTree = "<group>"; };
+		8401169A152CBBC900B07E4D /* grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = grid.h; path = ../src/grid.h; sourceTree = "<group>"; };
+		8401169B152CBBC900B07E4D /* imageio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imageio.h; path = ../src/imageio.h; sourceTree = "<group>"; };
+		8401169C152CBBC900B07E4D /* imap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imap.h; path = ../src/imap.h; sourceTree = "<group>"; };
+		8401169D152CBBC900B07E4D /* intersect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = intersect.h; path = ../src/intersect.h; sourceTree = "<group>"; };
+		8401169E152CBBC900B07E4D /* jpeg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpeg.h; path = ../src/jpeg.h; sourceTree = "<group>"; };
+		8401169F152CBBC900B07E4D /* light.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = light.h; path = ../src/light.h; sourceTree = "<group>"; };
+		840116A0152CBBC900B07E4D /* machine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = machine.h; path = ../src/machine.h; sourceTree = "<group>"; };
+		840116A1152CBBC900B07E4D /* macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macros.h; path = ../src/macros.h; sourceTree = "<group>"; };
+		840116A2152CBBC900B07E4D /* objbound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = objbound.h; path = ../src/objbound.h; sourceTree = "<group>"; };
+		840116A3152CBBC900B07E4D /* parse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parse.h; path = ../src/parse.h; sourceTree = "<group>"; };
+		840116A4152CBBC900B07E4D /* plane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plane.h; path = ../src/plane.h; sourceTree = "<group>"; };
+		840116A5152CBBC900B07E4D /* ppm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ppm.h; path = ../src/ppm.h; sourceTree = "<group>"; };
+		840116A7152CBBC900B07E4D /* quadric.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quadric.h; path = ../src/quadric.h; sourceTree = "<group>"; };
+		840116A8152CBBC900B07E4D /* render.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = render.h; path = ../src/render.h; sourceTree = "<group>"; };
+		840116A9152CBBC900B07E4D /* ring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ring.h; path = ../src/ring.h; sourceTree = "<group>"; };
+		840116AA152CBBC900B07E4D /* shade.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = shade.h; path = ../src/shade.h; sourceTree = "<group>"; };
+		840116AB152CBBC900B07E4D /* sphere.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sphere.h; path = ../src/sphere.h; sourceTree = "<group>"; };
+		840116AC152CBBC900B07E4D /* tachyon_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tachyon_video.h; path = ../src/tachyon_video.h; sourceTree = "<group>"; };
+		840116AD152CBBC900B07E4D /* texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = texture.h; path = ../src/texture.h; sourceTree = "<group>"; };
+		840116AE152CBBC900B07E4D /* tgafile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tgafile.h; path = ../src/tgafile.h; sourceTree = "<group>"; };
+		840116AF152CBBC900B07E4D /* trace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = trace.h; path = ../src/trace.h; sourceTree = "<group>"; };
+		840116B0152CBBC900B07E4D /* triangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = triangle.h; path = ../src/triangle.h; sourceTree = "<group>"; };
+		840116B1152CBBC900B07E4D /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../src/types.h; sourceTree = "<group>"; };
+		840116B2152CBBC900B07E4D /* ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ui.h; path = ../src/ui.h; sourceTree = "<group>"; };
+		840116B3152CBBC900B07E4D /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = util.h; path = ../src/util.h; sourceTree = "<group>"; };
+		840116B4152CBBC900B07E4D /* vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vector.h; path = ../src/vector.h; sourceTree = "<group>"; };
+		840116B5152CBBC900B07E4D /* vol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vol.h; path = ../src/vol.h; sourceTree = "<group>"; };
+		840116B6152CBBF600B07E4D /* api.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = api.cpp; sourceTree = "<group>"; };
+		840116B7152CBBF600B07E4D /* apigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apigeom.cpp; sourceTree = "<group>"; };
+		840116B8152CBBF600B07E4D /* apitrigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apitrigeom.cpp; sourceTree = "<group>"; };
+		840116B9152CBBF600B07E4D /* bndbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bndbox.cpp; sourceTree = "<group>"; };
+		840116BA152CBBF600B07E4D /* box.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = box.cpp; sourceTree = "<group>"; };
+		840116BB152CBBF600B07E4D /* camera.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = camera.cpp; sourceTree = "<group>"; };
+		840116BC152CBBF600B07E4D /* coordsys.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = coordsys.cpp; sourceTree = "<group>"; };
+		840116BD152CBBF600B07E4D /* cylinder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cylinder.cpp; sourceTree = "<group>"; };
+		840116BE152CBBF600B07E4D /* extvol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extvol.cpp; sourceTree = "<group>"; };
+		840116BF152CBBF600B07E4D /* global.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = global.cpp; sourceTree = "<group>"; };
+		840116C0152CBBF600B07E4D /* grid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = grid.cpp; sourceTree = "<group>"; };
+		840116C1152CBBF600B07E4D /* imageio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imageio.cpp; sourceTree = "<group>"; };
+		840116C2152CBBF600B07E4D /* imap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imap.cpp; sourceTree = "<group>"; };
+		840116C3152CBBF600B07E4D /* intersect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = intersect.cpp; sourceTree = "<group>"; };
+		840116C4152CBBF600B07E4D /* jpeg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jpeg.cpp; sourceTree = "<group>"; };
+		840116C5152CBBF600B07E4D /* light.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = light.cpp; sourceTree = "<group>"; };
+		840116C6152CBBF600B07E4D /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
+		840116C7152CBBF600B07E4D /* objbound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objbound.cpp; sourceTree = "<group>"; };
+		840116C8152CBBF600B07E4D /* parse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse.cpp; sourceTree = "<group>"; };
+		840116C9152CBBF600B07E4D /* plane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = plane.cpp; sourceTree = "<group>"; };
+		840116CA152CBBF600B07E4D /* ppm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ppm.cpp; sourceTree = "<group>"; };
+		840116CB152CBBF600B07E4D /* pthread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pthread.cpp; sourceTree = "<group>"; };
+		840116CC152CBBF600B07E4D /* quadric.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = quadric.cpp; sourceTree = "<group>"; };
+		840116CD152CBBF600B07E4D /* render.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = render.cpp; sourceTree = "<group>"; };
+		840116CE152CBBF600B07E4D /* ring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ring.cpp; sourceTree = "<group>"; };
+		840116CF152CBBF600B07E4D /* shade.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shade.cpp; sourceTree = "<group>"; };
+		840116D0152CBBF600B07E4D /* sphere.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sphere.cpp; sourceTree = "<group>"; };
+		840116D1152CBBF600B07E4D /* tachyon_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tachyon_video.cpp; sourceTree = "<group>"; };
+		840116D2152CBBF600B07E4D /* texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = texture.cpp; sourceTree = "<group>"; };
+		840116D3152CBBF600B07E4D /* tgafile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tgafile.cpp; sourceTree = "<group>"; };
+		840116D4152CBBF600B07E4D /* trace_rest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trace_rest.cpp; sourceTree = "<group>"; };
+		840116DC152CBBF600B07E4D /* triangle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = triangle.cpp; sourceTree = "<group>"; };
+		840116DD152CBBF600B07E4D /* ui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui.cpp; sourceTree = "<group>"; };
+		840116DE152CBBF600B07E4D /* util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = util.cpp; sourceTree = "<group>"; };
+		840116DF152CBBF600B07E4D /* vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vector.cpp; sourceTree = "<group>"; };
+		840116E0152CBBF600B07E4D /* vol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vol.cpp; sourceTree = "<group>"; };
+		84011729152D6E3E00B07E4D /* trace.tbb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trace.tbb.cpp; sourceTree = "<group>"; };
+		84011761152D6F6C00B07E4D /* tachyon.serial.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tachyon.serial.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		8401179A152D6F8400B07E4D /* tachyon.tbb1d.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tachyon.tbb1d.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		8401179D152D6FC600B07E4D /* trace.tbb1d.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trace.tbb1d.cpp; sourceTree = "<group>"; };
+		8401179F152D6FD100B07E4D /* trace.serial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trace.serial.cpp; sourceTree = "<group>"; };
+		84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
+		84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = "<group>"; };
+		84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = "<group>"; };
+		84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = "<group>"; };
+		84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = "<group>"; };
+		84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = "<group>"; };
+		84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tbbExample-Prefix.pch"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; sourceTree = "<group>"; };
+		84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = "<group>"; };
+		84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = "<group>"; };
+		84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = "<group>"; };
+		84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+		84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
+		84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
+		84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
-		8D0C4E910486CD37000505A6 /* Frameworks */ = {
+		84011756152D6F6C00B07E4D /* 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 */,
+				84011757152D6F6C00B07E4D /* OpenGL.framework in Frameworks */,
+				84011758152D6F6C00B07E4D /* Cocoa.framework in Frameworks */,
+				84011759152D6F6C00B07E4D /* libtbb.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		A1F58D900B8DF03600073279 /* Frameworks */ = {
+		8401178F152D6F8400B07E4D /* 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 */,
+				84011790152D6F8400B07E4D /* OpenGL.framework in Frameworks */,
+				84011791152D6F8400B07E4D /* Cocoa.framework in Frameworks */,
+				84011792152D6F8400B07E4D /* libtbb.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		A1F58D9A0B8DF06700073279 /* Frameworks */ = {
+		84D0174E1527431F0008A4E0 /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A1F58E900B8DF25F00073279 /* AGL.framework in Frameworks */,
-				A1F58E910B8DF26000073279 /* Carbon.framework in Frameworks */,
-				A1F58E920B8DF26100073279 /* OpenGL.framework in Frameworks */,
+				84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,
+				84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,
+				84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
-		20286C29FDCF999611CA2CEA /* tachyon */ = {
+		8401160E152CB8A600B07E4D /* Sources */ = {
 			isa = PBXGroup;
 			children = (
-				20286C2AFDCF999611CA2CEA /* Sources */,
-				20286C2CFDCF999611CA2CEA /* Resources */,
-				20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
-				A1F58CD30B8DE85300073279 /* Products */,
+				8401179F152D6FD100B07E4D /* trace.serial.cpp */,
+				8401179D152D6FC600B07E4D /* trace.tbb1d.cpp */,
+				84011729152D6E3E00B07E4D /* trace.tbb.cpp */,
+				840116B6152CBBF600B07E4D /* api.cpp */,
+				840116B7152CBBF600B07E4D /* apigeom.cpp */,
+				840116B8152CBBF600B07E4D /* apitrigeom.cpp */,
+				840116B9152CBBF600B07E4D /* bndbox.cpp */,
+				840116BA152CBBF600B07E4D /* box.cpp */,
+				840116BB152CBBF600B07E4D /* camera.cpp */,
+				840116BC152CBBF600B07E4D /* coordsys.cpp */,
+				840116BD152CBBF600B07E4D /* cylinder.cpp */,
+				840116BE152CBBF600B07E4D /* extvol.cpp */,
+				840116BF152CBBF600B07E4D /* global.cpp */,
+				840116C0152CBBF600B07E4D /* grid.cpp */,
+				840116C1152CBBF600B07E4D /* imageio.cpp */,
+				840116C2152CBBF600B07E4D /* imap.cpp */,
+				840116C3152CBBF600B07E4D /* intersect.cpp */,
+				840116C4152CBBF600B07E4D /* jpeg.cpp */,
+				840116C5152CBBF600B07E4D /* light.cpp */,
+				840116C6152CBBF600B07E4D /* main.cpp */,
+				840116C7152CBBF600B07E4D /* objbound.cpp */,
+				840116C8152CBBF600B07E4D /* parse.cpp */,
+				840116C9152CBBF600B07E4D /* plane.cpp */,
+				840116CA152CBBF600B07E4D /* ppm.cpp */,
+				840116CB152CBBF600B07E4D /* pthread.cpp */,
+				840116CC152CBBF600B07E4D /* quadric.cpp */,
+				840116CD152CBBF600B07E4D /* render.cpp */,
+				840116CE152CBBF600B07E4D /* ring.cpp */,
+				840116CF152CBBF600B07E4D /* shade.cpp */,
+				840116D0152CBBF600B07E4D /* sphere.cpp */,
+				840116D1152CBBF600B07E4D /* tachyon_video.cpp */,
+				840116D2152CBBF600B07E4D /* texture.cpp */,
+				840116D3152CBBF600B07E4D /* tgafile.cpp */,
+				840116D4152CBBF600B07E4D /* trace_rest.cpp */,
+				840116DC152CBBF600B07E4D /* triangle.cpp */,
+				840116DD152CBBF600B07E4D /* ui.cpp */,
+				840116DE152CBBF600B07E4D /* util.cpp */,
+				840116DF152CBBF600B07E4D /* vector.cpp */,
+				840116E0152CBBF600B07E4D /* vol.cpp */,
 			);
-			name = tachyon;
+			name = Sources;
+			path = ../src;
 			sourceTree = "<group>";
 		};
-		20286C2AFDCF999611CA2CEA /* Sources */ = {
+		84011690152CBB3C00B07E4D /* Headers */ = {
 			isa = PBXGroup;
 			children = (
-				A1F590310B8DF75E00073279 /* Tachyon */,
-				A1A8FB5F0B8CBB9E001C55B1 /* Render */,
+				84011691152CBBC900B07E4D /* api.h */,
+				84011692152CBBC900B07E4D /* apitrigeom.h */,
+				84011693152CBBC900B07E4D /* bndbox.h */,
+				84011694152CBBC900B07E4D /* box.h */,
+				84011695152CBBC900B07E4D /* camera.h */,
+				84011696152CBBC900B07E4D /* coordsys.h */,
+				84011697152CBBC900B07E4D /* cylinder.h */,
+				84011698152CBBC900B07E4D /* extvol.h */,
+				84011699152CBBC900B07E4D /* global.h */,
+				8401169A152CBBC900B07E4D /* grid.h */,
+				8401169B152CBBC900B07E4D /* imageio.h */,
+				8401169C152CBBC900B07E4D /* imap.h */,
+				8401169D152CBBC900B07E4D /* intersect.h */,
+				8401169E152CBBC900B07E4D /* jpeg.h */,
+				8401169F152CBBC900B07E4D /* light.h */,
+				840116A0152CBBC900B07E4D /* machine.h */,
+				840116A1152CBBC900B07E4D /* macros.h */,
+				840116A2152CBBC900B07E4D /* objbound.h */,
+				840116A3152CBBC900B07E4D /* parse.h */,
+				840116A4152CBBC900B07E4D /* plane.h */,
+				840116A5152CBBC900B07E4D /* ppm.h */,
+				840116A7152CBBC900B07E4D /* quadric.h */,
+				840116A8152CBBC900B07E4D /* render.h */,
+				840116A9152CBBC900B07E4D /* ring.h */,
+				840116AA152CBBC900B07E4D /* shade.h */,
+				840116AB152CBBC900B07E4D /* sphere.h */,
+				840116AC152CBBC900B07E4D /* tachyon_video.h */,
+				840116AD152CBBC900B07E4D /* texture.h */,
+				840116AE152CBBC900B07E4D /* tgafile.h */,
+				840116AF152CBBC900B07E4D /* trace.h */,
+				840116B0152CBBC900B07E4D /* triangle.h */,
+				840116B1152CBBC900B07E4D /* types.h */,
+				840116B2152CBBC900B07E4D /* ui.h */,
+				840116B3152CBBC900B07E4D /* util.h */,
+				840116B4152CBBC900B07E4D /* vector.h */,
+				840116B5152CBBC900B07E4D /* vol.h */,
 			);
-			name = Sources;
+			name = Headers;
 			sourceTree = "<group>";
 		};
-		20286C2CFDCF999611CA2CEA /* Resources */ = {
+		84B8DA6C152CA8D900D59B95 /* tbbExample */ = {
 			isa = PBXGroup;
 			children = (
-				8D0C4E960486CD37000505A6 /* Info.plist */,
-				02345980000FD03B11CA0E72 /* main.nib */,
+				84011690152CBB3C00B07E4D /* Headers */,
+				8401160E152CB8A600B07E4D /* Sources */,
+				84B8DA98152CAD8600D59B95 /* Gui layer */,
+				84B8DA7B152CA97B00D59B95 /* Resources */,
 			);
-			name = Resources;
+			name = tbbExample;
 			sourceTree = "<group>";
 		};
-		20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
+		84B8DA7B152CA97B00D59B95 /* Resources */ = {
 			isa = PBXGroup;
 			children = (
-				A117DC830B8DC0DE00F62CED /* libtbb.dylib */,
-				A117DC7F0B8DC09300F62CED /* OpenGL.framework */,
-				A117DC7A0B8DC08100F62CED /* AGL.framework */,
-				20286C33FDCF999611CA2CEA /* Carbon.framework */,
+				84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,
+				84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,
 			);
-			name = "External Frameworks and Libraries";
+			name = Resources;
+			path = ../../../common/gui/xcode/tbbExample/en.lproj;
 			sourceTree = "<group>";
 		};
-		A1A8FB5F0B8CBB9E001C55B1 /* Render */ = {
+		84B8DA98152CAD8600D59B95 /* Gui layer */ = {
 			isa = PBXGroup;
 			children = (
-				A1F5902F0B8DF71B00073279 /* Headers */,
-				A1F5902E0B8DF71200073279 /* Sources */,
-			);
-			name = Render;
+				84B8DA99152CADF400D59B95 /* macvideo.cpp */,
+				84B8DA6F152CA90100D59B95 /* main.m */,
+				84B8DA70152CA90100D59B95 /* OpenGLView.h */,
+				84B8DA71152CA90100D59B95 /* OpenGLView.m */,
+				84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */,
+				84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */,
+				84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */,
+			);
+			name = "Gui layer";
 			sourceTree = "<group>";
 		};
-		A1F58CD30B8DE85300073279 /* Products */ = {
+		84D017461527431F0008A4E0 = {
 			isa = PBXGroup;
 			children = (
-				A1F58CD90B8DE90E00073279 /* tachyon-tbb.app */,
-				A1F58D920B8DF03600073279 /* tachyon-tbb1d.app */,
-				A1F58D9C0B8DF06700073279 /* tachyon-serial.app */,
+				84B8DA6C152CA8D900D59B95 /* tbbExample */,
+				84D017541527431F0008A4E0 /* Frameworks */,
+				84D017521527431F0008A4E0 /* Products */,
+				84011763152D6F6D00B07E4D /* tbbExample copy-Info.plist */,
+				8401179C152D6F8500B07E4D /* tbbExample copy copy-Info.plist */,
 			);
-			name = Products;
 			sourceTree = "<group>";
 		};
-		A1F5902E0B8DF71200073279 /* Sources */ = {
+		84D017521527431F0008A4E0 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				EA135EC913123E2200807847 /* tachyon_video.cpp */,
-				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 */,
-				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 */,
-				A1F590C20B8DF81800073279 /* vol.cpp */,
+				84D017511527431F0008A4E0 /* tbbExample.app */,
+				84011761152D6F6C00B07E4D /* tachyon.serial.app */,
+				8401179A152D6F8400B07E4D /* tachyon.tbb1d.app */,
 			);
-			name = Sources;
+			name = Products;
 			sourceTree = "<group>";
 		};
-		A1F5902F0B8DF71B00073279 /* Headers */ = {
+		84D017541527431F0008A4E0 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
-				A1F591610B8DF96500073279 /* video.h */,
-				A1F5915A0B8DF8FA00073279 /* triangle.h */,
-				A1F590320B8DF7D100073279 /* api.h */,
-				EA135ECA13123E2200807847 /* tachyon_video.h */,
-				A1F590330B8DF7D100073279 /* apitrigeom.h */,
-				A1F590340B8DF7D100073279 /* bndbox.h */,
-				A1F590350B8DF7D100073279 /* box.h */,
-				A1F590360B8DF7D100073279 /* camera.h */,
-				A1F590370B8DF7D100073279 /* coordsys.h */,
-				A1F590380B8DF7D100073279 /* cylinder.h */,
-				A1F590390B8DF7D100073279 /* extvol.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 */,
-				A1F590550B8DF7D100073279 /* vol.h */,
+				84D01775152744BD0008A4E0 /* OpenGL.framework */,
+				84D017551527431F0008A4E0 /* Cocoa.framework */,
+				84D017571527431F0008A4E0 /* Other Frameworks */,
 			);
-			name = Headers;
+			name = Frameworks;
 			sourceTree = "<group>";
 		};
-		A1F590310B8DF75E00073279 /* Tachyon */ = {
+		84D017571527431F0008A4E0 /* Other Frameworks */ = {
 			isa = PBXGroup;
 			children = (
-				EA135EC813123E2200807847 /* main.cpp */,
-				A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */,
-				A1F58D3D0B8DEB8E00073279 /* trace.threads.cpp */,
-				A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */,
-				A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */,
-				32DBCF6D0370B57F00C91783 /* tachyon.pch */,
-			);
-			name = Tachyon;
+				84B8DA13152C9AC600D59B95 /* libtbb.dylib */,
+				84D017581527431F0008A4E0 /* AppKit.framework */,
+				84D017591527431F0008A4E0 /* CoreData.framework */,
+				84D0175A1527431F0008A4E0 /* Foundation.framework */,
+			);
+			name = "Other Frameworks";
 			sourceTree = "<group>";
 		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
-		8D0C4E890486CD37000505A6 /* tachyon-tbb */ = {
+		8401172B152D6F6C00B07E4D /* tachyon.serial */ = {
 			isa = PBXNativeTarget;
-			buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "tachyon-tbb" */;
+			buildConfigurationList = 8401175E152D6F6C00B07E4D /* Build configuration list for PBXNativeTarget "tachyon.serial" */;
 			buildPhases = (
-				8D0C4E8C0486CD37000505A6 /* Resources */,
-				8D0C4E8F0486CD37000505A6 /* Sources */,
-				8D0C4E910486CD37000505A6 /* Frameworks */,
-				A117DC910B8DC59A00F62CED /* Copy TBB lib */,
+				8401172C152D6F6C00B07E4D /* Sources */,
+				84011756152D6F6C00B07E4D /* Frameworks */,
+				8401175A152D6F6C00B07E4D /* Resources */,
 			);
 			buildRules = (
 			);
 			dependencies = (
 			);
-			name = "tachyon-tbb";
-			productInstallPath = "$(HOME)/Applications";
-			productName = tachyon;
-			productReference = A1F58CD90B8DE90E00073279 /* tachyon-tbb.app */;
+			name = tachyon.serial;
+			productName = tbbExample;
+			productReference = 84011761152D6F6C00B07E4D /* tachyon.serial.app */;
 			productType = "com.apple.product-type.application";
 		};
-		A1F58D910B8DF03600073279 /* tachyon-tbb1d */ = {
+		84011764152D6F8400B07E4D /* tachyon.tbb1d */ = {
 			isa = PBXNativeTarget;
-			buildConfigurationList = A1F58D950B8DF03600073279 /* Build configuration list for PBXNativeTarget "tachyon-tbb1d" */;
+			buildConfigurationList = 84011797152D6F8400B07E4D /* Build configuration list for PBXNativeTarget "tachyon.tbb1d" */;
 			buildPhases = (
-				A1F58D8E0B8DF03600073279 /* Resources */,
-				A1F58D8F0B8DF03600073279 /* Sources */,
-				A1F58D900B8DF03600073279 /* Frameworks */,
-				A1F58EE60B8DF4E100073279 /* Copy TBB lib */,
+				84011765152D6F8400B07E4D /* Sources */,
+				8401178F152D6F8400B07E4D /* Frameworks */,
+				84011793152D6F8400B07E4D /* Resources */,
 			);
 			buildRules = (
 			);
 			dependencies = (
 			);
-			name = "tachyon-tbb1d";
-			productName = "tachyon-tbb1d";
-			productReference = A1F58D920B8DF03600073279 /* tachyon-tbb1d.app */;
+			name = tachyon.tbb1d;
+			productName = tbbExample;
+			productReference = 8401179A152D6F8400B07E4D /* tachyon.tbb1d.app */;
 			productType = "com.apple.product-type.application";
 		};
-		A1F58D9B0B8DF06700073279 /* tachyon-serial */ = {
+		84D017501527431F0008A4E0 /* tachyon.tbb */ = {
 			isa = PBXNativeTarget;
-			buildConfigurationList = A1F58D9F0B8DF06700073279 /* Build configuration list for PBXNativeTarget "tachyon-serial" */;
+			buildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tachyon.tbb" */;
 			buildPhases = (
-				A1F58D980B8DF06700073279 /* Resources */,
-				A1F58D990B8DF06700073279 /* Sources */,
-				A1F58D9A0B8DF06700073279 /* Frameworks */,
+				84D0174D1527431F0008A4E0 /* Sources */,
+				84D0174E1527431F0008A4E0 /* Frameworks */,
+				84D0174F1527431F0008A4E0 /* Resources */,
 			);
 			buildRules = (
 			);
 			dependencies = (
 			);
-			name = "tachyon-serial";
-			productName = "tachyon-serial";
-			productReference = A1F58D9C0B8DF06700073279 /* tachyon-serial.app */;
+			name = tachyon.tbb;
+			productName = tbbExample;
+			productReference = 84D017511527431F0008A4E0 /* tbbExample.app */;
 			productType = "com.apple.product-type.application";
 		};
 /* End PBXNativeTarget section */
 
 /* Begin PBXProject section */
-		20286C28FDCF999611CA2CEA /* Project object */ = {
+		84D017481527431F0008A4E0 /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
-				LastUpgradeCheck = 0410;
+				CLASSPREFIX = tbb;
+				LastUpgradeCheck = 0430;
 			};
-			buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "tachyon" */;
+			buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "tachyon" */;
 			compatibilityVersion = "Xcode 3.2";
 			developmentRegion = English;
-			hasScannedForEncodings = 1;
+			hasScannedForEncodings = 0;
 			knownRegions = (
 				en,
 			);
-			mainGroup = 20286C29FDCF999611CA2CEA /* tachyon */;
-			productRefGroup = A1F58CD30B8DE85300073279 /* Products */;
+			mainGroup = 84D017461527431F0008A4E0;
+			productRefGroup = 84D017521527431F0008A4E0 /* Products */;
 			projectDirPath = "";
 			projectRoot = "";
 			targets = (
-				A1F58D9B0B8DF06700073279 /* tachyon-serial */,
-				A1F58D910B8DF03600073279 /* tachyon-tbb1d */,
-				8D0C4E890486CD37000505A6 /* tachyon-tbb */,
+				84D017501527431F0008A4E0 /* tachyon.tbb */,
+				8401172B152D6F6C00B07E4D /* tachyon.serial */,
+				84011764152D6F8400B07E4D /* tachyon.tbb1d */,
 			);
 		};
 /* End PBXProject section */
 
 /* Begin PBXResourcesBuildPhase section */
-		8D0C4E8C0486CD37000505A6 /* Resources */ = {
+		8401175A152D6F6C00B07E4D /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,
-				A1F58EA30B8DF32900073279 /* Info.plist in Resources */,
+				8401175B152D6F6C00B07E4D /* (null) in Resources */,
+				8401175C152D6F6C00B07E4D /* InfoPlist.strings in Resources */,
+				8401175D152D6F6C00B07E4D /* MainMenu.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		A1F58D8E0B8DF03600073279 /* Resources */ = {
+		84011793152D6F8400B07E4D /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A1F58DCD0B8DF19700073279 /* main.nib in Resources */,
-				A1F58EA40B8DF32A00073279 /* Info.plist in Resources */,
+				84011794152D6F8400B07E4D /* (null) in Resources */,
+				84011795152D6F8400B07E4D /* InfoPlist.strings in Resources */,
+				84011796152D6F8400B07E4D /* MainMenu.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		A1F58D980B8DF06700073279 /* Resources */ = {
+		84D0174F1527431F0008A4E0 /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A1F58DCE0B8DF19800073279 /* main.nib in Resources */,
-				A1F58EA60B8DF32B00073279 /* Info.plist in Resources */,
+				84B8DA7A152CA90100D59B95 /* (null) in Resources */,
+				84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */,
+				84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
-		8D0C4E8F0486CD37000505A6 /* Sources */ = {
+		8401172C152D6F6C00B07E4D /* 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 */,
-				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 */,
-				A1F591560B8DF81800073279 /* vol.cpp in Sources */,
-				A1F5915D0B8DF94400073279 /* macvideo.cpp in Sources */,
-				EA135ECF13123E2200807847 /* main.cpp in Sources */,
-				EA135ED013123E2200807847 /* tachyon_video.cpp in Sources */,
+				840117A1152D6FF900B07E4D /* trace.serial.cpp in Sources */,
+				8401172D152D6F6C00B07E4D /* main.m in Sources */,
+				8401172E152D6F6C00B07E4D /* OpenGLView.m in Sources */,
+				8401172F152D6F6C00B07E4D /* tbbAppDelegate.m in Sources */,
+				84011730152D6F6C00B07E4D /* macvideo.cpp in Sources */,
+				84011731152D6F6C00B07E4D /* api.cpp in Sources */,
+				84011732152D6F6C00B07E4D /* apigeom.cpp in Sources */,
+				84011733152D6F6C00B07E4D /* apitrigeom.cpp in Sources */,
+				84011734152D6F6C00B07E4D /* bndbox.cpp in Sources */,
+				84011735152D6F6C00B07E4D /* box.cpp in Sources */,
+				84011736152D6F6C00B07E4D /* camera.cpp in Sources */,
+				84011737152D6F6C00B07E4D /* coordsys.cpp in Sources */,
+				84011738152D6F6C00B07E4D /* cylinder.cpp in Sources */,
+				84011739152D6F6C00B07E4D /* extvol.cpp in Sources */,
+				8401173A152D6F6C00B07E4D /* global.cpp in Sources */,
+				8401173B152D6F6C00B07E4D /* grid.cpp in Sources */,
+				8401173C152D6F6C00B07E4D /* imageio.cpp in Sources */,
+				8401173D152D6F6C00B07E4D /* imap.cpp in Sources */,
+				8401173E152D6F6C00B07E4D /* intersect.cpp in Sources */,
+				8401173F152D6F6C00B07E4D /* jpeg.cpp in Sources */,
+				84011740152D6F6C00B07E4D /* light.cpp in Sources */,
+				84011741152D6F6C00B07E4D /* main.cpp in Sources */,
+				84011742152D6F6C00B07E4D /* objbound.cpp in Sources */,
+				84011743152D6F6C00B07E4D /* parse.cpp in Sources */,
+				84011744152D6F6C00B07E4D /* plane.cpp in Sources */,
+				84011745152D6F6C00B07E4D /* ppm.cpp in Sources */,
+				84011746152D6F6C00B07E4D /* pthread.cpp in Sources */,
+				84011747152D6F6C00B07E4D /* quadric.cpp in Sources */,
+				84011748152D6F6C00B07E4D /* render.cpp in Sources */,
+				84011749152D6F6C00B07E4D /* ring.cpp in Sources */,
+				8401174A152D6F6C00B07E4D /* shade.cpp in Sources */,
+				8401174B152D6F6C00B07E4D /* sphere.cpp in Sources */,
+				8401174C152D6F6C00B07E4D /* tachyon_video.cpp in Sources */,
+				8401174D152D6F6C00B07E4D /* texture.cpp in Sources */,
+				8401174E152D6F6C00B07E4D /* tgafile.cpp in Sources */,
+				8401174F152D6F6C00B07E4D /* trace_rest.cpp in Sources */,
+				84011750152D6F6C00B07E4D /* triangle.cpp in Sources */,
+				84011751152D6F6C00B07E4D /* ui.cpp in Sources */,
+				84011752152D6F6C00B07E4D /* util.cpp in Sources */,
+				84011753152D6F6C00B07E4D /* vector.cpp in Sources */,
+				84011754152D6F6C00B07E4D /* vol.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		A1F58D8F0B8DF03600073279 /* Sources */ = {
+		84011765152D6F8400B07E4D /* 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 */,
-				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 */,
-				A1F591310B8DF81800073279 /* vol.cpp in Sources */,
-				A1F5915E0B8DF94400073279 /* macvideo.cpp in Sources */,
-				EA135ECD13123E2200807847 /* main.cpp in Sources */,
-				EA135ECE13123E2200807847 /* tachyon_video.cpp in Sources */,
+				840117A2152D701A00B07E4D /* trace.tbb1d.cpp in Sources */,
+				84011766152D6F8400B07E4D /* main.m in Sources */,
+				84011767152D6F8400B07E4D /* OpenGLView.m in Sources */,
+				84011768152D6F8400B07E4D /* tbbAppDelegate.m in Sources */,
+				84011769152D6F8400B07E4D /* macvideo.cpp in Sources */,
+				8401176A152D6F8400B07E4D /* api.cpp in Sources */,
+				8401176B152D6F8400B07E4D /* apigeom.cpp in Sources */,
+				8401176C152D6F8400B07E4D /* apitrigeom.cpp in Sources */,
+				8401176D152D6F8400B07E4D /* bndbox.cpp in Sources */,
+				8401176E152D6F8400B07E4D /* box.cpp in Sources */,
+				8401176F152D6F8400B07E4D /* camera.cpp in Sources */,
+				84011770152D6F8400B07E4D /* coordsys.cpp in Sources */,
+				84011771152D6F8400B07E4D /* cylinder.cpp in Sources */,
+				84011772152D6F8400B07E4D /* extvol.cpp in Sources */,
+				84011773152D6F8400B07E4D /* global.cpp in Sources */,
+				84011774152D6F8400B07E4D /* grid.cpp in Sources */,
+				84011775152D6F8400B07E4D /* imageio.cpp in Sources */,
+				84011776152D6F8400B07E4D /* imap.cpp in Sources */,
+				84011777152D6F8400B07E4D /* intersect.cpp in Sources */,
+				84011778152D6F8400B07E4D /* jpeg.cpp in Sources */,
+				84011779152D6F8400B07E4D /* light.cpp in Sources */,
+				8401177A152D6F8400B07E4D /* main.cpp in Sources */,
+				8401177B152D6F8400B07E4D /* objbound.cpp in Sources */,
+				8401177C152D6F8400B07E4D /* parse.cpp in Sources */,
+				8401177D152D6F8400B07E4D /* plane.cpp in Sources */,
+				8401177E152D6F8400B07E4D /* ppm.cpp in Sources */,
+				8401177F152D6F8400B07E4D /* pthread.cpp in Sources */,
+				84011780152D6F8400B07E4D /* quadric.cpp in Sources */,
+				84011781152D6F8400B07E4D /* render.cpp in Sources */,
+				84011782152D6F8400B07E4D /* ring.cpp in Sources */,
+				84011783152D6F8400B07E4D /* shade.cpp in Sources */,
+				84011784152D6F8400B07E4D /* sphere.cpp in Sources */,
+				84011785152D6F8400B07E4D /* tachyon_video.cpp in Sources */,
+				84011786152D6F8400B07E4D /* texture.cpp in Sources */,
+				84011787152D6F8400B07E4D /* tgafile.cpp in Sources */,
+				84011788152D6F8400B07E4D /* trace_rest.cpp in Sources */,
+				84011789152D6F8400B07E4D /* triangle.cpp in Sources */,
+				8401178A152D6F8400B07E4D /* ui.cpp in Sources */,
+				8401178B152D6F8400B07E4D /* util.cpp in Sources */,
+				8401178C152D6F8400B07E4D /* vector.cpp in Sources */,
+				8401178D152D6F8400B07E4D /* vol.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		A1F58D990B8DF06700073279 /* Sources */ = {
+		84D0174D1527431F0008A4E0 /* 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 */,
-				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 */,
-				A1F590E70B8DF81800073279 /* vol.cpp in Sources */,
-				A1F591600B8DF94400073279 /* macvideo.cpp in Sources */,
-				EA135ECB13123E2200807847 /* main.cpp in Sources */,
-				EA135ECC13123E2200807847 /* tachyon_video.cpp in Sources */,
+				84B8DA77152CA90100D59B95 /* main.m in Sources */,
+				84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */,
+				84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */,
+				84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */,
+				840116E1152CBBF600B07E4D /* api.cpp in Sources */,
+				840116E2152CBBF600B07E4D /* apigeom.cpp in Sources */,
+				840116E3152CBBF600B07E4D /* apitrigeom.cpp in Sources */,
+				840116E4152CBBF600B07E4D /* bndbox.cpp in Sources */,
+				840116E5152CBBF600B07E4D /* box.cpp in Sources */,
+				840116E6152CBBF600B07E4D /* camera.cpp in Sources */,
+				840116E7152CBBF600B07E4D /* coordsys.cpp in Sources */,
+				840116E8152CBBF600B07E4D /* cylinder.cpp in Sources */,
+				840116E9152CBBF600B07E4D /* extvol.cpp in Sources */,
+				840116EA152CBBF600B07E4D /* global.cpp in Sources */,
+				840116EB152CBBF600B07E4D /* grid.cpp in Sources */,
+				840116EC152CBBF600B07E4D /* imageio.cpp in Sources */,
+				840116ED152CBBF600B07E4D /* imap.cpp in Sources */,
+				840116EE152CBBF600B07E4D /* intersect.cpp in Sources */,
+				840116EF152CBBF600B07E4D /* jpeg.cpp in Sources */,
+				840116F0152CBBF600B07E4D /* light.cpp in Sources */,
+				840116F1152CBBF600B07E4D /* main.cpp in Sources */,
+				840116F2152CBBF600B07E4D /* objbound.cpp in Sources */,
+				840116F3152CBBF600B07E4D /* parse.cpp in Sources */,
+				840116F4152CBBF600B07E4D /* plane.cpp in Sources */,
+				840116F5152CBBF600B07E4D /* ppm.cpp in Sources */,
+				840116F6152CBBF600B07E4D /* pthread.cpp in Sources */,
+				840116F7152CBBF600B07E4D /* quadric.cpp in Sources */,
+				840116F8152CBBF600B07E4D /* render.cpp in Sources */,
+				840116F9152CBBF600B07E4D /* ring.cpp in Sources */,
+				840116FA152CBBF600B07E4D /* shade.cpp in Sources */,
+				840116FB152CBBF600B07E4D /* sphere.cpp in Sources */,
+				840116FC152CBBF600B07E4D /* tachyon_video.cpp in Sources */,
+				840116FD152CBBF600B07E4D /* texture.cpp in Sources */,
+				840116FE152CBBF600B07E4D /* tgafile.cpp in Sources */,
+				840116FF152CBBF600B07E4D /* trace_rest.cpp in Sources */,
+				84011707152CBBF600B07E4D /* triangle.cpp in Sources */,
+				84011708152CBBF600B07E4D /* ui.cpp in Sources */,
+				84011709152CBBF600B07E4D /* util.cpp in Sources */,
+				8401170A152CBBF600B07E4D /* vector.cpp in Sources */,
+				8401170B152CBBF600B07E4D /* vol.cpp in Sources */,
+				8401172A152D6E3E00B07E4D /* trace.tbb.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXVariantGroup section */
-		02345980000FD03B11CA0E72 /* main.nib */ = {
+		84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				84B8DA7D152CA97B00D59B95 /* en */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = {
 			isa = PBXVariantGroup;
 			children = (
-				1870340FFE93FCAF11CA0CD7 /* English */,
+				84B8DA7F152CA97B00D59B95 /* en */,
 			);
-			name = main.nib;
+			name = MainMenu.xib;
 			sourceTree = "<group>";
 		};
 /* End PBXVariantGroup section */
 
 /* Begin XCBuildConfiguration section */
-		A1F58D960B8DF03600073279 /* Debug */ = {
+		8401175F152D6F6C00B07E4D /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
-				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"$(SOURCE_ROOT)/../dat/balls.dat\"";
-				GCC_VERSION = "";
-				HEADER_SEARCH_PATHS = ../../../../include;
-				IBC_STRIP_NIBS = NO;
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-				);
-				PRODUCT_NAME = "tachyon-tbb1d";
-				SDKROOT = macosx10.6;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\"";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = tachyon.serial;
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
 				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
 			};
 			name = Debug;
 		};
-		A1F58D970B8DF03600073279 /* Release */ = {
+		84011760152D6F6C00B07E4D /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
-				COPY_PHASE_STRIP = YES;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
-				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"$(SOURCE_ROOT)/../dat/balls.dat\"";
-				GCC_VERSION = "";
-				HEADER_SEARCH_PATHS = ../../../../include;
-				IBC_STRIP_NIBS = NO;
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
 				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
+					"\"$(SRCROOT)/../../../../lib\"",
+					"\"$(SRCROOT)\"",
 				);
-				PRODUCT_NAME = "tachyon-tbb1d";
-				SDKROOT = macosx10.6;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = tachyon.serial;
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
 				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
-		A1F58DA00B8DF06700073279 /* Debug */ = {
+		84011798152D6F8400B07E4D /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
-				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"$(SOURCE_ROOT)/../dat/balls.dat\"";
-				GCC_VERSION = "";
-				IBC_STRIP_NIBS = NO;
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				PRODUCT_NAME = "tachyon-serial";
-				SDKROOT = macosx10.6;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\"";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = tachyon.tbb1d;
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
 				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
 			};
 			name = Debug;
 		};
-		A1F58DA10B8DF06700073279 /* Release */ = {
+		84011799152D6F8400B07E4D /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
-				COPY_PHASE_STRIP = YES;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
-				GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"$(SOURCE_ROOT)/../dat/balls.dat\"";
-				GCC_VERSION = "";
-				IBC_STRIP_NIBS = NO;
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				PRODUCT_NAME = "tachyon-serial";
-				SDKROOT = macosx10.6;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"\"$(SRCROOT)/../../../../lib\"",
+					"\"$(SRCROOT)\"",
+				);
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = tachyon.tbb1d;
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
 				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
 			};
 			name = Release;
 		};
-		C0E91AC608A95435008D54AB /* Debug */ = {
+		84D01770152743200008A4E0 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = i386;
+				ALWAYS_SEARCH_USER_PATHS = YES;
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = YES;
 				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = "";
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = tachyon.pch;
-				GCC_VERSION = "";
-				HEADER_SEARCH_PATHS = ../../../../include;
-				IBC_STRIP_NIBS = NO;
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
 					"$(inherited)",
-					../../../../lib,
 				);
-				PRODUCT_NAME = "tachyon-tbb";
-				SDKROOT = macosx10.6;
-				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
 			};
 			name = Debug;
 		};
-		C0E91AC708A95435008D54AB /* Release */ = {
+		84D01771152743200008A4E0 /* 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;
-				GCC_VERSION = "";
-				HEADER_SEARCH_PATHS = ../../../../include;
-				IBC_STRIP_NIBS = NO;
-				INFOPLIST_FILE = Info.plist;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-				);
-				PRODUCT_NAME = "tachyon-tbb";
-				SDKROOT = macosx10.6;
-				WRAPPER_EXTENSION = app;
-				ZERO_LINK = NO;
+				ALWAYS_SEARCH_USER_PATHS = YES;
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				SDKROOT = macosx;
 			};
 			name = Release;
 		};
-		C0E91ACA08A95435008D54AB /* Debug */ = {
+		84D01773152743200008A4E0 /* 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=\"$(SOURCE_ROOT)/../dat/balls.dat\"";
-				GCC_VERSION = "";
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IBC_STRIP_NIBS = NO;
-				MACOSX_DEPLOYMENT_TARGET = 10.6;
-				SDKROOT = macosx10.6;
-				SYMROOT = "/tmp/tbb-$(USER)";
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\"";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
 			};
 			name = Debug;
 		};
-		C0E91ACB08A95435008D54AB /* Release */ = {
+		84D01774152743200008A4E0 /* 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=\"$(SOURCE_ROOT)/../dat/balls.dat\"";
-				GCC_VERSION = "";
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IBC_STRIP_NIBS = NO;
-				MACOSX_DEPLOYMENT_TARGET = 10.6;
-				SDKROOT = macosx10.6;
-				SYMROOT = "/tmp/tbb-$(USER)";
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"\"$(SRCROOT)/../../../../lib\"",
+					"\"$(SRCROOT)\"",
+				);
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
 			};
 			name = Release;
 		};
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
-		A1F58D950B8DF03600073279 /* Build configuration list for PBXNativeTarget "tachyon-tbb1d" */ = {
+		8401175E152D6F6C00B07E4D /* Build configuration list for PBXNativeTarget "tachyon.serial" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
-				A1F58D960B8DF03600073279 /* Debug */,
-				A1F58D970B8DF03600073279 /* Release */,
+				8401175F152D6F6C00B07E4D /* Debug */,
+				84011760152D6F6C00B07E4D /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		A1F58D9F0B8DF06700073279 /* Build configuration list for PBXNativeTarget "tachyon-serial" */ = {
+		84011797152D6F8400B07E4D /* Build configuration list for PBXNativeTarget "tachyon.tbb1d" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
-				A1F58DA00B8DF06700073279 /* Debug */,
-				A1F58DA10B8DF06700073279 /* Release */,
+				84011798152D6F8400B07E4D /* Debug */,
+				84011799152D6F8400B07E4D /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "tachyon-tbb" */ = {
+		84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "tachyon" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
-				C0E91AC608A95435008D54AB /* Debug */,
-				C0E91AC708A95435008D54AB /* Release */,
+				84D01770152743200008A4E0 /* Debug */,
+				84D01771152743200008A4E0 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "tachyon" */ = {
+		84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tachyon.tbb" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
-				C0E91ACA08A95435008D54AB /* Debug */,
-				C0E91ACB08A95435008D54AB /* Release */,
+				84D01773152743200008A4E0 /* Debug */,
+				84D01774152743200008A4E0 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
 /* End XCConfigurationList section */
 	};
-	rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
+	rootObject = 84D017481527431F0008A4E0 /* Project object */;
 }
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.serial.xcscheme b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.serial.xcscheme
new file mode 100644
index 0000000..b1c8534
--- /dev/null
+++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.serial.xcscheme
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "8401172B152D6F6C00B07E4D"
+               BuildableName = "tachyon.serial.app"
+               BlueprintName = "tachyon.serial"
+               ReferencedContainer = "container:tachyon.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "8401172B152D6F6C00B07E4D"
+            BuildableName = "tachyon.serial.app"
+            BlueprintName = "tachyon.serial"
+            ReferencedContainer = "container:tachyon.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Debug"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "NO"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "8401172B152D6F6C00B07E4D"
+            BuildableName = "tachyon.serial.app"
+            BlueprintName = "tachyon.serial"
+            ReferencedContainer = "container:tachyon.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <CommandLineArguments>
+         <CommandLineArgument
+            argument = "$(SRCROOT)/../dat/balls3.dat"
+            isEnabled = "YES">
+         </CommandLineArgument>
+      </CommandLineArguments>
+      <EnvironmentVariables>
+         <EnvironmentVariable
+            key = "DYLD_LIBRARY_PATH"
+            value = "$(SRCROOT)/../../../../lib"
+            isEnabled = "YES">
+         </EnvironmentVariable>
+      </EnvironmentVariables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "8401172B152D6F6C00B07E4D"
+            BuildableName = "tachyon.serial.app"
+            BlueprintName = "tachyon.serial"
+            ReferencedContainer = "container:tachyon.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.xcscheme b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.xcscheme
new file mode 100644
index 0000000..ccd129c
--- /dev/null
+++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.xcscheme
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "84D017501527431F0008A4E0"
+               BuildableName = "tbbExample.app"
+               BlueprintName = "tbbExample"
+               ReferencedContainer = "container:tbbExample.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tachyon.tbb.app"
+            BlueprintName = "tachyon.tbb"
+            ReferencedContainer = "container:tachyon.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      customWorkingDirectory = "/tmp"
+      buildConfiguration = "Debug"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "NO"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tachyon.tbb.app"
+            BlueprintName = "tachyon.tbb"
+            ReferencedContainer = "container:tachyon.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <CommandLineArguments>
+         <CommandLineArgument
+            argument = "$(SRCROOT)/../dat/balls3.dat"
+            isEnabled = "YES">
+         </CommandLineArgument>
+      </CommandLineArguments>
+      <EnvironmentVariables>
+         <EnvironmentVariable
+            key = "DYLD_LIBRARY_PATH"
+            value = "$(SRCROOT)/../../../../lib"
+            isEnabled = "YES">
+         </EnvironmentVariable>
+      </EnvironmentVariables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample"
+            ReferencedContainer = "container:tbbExample.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb1d.xcscheme b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb1d.xcscheme
new file mode 100644
index 0000000..4cb4aad
--- /dev/null
+++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb1d.xcscheme
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "84D017501527431F0008A4E0"
+               BuildableName = "tbbExample.app"
+               BlueprintName = "tbbExample"
+               ReferencedContainer = "container:tbbExample.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84011764152D6F8400B07E4D"
+            BuildableName = "tachyon.tbb1d.app"
+            BlueprintName = "tachyon.tbb1d"
+            ReferencedContainer = "container:tachyon.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      customWorkingDirectory = "/tmp"
+      buildConfiguration = "Debug"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "NO"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84011764152D6F8400B07E4D"
+            BuildableName = "tachyon.tbb1d.app"
+            BlueprintName = "tachyon.tbb1d"
+            ReferencedContainer = "container:tachyon.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <CommandLineArguments>
+         <CommandLineArgument
+            argument = "$(SRCROOT)/../dat/balls3.dat"
+            isEnabled = "YES">
+         </CommandLineArgument>
+      </CommandLineArguments>
+      <EnvironmentVariables>
+         <EnvironmentVariable
+            key = "DYLD_LIBRARY_PATH"
+            value = "$(SRCROOT)/../../../../lib"
+            isEnabled = "YES">
+         </EnvironmentVariable>
+      </EnvironmentVariables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample"
+            ReferencedContainer = "container:tbbExample.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/examples/parallel_reduce/convex_hull/Makefile b/examples/parallel_reduce/convex_hull/Makefile
index 5ac16c2..5b1cd76 100644
--- a/examples/parallel_reduce/convex_hull/Makefile
+++ b/examples/parallel_reduce/convex_hull/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 9abcb07..f354d02 100644
--- a/examples/parallel_reduce/convex_hull/Makefile.windows
+++ b/examples/parallel_reduce/convex_hull/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 cd49cba..babd81f 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 d8a8959..b83f34d 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 ec46c44..810f2aa 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 eb39b12..f1d1083 100644
--- a/examples/parallel_reduce/convex_hull/index.html
+++ b/examples/parallel_reduce/convex_hull/index.html
@@ -19,10 +19,10 @@ Parallel version of convex hull algorithm (quick hull).
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example.
-</DL>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the 
+    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X 
+    systems only).</DL>
 
 <H2>To Build</H2>
 General build directions can be found <A HREF=../../index.html#build>here</A>.
@@ -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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/parallel_reduce/index.html b/examples/parallel_reduce/index.html
index f484c4e..c25a0bb 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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/parallel_reduce/primes/Makefile b/examples/parallel_reduce/primes/Makefile
index 5d7730f..9b6f06e 100644
--- a/examples/parallel_reduce/primes/Makefile
+++ b/examples/parallel_reduce/primes/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -34,6 +34,18 @@ ifneq (,$(shell which icc 2>/dev/null))
 CXX=icc
 endif # icc
 
+ifeq ($(offload), mic)
+override CXXFLAGS += -D__TBB_MIC=1
+endif
+
+ifeq ($(CXX), icc)
+TBBLIB = -tbb
+TBBLIB_DEBUG = -tbb
+else
+TBBLIB = -ltbb
+TBBLIB_DEBUG = -ltbb_debug
+endif
+
 ifeq ($(shell uname), Linux)
 LIBS+= -lrt 
 endif
@@ -41,10 +53,10 @@ endif
 all:	release test
 
 release: main.cpp primes.cpp 
-	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB) $(LIBS)
 
 debug: main.cpp primes.cpp
-	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB_DEBUG) $(LIBS)
 
 clean:
 	$(RM) $(PROG) *.o *.d
diff --git a/examples/parallel_reduce/primes/Makefile.windows b/examples/parallel_reduce/primes/Makefile.windows
index a901b22..a5c813b 100644
--- a/examples/parallel_reduce/primes/Makefile.windows
+++ b/examples/parallel_reduce/primes/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 2967b0d..39c1d36 100644
--- a/examples/parallel_reduce/primes/index.html
+++ b/examples/parallel_reduce/primes/index.html
@@ -2,7 +2,10 @@
 <BODY>
 
 <H2>Overview</H2>
-Parallel version of the Sieve of Eratosthenes.
+<DL>
+<DT>Parallel version of the Sieve of Eratosthenes.
+<DT>The example can be built in the offload version to run on Intel&reg Many Integrated Core (Intel&reg MIC) Architecture based coprocessor (see <A HREF=../../index.html#build_4>build instructions</A>).
+</DL>
 
 <H2>Files</H2>
 <DL>
@@ -19,13 +22,14 @@ Parallel version of the Sieve of Eratosthenes.
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example.
-</DL>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the 
+    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X 
+    systems only).</DL>
 
 <H2>To Build</H2>
 General build directions can be found <A HREF=../../index.html#build>here</A>.
+<A HREF=../../index.html#build_4>here</A>
 
 <H2>Usage</H2>
 <DL>
@@ -48,7 +52,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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/parallel_reduce/primes/main.cpp b/examples/parallel_reduce/primes/main.cpp
index 36a1b84..510ec97 100644
--- a/examples/parallel_reduce/primes/main.cpp
+++ b/examples/parallel_reduce/primes/main.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -55,10 +55,17 @@ struct RunOptions{
     {}
 };
 
+int do_get_default_num_threads() {
+    int threads;
+    #if __TBB_MIC
+    #pragma offload target(mic) out(threads)
+    #endif // __TBB_MIC
+    threads = tbb::task_scheduler_init::default_num_threads();
+    return threads;
+}
+
 int get_default_num_threads() {
-    static int threads = 0;
-    if ( threads == 0 )
-        threads = tbb::task_scheduler_init::default_num_threads();
+    static int threads = do_get_default_num_threads();
     return threads;
 }
 
@@ -95,9 +102,15 @@ int main( int argc, const char* argv[] ) {
             NumberType count = 0;
             NumberType n = options.n;
             if( p==0 ) {
+                #if __TBB_MIC
+                #pragma offload target(mic) in(n) out(count)
+                #endif // __TBB_MIC
                 count = SerialCountPrimes(n);
             } else {
                 NumberType grainSize = options.grainSize;
+                #if __TBB_MIC
+                #pragma offload target(mic) in(n, p, grainSize) out(count)
+                #endif // __TBB_MIC
                 count = ParallelCountPrimes(n, p, grainSize);
             }
             tbb::tick_count iterationEndMark = tbb::tick_count::now();
diff --git a/examples/parallel_reduce/primes/primes.cpp b/examples/parallel_reduce/primes/primes.cpp
index b6c9882..414eff5 100644
--- a/examples/parallel_reduce/primes/primes.cpp
+++ b/examples/parallel_reduce/primes/primes.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,6 +34,9 @@
 
 #include "primes.h"
 
+#if __TBB_MIC
+#pragma offload_attribute (target(mic))
+#endif // __TBB_MIC
 #include <algorithm>
 #include <cassert>
 #include <cstdio>
diff --git a/examples/parallel_reduce/primes/primes.h b/examples/parallel_reduce/primes/primes.h
index 3a6fdf4..b763a14 100644
--- a/examples/parallel_reduce/primes/primes.h
+++ b/examples/parallel_reduce/primes/primes.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,6 +29,9 @@
 #ifndef PRIMES_H_
 #define PRIMES_H_
 
+#if __TBB_MIC
+#pragma offload_attribute (push,target(mic))
+#endif // __TBB_MIC
 
 #include "tbb/task_scheduler_init.h"
 #include <cstddef>
@@ -42,5 +45,8 @@ NumberType SerialCountPrimes( NumberType n);
 /** This is the parallel version. */
 NumberType ParallelCountPrimes( NumberType n, int numberOfThreads= tbb::task_scheduler_init::automatic, NumberType grainSize = 1000);
 
+#if __TBB_MIC
+#pragma offload_attribute (pop)
+#endif // __TBB_MIC
 
 #endif /* PRIMES_H_ */
diff --git a/examples/pipeline/index.html b/examples/pipeline/index.html
index d5079c9..20c213c 100644
--- a/examples/pipeline/index.html
+++ b/examples/pipeline/index.html
@@ -13,7 +13,7 @@ This directory has examples of the template <code>pipeline</code>.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/pipeline/square/Makefile b/examples/pipeline/square/Makefile
index 67f2fe5..44e2850 100644
--- a/examples/pipeline/square/Makefile
+++ b/examples/pipeline/square/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 5a11a82..747e143 100644
--- a/examples/pipeline/square/Makefile.windows
+++ b/examples/pipeline/square/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 8223294..b870952 100644
--- a/examples/pipeline/square/gen_input.cpp
+++ b/examples/pipeline/square/gen_input.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 32ce6ab..af17a97 100644
--- a/examples/pipeline/square/index.html
+++ b/examples/pipeline/square/index.html
@@ -18,10 +18,10 @@ containing decimal integers in text format, and changes each to its square.
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example.
-</DL>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the 
+    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X 
+    systems only).</DL>
 
 <H2>To Build</H2>
 General build directions can be found <A HREF=../../index.html#build>here</A>.
@@ -61,7 +61,7 @@ Two additional targets for this example:
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/pipeline/square/square.cpp b/examples/pipeline/square/square.cpp
index 176b80d..96c39eb 100644
--- a/examples/pipeline/square/square.cpp
+++ b/examples/pipeline/square/square.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/task/index.html b/examples/task/index.html
index 3acdd99..75605d7 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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/task/tree_sum/Makefile b/examples/task/tree_sum/Makefile
index 18fcb50..a9681e1 100644
--- a/examples/task/tree_sum/Makefile
+++ b/examples/task/tree_sum/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 f9f97be..08ecf03 100644
--- a/examples/task/tree_sum/Makefile.windows
+++ b/examples/task/tree_sum/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 b74b391..7e81e8d 100644
--- a/examples/task/tree_sum/OptimizedParallelSumTree.cpp
+++ b/examples/task/tree_sum/OptimizedParallelSumTree.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -53,9 +53,9 @@ public:
                 recycle_as_continuation();
                 is_continuation = true;
                 set_ref_count( (a!=NULL)+(b!=NULL) );
-                if( a )
+                if( a ) {
                     if( b ) spawn(*b);
-                else 
+                } else 
                     a = b;
                 next = a;
             }
diff --git a/examples/task/tree_sum/SerialSumTree.cpp b/examples/task/tree_sum/SerialSumTree.cpp
index 2fa7314..da6c2b5 100644
--- a/examples/task/tree_sum/SerialSumTree.cpp
+++ b/examples/task/tree_sum/SerialSumTree.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 13bfb9a..a7d68ee 100644
--- a/examples/task/tree_sum/SimpleParallelSumTree.cpp
+++ b/examples/task/tree_sum/SimpleParallelSumTree.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/task/tree_sum/TreeMaker.h b/examples/task/tree_sum/TreeMaker.h
index 64fc448..90a1cd3 100644
--- a/examples/task/tree_sum/TreeMaker.h
+++ b/examples/task/tree_sum/TreeMaker.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 d03efb0..7191c3b 100644
--- a/examples/task/tree_sum/common.h
+++ b/examples/task/tree_sum/common.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 0c7d5ff..c0c8f15 100644
--- a/examples/task/tree_sum/index.html
+++ b/examples/task/tree_sum/index.html
@@ -10,7 +10,7 @@ is to teach how to use the raw task interface, so the computation is
 deliberately trivial.
 <P>
 The performance of this example is better when objects are allocated
-by the Threading Building Blocks scalable_allocator instead of
+by the scalable_allocator instead of
 the default "operator new".  The reason is that the scalable_allocator typically
 packs small objects more tightly than the default "operator new", resulting in
 a smaller memory footprint, and thus more efficient use of cache and virtual memory.
@@ -36,10 +36,10 @@ In addition, the scalable_allocator performs better for multi-threaded allocatio
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example.
-</DL>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the 
+    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X 
+    systems only).</DL>
 
 <H2>To Build</H2>
 General build directions can be found <A HREF=../../index.html#build>here</A>.
@@ -51,10 +51,10 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
 <DD>Prints the help for command line options
 <DT><TT>tree_sum [<I>n-of-threads</I>=value] [<I>number-of-nodes</I>=value] [<I>silent</I>] [<I>stdmalloc</I>]</TT>
 <DT><TT>tree_sum [<I>n-of-threads</I> [<I>number-of-nodes</I>]] [<I>silent</I>] [<I>stdmalloc</I>]</TT> 
-<DD><I>n-of-threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>], where low and optional high are non-negative integers or 'auto' for the TBB default.<BR>
+<DD><I>n-of-threads</I> is the number of threads to use; a range of the form <I>low</I>[:<I>high</I>], where low and optional high are non-negative integers or 'auto' for the default.<BR>
     <I>number-of-nodes</I> is the number of nodes in the tree.<BR>
     <I>silent</I> - no output except elapsed time.<BR>
-    <I>stdmalloc</I> - causes the default "operator new" to be used for memory allocations instead of the TBB scalable_allocator.<BR>
+    <I>stdmalloc</I> - causes the default "operator new" to be used for memory allocations instead of the scalable_allocator.<BR>
 
 <DT>To run a short version of this example, e.g., for use with Intel® Parallel Inspector:
 <DD>Build a <I>debug</I> version of the example
@@ -65,7 +65,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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/task/tree_sum/main.cpp b/examples/task/tree_sum/main.cpp
index f7c4d5d..92c8fc0 100644
--- a/examples/task/tree_sum/main.cpp
+++ b/examples/task/tree_sum/main.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/task_group/index.html b/examples/task_group/index.html
index 7f3ec4e..9a93ddb 100644
--- a/examples/task_group/index.html
+++ b/examples/task_group/index.html
@@ -13,7 +13,7 @@ This directory has examples of how to use task_groups.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/task_group/sudoku/Makefile b/examples/task_group/sudoku/Makefile
index 5c45df4..12702a7 100644
--- a/examples/task_group/sudoku/Makefile
+++ b/examples/task_group/sudoku/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -33,9 +33,19 @@ PERF_RUN_ARGS=auto input1 silent
 ifneq (,$(shell which icc 2>/dev/null))
 CXX=icc
 endif # which icc
-ifeq ($(CXX),icc)
-CXX0XFLAGS=-std=c++0x -D_TBB_CPP0X
-endif # icc
+
+ifeq ($(offload), mic)
+override CXXFLAGS += -D__TBB_MIC=1
+endif
+
+ifeq ($(CXX), icc)
+TBBLIB = -tbb
+TBBLIB_DEBUG = -tbb
+CXX0XFLAGS?=-std=c++0x -D_TBB_CPP0X
+else
+TBBLIB = -ltbb
+TBBLIB_DEBUG = -ltbb_debug
+endif
 
 ifeq ($(shell uname), Linux)
 LIBS+= -lrt 
@@ -44,10 +54,10 @@ endif
 all:	release test
 
 release: *.cpp
-	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS) $(CXX0XFLAGS)
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB) $(LIBS) $(CXX0XFLAGS)
 
 debug: *.cpp
-	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) $(CXX0XFLAGS)
+	$(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB_DEBUG) $(LIBS) $(CXX0XFLAGS)
 
 clean:
 	$(RM) $(PROG) *.o *.d
diff --git a/examples/task_group/sudoku/Makefile.windows b/examples/task_group/sudoku/Makefile.windows
index 0a2d2c6..b525cdc 100644
--- a/examples/task_group/sudoku/Makefile.windows
+++ b/examples/task_group/sudoku/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/task_group/sudoku/index.html b/examples/task_group/sudoku/index.html
index 4967344..dca0111 100644
--- a/examples/task_group/sudoku/index.html
+++ b/examples/task_group/sudoku/index.html
@@ -2,11 +2,14 @@
 <BODY>
 
 <H2>Overview</H2>
-This directory contains a simple example that finds all solutions to a
+<DL>
+<DT>This directory contains a simple example that finds all solutions to a
 Sudoku board. It uses a straightforward state-space search algorithm
 that exhibits OR-parallelism.  It can be optionally run until it
 obtains just the first solution. The point of the example is to teach
 how to use the task_group interface.
+<DT>The example can be built in the offload version to run on Intel&reg Many Integrated Core (Intel&reg MIC) Architecture based coprocessor (see <A HREF=../../index.html#build_4>build instructions</A>).
+</DL>
 
 <H2>Files</H2>
 <DL>
@@ -32,9 +35,9 @@ how to use the task_group interface.
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example with the Intel® C++ compiler.
+<DD>Contains Microsoft* Visual Studio* 2008 workspace for building and running the example with the Intel® C++ compiler (Windows* systems only).
 <DT><A HREF="xcode">xcode</A>
-<DD>Contains Mac OS* Xcode* workspace for building and running the example.
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X systems only).
 </DL>
 
 <H2>To Build</H2>
@@ -63,7 +66,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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/task_group/sudoku/sudoku.cpp b/examples/task_group/sudoku/sudoku.cpp
index 5e71923..d241b80 100644
--- a/examples/task_group/sudoku/sudoku.cpp
+++ b/examples/task_group/sudoku/sudoku.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,9 @@
     the GNU General Public License.
 */
 
+#if __TBB_MIC
+#pragma offload_attribute (push,target(mic))
+#endif // __TBB_MIC
 
 #include <cstdio>
 #include <cstdlib>
@@ -34,11 +37,23 @@
 #include "tbb/tick_count.h"
 #include "tbb/task_scheduler_init.h"
 #include "tbb/task_group.h"
+
+#if __INTEL_COMPILER
+// Suppress "std::auto_prt<> is deprecated" warning
+// TODO: replace auto_ptr with unique_ptr for compilers supporting C++11
+#pragma warning(disable: 1478)
+#endif
 #include "../../common/utility/utility.h"
 
 #pragma warning(disable: 4996)
 
-#define __TBB_LAMBDAS_PRESENT  ( _MSC_VER >= 1600 && !__INTEL_COMPILER || __INTEL_COMPILER > 1100 && _TBB_CPP0X )
+#if __INTEL_COMPILER
+#define __TBB_LAMBDAS_PRESENT ( _TBB_CPP0X && __INTEL_COMPILER > 1100 )
+#elif __GNUC__
+#define __TBB_LAMBDAS_PRESENT ( _TBB_CPP0X && __TBB_GCC_VERSION >= 40500 )
+#elif _MSC_VER
+#define __TBB_LAMBDAS_PRESENT ( _MSC_VER>=1600 )
+#endif
 
 const unsigned BOARD_SIZE=81;
 const unsigned BOARD_DIM=9;
@@ -264,11 +279,21 @@ unsigned solve(int p) {
     return nSols;
 }
 
+#if __TBB_MIC
+#pragma offload_attribute (pop)
+#endif // __TBB_MIC
+
+int do_get_default_num_threads() {
+    int threads;
+    #if __TBB_MIC
+    #pragma offload target(mic) out(threads)
+    #endif // __TBB_MIC
+    threads = tbb::task_scheduler_init::default_num_threads();
+    return threads;
+}
 
 int get_default_num_threads() {
-    static int threads = 0;
-    if ( threads == 0 )
-        threads = tbb::task_scheduler_init::default_num_threads();
+    static int threads = do_get_default_num_threads();
     return threads;
 }
 
@@ -298,7 +323,14 @@ int main(int argc, char *argv[]) {
         // otherwise (if file name not specified), the default statically initialized board will be used.
         for(int p = threads.first; p <= threads.last; ++p ) {
             unsigned number;
+            #if __TBB_MIC
+            #pragma offload target(mic) in(init_values, p, verbose, find_one) out(number, solve_time)
+            {
+            #endif // __TBB_MIC
             number = solve(p);
+            #if __TBB_MIC
+            }
+            #endif // __TBB_MIC
 
             if ( !silent ) {
                 if ( find_one ) {
diff --git a/examples/task_priority/fractal/Makefile b/examples/task_priority/fractal/Makefile
index a3fa126..875b02a 100644
--- a/examples/task_priority/fractal/Makefile
+++ b/examples/task_priority/fractal/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
@@ -49,16 +49,23 @@ all:	release test
 
 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)
-endif
+	mkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS
+	cp ../../common/gui/xcode/tbbExample/Info.plist $(NAME).app/Contents
+	cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents
+	cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj
+endif # Mac
 
 release: $(SOURCES) resources
-	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) -ltbb $(LIBS)
+ifeq ($(UI),mac)
+	$(CXX_UI) -O2 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES)
+endif # Mac
+	$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) -ltbb $(LIBS)
 
 debug: resources
-	$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) -ltbb_debug $(LIBS)
+ifeq ($(UI),mac)
+	$(CXX_UI) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -c $(MACUISOURCES)
+endif # Mac
+	$(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) -ltbb_debug $(LIBS)
 
 clean:
 	$(RM) $(EXE) *.o *.d
diff --git a/examples/task_priority/fractal/Makefile.windows b/examples/task_priority/fractal/Makefile.windows
index 335036a..7d9a00b 100644
--- a/examples/task_priority/fractal/Makefile.windows
+++ b/examples/task_priority/fractal/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/examples/task_priority/fractal/fractal.cpp b/examples/task_priority/fractal/fractal.cpp
index 33a4a86..518ce56 100644
--- a/examples/task_priority/fractal/fractal.cpp
+++ b/examples/task_priority/fractal/fractal.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,6 +39,7 @@
 
 video *v;
 extern bool silent;
+extern bool schedule_auto;
 extern int grain_size;
 
 color_t fractal::calc_one_pixel(int x0, int y0) {
@@ -150,8 +151,12 @@ public:
 
 void fractal::render( tbb::task_group_context &context ) {
     // run parallel_for that process the fractal area
-    tbb::parallel_for( tbb::blocked_range2d<int>(0, size_y, grain_size, 0, size_x, grain_size ), 
-            fractal_body(*this), tbb::simple_partitioner(), context);
+    if( schedule_auto )
+        tbb::parallel_for( tbb::blocked_range2d<int>(0, size_y, grain_size, 0, size_x, grain_size ),
+                fractal_body(*this), tbb::auto_partitioner(), context);
+    else
+        tbb::parallel_for( tbb::blocked_range2d<int>(0, size_y, grain_size, 0, size_x, grain_size ),
+                fractal_body(*this), tbb::simple_partitioner(), context);
 }
 
 void fractal::run( tbb::task_group_context &context ) {
diff --git a/examples/task_priority/fractal/fractal.h b/examples/task_priority/fractal/fractal.h
index de81875..f060553 100644
--- a/examples/task_priority/fractal/fractal.h
+++ b/examples/task_priority/fractal/fractal.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/task_priority/fractal/fractal_video.h b/examples/task_priority/fractal/fractal_video.h
index 2815afb..c3b8f49 100644
--- a/examples/task_priority/fractal/fractal_video.h
+++ b/examples/task_priority/fractal/fractal_video.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/examples/task_priority/fractal/index.html b/examples/task_priority/fractal/index.html
index 10bd955..7caed5e 100644
--- a/examples/task_priority/fractal/index.html
+++ b/examples/task_priority/fractal/index.html
@@ -24,9 +24,9 @@ The example also has the console mode but in this mode the priorities could not
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A>
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example (Windows* systems only).
 <DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example.
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X systems only).
 </DL>
 
 <H2>To Build</H2>
@@ -42,6 +42,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
     <I>n-of-frames</I> is a number of frames the example processes internally.<BR>
     <I>max-of-iterations</I> is a maximum number of the fractal iterations.<BR>
     <I>grain-size</I> is an optional grain size, must be a positive integer. <BR>
+    <I>use-auto-partitioner</I> - use tbb::auto_partitioner.<BR>
     <I>silent</I> - no output except elapsed time.<BR>
     <I>single</I> - process only one fractal.<BR>
 
@@ -54,7 +55,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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/task_priority/fractal/main.cpp b/examples/task_priority/fractal/main.cpp
index caf97e1..f364474 100644
--- a/examples/task_priority/fractal/main.cpp
+++ b/examples/task_priority/fractal/main.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -41,6 +41,7 @@
 
 bool silent = false;
 bool single = false;
+bool schedule_auto = false;
 int grain_size = 8;
 
 int main(int argc, char *argv[])
@@ -63,6 +64,7 @@ int main(int argc, char *argv[])
             .positional_arg(num_frames,"n-of-frames","number of frames the example processes internally")
             .positional_arg(max_iterations,"max-of-iterations","maximum number of the fractal iterations")
             .positional_arg(grain_size,"grain-size","the grain size value")
+            .arg(schedule_auto, "use-auto-partitioner", "use tbb::auto_partitioner")
             .arg(silent, "silent", "no output except elapsed time")
             .arg(single, "single", "process only one fractal")
         );
diff --git a/examples/task_priority/fractal/xcode/English.lproj/main.nib/classes.nib b/examples/task_priority/fractal/xcode/English.lproj/main.nib/classes.nib
deleted file mode 100644
index c4b887e..0000000
--- a/examples/task_priority/fractal/xcode/English.lproj/main.nib/classes.nib
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IBVersion</key>
-	<string>1</string>
-</dict>
-</plist>
diff --git a/examples/task_priority/fractal/xcode/English.lproj/main.nib/info.nib b/examples/task_priority/fractal/xcode/English.lproj/main.nib/info.nib
deleted file mode 100644
index c1c84a1..0000000
--- a/examples/task_priority/fractal/xcode/English.lproj/main.nib/info.nib
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IBFramework Version</key>
-	<string>629</string>
-	<key>IBLastKnownRelativeProjectPath</key>
-	<string>../../fractal.xcodeproj</string>
-	<key>IBOldestOS</key>
-	<integer>5</integer>
-	<key>IBOpenObjects</key>
-	<array/>
-	<key>IBSystem Version</key>
-	<string>9B18</string>
-	<key>targetFramework</key>
-	<string>IBCarbonFramework</string>
-</dict>
-</plist>
diff --git a/examples/task_priority/fractal/xcode/English.lproj/main.nib/objects.xib b/examples/task_priority/fractal/xcode/English.lproj/main.nib/objects.xib
deleted file mode 100644
index 480a6ef..0000000
--- a/examples/task_priority/fractal/xcode/English.lproj/main.nib/objects.xib
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-<object class="NSIBObjectData">
-  <object name="rootObject" class="NSCustomObject" id="1">
-  </object>
-  <array count="2" name="allObjects">
-    <object class="IBCarbonRootControl" id="167">
-      <string name="viewFrame">0 0 480 360 </string>
-      <string name="bounds">0 0 360 480 </string>
-    </object>
-    <object class="IBCarbonWindow" id="166">
-      <boolean name="receiveUpdates">FALSE</boolean>
-      <boolean name="compositing">TRUE</boolean>
-      <boolean name="asyncDrag">TRUE</boolean>
-      <boolean name="doesNotCycle">TRUE</boolean>
-      <int name="themeBrush">-1</int>
-      <string name="title">Fractal</string>
-      <reference name="rootControl" idRef="167"/>
-      <string name="windowRect">338 353 698 833 </string>
-      <string name="ScreenRectAtEncodeTime">0 0 768 1024 </string>
-      <int name="WindowMinWidth">320</int>
-      <int name="WindowMinHeight">200</int>
-    </object>
-  </array>
-  <array count="2" name="allParents">
-    <reference idRef="166"/>
-    <reference idRef="1"/>
-  </array>
-  <dictionary count="2" name="nameTable">
-    <string>File's Owner</string>
-    <reference idRef="1"/>
-    <string>MainWindow</string>
-    <reference idRef="166"/>
-  </dictionary>
-  <string name="targetFramework">IBCarbonFramework</string>
-  <unsigned_int name="nextObjectID">219</unsigned_int>
-</object>
diff --git a/examples/task_priority/fractal/xcode/Info.plist b/examples/task_priority/fractal/xcode/Info.plist
deleted file mode 100644
index f57a03f..0000000
--- a/examples/task_priority/fractal/xcode/Info.plist
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.intel.tbb.fractal</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>CSResourcesFileMapped</key>
-	<true/>
-</dict>
-</plist>
diff --git a/examples/task_priority/fractal/xcode/fractal.pch b/examples/task_priority/fractal/xcode/fractal.pch
deleted file mode 100644
index 1f2ec31..0000000
--- a/examples/task_priority/fractal/xcode/fractal.pch
+++ /dev/null
@@ -1,5 +0,0 @@
-//
-// Prefix header for all source files of the 'fractal' target in the 'fractal' project.
-//
-
-#include <Carbon/Carbon.h>
diff --git a/examples/task_priority/fractal/xcode/fractal.xcodeproj/project.pbxproj b/examples/task_priority/fractal/xcode/fractal.xcodeproj/project.pbxproj
index a3ed810..df9408d 100644
--- a/examples/task_priority/fractal/xcode/fractal.xcodeproj/project.pbxproj
+++ b/examples/task_priority/fractal/xcode/fractal.xcodeproj/project.pbxproj
@@ -7,306 +7,343 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		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 */; };
-		A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591AA0B8DFC9600073279 /* macvideo.cpp */; };
-		EA135CEA130D076D00807847 /* fractal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA135CE6130D076D00807847 /* fractal.cpp */; };
-		EA135CEB130D076D00807847 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA135CE9130D076D00807847 /* main.cpp */; };
-		EA135D0B130D0AA200807847 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = EA135D09130D0AA200807847 /* main.nib */; };
+		84011722152D687A00B07E4D /* fractal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84011720152D687A00B07E4D /* fractal.cpp */; };
+		84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; };
+		84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; };
+		84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; };
+		84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; };
+		84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; };
+		84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; };
+		84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; };
+		84B8DA87152CA99C00D59B95 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; };
+		84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; };
+		84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; };
+		84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; };
 /* 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 */
-		8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
-		8D0C4E970486CD37000505A6 /* fractal.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fractal.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		A18D2A330B861B99007D8D2C /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; };
-		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; };
-		EA135CE6130D076D00807847 /* fractal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fractal.cpp; path = ../fractal.cpp; sourceTree = SOURCE_ROOT; };
-		EA135CE7130D076D00807847 /* fractal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fractal.h; path = ../fractal.h; sourceTree = SOURCE_ROOT; };
-		EA135CE8130D076D00807847 /* fractal_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fractal_video.h; path = ../fractal_video.h; sourceTree = SOURCE_ROOT; };
-		EA135CE9130D076D00807847 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; };
-		EA135D0A130D0AA200807847 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };
-		EA135E71130D2A0E00807847 /* fractal.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fractal.pch; sourceTree = "<group>"; };
+		8401171F152D687A00B07E4D /* fractal_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fractal_video.h; path = ../fractal_video.h; sourceTree = "<group>"; };
+		84011720152D687A00B07E4D /* fractal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fractal.cpp; path = ../fractal.cpp; sourceTree = "<group>"; };
+		84011721152D687A00B07E4D /* fractal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fractal.h; path = ../fractal.h; sourceTree = "<group>"; };
+		84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = "<group>"; };
+		84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = "<group>"; };
+		84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = "<group>"; };
+		84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = "<group>"; };
+		84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = "<group>"; };
+		84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = "<group>"; };
+		84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tbbExample-Prefix.pch"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; sourceTree = "<group>"; };
+		84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = "<group>"; };
+		84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = "<group>"; };
+		84B8DA82152CA99C00D59B95 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = "<group>"; };
+		84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = "<group>"; };
+		84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+		84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
+		84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
+		84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
-		8D0C4E910486CD37000505A6 /* Frameworks */ = {
+		84D0174E1527431F0008A4E0 /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */,
-				A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */,
-				A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */,
-				A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */,
+				84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */,
+				84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */,
+				84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
-		195DF8CFFE9D517E11CA2CBB /* Products */ = {
+		84011727152D68D200B07E4D /* Sources */ = {
 			isa = PBXGroup;
 			children = (
-				8D0C4E970486CD37000505A6 /* fractal.app */,
+				8401171F152D687A00B07E4D /* fractal_video.h */,
+				84B8DA82152CA99C00D59B95 /* main.cpp */,
+				84011720152D687A00B07E4D /* fractal.cpp */,
+				84011721152D687A00B07E4D /* fractal.h */,
 			);
-			name = Products;
+			name = Sources;
 			sourceTree = "<group>";
 		};
-		20286C29FDCF999611CA2CEA /* fractal */ = {
+		84B8DA6C152CA8D900D59B95 /* tbbExample */ = {
 			isa = PBXGroup;
 			children = (
-				20286C2AFDCF999611CA2CEA /* Sources */,
-				20286C2CFDCF999611CA2CEA /* Resources */,
-				20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
-				195DF8CFFE9D517E11CA2CBB /* Products */,
+				84011727152D68D200B07E4D /* Sources */,
+				84B8DA98152CAD8600D59B95 /* Gui layer */,
+				84B8DA7B152CA97B00D59B95 /* Resources */,
 			);
-			name = fractal;
+			name = tbbExample;
 			sourceTree = "<group>";
 		};
-		20286C2AFDCF999611CA2CEA /* Sources */ = {
+		84B8DA7B152CA97B00D59B95 /* Resources */ = {
 			isa = PBXGroup;
 			children = (
-				EA135E71130D2A0E00807847 /* fractal.pch */,
-				EA135CE8130D076D00807847 /* fractal_video.h */,
-				EA135CE7130D076D00807847 /* fractal.h */,
-				EA135CE9130D076D00807847 /* main.cpp */,
-				EA135CE6130D076D00807847 /* fractal.cpp */,
-				A1F591AA0B8DFC9600073279 /* macvideo.cpp */,
-				A1F591AB0B8DFC9600073279 /* video.h */,
+				84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */,
+				84B8DA7E152CA97B00D59B95 /* MainMenu.xib */,
 			);
-			name = Sources;
+			name = Resources;
+			path = ../../../common/gui/xcode/tbbExample/en.lproj;
 			sourceTree = "<group>";
 		};
-		20286C2CFDCF999611CA2CEA /* Resources */ = {
+		84B8DA98152CAD8600D59B95 /* Gui layer */ = {
 			isa = PBXGroup;
 			children = (
-				EA135D09130D0AA200807847 /* main.nib */,
-				8D0C4E960486CD37000505A6 /* Info.plist */,
+				84B8DA99152CADF400D59B95 /* macvideo.cpp */,
+				84B8DA6F152CA90100D59B95 /* main.m */,
+				84B8DA70152CA90100D59B95 /* OpenGLView.h */,
+				84B8DA71152CA90100D59B95 /* OpenGLView.m */,
+				84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */,
+				84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */,
+				84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */,
 			);
-			name = Resources;
+			name = "Gui layer";
+			sourceTree = "<group>";
+		};
+		84D017461527431F0008A4E0 = {
+			isa = PBXGroup;
+			children = (
+				84B8DA6C152CA8D900D59B95 /* tbbExample */,
+				84D017541527431F0008A4E0 /* Frameworks */,
+				84D017521527431F0008A4E0 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		84D017521527431F0008A4E0 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				84D017511527431F0008A4E0 /* tbbExample.app */,
+			);
+			name = Products;
 			sourceTree = "<group>";
 		};
-		20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
+		84D017541527431F0008A4E0 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
-				A18D2A330B861B99007D8D2C /* libtbb.dylib */,
-				A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */,
-				A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */,
-				A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */,
+				84D01775152744BD0008A4E0 /* OpenGL.framework */,
+				84D017551527431F0008A4E0 /* Cocoa.framework */,
+				84D017571527431F0008A4E0 /* Other Frameworks */,
 			);
-			name = "External Frameworks and Libraries";
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		84D017571527431F0008A4E0 /* Other Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				84B8DA13152C9AC600D59B95 /* libtbb.dylib */,
+				84D017581527431F0008A4E0 /* AppKit.framework */,
+				84D017591527431F0008A4E0 /* CoreData.framework */,
+				84D0175A1527431F0008A4E0 /* Foundation.framework */,
+			);
+			name = "Other Frameworks";
 			sourceTree = "<group>";
 		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
-		8D0C4E890486CD37000505A6 /* fractal */ = {
+		84D017501527431F0008A4E0 /* tbbExample */ = {
 			isa = PBXNativeTarget;
-			buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "fractal" */;
+			buildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */;
 			buildPhases = (
-				8D0C4E8C0486CD37000505A6 /* Resources */,
-				8D0C4E8F0486CD37000505A6 /* Sources */,
-				8D0C4E910486CD37000505A6 /* Frameworks */,
-				A18D2A370B861BB7007D8D2C /* CopyFiles */,
+				84D0174D1527431F0008A4E0 /* Sources */,
+				84D0174E1527431F0008A4E0 /* Frameworks */,
+				84D0174F1527431F0008A4E0 /* Resources */,
 			);
 			buildRules = (
 			);
 			dependencies = (
 			);
-			name = fractal;
-			productInstallPath = "$(HOME)/Applications";
-			productName = fractal;
-			productReference = 8D0C4E970486CD37000505A6 /* fractal.app */;
+			name = tbbExample;
+			productName = tbbExample;
+			productReference = 84D017511527431F0008A4E0 /* tbbExample.app */;
 			productType = "com.apple.product-type.application";
 		};
 /* End PBXNativeTarget section */
 
 /* Begin PBXProject section */
-		20286C28FDCF999611CA2CEA /* Project object */ = {
+		84D017481527431F0008A4E0 /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
-				LastUpgradeCheck = 0410;
+				CLASSPREFIX = tbb;
+				LastUpgradeCheck = 0430;
 			};
-			buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "fractal" */;
+			buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "fractal" */;
 			compatibilityVersion = "Xcode 3.2";
 			developmentRegion = English;
-			hasScannedForEncodings = 1;
+			hasScannedForEncodings = 0;
 			knownRegions = (
 				en,
 			);
-			mainGroup = 20286C29FDCF999611CA2CEA /* fractal */;
+			mainGroup = 84D017461527431F0008A4E0;
+			productRefGroup = 84D017521527431F0008A4E0 /* Products */;
 			projectDirPath = "";
 			projectRoot = "";
 			targets = (
-				8D0C4E890486CD37000505A6 /* fractal */,
+				84D017501527431F0008A4E0 /* tbbExample */,
 			);
 		};
 /* End PBXProject section */
 
 /* Begin PBXResourcesBuildPhase section */
-		8D0C4E8C0486CD37000505A6 /* Resources */ = {
+		84D0174F1527431F0008A4E0 /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A126495E0B83936D0091D5AD /* Info.plist in Resources */,
-				EA135D0B130D0AA200807847 /* main.nib in Resources */,
+				84B8DA7A152CA90100D59B95 /* (null) in Resources */,
+				84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */,
+				84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
-		8D0C4E8F0486CD37000505A6 /* Sources */ = {
+		84D0174D1527431F0008A4E0 /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */,
-				EA135CEA130D076D00807847 /* fractal.cpp in Sources */,
-				EA135CEB130D076D00807847 /* main.cpp in Sources */,
+				84B8DA77152CA90100D59B95 /* main.m in Sources */,
+				84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */,
+				84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */,
+				84B8DA87152CA99C00D59B95 /* main.cpp in Sources */,
+				84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */,
+				84011722152D687A00B07E4D /* fractal.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXVariantGroup section */
-		EA135D09130D0AA200807847 /* main.nib */ = {
+		84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = {
 			isa = PBXVariantGroup;
 			children = (
-				EA135D0A130D0AA200807847 /* English */,
+				84B8DA7D152CA97B00D59B95 /* en */,
 			);
-			name = main.nib;
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				84B8DA7F152CA97B00D59B95 /* en */,
+			);
+			name = MainMenu.xib;
 			sourceTree = "<group>";
 		};
 /* End PBXVariantGroup section */
 
 /* Begin XCBuildConfiguration section */
-		C0E91AC608A95435008D54AB /* Debug */ = {
+		84D01770152743200008A4E0 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = YES;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = YES;
 				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = "";
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fractal.pch;
-				GCC_VERSION = "";
-				HEADER_SEARCH_PATHS = ../../../../include;
-				IBC_STRIP_NIBS = NO;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
 					"$(inherited)",
-					../../../../lib,
 				);
-				PRODUCT_NAME = fractal;
-				SDKROOT = macosx10.6;
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
 			};
 			name = Debug;
 		};
-		C0E91AC708A95435008D54AB /* Release */ = {
+		84D01771152743200008A4E0 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_MODEL_TUNING = "";
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fractal.pch;
-				GCC_VERSION = "";
-				HEADER_SEARCH_PATHS = ../../../../include;
-				IBC_STRIP_NIBS = NO;
-				INSTALL_PATH = "$(HOME)/Applications";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					../../../../lib,
-				);
-				OTHER_CPLUSPLUSFLAGS = "";
-				PRODUCT_NAME = fractal;
-				PUBLIC_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Headers";
-				SDKROOT = macosx10.6;
-				STRIPFLAGS = "";
+				ALWAYS_SEARCH_USER_PATHS = YES;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				SDKROOT = macosx;
 			};
 			name = Release;
 		};
-		C0E91ACA08A95435008D54AB /* Debug */ = {
+		84D01773152743200008A4E0 /* 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_VERSION = "";
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				IBC_STRIP_NIBS = NO;
-				MACH_O_TYPE = mh_execute;
-				MACOSX_DEPLOYMENT_TARGET = 10.6;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SDKROOT = macosx10.6;
-				SYMROOT = "/tmp/tbb-$(USER)";
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\"";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
 			};
 			name = Debug;
 		};
-		C0E91ACB08A95435008D54AB /* Release */ = {
+		84D01774152743200008A4E0 /* 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_VERSION = "";
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				IBC_STRIP_NIBS = NO;
-				MACH_O_TYPE = mh_execute;
-				MACOSX_DEPLOYMENT_TARGET = 10.6;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				SDKROOT = macosx10.6;
-				SYMROOT = "/tmp/tbb-$(USER)";
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"\"$(SRCROOT)/../../../../lib\"",
+					"\"$(SRCROOT)\"",
+				);
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				RUN_CLANG_STATIC_ANALYZER = YES;
+				USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\"";
+				VERSION_INFO_BUILDER = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
 			};
 			name = Release;
 		};
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
-		C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "fractal" */ = {
+		84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "fractal" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
-				C0E91AC608A95435008D54AB /* Debug */,
-				C0E91AC708A95435008D54AB /* Release */,
+				84D01770152743200008A4E0 /* Debug */,
+				84D01771152743200008A4E0 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "fractal" */ = {
+		84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
-				C0E91ACA08A95435008D54AB /* Debug */,
-				C0E91ACB08A95435008D54AB /* Release */,
+				84D01773152743200008A4E0 /* Debug */,
+				84D01774152743200008A4E0 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
 /* End XCConfigurationList section */
 	};
-	rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
+	rootObject = 84D017481527431F0008A4E0 /* Project object */;
 }
diff --git a/examples/task_priority/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme b/examples/task_priority/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
new file mode 100644
index 0000000..5939fe1
--- /dev/null
+++ b/examples/task_priority/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "84D017501527431F0008A4E0"
+               BuildableName = "tbbExample.app"
+               BlueprintName = "tbbExample"
+               ReferencedContainer = "container:tbbExample.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample"
+            ReferencedContainer = "container:fractal.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      customWorkingDirectory = "/tmp"
+      buildConfiguration = "Debug"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "NO"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample"
+            ReferencedContainer = "container:fractal.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <EnvironmentVariables>
+         <EnvironmentVariable
+            key = "DYLD_LIBRARY_PATH"
+            value = "$(SRCROOT)/../../../../lib"
+            isEnabled = "YES">
+         </EnvironmentVariable>
+      </EnvironmentVariables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "84D017501527431F0008A4E0"
+            BuildableName = "tbbExample.app"
+            BlueprintName = "tbbExample"
+            ReferencedContainer = "container:tbbExample.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/examples/task_priority/index.html b/examples/task_priority/index.html
index 922f443..cf2ff56 100644
--- a/examples/task_priority/index.html
+++ b/examples/task_priority/index.html
@@ -13,7 +13,7 @@ This directory has examples of how to use the task priority feature.
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/test_all/fibonacci/Fibonacci.cpp b/examples/test_all/fibonacci/Fibonacci.cpp
index 8af28a4..bcd9ac4 100644
--- a/examples/test_all/fibonacci/Fibonacci.cpp
+++ b/examples/test_all/fibonacci/Fibonacci.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 ce27a70..5144576 100644
--- a/examples/test_all/fibonacci/Makefile
+++ b/examples/test_all/fibonacci/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 d250393..79a20e4 100644
--- a/examples/test_all/fibonacci/Makefile.windows
+++ b/examples/test_all/fibonacci/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 af931c0..684c02b 100644
--- a/examples/test_all/fibonacci/index.html
+++ b/examples/test_all/fibonacci/index.html
@@ -4,7 +4,7 @@
 <H2>Overview</H2>
 This directory contains an example that computes Fibonacci numbers in several
 different ways. The purpose of the example is to exercise every include file
-and class in Threading Building Blocks.
+and class in Intel® Threading Building Blocks.
 Most of the computations are deliberately silly and not expected to
 show any speedup on multiprocessors.
 <H2>Files</H2>
@@ -18,10 +18,10 @@ show any speedup on multiprocessors.
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="msvs">msvs</A> 
-<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
-<DT><A HREF="xcode">xcode</A>
-<DD>Contains Xcode* IDE workspace for building and running the example.
-</DL>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the 
+    example (Windows* systems only).<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example (Mac OS* X 
+    systems only).</DL>
 
 <H2>To Build</H2>
 General build directions can be found <A HREF=../../index.html#build>here</A>.
@@ -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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/examples/test_all/index.html b/examples/test_all/index.html
index 86c1e27..277d315 100644
--- a/examples/test_all/index.html
+++ b/examples/test_all/index.html
@@ -2,7 +2,7 @@
 <BODY>
 
 <H2>Overview</H2>
-This directory contains programs that exercise all the components of Threading Building Blocks.
+This directory contains programs that exercise all the components of Intel® Threading Building Blocks.
 
 <H2>Directories</H2>
 <DL>
@@ -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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/include/index.html b/include/index.html
index ee08489..26cd33a 100644
--- a/include/index.html
+++ b/include/index.html
@@ -2,18 +2,18 @@
 <BODY>
 
 <H2>Overview</H2>
-Include files for Threading Building Blocks.
+Include files for Intel® Threading Building Blocks (Intel® TBB).
 
 <H2>Directories</H2>
 <DL>
 <DT><A HREF="tbb/index.html">tbb</A>
-<DD>Include files for Threading Building Blocks classes and functions.
+<DD>Include files for Intel TBB classes and functions.
 </DL>
 
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/include/serial/tbb/parallel_for.h b/include/serial/tbb/parallel_for.h
index e953cf0..7f10403 100644
--- a/include/serial/tbb/parallel_for.h
+++ b/include/serial/tbb/parallel_for.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/serial/tbb/tbb_annotate.h b/include/serial/tbb/tbb_annotate.h
index 5aeb6ea..58385f6 100644
--- a/include/serial/tbb/tbb_annotate.h
+++ b/include/serial/tbb/tbb_annotate.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/aggregator.h b/include/tbb/aggregator.h
new file mode 100644
index 0000000..5415528
--- /dev/null
+++ b/include/tbb/aggregator.h
@@ -0,0 +1,210 @@
+/*
+    Copyright 2005-2012 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__aggregator_H
+#define __TBB__aggregator_H
+
+#if !TBB_PREVIEW_AGGREGATOR
+#error Set TBB_PREVIEW_AGGREGATOR before including aggregator.h
+#endif
+
+#include "atomic.h"
+#include "tbb_profiling.h"
+
+namespace tbb {
+namespace interface6 {
+
+using namespace tbb::internal;
+
+class aggregator_operation {
+    template<typename handler_type> friend class aggregator_ext;
+    uintptr_t status;
+    aggregator_operation* my_next;
+public:
+    enum aggregator_operation_status { agg_waiting=0, agg_finished };
+    aggregator_operation() : status(agg_waiting), my_next(NULL) {}
+    /// Call start before handling this operation
+    void start() { call_itt_notify(acquired, &status); }
+    /// Call finish when done handling this operation
+    /** The operation will be released to its originating thread, and possibly deleted. */
+    void finish() { itt_store_word_with_release(status, uintptr_t(agg_finished)); }
+    aggregator_operation* next() { return itt_hide_load_word(my_next);}
+    void set_next(aggregator_operation* n) { itt_hide_store_word(my_next, n); }
+};
+
+namespace internal {
+
+class basic_operation_base : public aggregator_operation {
+    friend class basic_handler;
+    virtual void apply_body() = 0;
+public:
+    basic_operation_base() : aggregator_operation() {}
+    virtual ~basic_operation_base() {}
+};
+
+template<typename Body>
+class basic_operation : public basic_operation_base, no_assign {
+    const Body& my_body;
+    /*override*/ void apply_body() { my_body(); }
+public:
+    basic_operation(const Body& b) : basic_operation_base(), my_body(b) {}
+};
+
+class basic_handler {
+public:
+    basic_handler() {}
+    void operator()(aggregator_operation* op_list) const { 
+        while (op_list) {
+            // ITT note: &(op_list->status) tag is used to cover accesses to the operation data.
+            // The executing thread "acquires" the tag (see start()) and then performs
+            // the associated operation w/o triggering a race condition diagnostics.
+            // A thread that created the operation is waiting for its status (see execute_impl()),
+            // so when this thread is done with the operation, it will "release" the tag 
+            // and update the status (see finish()) to give control back to the waiting thread.
+            basic_operation_base& request = static_cast<basic_operation_base&>(*op_list);
+            // IMPORTANT: need to advance op_list to op_list->next() before calling request.finish()
+            op_list = op_list->next();
+            request.start();
+            request.apply_body();
+            request.finish();
+        }
+    }
+};
+
+} // namespace internal
+
+//! Aggregator base class and expert interface
+/** An aggregator for collecting operations coming from multiple sources and executing
+    them serially on a single thread. */
+template <typename handler_type>
+class aggregator_ext : tbb::internal::no_copy {
+public:
+    aggregator_ext(const handler_type& h) : handler_busy(0), handle_operations(h) { mailbox = NULL; }
+
+    //! EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.
+    /** Details of user-made operations must be handled by user-provided handler */
+    void process(aggregator_operation *op) { execute_impl(*op); }
+
+ protected:
+    /** Place operation in mailbox, then either handle mailbox or wait for the operation 
+        to be completed by a different thread. */
+    void execute_impl(aggregator_operation& op) {
+        aggregator_operation* res;
+
+        // ITT note: &(op.status) tag is used to cover accesses to this operation. This
+        // thread has created the operation, and now releases it so that the handler
+        // thread may handle the associated operation w/o triggering a race condition;
+        // thus this tag will be acquired just before the operation is handled in the
+        // handle_operations functor.
+        call_itt_notify(releasing, &(op.status));
+        // insert the operation in the queue
+        do {
+            // ITT may flag the following line as a race; it is a false positive:
+            // This is an atomic read; we don't provide itt_hide_load_word for atomics
+            op.my_next = res = mailbox; // NOT A RACE 
+        } while (mailbox.compare_and_swap(&op, res) != res);
+        if (!res) { // first in the list; handle the operations
+            // ITT note: &mailbox tag covers access to the handler_busy flag, which this
+            // waiting handler thread will try to set before entering handle_operations.
+            call_itt_notify(acquired, &mailbox);
+            start_handle_operations();
+            __TBB_ASSERT(op.status, NULL);
+        }
+        else { // not first; wait for op to be ready
+            call_itt_notify(prepare, &(op.status));
+            spin_wait_while_eq(op.status, uintptr_t(aggregator_operation::agg_waiting));
+            itt_load_word_with_acquire(op.status);
+        }
+    }
+
+
+ private:
+    //! An atomically updated list (aka mailbox) of aggregator_operations
+    atomic<aggregator_operation *> mailbox;
+
+    //! Controls thread access to handle_operations
+    /** Behaves as boolean flag where 0=false, 1=true */
+    uintptr_t handler_busy;
+
+    handler_type handle_operations;
+
+    //! Trigger the handling of operations when the handler is free
+    void start_handle_operations() {
+        aggregator_operation *pending_operations;
+
+        // ITT note: &handler_busy tag covers access to mailbox as it is passed
+        // between active and waiting handlers.  Below, the waiting handler waits until
+        // the active handler releases, and the waiting handler acquires &handler_busy as
+        // it becomes the active_handler. The release point is at the end of this
+        // function, when all operations in mailbox have been handled by the
+        // owner of this aggregator.
+        call_itt_notify(prepare, &handler_busy);
+        // get handler_busy: only one thread can possibly spin here at a time
+        spin_wait_until_eq(handler_busy, uintptr_t(0));
+        call_itt_notify(acquired, &handler_busy);
+        // acquire fence not necessary here due to causality rule and surrounding atomics
+        __TBB_store_with_release(handler_busy, uintptr_t(1));
+
+        // ITT note: &mailbox tag covers access to the handler_busy flag itself. 
+        // Capturing the state of the mailbox signifies that handler_busy has been 
+        // set and a new active handler will now process that list's operations.
+        call_itt_notify(releasing, &mailbox);
+        // grab pending_operations
+        pending_operations = mailbox.fetch_and_store(NULL);
+
+        // handle all the operations
+        handle_operations(pending_operations);
+
+        // release the handler
+        itt_store_word_with_release(handler_busy, uintptr_t(0));
+    }
+};
+
+//! Basic aggregator interface
+class aggregator : private aggregator_ext<internal::basic_handler> {
+public:
+    aggregator() : aggregator_ext<internal::basic_handler>(internal::basic_handler()) {}
+    //! BASIC INTERFACE: Enter a function for exclusvie execution by the aggregator.
+    /** The calling thread stores the function object in a basic_operation and
+        places the operation in the aggregator's mailbox */
+    template<typename Body>
+    void execute(const Body& b) {
+        internal::basic_operation<Body> op(b);
+        this->execute_impl(op);
+    }
+};
+
+} // namespace interface6
+
+using interface6::aggregator;
+using interface6::aggregator_ext;
+using interface6::aggregator_operation;
+
+} // namespace tbb
+
+#endif  // __TBB__aggregator_H
diff --git a/include/tbb/aligned_space.h b/include/tbb/aligned_space.h
index 7d642fb..d23baed 100644
--- a/include/tbb/aligned_space.h
+++ b/include/tbb/aligned_space.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 5257ff5..8715a1e 100644
--- a/include/tbb/atomic.h
+++ b/include/tbb/atomic.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,7 +32,7 @@
 #include <cstddef>
 #include "tbb_stddef.h"
 
-#if _MSC_VER 
+#if _MSC_VER
 #define __TBB_LONG_LONG __int64
 #else
 #define __TBB_LONG_LONG long long
@@ -41,20 +41,20 @@
 #include "tbb_machine.h"
 
 #if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
-    // Workaround for overzealous compiler warnings 
+    // Workaround for overzealous compiler warnings
     #pragma warning (push)
     #pragma warning (disable: 4244 4267)
 #endif
 
 namespace tbb {
 
-//! Specifies memory fencing.
+//! Specifies memory semantics.
 enum memory_semantics {
-    //! Sequentially consistent fence.
+    //! Sequential consistency
     full_fence,
-    //! Acquire fence
+    //! Acquire
     acquire,
-    //! Release fence
+    //! Release
     release,
     //! No ordering
     relaxed
@@ -67,7 +67,7 @@ namespace internal {
     #define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f  __attribute__ ((aligned(a)));
 #elif __TBB_DECLSPEC_ALIGN_PRESENT
     #define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;
-#else 
+#else
     #error Do not know syntax for forcing alignment.
 #endif
 
@@ -86,7 +86,7 @@ struct atomic_rep<2> {       // Specialization
 };
 template<>
 struct atomic_rep<4> {       // Specialization
-#if _MSC_VER && __TBB_WORDSIZE==4
+#if _MSC_VER && !_WIN64
     // Work-around that avoids spurious /Wp64 warnings
     typedef intptr_t word;
 #else
@@ -188,7 +188,7 @@ __TBB_DECL_ATOMIC_LOAD_STORE_PRIMITIVES(relaxed);
 #define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))
 
 //! Base class that provides basic functionality for atomic<T> without fetch_and_add.
-/** Works for any type T that has the same size as an integral type, has a trivial constructor/destructor, 
+/** Works for any type T that has the same size as an integral type, has a trivial constructor/destructor,
     and can be copied/compared by memcpy/memcmp. */
 template<typename T>
 struct atomic_impl {
@@ -228,7 +228,7 @@ public:
         return compare_and_swap<full_fence>(value,comparand);
     }
 
-    operator value_type() const volatile {                // volatile qualifier here for backwards compatibility 
+    operator value_type() const volatile {                // volatile qualifier here for backwards compatibility
         converter w;
         w.bits = __TBB_load_with_acquire( rep.value );
         return w.value;
@@ -302,14 +302,14 @@ public:
     }
 
 public:
-    value_type operator+=( D addend ) {
-        return fetch_and_add(addend)+addend;
+    value_type operator+=( D value ) {
+        return fetch_and_add(value)+value;
     }
 
-    value_type operator-=( D addend ) {
-        // Additive inverse of addend computed using binary minus,
+    value_type operator-=( D value ) {
+        // Additive inverse of value computed using binary minus,
         // instead of unary minus, for sake of avoiding compiler warnings.
-        return operator+=(D(0)-addend);    
+        return operator+=(D(0)-value);
     }
 
     value_type operator++() {
@@ -359,9 +359,9 @@ __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG)
 __TBB_DECL_ATOMIC(long)
 __TBB_DECL_ATOMIC(unsigned long)
 
-#if defined(_MSC_VER) && __TBB_WORDSIZE==4
-/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option. 
-   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T) 
+#if _MSC_VER && !_WIN64
+/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option.
+   It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T)
    with an operator=(U) that explicitly converts the U to a T.  Types T and U should be
    type synonyms on the platform.  Type U should be the wider variant of T from the
    perspective of /Wp64. */
@@ -375,7 +375,7 @@ __TBB_DECL_ATOMIC_ALT(int,ptrdiff_t)
 #else
 __TBB_DECL_ATOMIC(unsigned)
 __TBB_DECL_ATOMIC(int)
-#endif /* defined(_MSC_VER) && __TBB_WORDSIZE==4 */
+#endif /* _MSC_VER && !_WIN64 */
 
 __TBB_DECL_ATOMIC(unsigned short)
 __TBB_DECL_ATOMIC(short)
@@ -383,7 +383,7 @@ __TBB_DECL_ATOMIC(char)
 __TBB_DECL_ATOMIC(signed char)
 __TBB_DECL_ATOMIC(unsigned char)
 
-#if !defined(_MSC_VER)||defined(_NATIVE_WCHAR_T_DEFINED) 
+#if !_MSC_VER || defined(_NATIVE_WCHAR_T_DEFINED)
 __TBB_DECL_ATOMIC(wchar_t)
 #endif /* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */
 
@@ -421,9 +421,29 @@ T load ( const atomic<T>& a ) { return a.template load<M>(); }
 template <memory_semantics M, typename T>
 void store ( atomic<T>& a, T value ) { return a.template store<M>(value); }
 
+namespace interface6{
+//! Make an atomic for use in an initialization (list), as an alternative to zero-initializaton or normal assignment.
+template<typename T>
+atomic<T> make_atomic(T t) {
+    atomic<T> a;
+    store<relaxed>(a,t);
+    return a;
+}
+}
+using interface6::make_atomic;
+
+namespace internal {
+
+// only to aid in the gradual conversion of ordinary variables to proper atomics
+template<typename T>
+inline atomic<T>& as_atomic( T& t ) {
+    return (atomic<T>&)t;
+}
+} // namespace tbb::internal
+
 } // namespace tbb
 
-#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+#if _MSC_VER && !__INTEL_COMPILER
     #pragma warning (pop)
 #endif // warnings 4244, 4267 are back
 
diff --git a/include/tbb/blocked_range.h b/include/tbb/blocked_range.h
index ccba501..670e43a 100644
--- a/include/tbb/blocked_range.h
+++ b/include/tbb/blocked_range.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/blocked_range2d.h b/include/tbb/blocked_range2d.h
index 5fb182f..08a8efe 100644
--- a/include/tbb/blocked_range2d.h
+++ b/include/tbb/blocked_range2d.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 f6f58de..e741a12 100644
--- a/include/tbb/blocked_range3d.h
+++ b/include/tbb/blocked_range3d.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 896a28e..f6782bf 100644
--- a/include/tbb/cache_aligned_allocator.h
+++ b/include/tbb/cache_aligned_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,6 +31,9 @@
 
 #include <new>
 #include "tbb_stddef.h"
+#if __TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_CPP11_STD_FORWARD_BROKEN
+ #include <utility> // std::forward
+#endif
 
 namespace tbb {
 
@@ -99,7 +102,17 @@ public:
     }
 
     //! Copy-construct value at location pointed to by p.
+#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
+    template<typename... Args>
+    void construct(pointer p, Args&&... args)
+ #if __TBB_CPP11_STD_FORWARD_BROKEN
+        { ::new((void *)p) T((args)...); }
+ #else
+        { ::new((void *)p) T(std::forward<Args>(args)...); }
+ #endif
+#else // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
     void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}
+#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
 
     //! 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 8b3bdef..d9a3bb5 100644
--- a/include/tbb/combinable.h
+++ b/include/tbb/combinable.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/compat/condition_variable b/include/tbb/compat/condition_variable
index c73f521..16caf12 100644
--- a/include/tbb/compat/condition_variable
+++ b/include/tbb/compat/condition_variable
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -410,6 +410,11 @@ inline cv_status condition_variable::wait_for( unique_lock<mutex>& lock, const t
     req.tv_sec  = tv.tv_sec + static_cast<long>(sec);
     req.tv_nsec = tv.tv_usec*1000 + static_cast<long>( (sec - static_cast<long>(sec))*1e9 );
 #endif /*(choice of OS) */
+    if( req.tv_nsec>=1e9 ) {
+        req.tv_sec  += 1;
+        req.tv_nsec -= static_cast<long int>(1e9);
+    }
+    __TBB_ASSERT( 0<=req.tv_nsec && req.tv_nsec<1e9, NULL );
 
     int ec;
     cv_status rc = no_timeout;
diff --git a/include/tbb/compat/ppl.h b/include/tbb/compat/ppl.h
index 6f93148..514a7b4 100644
--- a/include/tbb/compat/ppl.h
+++ b/include/tbb/compat/ppl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/compat/thread b/include/tbb/compat/thread
index c4884ec..54483ea 100644
--- a/include/tbb/compat/thread
+++ b/include/tbb/compat/thread
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/compat/tuple b/include/tbb/compat/tuple
index 3177a14..0c8721c 100644
--- a/include/tbb/compat/tuple
+++ b/include/tbb/compat/tuple
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -36,6 +36,77 @@
 #include <utility>
 #include "../tbb_stddef.h"
 
+// build preprocessor variables for varying number of arguments
+// Need the leading comma so the empty __TBB_T_PACK will not cause a syntax error.
+#if __TBB_VARIADIC_MAX <= 5
+#define __TBB_T_PACK
+#define __TBB_U_PACK
+#define __TBB_CLASS_T_PACK
+#define __TBB_CLASS_U_PACK
+#define __TBB_NULL_TYPE_PACK
+#define __TBB_REF_T_PARAM_PACK
+#define __TBB_CONST_REF_T_PARAM_PACK
+#define __TBB_T_PARAM_LIST_PACK
+#define __TBB_CONST_NULL_REF_PACK
+//
+#elif __TBB_VARIADIC_MAX == 6
+#define __TBB_T_PACK ,T5
+#define __TBB_U_PACK ,U5
+#define __TBB_CLASS_T_PACK , class T5
+#define __TBB_CLASS_U_PACK , class U5
+#define __TBB_NULL_TYPE_PACK , null_type
+#define __TBB_REF_T_PARAM_PACK ,T5& t5
+#define __TBB_CONST_REF_T_PARAM_PACK ,const T5& t5
+#define __TBB_T_PARAM_LIST_PACK ,t5
+#define __TBB_CONST_NULL_REF_PACK , const null_type&
+//
+#elif __TBB_VARIADIC_MAX == 7
+#define __TBB_T_PACK ,T5, T6
+#define __TBB_U_PACK ,U5, U6
+#define __TBB_CLASS_T_PACK , class T5 , class T6
+#define __TBB_CLASS_U_PACK , class U5 , class U6
+#define __TBB_NULL_TYPE_PACK , null_type, null_type
+#define __TBB_REF_T_PARAM_PACK ,T5& t5, T6& t6
+#define __TBB_CONST_REF_T_PARAM_PACK ,const T5& t5, const T6& t6
+#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6
+#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&
+//
+#elif __TBB_VARIADIC_MAX == 8
+#define __TBB_T_PACK ,T5, T6, T7
+#define __TBB_U_PACK ,U5, U6, U7
+#define __TBB_CLASS_T_PACK , class T5 , class T6, class T7
+#define __TBB_CLASS_U_PACK , class U5 , class U6, class U7
+#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type
+#define __TBB_REF_T_PARAM_PACK ,T5& t5, T6& t6, T7& t7
+#define __TBB_CONST_REF_T_PARAM_PACK , const T5& t5, const T6& t6, const T7& t7
+#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7
+#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&
+//
+#elif __TBB_VARIADIC_MAX == 9
+#define __TBB_T_PACK ,T5, T6, T7, T8
+#define __TBB_U_PACK ,U5, U6, U7, U8
+#define __TBB_CLASS_T_PACK , class T5, class T6, class T7, class T8
+#define __TBB_CLASS_U_PACK , class U5, class U6, class U7, class U8
+#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type, null_type
+#define __TBB_REF_T_PARAM_PACK ,T5& t5, T6& t6, T7& t7, T8& t8
+#define __TBB_CONST_REF_T_PARAM_PACK , const T5& t5, const T6& t6, const T7& t7, const T8& t8
+#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7 ,t8
+#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&, const null_type&
+//
+#elif __TBB_VARIADIC_MAX >= 10
+#define __TBB_T_PACK ,T5, T6, T7, T8, T9
+#define __TBB_U_PACK ,U5, U6, U7, U8, U9
+#define __TBB_CLASS_T_PACK , class T5, class T6, class T7, class T8, class T9
+#define __TBB_CLASS_U_PACK , class U5, class U6, class U7, class U8, class U9
+#define __TBB_NULL_TYPE_PACK , null_type, null_type, null_type, null_type, null_type
+#define __TBB_REF_T_PARAM_PACK ,T5& t5, T6& t6, T7& t7, T8& t8, T9& t9
+#define __TBB_CONST_REF_T_PARAM_PACK , const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9
+#define __TBB_T_PARAM_LIST_PACK ,t5 ,t6 ,t7 ,t8 ,t9
+#define __TBB_CONST_NULL_REF_PACK , const null_type&, const null_type&, const null_type&, const null_type&, const null_type&
+#endif
+
+
+
 namespace tbb {
 namespace interface5 {
 namespace internal {
@@ -44,7 +115,23 @@ struct null_type { };
 using internal::null_type;
 
 // tuple forward declaration
-template <class T0=null_type, class T1=null_type, class T2=null_type, class T3=null_type, class T4=null_type, class T5=null_type, class T6=null_type, class T7=null_type, class T8=null_type, class T9=null_type>
+template <class T0=null_type, class T1=null_type, class T2=null_type, class T3=null_type, class T4=null_type
+#if __TBB_VARIADIC_MAX >= 6
+, class T5=null_type
+#if __TBB_VARIADIC_MAX >= 7
+, class T6=null_type
+#if __TBB_VARIADIC_MAX >= 8
+, class T7=null_type
+#if __TBB_VARIADIC_MAX >= 9
+, class T8=null_type
+#if __TBB_VARIADIC_MAX >= 10
+, class T9=null_type
+#endif
+#endif
+#endif
+#endif
+#endif
+>
 class tuple;
 
 namespace internal {
@@ -78,7 +165,7 @@ template<int N, class T>
 struct component<N, const T>
 {
     typedef typename T::tail_type next;
-    typedef typename component<N-1,next>::type type;
+    typedef const typename component<N-1,next>::type type;
 };
 
 template<class T>
@@ -95,6 +182,10 @@ template<class HT, class TT>
 inline static typename component<N, cons<HT,TT> >::type& get(cons<HT,TT>& ti) {
     return get_helper<N-1>::get(ti.tail);
 }
+template<class HT, class TT>
+inline static typename component<N, cons<HT,TT> >::type const& get(const cons<HT,TT>& ti) {
+    return get_helper<N-1>::get(ti.tail);
+}
 };
 
 template<>
@@ -103,21 +194,25 @@ template<class HT, class TT>
 inline static typename component<0, cons<HT,TT> >::type& get(cons<HT,TT>& ti) {
     return ti.head;
 }
+template<class HT, class TT>
+inline static typename component<0, cons<HT,TT> >::type const& get(const cons<HT,TT>& ti) {
+    return ti.head;
+}
 };
 
 // traits adaptor
-template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9>
+template <class T0, class T1, class T2, class T3, class T4 __TBB_CLASS_T_PACK>
 struct tuple_traits {
-    typedef cons <T0, typename tuple_traits<T1, T2, T3, T4, T5, T6, T7, T8, T9, null_type>::U > U;
+    typedef cons <T0, typename tuple_traits<T1, T2, T3, T4 __TBB_T_PACK , null_type>::U > U;
 };
 
 template <>
-struct tuple_traits<class T0, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type> {
+struct tuple_traits<class T0, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > {
     typedef cons<T0, null_type> U;
 };
 
 template<>
-struct tuple_traits<null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type> {
+struct tuple_traits<null_type, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > {
     typedef null_type U;
 };
 
@@ -140,13 +235,13 @@ struct cons{
     // non-default constructors
     cons(head_type& h, const tail_type& t) : head(h), tail(t) { }
 
-    template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9>
-    cons(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9) :
-        head(t0), tail(t1, t2, t3, t4, t5, t6, t7, t8, t9, cnull()) { }
+    template <class T0, class T1, class T2, class T3, class T4 __TBB_CLASS_T_PACK >
+    cons(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4 __TBB_CONST_REF_T_PARAM_PACK) :
+        head(t0), tail(t1, t2, t3, t4 __TBB_T_PARAM_LIST_PACK, cnull()) { }
 
-    template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9>
-    cons(T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8, T9& t9) :
-        head(t0), tail(t1, t2, t3, t4, t5, t6, t7, t8, t9, cnull()) { }
+    template <class T0, class T1, class T2, class T3, class T4 __TBB_CLASS_T_PACK >
+    cons(T0& t0, T1& t1, T2& t2, T3& t3, T4& t4 __TBB_REF_T_PARAM_PACK) :
+        head(t0), tail(t1, t2, t3, t4 __TBB_T_PARAM_LIST_PACK , cnull()) { }
 
     template <class HT1, class TT1>
     cons(const cons<HT1,TT1>& other) : head(other.head), tail(other.tail) { }
@@ -201,18 +296,18 @@ struct cons<HT,null_type> {
     // default constructor
     cons() : head() { /*std::cout << "default constructor 1\n";*/ }
 
-    cons(const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&) : head() { /*std::cout << "default constructor 2\n";*/ }
+    cons(const null_type&, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head() { /*std::cout << "default constructor 2\n";*/ }
 
     // non-default constructor
     template<class T1>
-    cons(T1& t1, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type& ) : head(t1) { /*std::cout << "non-default a1, t1== " << t1 << "\n";*/}
+    cons(T1& t1, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(t1) { /*std::cout << "non-default a1, t1== " << t1 << "\n";*/}
 
     cons(head_type& h, const null_type& = null_type() ) : head(h) { }
-    cons(const head_type& t0, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&) : head(t0) { }
+    cons(const head_type& t0, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(t0) { }
 
     // converting constructor
     template<class HT1>
-    cons(HT1 h1, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&, const null_type&) : head(h1) { }
+    cons(HT1 h1, const null_type&, const null_type&, const null_type&, const null_type& __TBB_CONST_NULL_REF_PACK) : head(h1) { }
 
     // copy constructor
     template<class HT1>
@@ -261,35 +356,45 @@ inline const T wrap_dcons(T*) { return T(); }
 } // namespace internal
 
 // tuple definition
-template<class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9>
-class tuple : public internal::tuple_traits<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::U {
+template<class T0, class T1, class T2, class T3, class T4 __TBB_CLASS_T_PACK >
+class tuple : public internal::tuple_traits<T0, T1, T2, T3, T4 __TBB_T_PACK >::U {
     // friends
     template <class T> friend class tuple_size;
     template<int N, class T> friend struct tuple_element;
 
     // stl components
-    typedef tuple<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9> value_type;
+    typedef tuple<T0,T1,T2,T3,T4 __TBB_T_PACK > value_type;
     typedef value_type *pointer;
     typedef const value_type *const_pointer;
     typedef value_type &reference;
     typedef const value_type &const_reference;
     typedef size_t size_type;
 
-    typedef typename internal::tuple_traits<T0,T1,T2,T3, T4, T5, T6, T7, T8, T9>::U my_cons;
+    typedef typename internal::tuple_traits<T0,T1,T2,T3, T4 __TBB_T_PACK >::U my_cons;
 public:
 
-    tuple(const T0& t0=internal::wrap_dcons((T0*)NULL),
-          const T1& t1=internal::wrap_dcons((T1*)NULL),
-          const T2& t2=internal::wrap_dcons((T2*)NULL),
-          const T3& t3=internal::wrap_dcons((T3*)NULL),
-          const T4& t4=internal::wrap_dcons((T4*)NULL),
-          const T5& t5=internal::wrap_dcons((T5*)NULL),
-          const T6& t6=internal::wrap_dcons((T6*)NULL),
-          const T7& t7=internal::wrap_dcons((T7*)NULL),
-          const T8& t8=internal::wrap_dcons((T8*)NULL),
-          const T9& t9=internal::wrap_dcons((T9*)NULL)
+    tuple(const T0& t0=internal::wrap_dcons((T0*)NULL)
+          ,const T1& t1=internal::wrap_dcons((T1*)NULL)
+          ,const T2& t2=internal::wrap_dcons((T2*)NULL)
+          ,const T3& t3=internal::wrap_dcons((T3*)NULL)
+          ,const T4& t4=internal::wrap_dcons((T4*)NULL)
+#if __TBB_VARIADIC_MAX >= 6
+          ,const T5& t5=internal::wrap_dcons((T5*)NULL)
+#if __TBB_VARIADIC_MAX >= 7
+          ,const T6& t6=internal::wrap_dcons((T6*)NULL)
+#if __TBB_VARIADIC_MAX >= 8
+          ,const T7& t7=internal::wrap_dcons((T7*)NULL)
+#if __TBB_VARIADIC_MAX >= 9
+          ,const T8& t8=internal::wrap_dcons((T8*)NULL)
+#if __TBB_VARIADIC_MAX >= 10
+          ,const T9& t9=internal::wrap_dcons((T9*)NULL)
+#endif
+#endif
+#endif
+#endif
+#endif
           ) :
-        internal::tuple_traits<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9>::U(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9) { }
+        internal::tuple_traits<T0,T1,T2,T3,T4 __TBB_T_PACK >::U(t0,t1,t2,t3,t4 __TBB_T_PARAM_LIST_PACK) { }
 
     template<int N>
     struct internal_tuple_element {
@@ -299,6 +404,9 @@ public:
     template<int N>
     typename internal_tuple_element<N>::type& get() { return internal::get_helper<N>::get(*this); }
 
+    template<int N>
+    typename internal_tuple_element<N>::type const& get() const { return internal::get_helper<N>::get(*this); }
+
     template<class U1, class U2>
     tuple& operator=(const internal::cons<U1,U2>& other) {
         my_cons::operator=(other);
@@ -320,33 +428,33 @@ public:
     friend bool operator>=(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)>=(other);}
     friend bool operator<=(const tuple& me, const tuple& other) {return static_cast<const my_cons &>(me)<=(other);}
 
-    template<class U0, class U1, class U2, class U3, class U4, class U5, class U6, class U7, class U8, class U9>
-    friend bool operator==(const tuple& me, const tuple<U0,U1,U2,U3,U4,U5,U6,U7,U8,U9>& other) {
+    template<class U0, class U1, class U2, class U3, class U4 __TBB_CLASS_U_PACK >
+    friend bool operator==(const tuple& me, const tuple<U0,U1,U2,U3,U4 __TBB_U_PACK >& other) {
         return static_cast<const my_cons &>(me)==(other);
     }
 
-    template<class U0, class U1, class U2, class U3, class U4, class U5, class U6, class U7, class U8, class U9>
-    friend bool operator<(const tuple& me, const tuple<U0,U1,U2,U3,U4,U5,U6,U7,U8,U9>& other) {
+    template<class U0, class U1, class U2, class U3, class U4 __TBB_CLASS_U_PACK >
+    friend bool operator<(const tuple& me, const tuple<U0,U1,U2,U3,U4 __TBB_U_PACK >& other) {
         return static_cast<const my_cons &>(me)<(other);
     }
 
-    template<class U0, class U1, class U2, class U3, class U4, class U5, class U6, class U7, class U8, class U9>
-    friend bool operator>(const tuple& me, const tuple<U0,U1,U2,U3,U4,U5,U6,U7,U8,U9>& other) {
+    template<class U0, class U1, class U2, class U3, class U4 __TBB_CLASS_U_PACK >
+    friend bool operator>(const tuple& me, const tuple<U0,U1,U2,U3,U4 __TBB_U_PACK >& other) {
         return static_cast<const my_cons &>(me)>(other);
     }
 
-    template<class U0, class U1, class U2, class U3, class U4, class U5, class U6, class U7, class U8, class U9>
-    friend bool operator!=(const tuple& me, const tuple<U0,U1,U2,U3,U4,U5,U6,U7,U8,U9>& other) {
+    template<class U0, class U1, class U2, class U3, class U4 __TBB_CLASS_U_PACK >
+    friend bool operator!=(const tuple& me, const tuple<U0,U1,U2,U3,U4 __TBB_U_PACK >& other) {
         return static_cast<const my_cons &>(me)!=(other);
     }
 
-    template<class U0, class U1, class U2, class U3, class U4, class U5, class U6, class U7, class U8, class U9>
-    friend bool operator>=(const tuple& me, const tuple<U0,U1,U2,U3,U4,U5,U6,U7,U8,U9>& other) {
+    template<class U0, class U1, class U2, class U3, class U4 __TBB_CLASS_U_PACK >
+    friend bool operator>=(const tuple& me, const tuple<U0,U1,U2,U3,U4 __TBB_U_PACK >& other) {
         return static_cast<const my_cons &>(me)>=(other);
     }
 
-    template<class U0, class U1, class U2, class U3, class U4, class U5, class U6, class U7, class U8, class U9>
-    friend bool operator<=(const tuple& me, const tuple<U0,U1,U2,U3,U4,U5,U6,U7,U8,U9>& other) {
+    template<class U0, class U1, class U2, class U3, class U4 __TBB_CLASS_U_PACK >
+    friend bool operator<=(const tuple& me, const tuple<U0,U1,U2,U3,U4 __TBB_U_PACK >& other) {
         return static_cast<const my_cons &>(me)<=(other);
     }
 
@@ -354,7 +462,7 @@ public:
 
 // empty tuple
 template<>
-class tuple<null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type> : public null_type {
+class tuple<null_type, null_type, null_type, null_type, null_type __TBB_NULL_TYPE_PACK > : public null_type {
     typedef null_type inherited;
 };
 
@@ -383,13 +491,13 @@ struct tuple_element {
     typedef typename internal::component<N, typename T::my_cons>::type type;
 };
 
-template<int N, class T>
-inline static typename tuple_element<N,T>::type& get(T &t) { return t.get<N>(); }
+template<int N, class T0, class T1, class T2, class T3, class T4 __TBB_CLASS_T_PACK >
+inline static typename tuple_element<N,tuple<T0,T1,T2,T3,T4 __TBB_T_PACK > >::type&
+    get(tuple<T0,T1,T2,T3,T4 __TBB_T_PACK >& t) { return t.get<N>(); }
 
-template<int N, class T>
-inline static typename tuple_element<N,T>::type const& get(T const &t) { return 
-    const_cast<typename tuple_element<N,T>::type const &>
-        (const_cast<T &>(t).get<N>()); }
+template<int N, class T0, class T1, class T2, class T3, class T4 __TBB_CLASS_T_PACK >
+inline static typename tuple_element<N,tuple<T0,T1,T2,T3,T4 __TBB_T_PACK > >::type const&
+    get(const tuple<T0,T1,T2,T3,T4 __TBB_T_PACK >& t) { return t.get<N>(); }
 
 }  // interface5
 } // tbb
@@ -402,5 +510,15 @@ using tbb::interface5::tuple_element;
 using tbb::interface5::get;
 }
 #endif
+
+#undef __TBB_T_PACK
+#undef __TBB_U_PACK
+#undef __TBB_CLASS_T_PACK
+#undef __TBB_CLASS_U_PACK
+#undef __TBB_NULL_TYPE_PACK
+#undef __TBB_REF_T_PARAM_PACK
+#undef __TBB_CONST_REF_T_PARAM_PACK
+#undef __TBB_T_PARAM_LIST_PACK
+#undef __TBB_CONST_NULL_REF_PACK
  
 #endif /* __TBB_tuple_H */
diff --git a/include/tbb/concurrent_hash_map.h b/include/tbb/concurrent_hash_map.h
index ce589c9..d12ceb3 100644
--- a/include/tbb/concurrent_hash_map.h
+++ b/include/tbb/concurrent_hash_map.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -169,21 +169,21 @@ namespace interface5 {
         static size_type segment_size( segment_index_t k ) {
             return size_type(1)<<k; // fake value for k==0
         }
-        
+
         //! @return true if @arg ptr is valid pointer
         static bool is_valid( void *ptr ) {
-            return reinterpret_cast<size_t>(ptr) > size_t(63);
+            return reinterpret_cast<uintptr_t>(ptr) > uintptr_t(63);
         }
 
         //! Initialize buckets
         static void init_buckets( segment_ptr_t ptr, size_type sz, bool is_initial ) {
             if( is_initial ) std::memset(ptr, 0, sz*sizeof(bucket) );
             else for(size_type i = 0; i < sz; i++, ptr++) {
-                    *reinterpret_cast<intptr_t*>(&ptr->mutex) = 0;
-                    ptr->node_list = rehash_req;
-                }
+                *reinterpret_cast<intptr_t*>(&ptr->mutex) = 0;
+                ptr->node_list = rehash_req;
+            }
         }
-        
+
         //! Add node @arg n to bucket @arg b
         static void add_to_bucket( bucket *b, node_base *n ) {
             __TBB_ASSERT(b->node_list != rehash_req, NULL);
@@ -192,7 +192,7 @@ namespace interface5 {
         }
 
         //! Exception safety helper
-        struct enable_segment_failsafe {
+        struct enable_segment_failsafe : tbb::internal::no_copy {
             segment_ptr_t *my_segment_ptr;
             enable_segment_failsafe(segments_table_t &table, segment_index_t k) : my_segment_ptr(&table[k]) {}
             ~enable_segment_failsafe() {
@@ -282,7 +282,7 @@ namespace interface5 {
             size_type sz = ++my_size; // prefix form is to enforce allocation after the first item inserted
             add_to_bucket( b, n );
             // check load factor
-            if( sz >= mask ) { // TODO: add custom load_factor 
+            if( sz >= mask ) { // TODO: add custom load_factor
                 segment_index_t new_seg = __TBB_Log2( mask+1 ); //optimized segment_index_of
                 __TBB_ASSERT( is_valid(my_table[new_seg-1]), "new allocations must not publish new mask until segment has allocated");
                 if( !itt_hide_load_word(my_table[new_seg])
@@ -315,7 +315,7 @@ namespace interface5 {
 
     //! Meets requirements of a forward iterator for STL */
     /** Value is either the T or const T type of the container.
-        @ingroup containers */ 
+        @ingroup containers */
     template<typename Container, typename Value>
     class hash_map_iterator
         : public std::iterator<std::forward_iterator_tag,Value>
@@ -333,7 +333,7 @@ namespace interface5 {
 
         template<typename C, typename T, typename U>
         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 hash_map_iterator;
 
@@ -390,7 +390,7 @@ namespace interface5 {
         }
         Value* operator->() const {return &operator*();}
         hash_map_iterator& operator++();
-        
+
         //! Post increment
         hash_map_iterator operator++(int) {
             hash_map_iterator old(*this);
@@ -428,7 +428,7 @@ namespace interface5 {
     }
 
     //! Range class used with concurrent_hash_map
-    /** @ingroup containers */ 
+    /** @ingroup containers */
     template<typename Iterator>
     class hash_map_range {
         typedef typename Iterator::map_type map_type;
@@ -455,7 +455,7 @@ namespace interface5 {
             return my_midpoint!=my_end;
         }
         //! Split range.
-        hash_map_range( hash_map_range& r, split ) : 
+        hash_map_range( hash_map_range& r, split ) :
             my_end(r.my_end),
             my_grainsize(r.my_grainsize)
         {
@@ -467,7 +467,7 @@ namespace interface5 {
         }
         //! type conversion
         template<typename U>
-        hash_map_range( hash_map_range<U>& r) : 
+        hash_map_range( hash_map_range<U>& r) :
             my_begin(r.my_begin),
             my_end(r.my_end),
             my_midpoint(r.my_midpoint),
@@ -475,8 +475,8 @@ namespace interface5 {
         {}
 #if TBB_DEPRECATED
         //! Init range with iterators and grainsize specified
-        hash_map_range( const Iterator& begin_, const Iterator& end_, size_type grainsize_ = 1 ) : 
-            my_begin(begin_), 
+        hash_map_range( const Iterator& begin_, const Iterator& end_, size_type grainsize_ = 1 ) :
+            my_begin(begin_),
             my_end(end_),
             my_grainsize(grainsize_)
         {
@@ -487,7 +487,7 @@ namespace interface5 {
         }
 #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_ )
@@ -550,7 +550,7 @@ namespace interface5 {
     - Added overloaded erase(accessor &) and erase(const_accessor&)
     - Added equal_range() [const]
     - Added [const_]pointer, [const_]reference, and allocator_type types
-    - Added global functions: operator==(), operator!=(), and swap() 
+    - Added global functions: operator==(), operator!=(), and swap()
 
     @ingroup containers */
 template<typename Key, typename T, typename HashCompare, typename Allocator>
@@ -591,7 +591,7 @@ 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) 
+            if(!ptr)
                 tbb::internal::throw_exception(tbb::internal::eid_bad_alloc);
             return ptr;
         }
@@ -669,7 +669,7 @@ protected:
     }
 
 public:
-    
+
     class accessor;
     //! Combines data access, locking, and garbage collection.
     class const_accessor : private node::scoped_t /*which derived from no_copy*/ {
@@ -765,7 +765,7 @@ public:
         if( this!=&table ) {
             clear();
             internal_copy(table);
-        } 
+        }
         return *this;
     }
 
@@ -774,11 +774,11 @@ public:
     /** 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();
 
-    //! Clear table and destroy it.  
+    //! Clear table and destroy it.
     ~concurrent_hash_map() { clear(); }
 
     //------------------------------------------------------------------------
@@ -800,7 +800,7 @@ public:
     const_iterator end() const {return const_iterator(*this,0,0,0);}
     std::pair<iterator, iterator> equal_range( const Key& key ) { return internal_equal_range(key, end()); }
     std::pair<const_iterator, const_iterator> equal_range( const Key& key ) const { return internal_equal_range(key, end()); }
-    
+
     //! Number of items in table.
     size_type size() const { return my_size; }
 
@@ -841,7 +841,7 @@ public:
         result.release();
         return lookup(/*insert*/false, key, NULL, &result, /*write=*/true );
     }
-        
+
     //! Insert item (if not already present) and acquire a read lock on the item.
     /** Returns true if item is new. */
     bool insert( const_accessor &result, const Key &key ) {
@@ -1064,7 +1064,7 @@ bool concurrent_hash_map<Key,T,HashCompare,A>::exclude( const_accessor &item_acc
         node_base **p = &b()->node_list;
         while( *p && *p != n )
             p = &(*p)->next;
-        if( !*p ) { // someone else was the first
+        if( !*p ) { // someone else was first
             if( check_mask_race( h, m ) )
                 continue;
             item_accessor.release();
@@ -1131,7 +1131,7 @@ 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);
+    __TBB_ASSERT((b&(b-1))==0, NULL); // zero or power of 2
     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;
diff --git a/include/tbb/concurrent_lru_cache.h b/include/tbb/concurrent_lru_cache.h
new file mode 100644
index 0000000..a251163
--- /dev/null
+++ b/include/tbb/concurrent_lru_cache.h
@@ -0,0 +1,238 @@
+/*
+    Copyright 2005-2012 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_concurrent_lru_cache_H
+#define __TBB_concurrent_lru_cache_H
+
+#if ! TBB_PREVIEW_CONCURRENT_LRU_CACHE
+    #error Set TBB_PREVIEW_CONCURRENT_LRU_CACHE to include concurrent_lru_cache.h
+#endif
+
+#include <map>
+#include <list>
+
+#include "tbb_stddef.h"
+#include "atomic.h"
+#include "internal/_aggregator_impl.h"
+
+namespace tbb{
+namespace interface6 {
+
+
+template <typename key_type, typename value_type, typename value_functor_type = value_type (*)(key_type) >
+class concurrent_lru_cache : internal::no_assign{
+private:
+    typedef concurrent_lru_cache self_type;
+    typedef value_functor_type value_function_type;
+    typedef std::size_t ref_counter_type;
+    struct map_value_type;
+    typedef std::map<key_type, map_value_type> map_storage_type;
+    typedef std::list<typename map_storage_type::iterator> lru_list_type;
+    struct map_value_type {
+        value_type my_value;
+        ref_counter_type my_ref_counter;
+        typename lru_list_type::iterator my_lru_list_iterator;
+        bool my_is_ready;
+
+        map_value_type (value_type const& a_value,  ref_counter_type a_ref_counter,    typename lru_list_type::iterator a_lru_list_iterator, bool a_is_ready)
+            : my_value(a_value), my_ref_counter(a_ref_counter), my_lru_list_iterator (a_lru_list_iterator), my_is_ready(a_is_ready)
+        {}
+    };
+
+    class handle_object;
+
+    struct aggregator_operation;
+    typedef aggregator_operation aggregated_operation_type;
+    typedef tbb::internal::aggregating_functor<self_type,aggregated_operation_type> aggregator_function_type;
+    friend class tbb::internal::aggregating_functor<self_type,aggregated_operation_type>;
+    typedef tbb::internal::aggregator<aggregator_function_type, aggregated_operation_type> aggregator_type;
+
+private:
+    value_function_type my_value_function;
+    std::size_t const my_number_of_lru_history_items;
+    map_storage_type my_map_storage;
+    lru_list_type my_lru_list;
+    aggregator_type my_aggregator;
+
+public:
+    typedef handle_object handle;
+
+public:
+    concurrent_lru_cache(value_function_type f, std::size_t number_of_lru_history_items)
+        : my_value_function(f),my_number_of_lru_history_items(number_of_lru_history_items)
+    {
+        my_aggregator.initialize_handler(aggregator_function_type(this));
+    }
+
+    handle_object operator[](key_type k){
+        retrieve_aggregator_operation op(k);
+        my_aggregator.execute(&op);
+        if (op.is_new_value_needed()){
+             op.result().second.my_value = my_value_function(k);
+             __TBB_store_with_release(op.result().second.my_is_ready, true);
+        }else{
+            tbb::internal::spin_wait_while_eq(op.result().second.my_is_ready,false);
+        }
+        return handle_object(*this,op.result());
+    }
+private:
+    void signal_end_of_usage(typename map_storage_type::reference value_ref){
+        signal_end_of_usage_aggregator_operation op(value_ref);
+        my_aggregator.execute(&op);
+    }
+
+private:
+    struct handle_move_t:no_assign{
+        concurrent_lru_cache & my_cache_ref;
+        typename map_storage_type::reference my_map_record_ref;
+        handle_move_t(concurrent_lru_cache & cache_ref, typename map_storage_type::reference value_ref):my_cache_ref(cache_ref),my_map_record_ref(value_ref) {};
+    };
+    class handle_object {
+        concurrent_lru_cache * my_cache_pointer;
+        typename map_storage_type::reference my_map_record_ref;
+    public:
+        handle_object(concurrent_lru_cache & cache_ref, typename map_storage_type::reference value_ref):my_cache_pointer(&cache_ref), my_map_record_ref(value_ref) {}
+        handle_object(handle_move_t m):my_cache_pointer(&m.my_cache_ref), my_map_record_ref(m.my_map_record_ref){}
+        operator handle_move_t(){ return move(*this);}
+        value_type& value(){
+            __TBB_ASSERT(my_cache_pointer,"get value from moved from object?");
+            return my_map_record_ref.second.my_value;
+        }
+        ~handle_object(){
+            if (my_cache_pointer){
+                my_cache_pointer->signal_end_of_usage(my_map_record_ref);
+            }
+        }
+    private:
+        friend handle_move_t move(handle_object& h){
+            return handle_object::move(h);
+        }
+        static handle_move_t move(handle_object& h){
+            __TBB_ASSERT(h.my_cache_pointer,"move from the same object twice ?");
+            concurrent_lru_cache * cache_pointer = NULL;
+            std::swap(cache_pointer,h.my_cache_pointer);
+            return handle_move_t(*cache_pointer,h.my_map_record_ref);
+        }
+    private:
+        void operator=(handle_object&);
+        handle_object(handle_object &);
+    };
+private:
+    //TODO: looks like aggregator_operation is a perfect match for statically typed variant type
+    struct aggregator_operation : tbb::internal::aggregated_operation<aggregator_operation>{
+        enum e_op_type {op_retive, op_signal_end_of_usage};
+        //TODO: try to use pointer to function apply_visitor here
+        //TODO: try virtual functions and measure the difference
+        e_op_type my_operation_type;
+        aggregator_operation(e_op_type operation_type): my_operation_type(operation_type) {}
+        void cast_and_handle(self_type& container ){
+            if (my_operation_type==op_retive){
+                static_cast<retrieve_aggregator_operation*>(this)->handle(container);
+            }else{
+                static_cast<signal_end_of_usage_aggregator_operation*>(this)->handle(container);
+            }
+        }
+    };
+    struct retrieve_aggregator_operation : aggregator_operation, private internal::no_assign {
+        key_type my_key;
+        typename map_storage_type::pointer my_result_map_record_pointer;
+        bool my_is_new_value_needed;
+        retrieve_aggregator_operation(key_type key):aggregator_operation(aggregator_operation::op_retive),my_key(key),my_is_new_value_needed(false){}
+        void handle(self_type& container ){
+            my_result_map_record_pointer = & container.retrieve_serial(my_key,my_is_new_value_needed);
+        }
+        typename map_storage_type::reference result(){ return * my_result_map_record_pointer; }
+        bool is_new_value_needed(){return my_is_new_value_needed;}
+    };
+    struct signal_end_of_usage_aggregator_operation : aggregator_operation, private internal::no_assign {
+        typename map_storage_type::reference my_map_record_ref;
+        signal_end_of_usage_aggregator_operation(typename map_storage_type::reference map_record_ref):aggregator_operation(aggregator_operation::op_signal_end_of_usage),my_map_record_ref(map_record_ref){}
+        void handle(self_type& container ){
+            container.signal_end_of_usage_serial(my_map_record_ref);
+        }
+    };
+
+private:
+   void handle_operations(aggregator_operation* op_list){
+       while(op_list){
+           op_list->cast_and_handle(*this);
+           aggregator_operation* tmp = op_list;
+           op_list=op_list->next;
+           tbb::internal::itt_store_word_with_release(tmp->status, uintptr_t(1));
+       }
+   }
+
+private:
+   typename map_storage_type::reference retrieve_serial(key_type k, bool& is_new_value_needed){
+        typename map_storage_type::iterator it = my_map_storage.find(k);
+        if (it == my_map_storage.end()){
+            it = my_map_storage.insert(it,std::make_pair(k,map_value_type(value_type(),0,my_lru_list.end(),false)));
+            is_new_value_needed = true;
+        }else {
+            typename lru_list_type::iterator list_it = it->second.my_lru_list_iterator;
+            if (list_it!=my_lru_list.end()) {
+                __TBB_ASSERT(!it->second.my_ref_counter,"item to be evicted should not have a live references");
+                //item is going to be used. Therefore it is not a subject for eviction
+                //so - remove it from LRU history.
+                my_lru_list.erase(list_it);
+                it->second.my_lru_list_iterator= my_lru_list.end();
+            }
+        }
+        ++(it->second.my_ref_counter);
+        return *it;
+    }
+
+    void signal_end_of_usage_serial(typename map_storage_type::reference map_record_ref){
+        typename map_storage_type::iterator it = my_map_storage.find(map_record_ref.first);
+        __TBB_ASSERT(it!=my_map_storage.end(),"cache should not return past-end iterators to outer world");
+        __TBB_ASSERT(&(*it) == &map_record_ref,"dangling reference has been returned to outside world? data race ?");
+        __TBB_ASSERT( my_lru_list.end()== std::find(my_lru_list.begin(),my_lru_list.end(),it),
+                "object in use should not be in list of unused objects ");
+        if (! --(it->second.my_ref_counter)){
+            //it was the last reference so put it to the LRU history
+            if (my_lru_list.size()>=my_number_of_lru_history_items){
+                //evict items in order to get a space
+                size_t number_of_elements_to_evict = 1 + my_lru_list.size() - my_number_of_lru_history_items;
+                for (size_t i=0; i<number_of_elements_to_evict; ++i){
+                    typename map_storage_type::iterator it_to_evict = my_lru_list.back();
+                    __TBB_ASSERT(!it_to_evict->second.my_ref_counter,"item to be evicted should not have a live references");
+                    my_lru_list.pop_back();
+                    my_map_storage.erase(it_to_evict);
+                }
+            }
+            my_lru_list.push_front(it);
+            it->second.my_lru_list_iterator = my_lru_list.begin();
+        }
+    }
+};
+} // namespace interface6
+
+using interface6::concurrent_lru_cache;
+
+} // namespace tbb
+#endif //__TBB_concurrent_lru_cache_H
diff --git a/include/tbb/concurrent_priority_queue.h b/include/tbb/concurrent_priority_queue.h
index b5601f1..47f40cd 100644
--- a/include/tbb/concurrent_priority_queue.h
+++ b/include/tbb/concurrent_priority_queue.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -231,8 +231,7 @@ class concurrent_priority_queue {
 
         __TBB_ASSERT(mark == data.size(), NULL);
 
-        // first pass processes all constant time operations: pushes,
-        // tops, some pops. Also reserve.
+        // First pass processes all constant (amortized; reallocation may happen) time pushes and pops.
         while (op_list) {
             // ITT note: &(op_list->status) tag is used to cover accesses to op_list
             // node. This thread is going to handle the operation, and so will acquire it
diff --git a/include/tbb/concurrent_queue.h b/include/tbb/concurrent_queue.h
index cc7ac33..b2d495b 100644
--- a/include/tbb/concurrent_queue.h
+++ b/include/tbb/concurrent_queue.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -269,6 +269,13 @@ public:
         internal_pop( &destination );
     }
 
+#if TBB_USE_EXCEPTIONS
+    //! Abort all pending queue operations
+    void abort() {
+        internal_abort();
+    }
+#endif
+
     //! Enqueue an item at tail of queue if queue is not already full.
     /** Does not wait for queue to become not full.
         Returns true if item is pushed; false if queue was already full. */
diff --git a/include/tbb/concurrent_unordered_map.h b/include/tbb/concurrent_unordered_map.h
index e14fad0..1f5272a 100644
--- a/include/tbb/concurrent_unordered_map.h
+++ b/include/tbb/concurrent_unordered_map.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/concurrent_unordered_set.h b/include/tbb/concurrent_unordered_set.h
index 45b550e..acf550b 100644
--- a/include/tbb/concurrent_unordered_set.h
+++ b/include/tbb/concurrent_unordered_set.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/concurrent_vector.h b/include/tbb/concurrent_vector.h
index 2a38ff4..3692cf0 100644
--- a/include/tbb/concurrent_vector.h
+++ b/include/tbb/concurrent_vector.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -106,7 +106,7 @@ namespace internal {
             }
 #endif /* TBB_USE_ASSERT */
         };
- 
+
         // Data fields
 
         //! allocator function pointer
@@ -190,19 +190,19 @@ private:
         class helper;
         friend class helper;
     };
-    
+
     typedef concurrent_vector_base_v3 concurrent_vector_base;
 
     //! Meets requirements of a forward iterator for STL and a Value for a blocked_range.*/
     /** Value is either the T or const T type of the container.
         @ingroup containers */
     template<typename Container, typename Value>
-    class vector_iterator 
+    class vector_iterator
     {
         //! concurrent_vector over which we are iterating.
         Container* my_vector;
 
-        //! Index into the vector 
+        //! Index into the vector
         size_t my_index;
 
         //! Caches my_vector->internal_subscript(my_index)
@@ -220,7 +220,7 @@ private:
 
         template<typename C, typename T, typename U>
         friend ptrdiff_t operator-( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
-    
+
         template<typename C, typename U>
         friend class internal::vector_iterator;
 
@@ -229,11 +229,11 @@ private:
         friend class tbb::concurrent_vector;
 #else
 public: // workaround for MSVC
-#endif 
+#endif
 
-        vector_iterator( const Container& vector, size_t index, void *ptr = 0 ) : 
-            my_vector(const_cast<Container*>(&vector)), 
-            my_index(index), 
+        vector_iterator( const Container& vector, size_t index, void *ptr = 0 ) :
+            my_vector(const_cast<Container*>(&vector)),
+            my_index(index),
             my_item(static_cast<Value*>(ptr))
         {}
 
@@ -293,7 +293,7 @@ public: // workaround for MSVC
 
         //! Pre decrement
         vector_iterator& operator--() {
-            __TBB_ASSERT( my_index>0, "operator--() applied to iterator already at beginning of concurrent_vector" ); 
+            __TBB_ASSERT( my_index>0, "operator--() applied to iterator already at beginning of concurrent_vector" );
             size_t k = my_index--;
             if( my_item ) {
                 // Following test uses 2's-complement wizardry
@@ -405,7 +405,7 @@ public: // workaround for MSVC
 @par
     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:
-    - There are no guaranties that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.
+    - There are no guarantees that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.
     - An invalid vector instance cannot be repaired; it is unable to grow anymore.
     - Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.
     - Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exception, and in case of using at() method a C++ exception is thrown.
@@ -428,13 +428,13 @@ public: // workaround for MSVC
     - Changed return type of methods grow* and push_back to iterator
 
 @par Changes since TBB 2.0
-    - Implemented exception-safety guaranties
+    - Implemented exception-safety guarantees
     - Added template argument for allocator
     - Added allocator argument in constructors
     - Faster index calculation
     - First growth call specifies a number of segments to be merged in the first allocation.
     - Fixed memory blow up for swarm of vector's instances of small size
-    - Added grow_by(size_type n, const_reference t) growth using copying constructor to init new items. 
+    - Added grow_by(size_type n, const_reference t) growth using copying constructor to init new items.
     - Added STL-like constructors.
     - Added operators ==, < and derivatives
     - Added at() method, approved for using after an exception was thrown inside the vector
@@ -442,7 +442,7 @@ public: // workaround for MSVC
     - Added assign() methods
     - Added compact() method to defragment first segments
     - Added swap() method
-    - range() defaults on grainsize = 1 supporting auto grainsize algorithms. 
+    - range() defaults on grainsize = 1 supporting auto grainsize algorithms.
 
     @ingroup containers */
 template<typename T, class A>
@@ -457,9 +457,9 @@ private:
         typedef const T& const_reference;
         typedef I iterator;
         typedef ptrdiff_t difference_type;
-        generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : blocked_range<I>(begin_,end_,grainsize_) {} 
+        generic_range_type( I begin_, I end_, size_t grainsize_ = 1) : blocked_range<I>(begin_,end_,grainsize_) {}
         template<typename U>
-        generic_range_type( const generic_range_type<U>& r) : blocked_range<I>(r.begin(),r.end(),r.grainsize()) {} 
+        generic_range_type( const generic_range_type<U>& r) : blocked_range<I>(r.begin(),r.end(),r.grainsize()) {}
         generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}
     };
 
@@ -482,7 +482,7 @@ public:
     typedef internal::vector_iterator<concurrent_vector,T> iterator;
     typedef internal::vector_iterator<concurrent_vector,const T> const_iterator;
 
-#if !defined(_MSC_VER) || _CPPLIB_VER>=300 
+#if !defined(_MSC_VER) || _CPPLIB_VER>=300
     // Assume ISO standard definition of std::reverse_iterator
     typedef std::reverse_iterator<iterator> reverse_iterator;
     typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
@@ -612,7 +612,7 @@ public:
     }
 #endif
 
-    //! Grow by "delta" elements using copying constuctor.
+    //! Grow by "delta" elements using copying constructor.
 #if TBB_DEPRECATED
     /** Returns old size. */
     size_type grow_by( size_type delta, const_reference t ) {
@@ -625,7 +625,7 @@ public:
     }
 #endif
 
-    //! Append minimal sequence of elements such that size()>=n.  
+    //! Append minimal sequence of elements such that size()>=n.
 #if TBB_DEPRECATED
     /** 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. */
@@ -647,7 +647,7 @@ public:
     };
 #endif
 
-    //! Push item 
+    //! Push item
 #if TBB_DEPRECATED
     size_type push_back( const_reference item )
 #else
@@ -689,7 +689,7 @@ public:
     }
 
     //! Get range for iterating with parallel algorithms
-    range_type range( size_t grainsize = 1) {
+    range_type range( size_t grainsize = 1 ) {
         return range_type( begin(), end(), grainsize );
     }
 
@@ -697,6 +697,7 @@ public:
     const_range_type range( size_t grainsize = 1 ) const {
         return const_range_type( begin(), end(), grainsize );
     }
+
     //------------------------------------------------------------------------
     // Capacity
     //------------------------------------------------------------------------
@@ -706,14 +707,14 @@ public:
         return cp < sz ? cp : sz;
     }
 
-    //! Return true if vector is not empty or has elements under construction at least.
+    //! Return false if vector is not empty or has elements under construction at least.
     bool empty() const {return !my_early_size;}
 
     //! Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value.
     size_type capacity() const {return internal_capacity();}
 
     //! Allocate enough space to grow to size n without having to allocate more memory later.
-    /** Like most of the methods provided for STL compatibility, this method is *not* thread safe. 
+    /** 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. */
     void reserve( size_type n ) {
         if( n )
@@ -724,13 +725,13 @@ public:
     void resize( size_type n ) {
         internal_resize( n, sizeof(T), max_size(), NULL, &destroy_array, &initialize_array );
     }
-    
+
     //! Resize the vector, copy t for new elements. Not thread-safe.
     void resize( size_type n, const_reference t ) {
         internal_resize( n, sizeof(T), max_size(), static_cast<const void*>(&t), &destroy_array, &initialize_array_by );
     }
-   
-#if TBB_DEPRECATED 
+
+#if TBB_DEPRECATED
     //! An alias for shrink_to_fit()
     void compact() {shrink_to_fit();}
 #endif /* TBB_DEPRECATED */
@@ -891,13 +892,13 @@ private:
         void assign(const void *src) { for(; i < n; ++i) array[i] = static_cast<const T*>(src)[i]; }
         template<class I> void iterate(I &src) { for(; i < n; ++i, ++src) new( &array[i] ) T( *src ); }
         ~internal_loop_guide() {
-            if(i < n) // if exception raised, do zerroing on the rest of items
+            if(i < n) // if exception raised, do zeroing on the rest of items
                 std::memset(array+i, 0, (n-i)*sizeof(value_type));
         }
     };
 };
 
-#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) 
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
 #pragma warning (push)
 #pragma warning (disable: 4701) // potentially uninitialized local variable "old"
 #endif
@@ -913,9 +914,9 @@ void concurrent_vector<T, A>::shrink_to_fit() {
         __TBB_RETHROW();
     }
 }
-#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) 
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
 #pragma warning (pop)
-#endif // warning 4701 is back 
+#endif // warning 4701 is back
 
 template<typename T, class A>
 void concurrent_vector<T, A>::internal_free_segments(void *table[], segment_index_t k, segment_index_t first_block) {
@@ -1002,7 +1003,7 @@ void concurrent_vector<T, A>::assign_array( void* dst, const void* src, size_typ
     internal_loop_guide loop(n, dst); loop.assign(src);
 }
 
-#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) 
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
     // Workaround for overzealous compiler warning
     #pragma warning (push)
     #pragma warning (disable: 4189)
@@ -1013,9 +1014,9 @@ void concurrent_vector<T, A>::destroy_array( void* begin, size_type n ) {
     for( size_type j=n; j>0; --j )
         array[j-1].~T(); // destructors are supposed to not throw any exceptions
 }
-#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) 
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
     #pragma warning (pop)
-#endif // warning 4189 is back 
+#endif // warning 4189 is back
 
 // concurrent_vector's template functions
 template<typename T, class A1, class A2>
diff --git a/include/tbb/critical_section.h b/include/tbb/critical_section.h
index ea712d1..f48db40 100644
--- a/include/tbb/critical_section.h
+++ b/include/tbb/critical_section.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/enumerable_thread_specific.h b/include/tbb/enumerable_thread_specific.h
index f0a2b57..eb989b5 100644
--- a/include/tbb/enumerable_thread_specific.h
+++ b/include/tbb/enumerable_thread_specific.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -60,7 +60,7 @@ namespace interface6 {
 #else
             typedef pthread_t key_type;
 #endif
-#if __TBB_GCC_3_3_PROTECTED_BROKEN
+#if __TBB_PROTECTED_NESTED_CLASS_BROKEN
         public:
 #endif
             struct slot;
@@ -87,7 +87,7 @@ namespace interface6 {
                     return tbb::internal::punned_cast<tbb::atomic<key_type>*>(&key)->compare_and_swap(k,0)==0;
                 }
             };
-#if __TBB_GCC_3_3_PROTECTED_BROKEN
+#if __TBB_PROTECTED_NESTED_CLASS_BROKEN
         protected:
 #endif
         
@@ -120,11 +120,7 @@ namespace interface6 {
             static size_t hash( key_type k ) {
                 // Multiplicative hashing.  Client should use *upper* bits.
                 // casts required for Mac gcc4.* compiler
-#if __TBB_WORDSIZE == 4
-                return uintptr_t(k)*0x9E3779B9;
-#else
-                return uintptr_t(k)*0x9E3779B97F4A7C15;
-#endif 
+                return uintptr_t(k)*tbb::internal::size_t_select(0x9E3779B9,0x9E3779B97F4A7C15ULL);
             } 
         
             ets_base() {my_root=NULL; my_count=0;}
diff --git a/include/tbb/flow_graph.h b/include/tbb/flow_graph.h
index 98da0f5..0b725a3 100644
--- a/include/tbb/flow_graph.h
+++ b/include/tbb/flow_graph.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -68,110 +68,100 @@ enum concurrency { unlimited = 0, serial = 1 };
 
 namespace interface6 {
 
-//! The base of all graph nodes.  Allows them to be stored in a collection for deletion.
-class graph_node {
-public:
-    virtual ~graph_node() {} 
-}; 
-
-//! An empty class used for messages that mean "I'm done" 
+//! An empty class used for messages that mean "I'm done"
 class continue_msg {};
-        
+
 template< typename T > class sender;
 template< typename T > class receiver;
 class continue_receiver;
-        
+
 //! Pure virtual template class that defines a sender of messages of type T
 template< typename T >
 class sender {
 public:
     //! The output type of this sender
     typedef T output_type;
-        
+
     //! The successor type for this node
     typedef receiver<T> successor_type;
-        
+
     virtual ~sender() {}
-        
+
     //! Add a new successor to this node
     virtual bool register_successor( successor_type &r ) = 0;
-        
+
     //! Removes a successor from this node
     virtual bool remove_successor( successor_type &r ) = 0;
-        
+
     //! Request an item from the sender
     virtual bool try_get( T & ) { return false; }
-        
-    //! Reserves an item in the sender 
+
+    //! Reserves an item in the sender
     virtual bool try_reserve( T & ) { return false; }
-        
+
     //! Releases the reserved item
     virtual bool try_release( ) { return false; }
-        
+
     //! Consumes the reserved item
     virtual bool try_consume( ) { return false; }
-        
 };
-        
-        
+
 //! Pure virtual template class that defines a receiver of messages of type T
 template< typename T >
 class receiver {
 public:
-        
     //! The input type of this receiver
     typedef T input_type;
-        
+
     //! The predecessor type for this node
     typedef sender<T> predecessor_type;
-        
+
     //! Destructor
     virtual ~receiver() {}
-        
+
     //! Put an item to the receiver
     virtual bool try_put( const T& t ) = 0;
-        
+
     //! Add a predecessor to the node
     virtual bool register_predecessor( predecessor_type & ) { return false; }
-        
+
     //! Remove a predecessor from the node
     virtual bool remove_predecessor( predecessor_type & ) { return false; }
-        
 };
-        
+
 //! Base class for receivers of completion messages
 /** These receivers automatically reset, but cannot be explicitly waited on */
 class continue_receiver : public receiver< continue_msg > {
 public:
-        
+
     //! The input type
     typedef continue_msg input_type;
-        
+
     //! The predecessor type for this node
     typedef sender< continue_msg > predecessor_type;
-        
+
     //! Constructor
-    continue_receiver( int number_of_predecessors = 0 ) { 
+    continue_receiver( int number_of_predecessors = 0 ) {
         my_predecessor_count = my_initial_predecessor_count = number_of_predecessors;
         my_current_count = 0;
     }
-        
+
     //! Copy constructor
-    continue_receiver( const continue_receiver& src ) : receiver<continue_msg>() { 
+    continue_receiver( const continue_receiver& src ) : receiver<continue_msg>() {
         my_predecessor_count = my_initial_predecessor_count = src.my_initial_predecessor_count;
         my_current_count = 0;
     }
-        
+
     //! Destructor
     virtual ~continue_receiver() { }
-        
+
     //! Increments the trigger threshold
     /* override */ bool register_predecessor( predecessor_type & ) {
         spin_mutex::scoped_lock l(my_mutex);
         ++my_predecessor_count;
         return true;
     }
-        
+
     //! Decrements the trigger threshold
     /** Does not check to see if the removal of the predecessor now makes the current count
         exceed the new threshold.  So removing a predecessor while the graph is active can cause
@@ -181,14 +171,14 @@ public:
         --my_predecessor_count;
         return true;
     }
-        
+
     //! Puts a continue_msg to the receiver
     /** If the message causes the message count to reach the predecessor count, execute() is called and
         the message count is reset to 0.  Otherwise the message count is incremented. */
     /* override */ bool try_put( const input_type & ) {
         {
             spin_mutex::scoped_lock l(my_mutex);
-            if ( ++my_current_count < my_predecessor_count ) 
+            if ( ++my_current_count < my_predecessor_count )
                 return true;
             else
                 my_current_count = 0;
@@ -196,31 +186,100 @@ public:
         execute();
         return true;
     }
-        
+
 protected:
-        
     spin_mutex my_mutex;
     int my_predecessor_count;
     int my_current_count;
     int my_initial_predecessor_count;
-        
+
     //! Does whatever should happen when the threshold is reached
     /** This should be very fast or else spawn a task.  This is
         called while the sender is blocked in the try_put(). */
     virtual void execute() = 0;
-        
 };
 
 #include "internal/_flow_graph_impl.h"
 using namespace internal::graph_policy_namespace;
 
+class graph;
+class graph_node;
+
+template <typename GraphContainerType, typename GraphNodeType>
+class graph_iterator {
+    friend class graph;
+    friend class graph_node;
+public:
+    typedef size_t size_type;
+    typedef GraphNodeType value_type;
+    typedef GraphNodeType* pointer;
+    typedef GraphNodeType& reference;
+    typedef const GraphNodeType& const_reference;
+    typedef std::forward_iterator_tag iterator_category;
+
+    //! Default constructor
+    graph_iterator() : my_graph(NULL), current_node(NULL) {}
+
+    //! Copy constructor
+    graph_iterator(const graph_iterator& other) :
+        my_graph(other.my_graph), current_node(other.current_node)
+    {}
+
+    //! Assignment
+    graph_iterator& operator=(const graph_iterator& other) {
+        if (this != &other) {
+            my_graph = other.my_graph;
+            current_node = other.current_node;
+        }
+        return *this;
+    }
+
+    //! Dereference
+    reference operator*() const;
+
+    //! Dereference
+    pointer operator->() const;
+
+    //! Equality
+    bool operator==(const graph_iterator& other) const {
+        return ((my_graph == other.my_graph) && (current_node == other.current_node));
+    }
+
+    //! Inequality
+    bool operator!=(const graph_iterator& other) const { return !(operator==(other)); }
+
+    //! Pre-increment
+    graph_iterator& operator++() {
+        internal_forward();
+        return *this;
+    }
+
+    //! Post-increment
+    graph_iterator operator++(int) {
+        graph_iterator result = *this;
+        operator++();
+        return result;
+    }
+
+private:
+    // the graph over which we are iterating
+    GraphContainerType *my_graph;
+    // pointer into my_graph's my_nodes list
+    pointer current_node;
+
+    //! Private initializing constructor for begin() and end() iterators
+    graph_iterator(GraphContainerType *g, bool begin);
+    void internal_forward();
+};
+
 //! The graph class
 /** This class serves as a handle to the graph */
 class graph : tbb::internal::no_copy {
-        
+    friend class graph_node;
+
     template< typename Body >
     class run_task : public task {
-    public: 
+    public:
         run_task( Body& body ) : my_body(body) {}
         task *execute() {
             my_body();
@@ -229,10 +288,10 @@ class graph : tbb::internal::no_copy {
     private:
         Body my_body;
     };
-        
+
     template< typename Receiver, typename Body >
     class run_and_put_task : public task {
-    public: 
+    public:
         run_and_put_task( Receiver &r, Body& body ) : my_receiver(r), my_body(body) {}
         task *execute() {
             my_receiver.try_put( my_body() );
@@ -242,104 +301,232 @@ class graph : tbb::internal::no_copy {
         Receiver &my_receiver;
         Body my_body;
     };
-        
+
 public:
-        
-        
-    //! Constructs a graph withy no nodes.
-    graph() : my_root_task( new ( task::allocate_root( ) ) empty_task ) {
+    //! Constructs a graph with isolated task_group_context 
+    explicit graph() : my_nodes(NULL), my_nodes_last(NULL)
+    {
+        own_context = true;
+        cancelled = false;
+        caught_exception = false;
+        my_context = new task_group_context();
+        my_root_task = ( new ( task::allocate_root(*my_context) ) empty_task );
         my_root_task->set_ref_count(1);
     }
-        
+
+    //! Constructs a graph with use_this_context as context
+    explicit graph(task_group_context& use_this_context) :
+    my_context(&use_this_context), my_nodes(NULL), my_nodes_last(NULL)
+    {
+        own_context = false;
+        my_root_task = ( new ( task::allocate_root(*my_context) ) empty_task );
+        my_root_task->set_ref_count(1);
+    }
+
     //! Destroys the graph.
-    /** Calls wait_for_all on the graph, deletes all of the nodes appended by calls to add, and then 
-        destroys the root task of the graph. */ 
+    /** Calls wait_for_all, then destroys the root task and context. */
     ~graph() {
         wait_for_all();
         my_root_task->set_ref_count(0);
         task::destroy( *my_root_task );
+        if (own_context) delete my_context;
     }
-        
-        
+
     //! Used to register that an external entity may still interact with the graph.
     /** The graph will not return from wait_for_all until a matching number of decrement_wait_count calls
         is made. */
-    void increment_wait_count() { 
+    void increment_wait_count() {
         if (my_root_task)
             my_root_task->increment_ref_count();
     }
-        
+
     //! Deregisters an external entity that may have interacted with the graph.
     /** The graph will not return from wait_for_all until all the number of decrement_wait_count calls
         matches the number of increment_wait_count calls. */
-    void decrement_wait_count() { 
+    void decrement_wait_count() {
         if (my_root_task)
-            my_root_task->decrement_ref_count(); 
+            my_root_task->decrement_ref_count();
     }
-        
+
     //! Spawns a task that runs a body and puts its output to a specific receiver
-    /** The task is spawned as a child of the graph. This is useful for running tasks 
+    /** The task is spawned as a child of the graph. This is useful for running tasks
         that need to block a wait_for_all() on the graph.  For example a one-off source. */
     template< typename Receiver, typename Body >
         void run( Receiver &r, Body body ) {
-       task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) ) 
+       task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) )
            run_and_put_task< Receiver, Body >( r, body ) );
     }
-        
-    //! Spawns a task that runs a function object 
-    /** The task is spawned as a child of the graph. This is useful for running tasks 
+
+    //! Spawns a task that runs a function object
+    /** The task is spawned as a child of the graph. This is useful for running tasks
         that need to block a wait_for_all() on the graph. For example a one-off source. */
     template< typename Body >
     void run( Body body ) {
-       task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) ) 
+       task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) )
            run_task< Body >( body ) );
     }
-        
-    //! Waits until the graph is idle and the number of decrement_wait_count calls equals the number of increment_wait_count calls.
+
+    //! Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls.
     /** The waiting thread will go off and steal work while it is block in the wait_for_all. */
     void wait_for_all() {
-        if (my_root_task)
-            my_root_task->wait_for_all();
-        my_root_task->set_ref_count(1);
+        cancelled = false;
+        caught_exception = false;
+        if (my_root_task) {
+#if TBB_USE_EXCEPTIONS
+            try {
+#endif
+                my_root_task->wait_for_all();
+                cancelled = my_context->is_group_execution_cancelled();
+#if TBB_USE_EXCEPTIONS
+            }
+            catch(...) {
+                my_root_task->set_ref_count(1);
+                my_context->reset();
+                caught_exception = true;
+                cancelled = true;
+                throw;
+            }
+#endif
+            my_root_task->set_ref_count(1);
+        }
     }
-        
+
     //! Returns the root task of the graph
     task * root_task() {
         return my_root_task;
     }
-        
+
+    // ITERATORS
+    template<typename C, typename N>
+    friend class graph_iterator;
+
+    // Graph iterator typedefs
+    typedef graph_iterator<graph,graph_node> iterator;
+    typedef graph_iterator<const graph,const graph_node> const_iterator;
+
+    // Graph iterator constructors
+    //! start iterator
+    iterator begin() { return iterator(this, true); }
+    //! end iterator
+    iterator end() { return iterator(this, false); }
+     //! start const iterator
+    const_iterator begin() const { return const_iterator(this, true); }
+    //! end const iterator
+    const_iterator end() const { return const_iterator(this, false); }
+    //! start const iterator
+    const_iterator cbegin() const { return const_iterator(this, true); }
+    //! end const iterator
+    const_iterator cend() const { return const_iterator(this, false); }
+
+    //! return status of graph execution
+    bool is_cancelled() { return cancelled; }
+    bool exception_thrown() { return caught_exception; }
+
 private:
-        
     task *my_root_task;
-        
+    task_group_context *my_context;
+    bool own_context;
+    bool cancelled;
+    bool caught_exception;
+
+    graph_node *my_nodes, *my_nodes_last;
+
+    spin_mutex nodelist_mutex;
+    void register_node(graph_node *n); 
+    void remove_node(graph_node *n);
+
+};
+
+template <typename C, typename N>
+graph_iterator<C,N>::graph_iterator(C *g, bool begin) : my_graph(g), current_node(NULL)
+{
+    if (begin) current_node = my_graph->my_nodes;
+    //else it is an end iterator by default
+}
+
+template <typename C, typename N>
+typename graph_iterator<C,N>::reference graph_iterator<C,N>::operator*() const {
+    __TBB_ASSERT(current_node, "graph_iterator at end");
+    return *operator->();
+}
+
+template <typename C, typename N>
+typename graph_iterator<C,N>::pointer graph_iterator<C,N>::operator->() const { 
+    return current_node;
+}
+
+
+template <typename C, typename N>
+void graph_iterator<C,N>::internal_forward() {
+    if (current_node) current_node = current_node->next;
+}
+
+//! The base of all graph nodes.
+class graph_node : tbb::internal::no_assign {
+    friend class graph;
+    template<typename C, typename N>
+    friend class graph_iterator;
+protected:
+    graph& my_graph;
+    graph_node *next, *prev;
+public:
+    graph_node(graph& g) : my_graph(g) {
+        my_graph.register_node(this);
+    }
+    virtual ~graph_node() {
+        my_graph.remove_node(this);
+    }
 };
 
+inline void graph::register_node(graph_node *n) {
+    n->next = NULL;
+    {
+        spin_mutex::scoped_lock lock(nodelist_mutex);
+        n->prev = my_nodes_last;
+        if (my_nodes_last) my_nodes_last->next = n;
+        my_nodes_last = n;
+        if (!my_nodes) my_nodes = n;
+    }
+}
+
+inline void graph::remove_node(graph_node *n) {
+    {
+        spin_mutex::scoped_lock lock(nodelist_mutex);
+        __TBB_ASSERT(my_nodes && my_nodes_last, "graph::remove_node: Error: no registered nodes");
+        if (n->prev) n->prev->next = n->next;
+        if (n->next) n->next->prev = n->prev;
+        if (my_nodes_last == n) my_nodes_last = n->prev;
+        if (my_nodes == n) my_nodes = n->next;
+    }
+    n->prev = n->next = NULL;
+}
+
 #include "internal/_flow_graph_node_impl.h"
 
 //! An executable node that acts as a source, i.e. it has no predecessors
 template < typename Output >
 class source_node : public graph_node, public sender< Output > {
+    using graph_node::my_graph;
 public:
-        
     //! The type of the output message, which is complete
-    typedef Output output_type;           
-        
+    typedef Output output_type;
+
     //! The type of successors of this node
     typedef receiver< Output > successor_type;
-        
+
     //! Constructor for a node with a successor
     template< typename Body >
     source_node( graph &g, Body body, bool is_active = true )
-        : my_root_task(g.root_task()), my_active(is_active), init_my_active(is_active),
+        : graph_node(g), my_root_task(g.root_task()), my_active(is_active), init_my_active(is_active),
         my_body( new internal::source_body_leaf< output_type, Body>(body) ),
-        my_reserved(false), my_has_cached_item(false) 
-    { 
+        my_reserved(false), my_has_cached_item(false)
+    {
         my_successors.set_owner(this);
     }
-        
+
     //! Copy constructor
     source_node( const source_node& src ) :
-        graph_node(), sender<Output>(),
+        graph_node(src.my_graph), sender<Output>(),
         my_root_task( src.my_root_task), my_active(src.init_my_active),
         init_my_active(src.init_my_active), my_body( src.my_body->clone() ),
         my_reserved(false), my_has_cached_item(false)
@@ -349,7 +536,7 @@ public:
 
     //! The destructor
     ~source_node() { delete my_body; }
-        
+
     //! Add a new successor to this node
     /* override */ bool register_successor( receiver<output_type> &r ) {
         spin_mutex::scoped_lock lock(my_mutex);
@@ -358,20 +545,20 @@ public:
             spawn_put();
         return true;
     }
-        
+
     //! Removes a successor from this node
     /* override */ bool remove_successor( receiver<output_type> &r ) {
         spin_mutex::scoped_lock lock(my_mutex);
         my_successors.remove_successor(r);
         return true;
     }
-        
+
     //! Request an item from the node
     /*override */ bool try_get( output_type &v ) {
         spin_mutex::scoped_lock lock(my_mutex);
-        if ( my_reserved )  
+        if ( my_reserved )
             return false;
-        
+
         if ( my_has_cached_item ) {
             v = my_cached_item;
             my_has_cached_item = false;
@@ -380,17 +567,17 @@ public:
         }
         return true;
     }
-        
+
     //! Reserves an item.
     /* override */ bool try_reserve( output_type &v ) {
         spin_mutex::scoped_lock lock(my_mutex);
         if ( my_reserved ) {
             return false;
         }
-        
-        if ( !my_has_cached_item && (*my_body)(my_cached_item) )  
+
+        if ( !my_has_cached_item && (*my_body)(my_cached_item) )
             my_has_cached_item = true;
-        
+
         if ( my_has_cached_item ) {
             v = my_cached_item;
             my_reserved = true;
@@ -399,17 +586,18 @@ public:
             return false;
         }
     }
-        
-    //! Release a reserved item.  
-    /**  true = item has been released and so remains in sender, dest must request or reserve future items */
+
+    //! Release a reserved item.
+    /** true = item has been released and so remains in sender, dest must request or reserve future items */
     /* override */ bool try_release( ) {
         spin_mutex::scoped_lock lock(my_mutex);
         __TBB_ASSERT( my_reserved && my_has_cached_item, "releasing non-existent reservation" );
         my_reserved = false;
-        spawn_put();
+        if(!my_successors.empty())
+            spawn_put();
         return true;
     }
-        
+
     //! Consumes a reserved item
     /* override */ bool try_consume( ) {
         spin_mutex::scoped_lock lock(my_mutex);
@@ -421,7 +609,7 @@ public:
         }
         return true;
     }
-        
+
     //! Activates a node that was created in the inactive state
     void activate() {
         spin_mutex::scoped_lock lock(my_mutex);
@@ -429,9 +617,8 @@ public:
         if ( !my_successors.empty() )
             spawn_put();
     }
-        
+
 private:
-        
     task *my_root_task;
     spin_mutex my_mutex;
     bool my_active;
@@ -441,62 +628,63 @@ private:
     bool my_reserved;
     bool my_has_cached_item;
     output_type my_cached_item;
-        
+
     friend class internal::source_task< source_node< output_type > >;
-        
+
     //! Applies the body
     /* override */ void apply_body( ) {
         output_type v;
         if ( try_reserve(v) == false )
             return;
-        
-        if ( my_successors.try_put( v ) ) 
+
+        if ( my_successors.try_put( v ) )
             try_consume();
         else
             try_release();
     }
-        
+
     //! Spawns a task that applies the body
     /* override */ void spawn_put( ) {
-        task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) ) 
-           internal::source_task< source_node< output_type > >( *this ) ); 
+        task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) )
+           internal::source_task< source_node< output_type > >( *this ) );
     }
-        
 };
-        
+
 //! Implements a function node that supports Input -> Output
 template < typename Input, typename Output = continue_msg, graph_buffer_policy = queueing, typename Allocator=cache_aligned_allocator<Input> >
 class function_node : public graph_node, public internal::function_input<Input,Output,Allocator>, public internal::function_output<Output> {
+    using graph_node::my_graph;
 public:
-        
     typedef Input input_type;
     typedef Output output_type;
     typedef sender< input_type > predecessor_type;
     typedef receiver< output_type > successor_type;
+    typedef internal::function_input<input_type,output_type,Allocator> fInput_type;
     typedef internal::function_output<output_type> fOutput_type;
-        
+
     //! Constructor
     template< typename Body >
-    function_node( graph &g, size_t concurrency, Body body )
-    : internal::function_input<input_type,output_type,Allocator>( g, concurrency, body ) {
-    }
+    function_node( graph &g, size_t concurrency, Body body ) :
+        graph_node(g), internal::function_input<input_type,output_type,Allocator>(g, concurrency, body)
+    {}
 
     //! Copy constructor
-    function_node( const function_node& src ) : 
-        graph_node(), internal::function_input<input_type,output_type,Allocator>( src ),
-        fOutput_type() {}
-        
-protected:
+    function_node( const function_node& src ) :
+        graph_node(src.my_graph), internal::function_input<input_type,output_type,Allocator>( src ),
+        fOutput_type()
+    {}
+
+    bool try_put(const input_type &i) { return fInput_type::try_put(i); }
 
+protected:
     /* override */ internal::broadcast_cache<output_type> &successors () { return fOutput_type::my_successors; }
-        
 };
 
 //! Implements a function node that supports Input -> Output
 template < typename Input, typename Output, typename Allocator >
 class function_node<Input,Output,queueing,Allocator> : public graph_node, public internal::function_input<Input,Output,Allocator>, public internal::function_output<Output> {
+    using graph_node::my_graph;
 public:
-        
     typedef Input input_type;
     typedef Output output_type;
     typedef sender< input_type > predecessor_type;
@@ -504,33 +692,34 @@ public:
     typedef internal::function_input<input_type,output_type,Allocator> fInput_type;
     typedef internal::function_input_queue<input_type, Allocator> queue_type;
     typedef internal::function_output<output_type> fOutput_type;
-        
+
     //! Constructor
     template< typename Body >
-    function_node( graph &g, size_t concurrency, Body body ) : fInput_type( g, concurrency, body, new queue_type() ) {
-    }
+    function_node( graph &g, size_t concurrency, Body body ) :
+        graph_node(g), fInput_type( g, concurrency, body, new queue_type() )
+    {}
 
     //! Copy constructor
-    function_node( const function_node& src ) : 
-        graph_node(), fInput_type( src, new queue_type() ) , fOutput_type() { }
+    function_node( const function_node& src ) :
+        graph_node(src.my_graph), fInput_type( src, new queue_type() ), fOutput_type()
+    {}
 
-protected:
+    bool try_put(const input_type &i) { return fInput_type::try_put(i); }
 
+protected:
     /* override */ internal::broadcast_cache<output_type> &successors () { return fOutput_type::my_successors; }
-        
 };
 
 #include "tbb/internal/_flow_graph_types_impl.h"
 
-#if TBB_PREVIEW_GRAPH_NODES
 //! implements a function node that supports Input -> (set of outputs)
 // Output is a tuple of output types.
 template < typename Input, typename Output, graph_buffer_policy = queueing, typename Allocator=cache_aligned_allocator<Input> >
-class multioutput_function_node : 
-    public graph_node, 
-    public internal::multioutput_function_input
-    <  
-        Input, 
+class multifunction_node :
+    public graph_node,
+    public internal::multifunction_input
+    <
+        Input,
         typename internal::wrap_tuple_elements<
             std::tuple_size<Output>::value,  // #elements in tuple
             internal::function_output,  // wrap this around each element
@@ -538,122 +727,126 @@ class multioutput_function_node :
         >::type,
         Allocator
     > {
+    using graph_node::my_graph;
 private:
     static const int N = std::tuple_size<Output>::value;
 public:
     typedef Input input_type;
-    typedef typename internal::wrap_tuple_elements<N,internal::function_output, Output>::type ports_type;
+    typedef typename internal::wrap_tuple_elements<N,internal::function_output, Output>::type output_ports_type;
 private:
-    typedef typename internal::multioutput_function_input<input_type, ports_type, Allocator> base_type;
+    typedef typename internal::multifunction_input<input_type, output_ports_type, Allocator> base_type;
     typedef typename internal::function_input_queue<input_type,Allocator> queue_type;
 public:
     template<typename Body>
-    multioutput_function_node( graph &g, size_t concurrency, Body body ) : base_type(g,concurrency, body) {}
-    multioutput_function_node( const multioutput_function_node &other) :
-        graph_node(), base_type(other) {}
-    // all the guts are in multioutput_function_input...
+    multifunction_node( graph &g, size_t concurrency, Body body ) :
+        graph_node(g), base_type(g,concurrency, body)
+    {}
+    multifunction_node( const multifunction_node &other) :
+        graph_node(other.my_graph), base_type(other)
+    {}
+    // all the guts are in multifunction_input...
+};  // multifunction_node
 
-};  // multioutput_function_node
-        
 template < typename Input, typename Output, typename Allocator >
-class multioutput_function_node<Input,Output,queueing,Allocator> : public graph_node, public internal::multioutput_function_input<Input, 
+class multifunction_node<Input,Output,queueing,Allocator> : public graph_node, public internal::multifunction_input<Input,
     typename internal::wrap_tuple_elements<std::tuple_size<Output>::value, internal::function_output, Output>::type, Allocator> {
+    using graph_node::my_graph;
     static const int N = std::tuple_size<Output>::value;
 public:
     typedef Input input_type;
-    typedef typename internal::wrap_tuple_elements<N, internal::function_output, Output>::type ports_type;
+    typedef typename internal::wrap_tuple_elements<N, internal::function_output, Output>::type output_ports_type;
 private:
-    typedef typename internal::multioutput_function_input<input_type, ports_type, Allocator> base_type;
+    typedef typename internal::multifunction_input<input_type, output_ports_type, Allocator> base_type;
     typedef typename internal::function_input_queue<input_type,Allocator> queue_type;
 public:
-
     template<typename Body>
-    multioutput_function_node( graph &g, size_t concurrency, Body body) : base_type(g,concurrency, body, new queue_type()) {}
-    multioutput_function_node( const multioutput_function_node &other) :
-        graph_node(), base_type(other, new queue_type()) {}
-
-};  // multioutput_function_node
+    multifunction_node( graph &g, size_t concurrency, Body body) :
+        graph_node(g), base_type(g,concurrency, body, new queue_type())
+    {}
+    multifunction_node( const multifunction_node &other) :
+        graph_node(other.my_graph), base_type(other, new queue_type())
+    {}
+};  // multifunction_node
 
 //! split_node: accepts a tuple as input, forwards each element of the tuple to its
 //  successors.  The node has unlimited concurrency, so though it is marked as
 //  "rejecting" it does not reject inputs.
 template<typename TupleType, typename Allocator=cache_aligned_allocator<TupleType> >
-class split_node : public multioutput_function_node<TupleType, TupleType, rejecting, Allocator> {
+class split_node : public multifunction_node<TupleType, TupleType, rejecting, Allocator> {
     static const int N = std::tuple_size<TupleType>::value;
-    typedef multioutput_function_node<TupleType,TupleType,rejecting,Allocator> base_type;
+    typedef multifunction_node<TupleType,TupleType,rejecting,Allocator> base_type;
 public:
-    typedef typename base_type::ports_type ports_type;
+    typedef typename base_type::output_ports_type output_ports_type;
 private:
-
     struct splitting_body {
-        void operator()(const TupleType& t, ports_type &p) {
+        void operator()(const TupleType& t, output_ports_type &p) {
             internal::emit_element<N>::emit_this(t, p);
         }
     };
 public:
     typedef TupleType input_type;
     typedef Allocator allocator_type;
-    split_node(graph &g) : base_type(g, unlimited, splitting_body()) { }
-    split_node( const split_node & other) : base_type(other) { }
+    split_node(graph &g) : base_type(g, unlimited, splitting_body()) {}
+    split_node( const split_node & other) : base_type(other) {}
 };
-#endif  // TBB_PREVIEW_GRAPH_NODES
 
 //! Implements an executable node that supports continue_msg -> Output
 template <typename Output>
 class continue_node : public graph_node, public internal::continue_input<Output>, public internal::function_output<Output> {
+    using graph_node::my_graph;
 public:
-        
     typedef continue_msg input_type;
     typedef Output output_type;
     typedef sender< input_type > predecessor_type;
     typedef receiver< output_type > successor_type;
     typedef internal::function_output<output_type> fOutput_type;
-        
-     //! Constructor for executable node with continue_msg -> Output
-     template <typename Body >
-     continue_node( graph &g, Body body )
-             : internal::continue_input<output_type>( g, body ) {
-     }
-        
+
     //! Constructor for executable node with continue_msg -> Output
     template <typename Body >
-    continue_node( graph &g, int number_of_predecessors, Body body )
-        : internal::continue_input<output_type>( g, number_of_predecessors, body )
-    {
-    }
- 
-    //! Copy constructor       
+    continue_node( graph &g, Body body ) :
+        graph_node(g), internal::continue_input<output_type>( g, body )
+    {}
+
+    //! Constructor for executable node with continue_msg -> Output
+    template <typename Body >
+    continue_node( graph &g, int number_of_predecessors, Body body ) :
+        graph_node(g), internal::continue_input<output_type>( g, number_of_predecessors, body )
+    {}
+
+    //! Copy constructor
     continue_node( const continue_node& src ) :
-        graph_node(), internal::continue_input<output_type>(src),
-        internal::function_output<Output>() { }
+        graph_node(src.my_graph), internal::continue_input<output_type>(src),
+        internal::function_output<Output>()
+    {}
+
+    bool try_put(const input_type &i) { return internal::continue_input<Output>::try_put(i); }
 
 protected:
-        
     /* override */ internal::broadcast_cache<output_type> &successors () { return fOutput_type::my_successors; }
-        
 };
-        
+
 template< typename T >
 class overwrite_node : public graph_node, public receiver<T>, public sender<T> {
+    using graph_node::my_graph;
 public:
-        
     typedef T input_type;
     typedef T output_type;
     typedef sender< input_type > predecessor_type;
     typedef receiver< output_type > successor_type;
-        
-    overwrite_node() : my_buffer_is_valid(false) {
+
+    overwrite_node(graph &g) : graph_node(g), my_buffer_is_valid(false) {
         my_successors.set_owner( this );
     }
 
     // Copy constructor; doesn't take anything from src; default won't work
-    overwrite_node( const overwrite_node& ) : 
-        graph_node(), receiver<T>(), sender<T>(), my_buffer_is_valid(false) {
+    overwrite_node( const overwrite_node& src ) :
+        graph_node(src.my_graph), receiver<T>(), sender<T>(), my_buffer_is_valid(false)
+    {
         my_successors.set_owner( this );
     }
-        
+
     ~overwrite_node() {}
-        
+
     /* override */ bool register_successor( successor_type &s ) {
         spin_mutex::scoped_lock l( my_mutex );
         if ( my_buffer_is_valid ) {
@@ -672,13 +865,13 @@ public:
             return true;
         }
     }
-        
+
     /* override */ bool remove_successor( successor_type &s ) {
         spin_mutex::scoped_lock l( my_mutex );
         my_successors.remove_successor(s);
         return true;
     }
-        
+
     /* override */ bool try_put( const T &v ) {
         spin_mutex::scoped_lock l( my_mutex );
         my_buffer = v;
@@ -686,7 +879,7 @@ public:
         my_successors.try_put(v);
         return true;
     }
-        
+
     /* override */ bool try_get( T &v ) {
         spin_mutex::scoped_lock l( my_mutex );
         if ( my_buffer_is_valid ) {
@@ -696,37 +889,34 @@ public:
             return false;
         }
     }
-        
+
     bool is_valid() {
        spin_mutex::scoped_lock l( my_mutex );
        return my_buffer_is_valid;
     }
-        
+
     void clear() {
        spin_mutex::scoped_lock l( my_mutex );
        my_buffer_is_valid = false;
     }
-        
+
 protected:
-        
     spin_mutex my_mutex;
     internal::broadcast_cache< T, null_rw_mutex > my_successors;
     T my_buffer;
     bool my_buffer_is_valid;
-        
 };
-        
+
 template< typename T >
 class write_once_node : public overwrite_node<T> {
 public:
-        
     typedef T input_type;
     typedef T output_type;
     typedef sender< input_type > predecessor_type;
     typedef receiver< output_type > successor_type;
-        
+
     //! Constructor
-    write_once_node() : overwrite_node<T>() {}
+    write_once_node(graph& g) : overwrite_node<T>(g) {}
 
     //! Copy constructor: call base class copy constructor
     write_once_node( const write_once_node& src ) : overwrite_node<T>(src) {}
@@ -743,46 +933,45 @@ public:
         }
     }
 };
-        
+
 //! Forwards messages of type T to all successors
 template <typename T>
 class broadcast_node : public graph_node, public receiver<T>, public sender<T> {
-        
+    using graph_node::my_graph;
     internal::broadcast_cache<T> my_successors;
-        
 public:
-        
     typedef T input_type;
     typedef T output_type;
     typedef sender< input_type > predecessor_type;
     typedef receiver< output_type > successor_type;
-        
-    broadcast_node( ) {
+
+    broadcast_node(graph& g) : graph_node(g) {
         my_successors.set_owner( this );
     }
-        
+
     // Copy constructor
-    broadcast_node( const broadcast_node& ) : graph_node(), receiver<T>(), sender<T>() {
+    broadcast_node( const broadcast_node& src ) :
+        graph_node(src.my_graph), receiver<T>(), sender<T>()
+    {
         my_successors.set_owner( this );
     }
-        
+
     //! Adds a successor
     virtual bool register_successor( receiver<T> &r ) {
         my_successors.register_successor( r );
         return true;
     }
-        
+
     //! Removes s as a successor
     virtual bool remove_successor( receiver<T> &r ) {
         my_successors.remove_successor( r );
         return true;
     }
-        
+
     /* override */ bool try_put( const T &t ) {
         my_successors.try_put(t);
         return true;
     }
-        
 };
 
 #include "internal/_flow_graph_item_buffer_impl.h"
@@ -790,6 +979,7 @@ public:
 //! Forwards messages in arbitrary order
 template <typename T, typename A=cache_aligned_allocator<T> >
 class buffer_node : public graph_node, public reservable_item_buffer<T, A>, public receiver<T>, public sender<T> {
+    using graph_node::my_graph;
 public:
     typedef T input_type;
     typedef T output_type;
@@ -799,14 +989,14 @@ public:
 protected:
     typedef size_t size_type;
     internal::round_robin_cache< T, null_rw_mutex > my_successors;
-        
+
     task *my_parent;
-        
+
     friend class internal::forward_task< buffer_node< T, A > >;
-        
+
     enum op_type {reg_succ, rem_succ, req_item, res_item, rel_res, con_res, put_item, try_fwd};
     enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-        
+
     // implements the aggregator_operation concept
     class buffer_operation : public internal::aggregated_operation< buffer_operation > {
     public:
@@ -817,12 +1007,12 @@ protected:
             type(char(t)), elem(const_cast<T*>(&e)), r(NULL) {}
         buffer_operation(op_type t) : type(char(t)), r(NULL) {}
     };
-        
+
     bool forwarder_busy;
     typedef internal::aggregating_functor<my_class, buffer_operation> my_handler;
     friend class internal::aggregating_functor<my_class, buffer_operation>;
     internal::aggregator< my_handler, buffer_operation> my_aggregator;
-        
+
     virtual void handle_operations(buffer_operation *op_list) {
         buffer_operation *tmp;
         bool try_forwarding=false;
@@ -845,7 +1035,7 @@ protected:
             task::enqueue(*new(task::allocate_additional_child_of(*my_parent)) internal::forward_task< buffer_node<input_type, A> >(*this));
         }
     }
-        
+
     //! This is executed by an enqueued task, the "forwarder"
     virtual void forward() {
         buffer_operation op_data(try_fwd);
@@ -854,19 +1044,19 @@ protected:
             my_aggregator.execute(&op_data);
         } while (op_data.status == SUCCEEDED);
     }
-        
+
     //! Register successor
     virtual void internal_reg_succ(buffer_operation *op) {
         my_successors.register_successor(*(op->r));
         __TBB_store_with_release(op->status, SUCCEEDED);
     }
-        
+
     //! Remove successor
     virtual void internal_rem_succ(buffer_operation *op) {
         my_successors.remove_successor(*(op->r));
         __TBB_store_with_release(op->status, SUCCEEDED);
     }
-        
+
     //! Tries to forward valid items to successors
     virtual void internal_forward(buffer_operation *op) {
         T i_copy;
@@ -889,12 +1079,12 @@ protected:
             forwarder_busy = false;
         }
     }
-        
+
     virtual void internal_push(buffer_operation *op) {
         this->push_back(*(op->elem));
         __TBB_store_with_release(op->status, SUCCEEDED);
     }
-        
+
     virtual void internal_pop(buffer_operation *op) {
         if(this->pop_back(*(op->elem))) {
             __TBB_store_with_release(op->status, SUCCEEDED);
@@ -903,7 +1093,7 @@ protected:
             __TBB_store_with_release(op->status, FAILED);
         }
     }
-        
+
     virtual void internal_reserve(buffer_operation *op) {
         if(this->reserve_front(*(op->elem))) {
             __TBB_store_with_release(op->status, SUCCEEDED);
@@ -912,28 +1102,28 @@ protected:
             __TBB_store_with_release(op->status, FAILED);
         }
     }
-        
+
     virtual void internal_consume(buffer_operation *op) {
         this->consume_front();
         __TBB_store_with_release(op->status, SUCCEEDED);
     }
-        
+
     virtual void internal_release(buffer_operation *op) {
         this->release_front();
         __TBB_store_with_release(op->status, SUCCEEDED);
     }
-        
+
 public:
     //! Constructor
-    buffer_node( graph &g ) : reservable_item_buffer<T>(),
+    buffer_node( graph &g ) : graph_node(g), reservable_item_buffer<T>(),
         my_parent( g.root_task() ), forwarder_busy(false) {
         my_successors.set_owner(this);
         my_aggregator.initialize_handler(my_handler(this));
     }
 
     //! Copy constructor
-    buffer_node( const buffer_node& src ) :
-        graph_node(), reservable_item_buffer<T>(), receiver<T>(), sender<T>(),
+    buffer_node( const buffer_node& src ) : graph_node(src.my_graph),
+        reservable_item_buffer<T>(), receiver<T>(), sender<T>(),
         my_parent( src.my_parent ) {
         forwarder_busy = false;
         my_successors.set_owner(this);
@@ -941,11 +1131,11 @@ public:
     }
 
     virtual ~buffer_node() {}
-        
+
     //
     // message sender implementation
     //
-        
+
     //! Adds a new successor.
     /** Adds successor r to the list of successors; may forward tasks.  */
     /* override */ bool register_successor( receiver<output_type> &r ) {
@@ -954,7 +1144,7 @@ public:
         my_aggregator.execute(&op_data);
         return true;
     }
-        
+
     //! Removes a successor.
     /** Removes successor r from the list of successors.
         It also calls r.remove_predecessor(*this) to remove this node as a predecessor. */
@@ -965,7 +1155,7 @@ public:
         my_aggregator.execute(&op_data);
         return true;
     }
-        
+
     //! Request an item from the buffer_node
     /**  true = v contains the returned item<BR>
          false = no item has been returned */
@@ -975,7 +1165,7 @@ public:
         my_aggregator.execute(&op_data);
         return (op_data.status==SUCCEEDED);
     }
-        
+
     //! Reserves an item.
     /**  false = no item can be reserved<BR>
          true = an item is reserved */
@@ -985,7 +1175,7 @@ public:
         my_aggregator.execute(&op_data);
         return (op_data.status==SUCCEEDED);
     }
-        
+
     //! Release a reserved item.
     /**  true = item has been released and so remains in sender */
     /* override */ bool try_release() {
@@ -993,7 +1183,7 @@ public:
         my_aggregator.execute(&op_data);
         return true;
     }
-        
+
     //! Consumes a reserved item.
     /** true = item is removed from sender and reservation removed */
     /* override */ bool try_consume() {
@@ -1001,7 +1191,7 @@ public:
         my_aggregator.execute(&op_data);
         return true;
     }
-        
+
     //! Receive an item
     /** true is always returned */
     /* override */ bool try_put(const T &t) {
@@ -1010,23 +1200,22 @@ public:
         return true;
     }
 };
-        
-        
+
 //! Forwards messages in FIFO order
 template <typename T, typename A=cache_aligned_allocator<T> >
 class queue_node : public buffer_node<T, A> {
 protected:
-typedef typename buffer_node<T, A>::size_type size_type;
-typedef typename buffer_node<T, A>::buffer_operation queue_operation;
-        
+    typedef typename buffer_node<T, A>::size_type size_type;
+    typedef typename buffer_node<T, A>::buffer_operation queue_operation;
+
     enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-        
+
     //! Tries to forward valid items to successors
     /* override */ void internal_forward(queue_operation *op) {
         T i_copy;
         bool success = false; // flagged when a successor accepts
         size_type counter = this->my_successors.size();
-        if (this->my_reserved || !this->item_valid(this->my_head)){
+        if (this->my_reserved || !this->item_valid(this->my_head)) {
             __TBB_store_with_release(op->status, FAILED);
             this->forwarder_busy = false;
             return;
@@ -1048,7 +1237,7 @@ typedef typename buffer_node<T, A>::buffer_operation queue_operation;
             this->forwarder_busy = false;
         }
     }
-        
+
     /* override */ void internal_pop(queue_operation *op) {
         if ( this->my_reserved || !this->item_valid(this->my_head)){
             __TBB_store_with_release(op->status, FAILED);
@@ -1073,32 +1262,30 @@ typedef typename buffer_node<T, A>::buffer_operation queue_operation;
         this->consume_front();
         __TBB_store_with_release(op->status, SUCCEEDED);
     }
-        
+
 public:
-        
     typedef T input_type;
     typedef T output_type;
     typedef sender< input_type > predecessor_type;
     typedef receiver< output_type > successor_type;
-        
+
     //! Constructor
     queue_node( graph &g ) : buffer_node<T, A>(g) {}
 
     //! Copy constructor
     queue_node( const queue_node& src) : buffer_node<T, A>(src) {}
 };
-        
+
 //! Forwards messages in sequence order
 template< typename T, typename A=cache_aligned_allocator<T> >
 class sequencer_node : public queue_node<T, A> {
     internal::function_body< T, size_t > *my_sequencer;
 public:
-        
     typedef T input_type;
     typedef T output_type;
     typedef sender< input_type > predecessor_type;
     typedef receiver< output_type > successor_type;
-        
+
     //! Constructor
     template< typename Sequencer >
     sequencer_node( graph &g, const Sequencer& s ) : queue_node<T, A>(g),
@@ -1107,28 +1294,28 @@ public:
     //! Copy constructor
     sequencer_node( const sequencer_node& src ) : queue_node<T, A>(src),
         my_sequencer( src.my_sequencer->clone() ) {}
-        
+
     //! Destructor
     ~sequencer_node() { delete my_sequencer; }
 protected:
     typedef typename buffer_node<T, A>::size_type size_type;
     typedef typename buffer_node<T, A>::buffer_operation sequencer_operation;
-        
+
     enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-        
+
 private:
     /* override */ void internal_push(sequencer_operation *op) {
         size_type tag = (*my_sequencer)(*(op->elem));
-        
+
         this->my_tail = (tag+1 > this->my_tail) ? tag+1 : this->my_tail;
-        
+
         if(this->size() > this->capacity())
             this->grow_my_array(this->size());  // tail already has 1 added to it
         this->item(tag) = std::make_pair( *(op->elem), true );
         __TBB_store_with_release(op->status, SUCCEEDED);
     }
 };
-        
+
 //! Forwards messages in priority order
 template< typename T, typename Compare = std::less<T>, typename A=cache_aligned_allocator<T> >
 class priority_queue_node : public buffer_node<T, A> {
@@ -1137,20 +1324,20 @@ public:
     typedef T output_type;
     typedef sender< input_type > predecessor_type;
     typedef receiver< output_type > successor_type;
-        
+
     //! Constructor
     priority_queue_node( graph &g ) : buffer_node<T, A>(g), mark(0) {}
 
     //! Copy constructor
     priority_queue_node( const priority_queue_node &src ) : buffer_node<T, A>(src), mark(0) {}
-        
+
 protected:
     typedef typename buffer_node<T, A>::size_type size_type;
     typedef typename buffer_node<T, A>::item_type item_type;
     typedef typename buffer_node<T, A>::buffer_operation prio_operation;
-        
+
     enum op_stat {WAIT=0, SUCCEEDED, FAILED};
-        
+
     /* override */ void handle_operations(prio_operation *op_list) {
         prio_operation *tmp /*, *pop_list*/ ;
         bool try_forwarding=false;
@@ -1175,13 +1362,13 @@ protected:
             task::enqueue(*new(task::allocate_additional_child_of(*(this->my_parent))) internal::forward_task< buffer_node<input_type, A> >(*this));
         }
     }
-        
+
     //! Tries to forward valid items to successors
     /* override */ void internal_forward(prio_operation *op) {
         T i_copy;
         bool success = false; // flagged when a successor accepts
         size_type counter = this->my_successors.size();
-        
+
         if (this->my_reserved || this->my_tail == 0) {
             __TBB_store_with_release(op->status, FAILED);
             this->forwarder_busy = false;
@@ -1208,7 +1395,7 @@ protected:
             this->forwarder_busy = false;
         }
     }
-        
+
     /* override */ void internal_push(prio_operation *op) {
         if ( this->my_tail >= this->my_array_size )
             this->grow_my_array( this->my_tail + 1 );
@@ -1273,7 +1460,7 @@ private:
     Compare compare;
     size_type mark;
     input_type reserved_item;
-        
+
     void heapify() {
         if (!mark) mark = 1;
         for (; mark<this->my_tail; ++mark) { // for each unheaped element
@@ -1289,7 +1476,7 @@ private:
             this->my_array[cur_pos].first = to_place;
         }
     }
-        
+
     void reheap() {
         size_type cur_pos=0, child=1;
         while (child < mark) {
@@ -1309,22 +1496,21 @@ private:
         this->my_array[cur_pos].first = this->my_array[this->my_tail].first;
     }
 };
-        
+
 //! Forwards messages only if the threshold has not been reached
 /** This node forwards items until its threshold is reached.
     It contains no buffering.  If the downstream node rejects, the
     message is dropped. */
 template< typename T >
 class limiter_node : public graph_node, public receiver< T >, public sender< T > {
+    using graph_node::my_graph;
 public:
-        
     typedef T input_type;
     typedef T output_type;
     typedef sender< input_type > predecessor_type;
     typedef receiver< output_type > successor_type;
-        
+
 private:
-        
     task *my_root_task;
     size_t my_threshold;
     size_t my_count;
@@ -1334,57 +1520,56 @@ private:
     int init_decrement_predecessors;
 
     friend class internal::forward_task< limiter_node<T> >;
-        
+
     // Let decrementer call decrement_counter()
     friend class internal::decrementer< limiter_node<T> >;
-        
+
     void decrement_counter() {
         input_type v;
-        
+
         // If we can't get / put an item immediately then drop the count
-        if ( my_predecessors.get_item( v ) == false 
+        if ( my_predecessors.get_item( v ) == false
              || my_successors.try_put(v) == false ) {
             spin_mutex::scoped_lock lock(my_mutex);
             --my_count;
-            if ( !my_predecessors.empty() ) 
-                task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) ) 
+            if ( !my_predecessors.empty() )
+                task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) )
                             internal::forward_task< limiter_node<T> >( *this ) );
         }
     }
-        
+
     void forward() {
         {
             spin_mutex::scoped_lock lock(my_mutex);
-            if ( my_count < my_threshold ) 
+            if ( my_count < my_threshold )
                 ++my_count;
             else
                 return;
         }
         decrement_counter();
     }
-        
+
 public:
-        
     //! The internal receiver< continue_msg > that decrements the count
     internal::decrementer< limiter_node<T> > decrement;
-        
+
     //! Constructor
-    limiter_node(graph &g, size_t threshold, int num_decrement_predecessors=0) : 
-        my_root_task(g.root_task()), my_threshold(threshold), my_count(0), 
-        init_decrement_predecessors(num_decrement_predecessors), 
-        decrement(num_decrement_predecessors) 
+    limiter_node(graph &g, size_t threshold, int num_decrement_predecessors=0) :
+        graph_node(g), my_root_task(g.root_task()), my_threshold(threshold), my_count(0),
+        init_decrement_predecessors(num_decrement_predecessors),
+        decrement(num_decrement_predecessors)
     {
         my_predecessors.set_owner(this);
         my_successors.set_owner(this);
         decrement.set_owner(this);
     }
-        
+
     //! Copy constructor
-    limiter_node( const limiter_node& src ) : 
-        graph_node(), receiver<T>(), sender<T>(),
-        my_root_task(src.my_root_task), my_threshold(src.my_threshold), my_count(0), 
-        init_decrement_predecessors(src.init_decrement_predecessors), 
-        decrement(src.init_decrement_predecessors) 
+    limiter_node( const limiter_node& src ) :
+        graph_node(src.my_graph), receiver<T>(), sender<T>(),
+        my_root_task(src.my_root_task), my_threshold(src.my_threshold), my_count(0),
+        init_decrement_predecessors(src.init_decrement_predecessors),
+        decrement(src.init_decrement_predecessors)
     {
         my_predecessors.set_owner(this);
         my_successors.set_owner(this);
@@ -1396,7 +1581,7 @@ public:
         my_successors.register_successor(r);
         return true;
     }
-        
+
     //! Removes a successor from this node
     /** r.remove_predecessor(*this) is also called. */
     /* override */ bool remove_successor( receiver<output_type> &r ) {
@@ -1404,46 +1589,45 @@ public:
         my_successors.remove_successor(r);
         return true;
     }
-        
+
     //! Puts an item to this receiver
     /* override */ bool try_put( const T &t ) {
         {
             spin_mutex::scoped_lock lock(my_mutex);
-            if ( my_count >= my_threshold ) 
+            if ( my_count >= my_threshold )
                 return false;
             else
-                ++my_count; 
+                ++my_count;
         }
-        
+
         bool msg = my_successors.try_put(t);
-        
+
         if ( msg != true ) {
             spin_mutex::scoped_lock lock(my_mutex);
             --my_count;
-            if ( !my_predecessors.empty() ) 
-                task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) ) 
+            if ( !my_predecessors.empty() )
+                task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) )
                             internal::forward_task< limiter_node<T> >( *this ) );
         }
-        
+
         return msg;
     }
-        
+
     //! Removes src from the list of cached predecessors.
     /* override */ bool register_predecessor( predecessor_type &src ) {
         spin_mutex::scoped_lock lock(my_mutex);
         my_predecessors.add( src );
-        if ( my_count < my_threshold && !my_successors.empty() ) 
-            task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) ) 
+        if ( my_count < my_threshold && !my_successors.empty() )
+            task::enqueue( * new ( task::allocate_additional_child_of( *my_root_task ) )
                            internal::forward_task< limiter_node<T> >( *this ) );
         return true;
     }
-        
+
     //! Removes src from the list of cached predecessors.
     /* override */ bool remove_predecessor( predecessor_type &src ) {
         my_predecessors.remove( src );
         return true;
     }
-        
 };
 
 #include "internal/_flow_graph_join_impl.h"
@@ -1464,7 +1648,7 @@ private:
     typedef typename internal::unfolded_join_node<N, reserving_port, OutputTuple, reserving> unfolded_type;
 public:
     typedef OutputTuple output_type;
-    typedef typename unfolded_type::input_ports_tuple_type input_ports_tuple_type;
+    typedef typename unfolded_type::input_ports_type input_ports_type;
     join_node(graph &g) : unfolded_type(g) { }
     join_node(const join_node &other) : unfolded_type(other) {}
 };
@@ -1476,7 +1660,7 @@ private:
     typedef typename internal::unfolded_join_node<N, queueing_port, OutputTuple, queueing> unfolded_type;
 public:
     typedef OutputTuple output_type;
-    typedef typename unfolded_type::input_ports_tuple_type input_ports_tuple_type;
+    typedef typename unfolded_type::input_ports_type input_ports_type;
     join_node(graph &g) : unfolded_type(g) { }
     join_node(const join_node &other) : unfolded_type(other) {}
 };
@@ -1490,7 +1674,7 @@ private:
     typedef typename internal::unfolded_join_node<N, tag_matching_port, OutputTuple, tag_matching> unfolded_type;
 public:
     typedef OutputTuple output_type;
-    typedef typename unfolded_type::input_ports_tuple_type input_ports_tuple_type;
+    typedef typename unfolded_type::input_ports_type input_ports_type;
     template<typename B0, typename B1>
     join_node(graph &g, B0 b0, B1 b1) : unfolded_type(g, b0, b1) { }
     template<typename B0, typename B1, typename B2>
@@ -1499,16 +1683,26 @@ public:
     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3) : unfolded_type(g, b0, b1, b2, b3) { }
     template<typename B0, typename B1, typename B2, typename B3, typename B4>
     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) : unfolded_type(g, b0, b1, b2, b3, b4) { }
+#if __TBB_VARIADIC_MAX >= 6
     template<typename B0, typename B1, typename B2, typename B3, typename B4, typename B5>
     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5) : unfolded_type(g, b0, b1, b2, b3, b4, b5) { }
+#endif
+#if __TBB_VARIADIC_MAX >= 7
     template<typename B0, typename B1, typename B2, typename B3, typename B4, typename B5, typename B6>
     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6) { }
+#endif
+#if __TBB_VARIADIC_MAX >= 8
     template<typename B0, typename B1, typename B2, typename B3, typename B4, typename B5, typename B6, typename B7>
     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6, B7 b7) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7) { }
+#endif
+#if __TBB_VARIADIC_MAX >= 9
     template<typename B0, typename B1, typename B2, typename B3, typename B4, typename B5, typename B6, typename B7, typename B8>
     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6, B7 b7, B8 b8) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8) { }
+#endif
+#if __TBB_VARIADIC_MAX >= 10
     template<typename B0, typename B1, typename B2, typename B3, typename B4, typename B5, typename B6, typename B7, typename B8, typename B9>
     join_node(graph &g, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4, B5 b5, B6 b6, B7 b7, B8 b8, B9 b9) : unfolded_type(g, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9) { }
+#endif
     join_node(const join_node &other) : unfolded_type(other) {}
 };
 
@@ -1523,9 +1717,9 @@ private:
 public:
     typedef typename internal::or_output_type<InputTuple>::type output_type;
     typedef typename internal::unfolded_or_node<InputTuple> unfolded_type;
-    or_node() : unfolded_type() { }
+    or_node(graph& g) : unfolded_type(g) { }
     // Copy constructor
-    or_node( const or_node& /*other*/ ) : unfolded_type() { }
+    or_node( const or_node& other ) : unfolded_type(other) { }
 };
 #endif  // TBB_PREVIEW_GRAPH_NODES
 
@@ -1534,7 +1728,7 @@ template< typename T >
 inline void make_edge( sender<T> &p, receiver<T> &s ) {
     p.register_successor( s );
 }
-        
+
 //! Makes an edge between a single predecessor and a single successor
 template< typename T >
 inline void remove_edge( sender<T> &p, receiver<T> &s ) {
@@ -1546,8 +1740,7 @@ template< typename Body, typename Node >
 Body copy_body( Node &n ) {
     return n.template copy_function_object<Body>();
 }
-        
-        
+
 } // interface6
 
     using interface6::graph;
@@ -1559,10 +1752,10 @@ Body copy_body( Node &n ) {
 
     using interface6::source_node;
     using interface6::function_node;
-#if TBB_PREVIEW_GRAPH_NODES
-    using interface6::multioutput_function_node;
+    using interface6::multifunction_node;
     using interface6::split_node;
     using interface6::internal::output_port;
+#if TBB_PREVIEW_GRAPH_NODES
     using interface6::or_node;
 #endif
     using interface6::continue_node;
diff --git a/include/tbb/index.html b/include/tbb/index.html
index 5eaf53e..b8af0cc 100644
--- a/include/tbb/index.html
+++ b/include/tbb/index.html
@@ -2,22 +2,24 @@
 <BODY>
 
 <H2>Overview</H2>
-Include files for Threading Building Blocks classes and functions.
+Include files for Intel® Threading Building Blocks classes and functions.
 
 <BR><A HREF=".">Click here</A> to see all files in the directory.
 
 <H2>Directories</H2>
 <DL>
-<DT><A HREF="machine">machine</A>
-<DD>Include files for low-level architecture specific functionality.
 <DT><A HREF="compat">compat</A>
 <DD>Include files for source level compatibility with other frameworks.
+<DT><A HREF="internal">internal</A>
+<DD>Include files with implementation details; not for direct use.
+<DT><A HREF="machine">machine</A>
+<DD>Include files for low-level architecture specific functionality; not for direct use.
 </DL>
 
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/include/tbb/internal/_aggregator_impl.h b/include/tbb/internal/_aggregator_impl.h
index 33384c1..1c4a8b2 100644
--- a/include/tbb/internal/_aggregator_impl.h
+++ b/include/tbb/internal/_aggregator_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -53,12 +53,12 @@ class aggregated_operation {
     aggregated_operation. The parameter handler_type is a functor that will be passed the
     list of operations and is expected to handle each operation appropriately, setting the
     status of each operation to non-zero.*/
- template < typename handler_type, typename operation_type >
+template < typename handler_type, typename operation_type >
 class aggregator {
  public:
     aggregator() : handler_busy(false) { pending_operations = NULL; }
     explicit aggregator(handler_type h) : handler_busy(false), handle_operations(h) {
-        pending_operations = NULL; 
+        pending_operations = NULL;
     }
 
     void initialize_handler(handler_type h) { handle_operations = h; }
@@ -79,7 +79,7 @@ class aggregator {
         do {
             // ITT may flag the following line as a race; it is a false positive:
             // This is an atomic read; we don't provide itt_hide_load_word for atomics
-            op->next = res = pending_operations; // NOT A RACE 
+            op->next = res = pending_operations; // NOT A RACE
         } while (pending_operations.compare_and_swap(op, res) != res);
         if (!res) { // first in the list; handle the operations
             // ITT note: &pending_operations tag covers access to the handler_busy flag,
diff --git a/include/tbb/internal/_concurrent_queue_impl.h b/include/tbb/internal/_concurrent_queue_impl.h
index 4d6adbb..b9d56e6 100644
--- a/include/tbb/internal/_concurrent_queue_impl.h
+++ b/include/tbb/internal/_concurrent_queue_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -103,7 +103,7 @@ public:
     //! Prefix on a page
     struct page {
         page* next;
-        uintptr_t mask; 
+        uintptr_t mask;
     };
 
     atomic<ticket> head_counter;
@@ -155,16 +155,16 @@ template<typename T>
 class micro_queue : no_copy {
     typedef concurrent_queue_rep_base::page page;
 
-    //! Class used to ensure exception-safety of method "pop" 
+    //! Class used to ensure exception-safety of method "pop"
     class destroyer: no_copy {
         T& my_value;
     public:
         destroyer( T& value ) : my_value(value) {}
-        ~destroyer() {my_value.~T();}          
+        ~destroyer() {my_value.~T();}
     };
 
     void copy_item( page& dst, size_t index, const void* src ) {
-        new( &get_ref(dst,index) ) T(*static_cast<const T*>(src)); 
+        new( &get_ref(dst,index) ) T(*static_cast<const T*>(src));
     }
 
     void copy_item( page& dst, size_t dindex, const page& src, size_t sindex ) {
@@ -184,7 +184,7 @@ public:
 
     struct padded_page: page {
         //! Not defined anywhere - exists to quiet warnings.
-        padded_page(); 
+        padded_page();
         //! Not defined anywhere - exists to quiet warnings.
         void operator=( const padded_page& );
         //! Must be last field.
@@ -202,7 +202,7 @@ public:
     atomic<ticket> tail_counter;
 
     spin_mutex page_mutex;
-    
+
     void push( const void* item, ticket k, concurrent_queue_base_v3<T>& base ) ;
 
     bool pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base ) ;
@@ -245,14 +245,14 @@ void micro_queue<T>::push( const void* item, ticket k, concurrent_queue_base_v3<
 
     if( tail_counter!=k ) spin_wait_until_my_turn( tail_counter, k, *base.my_rep );
     call_itt_notify(acquired, &tail_counter);
-        
+
     if( p ) {
         spin_mutex::scoped_lock lock( page_mutex );
         page* q = tail_page;
         if( is_valid_page(q) )
             q->next = p;
         else
-            head_page = p; 
+            head_page = p;
         tail_page = p;
     } else {
         p = tail_page;
@@ -262,11 +262,11 @@ void micro_queue<T>::push( const void* item, ticket k, concurrent_queue_base_v3<
         // If no exception was thrown, mark item as present.
         itt_hide_store_word(p->mask,  p->mask | uintptr_t(1)<<index);
         call_itt_notify(releasing, &tail_counter);
-        tail_counter += concurrent_queue_rep_base::n_queue; 
+        tail_counter += concurrent_queue_rep_base::n_queue;
     } __TBB_CATCH (...) {
         ++base.my_rep->n_invalid_entries;
         call_itt_notify(releasing, &tail_counter);
-        tail_counter += concurrent_queue_rep_base::n_queue; 
+        tail_counter += concurrent_queue_rep_base::n_queue;
         __TBB_RETHROW();
     }
 }
@@ -281,9 +281,9 @@ bool micro_queue<T>::pop( void* dst, ticket k, concurrent_queue_base_v3<T>& base
     page& p = *head_page;
     __TBB_ASSERT( &p, NULL );
     size_t index = k/concurrent_queue_rep_base::n_queue & (base.my_rep->items_per_page-1);
-    bool success = false; 
+    bool success = false;
     {
-        micro_queue_pop_finalizer<T> finalizer( *this, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? &p : NULL ); 
+        micro_queue_pop_finalizer<T> finalizer( *this, base, k+concurrent_queue_rep_base::n_queue, index==base.my_rep->items_per_page-1 ? &p : NULL );
         if( p.mask & uintptr_t(1)<<index ) {
             success = true;
             assign_and_destroy_item( dst, p, index );
@@ -368,7 +368,7 @@ class micro_queue_pop_finalizer: no_copy {
     typedef concurrent_queue_rep_base::page page;
     ticket my_ticket;
     micro_queue<T>& my_queue;
-    page* my_page; 
+    page* my_page;
     concurrent_queue_page_allocator& allocator;
 public:
     micro_queue_pop_finalizer( micro_queue<T>& queue, concurrent_queue_base_v3<T>& b, ticket k, page* p ) :
@@ -511,11 +511,11 @@ concurrent_queue_base_v3<T>::concurrent_queue_base_v3() {
     __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, "alignment error" );
     memset(my_rep,0,sizeof(concurrent_queue_rep<T>));
     my_rep->item_size = item_size;
-    my_rep->items_per_page = item_size<=8 ? 32 :
-                             item_size<=16 ? 16 : 
-                             item_size<=32 ? 8 :
-                             item_size<=64 ? 4 :
-                             item_size<=128 ? 2 :
+    my_rep->items_per_page = item_size<=  8 ? 32 :
+                             item_size<= 16 ? 16 :
+                             item_size<= 32 ?  8 :
+                             item_size<= 64 ?  4 :
+                             item_size<=128 ?  2 :
                              1;
 }
 
@@ -526,8 +526,8 @@ bool concurrent_queue_base_v3<T>::internal_try_pop( void* dst ) {
     do {
         k = r.head_counter;
         for(;;) {
-            if( r.tail_counter<=k ) {
-                // Queue is empty 
+            if( (ptrdiff_t)(r.tail_counter-k)<=0 ) {
+                // Queue is empty
                 return false;
             }
             // Queue had item with ticket k when we looked.  Attempt to get that item.
@@ -579,7 +579,7 @@ void concurrent_queue_base_v3<T>::internal_finish_clear() {
             __TBB_ASSERT( r.array[i].head_page==tp, "at most one page should remain" );
             deallocate_page( tp );
             r.array[i].tail_page = NULL;
-        } else 
+        } else
             __TBB_ASSERT( !is_valid_page(r.array[i].head_page), "head page pointer corrupt?" );
     }
 }
@@ -598,7 +598,7 @@ void concurrent_queue_base_v3<T>::assign( const concurrent_queue_base_v3& src )
     for( size_t i = 0; i<r.n_queue; ++i )
         r.array[i].assign( src.my_rep->array[i], *this);
 
-    __TBB_ASSERT( r.head_counter==src.my_rep->head_counter && r.tail_counter==src.my_rep->tail_counter, 
+    __TBB_ASSERT( r.head_counter==src.my_rep->head_counter && r.tail_counter==src.my_rep->tail_counter,
             "the source concurrent queue should not be concurrently modified." );
 }
 
@@ -708,7 +708,7 @@ void concurrent_queue_iterator_base_v3<Value>::assign( const concurrent_queue_it
 
 template<typename Value>
 void concurrent_queue_iterator_base_v3<Value>::advance() {
-    __TBB_ASSERT( my_item, "attempt to increment iterator past end of queue" );  
+    __TBB_ASSERT( my_item, "attempt to increment iterator past end of queue" );
     size_t k = my_rep->head_counter;
     const concurrent_queue_base_v3<Value>& queue = my_rep->my_queue;
 #if TBB_USE_ASSERT
@@ -744,7 +744,7 @@ class concurrent_queue_iterator: public concurrent_queue_iterator_base_v3<typena
     friend class ::tbb::strict_ppl::concurrent_queue;
 #else
 public: // workaround for MSVC
-#endif 
+#endif
     //! Construct iterator pointing to head of queue.
     concurrent_queue_iterator( const concurrent_queue_base_v3<Value>& queue ) :
         concurrent_queue_iterator_base_v3<typename tbb_remove_cv<Value>::type>(queue)
@@ -764,7 +764,7 @@ public:
         return *this;
     }
 
-    //! Reference to current item 
+    //! Reference to current item
     Value& operator*() const {
         return *static_cast<Value*>(this->my_item);
     }
@@ -826,25 +826,25 @@ protected:
     //! Prefix on a page
     struct page {
         page* next;
-        uintptr_t mask; 
+        uintptr_t mask;
     };
 
     //! Capacity of the queue
     ptrdiff_t my_capacity;
-   
+
     //! Always a power of 2
     size_t items_per_page;
 
     //! Size of an item
     size_t item_size;
 
-#if __TBB_GCC_3_3_PROTECTED_BROKEN
+#if __TBB_PROTECTED_NESTED_CLASS_BROKEN
 public:
 #endif
     template<typename T>
     struct padded_page: page {
         //! Not defined anywhere - exists to quiet warnings.
-        padded_page(); 
+        padded_page();
         //! Not defined anywhere - exists to quiet warnings.
         void operator=( const padded_page& );
         //! Must be last field.
@@ -864,6 +864,9 @@ protected:
     //! Dequeue item from head of queue
     void __TBB_EXPORTED_METHOD internal_pop( void* dst );
 
+    //! Abort all pending queue operations
+    void __TBB_EXPORTED_METHOD internal_abort();
+
     //! Attempt to enqueue item onto queue.
     bool __TBB_EXPORTED_METHOD internal_push_if_not_full( const void* src );
 
@@ -960,7 +963,7 @@ class concurrent_queue_iterator: public concurrent_queue_iterator_base,
     friend class ::tbb::deprecated::concurrent_queue;
 #else
 public: // workaround for MSVC
-#endif 
+#endif
     //! Construct iterator pointing to head of queue.
     concurrent_queue_iterator( const concurrent_queue_base_v3& queue ) :
         concurrent_queue_iterator_base_v3(queue,__TBB_offsetof(concurrent_queue_base_v3::padded_page<Value>,last))
@@ -970,7 +973,7 @@ public: // workaround for MSVC
 public:
     concurrent_queue_iterator() {}
 
-    /** If Value==Container::value_type, then this routine is the copy constructor. 
+    /** If Value==Container::value_type, then this routine is the copy constructor.
         If Value==const Container::value_type, then this routine is a conversion constructor. */
     concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :
         concurrent_queue_iterator_base_v3(other)
@@ -982,7 +985,7 @@ public:
         return *this;
     }
 
-    //! Reference to current item 
+    //! Reference to current item
     Value& operator*() const {
         return *static_cast<Value*>(my_item);
     }
diff --git a/include/tbb/internal/_concurrent_unordered_impl.h b/include/tbb/internal/_concurrent_unordered_impl.h
index 9422728..460d5f6 100644
--- a/include/tbb/internal/_concurrent_unordered_impl.h
+++ b/include/tbb/internal/_concurrent_unordered_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -1018,11 +1018,11 @@ public:
         return my_solist.first_real_iterator(it);
     }
 
-    const_local_iterator unsafe_cbegin(size_type bucket) const {
+    const_local_iterator unsafe_cbegin(size_type /*bucket*/) const {
         return ((const self_type *) this)->begin();
     }
 
-    const_local_iterator unsafe_cend(size_type bucket) const {
+    const_local_iterator unsafe_cend(size_type /*bucket*/) const {
         return ((const self_type *) this)->end();
     }
 
@@ -1384,7 +1384,7 @@ private:
 #endif
 
 //! Hash multiplier
-static const size_t hash_multiplier = sizeof(size_t)==4? 2654435769U : 11400714819323198485ULL;
+static const size_t hash_multiplier = tbb::internal::size_t_select(2654435769U, 11400714819323198485ULL);
 } // namespace internal
 //! @endcond
 //! Hasher functions
diff --git a/include/tbb/internal/_flow_graph_impl.h b/include/tbb/internal/_flow_graph_impl.h
index 6e7ea56..fe932a6 100644
--- a/include/tbb/internal/_flow_graph_impl.h
+++ b/include/tbb/internal/_flow_graph_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -139,33 +139,31 @@ namespace internal {
         B init_body;
     };
 
-# if TBB_PREVIEW_GRAPH_NODES
     //! function_body that takes an Input and a set of output ports
     template<typename Input, typename OutputSet>
-    class multioutput_function_body {
+    class multifunction_body {
     public:
-        virtual ~multioutput_function_body () {}
+        virtual ~multifunction_body () {}
         virtual void operator()(const Input &/* input*/, OutputSet &/*oset*/) = 0;
-        virtual multioutput_function_body* clone() = 0;
+        virtual multifunction_body* clone() = 0;
     };
 
-    //! leaf for multi-output function.  OutputSet can be a std::tuple or a vector.
+    //! leaf for multifunction.  OutputSet can be a std::tuple or a vector.
     template<typename Input, typename OutputSet, typename B>
-    class multioutput_function_body_leaf : public multioutput_function_body<Input, OutputSet> {
+    class multifunction_body_leaf : public multifunction_body<Input, OutputSet> {
     public:
-        multioutput_function_body_leaf(const B &_body) : body(_body), init_body(_body) { }
+        multifunction_body_leaf(const B &_body) : body(_body), init_body(_body) { }
         void operator()(const Input &input, OutputSet &oset) {
             body(input, oset); // body should explicitly put() to one or more of oset.
         }
         B get_body() { return body; }
-        /*override*/ multioutput_function_body_leaf* clone() {
-            return new multioutput_function_body_leaf<Input, OutputSet,B>(init_body);
+        /*override*/ multifunction_body_leaf* clone() {
+            return new multifunction_body_leaf<Input, OutputSet,B>(init_body);
         }
     private:
         B body;
         B init_body;
     };
-#endif  // TBB_PREVIEW_GRAPH_NODES
     
     //! A task that calls a node's forward function
     template< typename NodeType >
diff --git a/include/tbb/internal/_flow_graph_item_buffer_impl.h b/include/tbb/internal/_flow_graph_item_buffer_impl.h
index 85c0069..d217005 100644
--- a/include/tbb/internal/_flow_graph_item_buffer_impl.h
+++ b/include/tbb/internal/_flow_graph_item_buffer_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/internal/_flow_graph_join_impl.h b/include/tbb/internal/_flow_graph_join_impl.h
index f24cfa4..0555411 100644
--- a/include/tbb/internal/_flow_graph_join_impl.h
+++ b/include/tbb/internal/_flow_graph_join_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -33,6 +33,8 @@
 #error Do not #include this internal file directly; use public TBB headers instead.
 #endif
 
+#include "tbb/internal/_flow_graph_types_impl.h"
+
 namespace internal {
 
     typedef size_t tag_value;
@@ -488,8 +490,8 @@ namespace internal {
                 switch(current->type) {
                 case try__put: {
                         bool was_inserted = this->tagged_insert(current->my_tag_value, current->my_val);
-                        if(!was_inserted) __TBB_ASSERT( false, "multiple insertions of same tag");
-                        __TBB_store_with_release(current->status, SUCCEEDED);
+                        // return failure if a duplicate insertion occurs
+                        __TBB_store_with_release(current->status, was_inserted ? SUCCEEDED : FAILED);
                     }
                     break;
                 case get__item:
@@ -626,7 +628,7 @@ namespace internal {
             }
         }
 
-        input_type &inputs() { return my_inputs; }
+        input_type &input_ports() { return my_inputs; }
     protected:
         // all methods on input ports should be called under mutual exclusion from join_node_base.
 
@@ -686,7 +688,7 @@ namespace internal {
 
         void increment_port_count() { __TBB_ASSERT(false, NULL); }  // should never be called
 
-        input_type &inputs() { return my_inputs; }
+        input_type &input_ports() { return my_inputs; }
     protected:
         // all methods on input ports should be called under mutual exclusion from join_node_base.
 
@@ -861,7 +863,7 @@ namespace internal {
 
         void increment_port_count() { __TBB_ASSERT(false, NULL); }  // should never be called
 
-        input_type &inputs() { return my_inputs; }
+        input_type &input_ports() { return my_inputs; }
     protected:
         // all methods on input ports should be called under mutual exclusion from join_node_base.
 
@@ -895,6 +897,7 @@ namespace internal {
     template<graph_buffer_policy JP, typename InputTuple, typename OutputTuple>
     class join_node_base : public graph_node, public join_node_FE<JP, InputTuple, OutputTuple>,
                            public sender<OutputTuple> {
+        using graph_node::my_graph;
     public:
         typedef OutputTuple output_type;
 
@@ -985,14 +988,14 @@ namespace internal {
         }
         // ---------- end aggregator -----------
     public:
-        join_node_base(graph &g) : input_ports_type(g), forwarder_busy(false) {
+        join_node_base(graph &g) : graph_node(g), input_ports_type(g), forwarder_busy(false) {
             my_successors.set_owner(this);
             input_ports_type::set_my_node(this);
             my_aggregator.initialize_handler(my_handler(this));
         }
 
         join_node_base(const join_node_base& other) :
-            graph_node(), input_ports_type(other),
+            graph_node(other.my_graph), input_ports_type(other),
             sender<OutputTuple>(), forwarder_busy(false), my_successors() {
             my_successors.set_owner(this);
             input_ports_type::set_my_node(this);
@@ -1000,7 +1003,7 @@ namespace internal {
         }
 
         template<typename FunctionTuple>
-        join_node_base(graph &g, FunctionTuple f) : input_ports_type(g, f), forwarder_busy(false) {
+        join_node_base(graph &g, FunctionTuple f) : graph_node(g), input_ports_type(g, f), forwarder_busy(false) {
             my_successors.set_owner(this);
             input_ports_type::set_my_node(this);
             my_aggregator.initialize_handler(my_handler(this));
@@ -1035,252 +1038,23 @@ namespace internal {
         }
     };
 
-    //! unfolded_join_node : passes input_ports_tuple_type to join_node_base.  We build the input port type
-    //  using tuple_element.  The class PT is the port type (reserving_port, queueing_port, tag_matching_port)
-    //  and should match the graph_buffer_policy.
+    // join base class type generator
     template<int N, template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
-    class unfolded_join_node;
-
-    template<template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
-    class unfolded_join_node<2,PT,OutputTuple,JP> : public internal::join_node_base<JP,
-        std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>, 
-                PT<typename std::tuple_element<1,OutputTuple>::type> >,
-        OutputTuple
-                  >
-                  {
-    public:
-        typedef typename std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>, 
-                PT<typename std::tuple_element<1,OutputTuple>::type> > input_ports_tuple_type;
-        typedef OutputTuple output_type;
-    private:
-        typedef join_node_base<JP, input_ports_tuple_type, output_type > base_type;
-    public:
-        unfolded_join_node(graph &g) : base_type(g) {}
-        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
-    };
-
-    template<template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
-    class unfolded_join_node<3,PT,OutputTuple,JP> : public internal::join_node_base<JP,
-        std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>,
-                PT<typename std::tuple_element<1,OutputTuple>::type>,
-                PT<typename std::tuple_element<2,OutputTuple>::type> >,
-        OutputTuple
-                    >
-                    {
-    public:
-        typedef typename std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>, 
-                PT<typename std::tuple_element<1,OutputTuple>::type>, 
-                PT<typename std::tuple_element<2,OutputTuple>::type> > input_ports_tuple_type;
-        typedef OutputTuple output_type;
-    private:
-        typedef join_node_base<JP, input_ports_tuple_type, output_type > base_type;
-    public:
-        unfolded_join_node(graph &g) : base_type(g) {}
-        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
+    struct join_base {
+        typedef typename internal::join_node_base<JP, typename wrap_tuple_elements<N,PT,OutputTuple>::type, OutputTuple> type;
     };
 
-    template<template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
-    class unfolded_join_node<4,PT,OutputTuple,JP> : public internal::join_node_base<JP,
-        std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>,
-                PT<typename std::tuple_element<1,OutputTuple>::type>,
-                PT<typename std::tuple_element<2,OutputTuple>::type>,
-                PT<typename std::tuple_element<3,OutputTuple>::type> >,
-        OutputTuple
-                    > {
-    public:
-        typedef typename std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>, 
-                PT<typename std::tuple_element<1,OutputTuple>::type>, 
-                PT<typename std::tuple_element<2,OutputTuple>::type>, 
-                PT<typename std::tuple_element<3,OutputTuple>::type> > input_ports_tuple_type;
-        typedef OutputTuple output_type;
-    private:
-        typedef join_node_base<JP, input_ports_tuple_type, output_type > base_type;
-    public:
-        unfolded_join_node(graph &g) : base_type(g) {}
-        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
-    };
-
-    template<template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
-    class unfolded_join_node<5,PT,OutputTuple,JP> : public internal::join_node_base<JP,
-        std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>,
-                PT<typename std::tuple_element<1,OutputTuple>::type>,
-                PT<typename std::tuple_element<2,OutputTuple>::type>,
-                PT<typename std::tuple_element<3,OutputTuple>::type>,
-                PT<typename std::tuple_element<4,OutputTuple>::type> >,
-        OutputTuple
-                > {
-    public:
-        typedef typename std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>, 
-                PT<typename std::tuple_element<1,OutputTuple>::type>, 
-                PT<typename std::tuple_element<2,OutputTuple>::type>, 
-                PT<typename std::tuple_element<3,OutputTuple>::type>, 
-                PT<typename std::tuple_element<4,OutputTuple>::type> > input_ports_tuple_type;
-        typedef OutputTuple output_type;
-    private:
-        typedef join_node_base<JP, input_ports_tuple_type, output_type > base_type;
-    public:
-        unfolded_join_node(graph &g) : base_type(g) {}
-        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
-    };
-
-    template<template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
-    class unfolded_join_node<6,PT,OutputTuple,JP> : public internal::join_node_base<JP,
-        std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>,
-                PT<typename std::tuple_element<1,OutputTuple>::type>,
-                PT<typename std::tuple_element<2,OutputTuple>::type>,
-                PT<typename std::tuple_element<3,OutputTuple>::type>,
-                PT<typename std::tuple_element<4,OutputTuple>::type>,
-                PT<typename std::tuple_element<5,OutputTuple>::type> >,
-        OutputTuple
-                    > {
-    public:
-        typedef typename std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>, 
-                PT<typename std::tuple_element<1,OutputTuple>::type>, 
-                PT<typename std::tuple_element<2,OutputTuple>::type>, 
-                PT<typename std::tuple_element<3,OutputTuple>::type>, 
-                PT<typename std::tuple_element<4,OutputTuple>::type>, 
-                PT<typename std::tuple_element<5,OutputTuple>::type> > input_ports_tuple_type;
-        typedef OutputTuple output_type;
-    private:
-        typedef join_node_base<JP, input_ports_tuple_type, output_type > base_type;
-    public:
-        unfolded_join_node(graph &g) : base_type(g) {}
-        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
-    };
-
-    template<template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
-    class unfolded_join_node<7,PT,OutputTuple,JP> : public internal::join_node_base<JP,
-        std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>,
-                PT<typename std::tuple_element<1,OutputTuple>::type>,
-                PT<typename std::tuple_element<2,OutputTuple>::type>,
-                PT<typename std::tuple_element<3,OutputTuple>::type>,
-                PT<typename std::tuple_element<4,OutputTuple>::type>,
-                PT<typename std::tuple_element<5,OutputTuple>::type>,
-                PT<typename std::tuple_element<6,OutputTuple>::type> >,
-        OutputTuple
-                > {
-    public:
-        typedef typename std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>, 
-                PT<typename std::tuple_element<1,OutputTuple>::type>, 
-                PT<typename std::tuple_element<2,OutputTuple>::type>, 
-                PT<typename std::tuple_element<3,OutputTuple>::type>, 
-                PT<typename std::tuple_element<4,OutputTuple>::type>, 
-                PT<typename std::tuple_element<5,OutputTuple>::type>, 
-                PT<typename std::tuple_element<6,OutputTuple>::type> > input_ports_tuple_type;
-        typedef OutputTuple output_type;
-    private:
-        typedef join_node_base<JP, input_ports_tuple_type, output_type > base_type;
-    public:
-        unfolded_join_node(graph &g) : base_type(g) {}
-        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
-    };
-
-    template<template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
-    class unfolded_join_node<8,PT,OutputTuple,JP> : public internal::join_node_base<JP,
-        std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>,
-                PT<typename std::tuple_element<1,OutputTuple>::type>,
-                PT<typename std::tuple_element<2,OutputTuple>::type>,
-                PT<typename std::tuple_element<3,OutputTuple>::type>,
-                PT<typename std::tuple_element<4,OutputTuple>::type>,
-                PT<typename std::tuple_element<5,OutputTuple>::type>,
-                PT<typename std::tuple_element<6,OutputTuple>::type>,
-                PT<typename std::tuple_element<7,OutputTuple>::type> >,
-        OutputTuple
-                > {
-    public:
-        typedef typename std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>, 
-                PT<typename std::tuple_element<1,OutputTuple>::type>, 
-                PT<typename std::tuple_element<2,OutputTuple>::type>, 
-                PT<typename std::tuple_element<3,OutputTuple>::type>, 
-                PT<typename std::tuple_element<4,OutputTuple>::type>, 
-                PT<typename std::tuple_element<5,OutputTuple>::type>, 
-                PT<typename std::tuple_element<6,OutputTuple>::type>, 
-                PT<typename std::tuple_element<7,OutputTuple>::type> > input_ports_tuple_type;
-        typedef OutputTuple output_type;
-    private:
-        typedef join_node_base<JP, input_ports_tuple_type, output_type > base_type;
-    public:
-        unfolded_join_node(graph &g) : base_type(g) {}
-        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
-    };
-
-    template<template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
-    class unfolded_join_node<9,PT,OutputTuple,JP> : public internal::join_node_base<JP,
-        std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>,
-                PT<typename std::tuple_element<1,OutputTuple>::type>,
-                PT<typename std::tuple_element<2,OutputTuple>::type>,
-                PT<typename std::tuple_element<3,OutputTuple>::type>,
-                PT<typename std::tuple_element<4,OutputTuple>::type>,
-                PT<typename std::tuple_element<5,OutputTuple>::type>,
-                PT<typename std::tuple_element<6,OutputTuple>::type>,
-                PT<typename std::tuple_element<7,OutputTuple>::type>,
-                PT<typename std::tuple_element<8,OutputTuple>::type> >,
-        OutputTuple
-                > {
-    public:
-        typedef typename std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>, 
-                PT<typename std::tuple_element<1,OutputTuple>::type>, 
-                PT<typename std::tuple_element<2,OutputTuple>::type>, 
-                PT<typename std::tuple_element<3,OutputTuple>::type>, 
-                PT<typename std::tuple_element<4,OutputTuple>::type>, 
-                PT<typename std::tuple_element<5,OutputTuple>::type>, 
-                PT<typename std::tuple_element<6,OutputTuple>::type>, 
-                PT<typename std::tuple_element<7,OutputTuple>::type>, 
-                PT<typename std::tuple_element<8,OutputTuple>::type> > input_ports_tuple_type;
-        typedef OutputTuple output_type;
-    private:
-        typedef join_node_base<JP, input_ports_tuple_type, output_type > base_type;
-    public:
-        unfolded_join_node(graph &g) : base_type(g) {}
-        unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
-    };
+    //! unfolded_join_node : passes input_ports_type to join_node_base.  We build the input port type
+    //  using tuple_element.  The class PT is the port type (reserving_port, queueing_port, tag_matching_port)
+    //  and should match the graph_buffer_policy.
 
-    template<template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
-    class unfolded_join_node<10,PT,OutputTuple,JP> : public internal::join_node_base<JP,
-        std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>,
-                PT<typename std::tuple_element<1,OutputTuple>::type>,
-                PT<typename std::tuple_element<2,OutputTuple>::type>,
-                PT<typename std::tuple_element<3,OutputTuple>::type>,
-                PT<typename std::tuple_element<4,OutputTuple>::type>,
-                PT<typename std::tuple_element<5,OutputTuple>::type>,
-                PT<typename std::tuple_element<6,OutputTuple>::type>,
-                PT<typename std::tuple_element<7,OutputTuple>::type>,
-                PT<typename std::tuple_element<8,OutputTuple>::type>,
-                PT<typename std::tuple_element<9,OutputTuple>::type> >,
-        OutputTuple
-                > {
+    template<int N, template<class> class PT, typename OutputTuple, graph_buffer_policy JP>
+    class unfolded_join_node : public join_base<N,PT,OutputTuple,JP>::type {
     public:
-        typedef typename std::tuple<
-                PT<typename std::tuple_element<0,OutputTuple>::type>, 
-                PT<typename std::tuple_element<1,OutputTuple>::type>, 
-                PT<typename std::tuple_element<2,OutputTuple>::type>, 
-                PT<typename std::tuple_element<3,OutputTuple>::type>, 
-                PT<typename std::tuple_element<4,OutputTuple>::type>, 
-                PT<typename std::tuple_element<5,OutputTuple>::type>, 
-                PT<typename std::tuple_element<6,OutputTuple>::type>, 
-                PT<typename std::tuple_element<7,OutputTuple>::type>, 
-                PT<typename std::tuple_element<8,OutputTuple>::type>, 
-                PT<typename std::tuple_element<9,OutputTuple>::type> > input_ports_tuple_type;
+        typedef typename wrap_tuple_elements<N, PT, OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<JP, input_ports_tuple_type, output_type > base_type;
+        typedef join_node_base<JP, input_ports_type, output_type > base_type;
     public:
         unfolded_join_node(graph &g) : base_type(g) {}
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
@@ -1290,20 +1064,15 @@ namespace internal {
     // differ.
 
     template<typename OutputTuple>
-    class unfolded_join_node<2,tag_matching_port,OutputTuple,tag_matching> : public internal::join_node_base<tag_matching,
-        std::tuple<
-                tag_matching_port<typename std::tuple_element<0,OutputTuple>::type>, 
-                tag_matching_port<typename std::tuple_element<1,OutputTuple>::type> >,
-        OutputTuple
-                  >
-                  {
+    class unfolded_join_node<2,tag_matching_port,OutputTuple,tag_matching> : public 
+            join_base<2,tag_matching_port,OutputTuple,tag_matching>::type {
         typedef typename std::tuple_element<0, OutputTuple>::type T0;
         typedef typename std::tuple_element<1, OutputTuple>::type T1;
     public:
-        typedef typename std::tuple< tag_matching_port<T0>, tag_matching_port<T1> > input_ports_tuple_type;
+        typedef typename wrap_tuple_elements<2,tag_matching_port,OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_tuple_type, output_type > base_type;
+        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
         typedef typename internal::function_body<T0, tag_value> *f0_p;
         typedef typename internal::function_body<T1, tag_value> *f1_p;
         typedef typename std::tuple< f0_p, f1_p > func_initializer_type;
@@ -1318,23 +1087,16 @@ namespace internal {
     };
 
     template<typename OutputTuple>
-    class unfolded_join_node<3,tag_matching_port,OutputTuple,tag_matching> : public internal::join_node_base<tag_matching,
-        std::tuple<
-                tag_matching_port<typename std::tuple_element<0,OutputTuple>::type>, 
-                tag_matching_port<typename std::tuple_element<1,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<2,OutputTuple>::type> >,
-        OutputTuple
-                  >
-                  {
+    class unfolded_join_node<3,tag_matching_port,OutputTuple,tag_matching> : public
+            join_base<3,tag_matching_port,OutputTuple,tag_matching>::type {
         typedef typename std::tuple_element<0, OutputTuple>::type T0;
         typedef typename std::tuple_element<1, OutputTuple>::type T1;
         typedef typename std::tuple_element<2, OutputTuple>::type T2;
     public:
-        typedef typename std::tuple< tag_matching_port<T0>, tag_matching_port<T1>, tag_matching_port<T2>
-            > input_ports_tuple_type;
+        typedef typename wrap_tuple_elements<3, tag_matching_port, OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_tuple_type, output_type > base_type;
+        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
         typedef typename internal::function_body<T0, tag_value> *f0_p;
         typedef typename internal::function_body<T1, tag_value> *f1_p;
         typedef typename internal::function_body<T2, tag_value> *f2_p;
@@ -1351,24 +1113,17 @@ namespace internal {
     };
 
     template<typename OutputTuple>
-    class unfolded_join_node<4,tag_matching_port,OutputTuple,tag_matching> : public internal::join_node_base<tag_matching,
-        std::tuple<
-                tag_matching_port<typename std::tuple_element<0,OutputTuple>::type>, 
-                tag_matching_port<typename std::tuple_element<1,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<2,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<3,OutputTuple>::type>
-            >, OutputTuple >
-                  {
+    class unfolded_join_node<4,tag_matching_port,OutputTuple,tag_matching> : public 
+            join_base<4,tag_matching_port,OutputTuple,tag_matching>::type {
         typedef typename std::tuple_element<0, OutputTuple>::type T0;
         typedef typename std::tuple_element<1, OutputTuple>::type T1;
         typedef typename std::tuple_element<2, OutputTuple>::type T2;
         typedef typename std::tuple_element<3, OutputTuple>::type T3;
     public:
-        typedef typename std::tuple< tag_matching_port<T0>, tag_matching_port<T1>, tag_matching_port<T2>,
-                tag_matching_port<T3> > input_ports_tuple_type;
+        typedef typename wrap_tuple_elements<4, tag_matching_port, OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_tuple_type, output_type > base_type;
+        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
         typedef typename internal::function_body<T0, tag_value> *f0_p;
         typedef typename internal::function_body<T1, tag_value> *f1_p;
         typedef typename internal::function_body<T2, tag_value> *f2_p;
@@ -1387,26 +1142,18 @@ namespace internal {
     };
 
     template<typename OutputTuple>
-    class unfolded_join_node<5,tag_matching_port,OutputTuple,tag_matching> : public internal::join_node_base<tag_matching,
-        std::tuple<
-                tag_matching_port<typename std::tuple_element<0,OutputTuple>::type>, 
-                tag_matching_port<typename std::tuple_element<1,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<2,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<3,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<4,OutputTuple>::type>
-            >, OutputTuple >
-                  {
+    class unfolded_join_node<5,tag_matching_port,OutputTuple,tag_matching> : public
+            join_base<5,tag_matching_port,OutputTuple,tag_matching>::type {
         typedef typename std::tuple_element<0, OutputTuple>::type T0;
         typedef typename std::tuple_element<1, OutputTuple>::type T1;
         typedef typename std::tuple_element<2, OutputTuple>::type T2;
         typedef typename std::tuple_element<3, OutputTuple>::type T3;
         typedef typename std::tuple_element<4, OutputTuple>::type T4;
     public:
-        typedef typename std::tuple< tag_matching_port<T0>, tag_matching_port<T1>, tag_matching_port<T2>,
-                tag_matching_port<T3>, tag_matching_port<T4> > input_ports_tuple_type;
+        typedef typename wrap_tuple_elements<5, tag_matching_port, OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_tuple_type, output_type > base_type;
+        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
         typedef typename internal::function_body<T0, tag_value> *f0_p;
         typedef typename internal::function_body<T1, tag_value> *f1_p;
         typedef typename internal::function_body<T2, tag_value> *f2_p;
@@ -1426,17 +1173,10 @@ namespace internal {
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
 
+#if __TBB_VARIADIC_MAX >= 6
     template<typename OutputTuple>
-    class unfolded_join_node<6,tag_matching_port,OutputTuple,tag_matching> : public internal::join_node_base<tag_matching,
-        std::tuple<
-                tag_matching_port<typename std::tuple_element<0,OutputTuple>::type>, 
-                tag_matching_port<typename std::tuple_element<1,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<2,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<3,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<4,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<5,OutputTuple>::type>
-            >, OutputTuple >
-                  {
+    class unfolded_join_node<6,tag_matching_port,OutputTuple,tag_matching> : public
+            join_base<6,tag_matching_port,OutputTuple,tag_matching>::type {
         typedef typename std::tuple_element<0, OutputTuple>::type T0;
         typedef typename std::tuple_element<1, OutputTuple>::type T1;
         typedef typename std::tuple_element<2, OutputTuple>::type T2;
@@ -1444,11 +1184,10 @@ namespace internal {
         typedef typename std::tuple_element<4, OutputTuple>::type T4;
         typedef typename std::tuple_element<5, OutputTuple>::type T5;
     public:
-        typedef typename std::tuple< tag_matching_port<T0>, tag_matching_port<T1>, tag_matching_port<T2>,
-                tag_matching_port<T3>, tag_matching_port<T4>, tag_matching_port<T5> > input_ports_tuple_type;
+        typedef typename wrap_tuple_elements<6, tag_matching_port, OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_tuple_type, output_type > base_type;
+        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
         typedef typename internal::function_body<T0, tag_value> *f0_p;
         typedef typename internal::function_body<T1, tag_value> *f1_p;
         typedef typename internal::function_body<T2, tag_value> *f2_p;
@@ -1469,19 +1208,12 @@ namespace internal {
                     ) ) {}
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 7
     template<typename OutputTuple>
-    class unfolded_join_node<7,tag_matching_port,OutputTuple,tag_matching> : public internal::join_node_base<tag_matching,
-        std::tuple<
-                tag_matching_port<typename std::tuple_element<0,OutputTuple>::type>, 
-                tag_matching_port<typename std::tuple_element<1,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<2,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<3,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<4,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<5,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<6,OutputTuple>::type>
-            >, OutputTuple >
-                  {
+    class unfolded_join_node<7,tag_matching_port,OutputTuple,tag_matching> : public 
+            join_base<7,tag_matching_port,OutputTuple,tag_matching>::type {
         typedef typename std::tuple_element<0, OutputTuple>::type T0;
         typedef typename std::tuple_element<1, OutputTuple>::type T1;
         typedef typename std::tuple_element<2, OutputTuple>::type T2;
@@ -1490,12 +1222,10 @@ namespace internal {
         typedef typename std::tuple_element<5, OutputTuple>::type T5;
         typedef typename std::tuple_element<6, OutputTuple>::type T6;
     public:
-        typedef typename std::tuple< tag_matching_port<T0>, tag_matching_port<T1>, tag_matching_port<T2>,
-                tag_matching_port<T3>, tag_matching_port<T4>, tag_matching_port<T5>, tag_matching_port<T6>
-            > input_ports_tuple_type;
+        typedef typename wrap_tuple_elements<7, tag_matching_port, OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_tuple_type, output_type > base_type;
+        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
         typedef typename internal::function_body<T0, tag_value> *f0_p;
         typedef typename internal::function_body<T1, tag_value> *f1_p;
         typedef typename internal::function_body<T2, tag_value> *f2_p;
@@ -1518,20 +1248,12 @@ namespace internal {
                     ) ) {}
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 8
     template<typename OutputTuple>
-    class unfolded_join_node<8,tag_matching_port,OutputTuple,tag_matching> : public internal::join_node_base<tag_matching,
-        std::tuple<
-                tag_matching_port<typename std::tuple_element<0,OutputTuple>::type>, 
-                tag_matching_port<typename std::tuple_element<1,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<2,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<3,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<4,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<5,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<6,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<7,OutputTuple>::type>
-            >, OutputTuple >
-                  {
+    class unfolded_join_node<8,tag_matching_port,OutputTuple,tag_matching> : public 
+            join_base<8,tag_matching_port,OutputTuple,tag_matching>::type {
         typedef typename std::tuple_element<0, OutputTuple>::type T0;
         typedef typename std::tuple_element<1, OutputTuple>::type T1;
         typedef typename std::tuple_element<2, OutputTuple>::type T2;
@@ -1541,12 +1263,10 @@ namespace internal {
         typedef typename std::tuple_element<6, OutputTuple>::type T6;
         typedef typename std::tuple_element<7, OutputTuple>::type T7;
     public:
-        typedef typename std::tuple< tag_matching_port<T0>, tag_matching_port<T1>, tag_matching_port<T2>,
-                tag_matching_port<T3>, tag_matching_port<T4>, tag_matching_port<T5>, tag_matching_port<T6>,
-                tag_matching_port<T7> > input_ports_tuple_type;
+        typedef typename wrap_tuple_elements<8, tag_matching_port, OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_tuple_type, output_type > base_type;
+        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
         typedef typename internal::function_body<T0, tag_value> *f0_p;
         typedef typename internal::function_body<T1, tag_value> *f1_p;
         typedef typename internal::function_body<T2, tag_value> *f2_p;
@@ -1571,21 +1291,12 @@ namespace internal {
                     ) ) {}
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 9
     template<typename OutputTuple>
-    class unfolded_join_node<9,tag_matching_port,OutputTuple,tag_matching> : public internal::join_node_base<tag_matching,
-        std::tuple<
-                tag_matching_port<typename std::tuple_element<0,OutputTuple>::type>, 
-                tag_matching_port<typename std::tuple_element<1,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<2,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<3,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<4,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<5,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<6,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<7,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<8,OutputTuple>::type>
-            >, OutputTuple >
-                  {
+    class unfolded_join_node<9,tag_matching_port,OutputTuple,tag_matching> : public 
+            join_base<9,tag_matching_port,OutputTuple,tag_matching>::type {
         typedef typename std::tuple_element<0, OutputTuple>::type T0;
         typedef typename std::tuple_element<1, OutputTuple>::type T1;
         typedef typename std::tuple_element<2, OutputTuple>::type T2;
@@ -1596,12 +1307,10 @@ namespace internal {
         typedef typename std::tuple_element<7, OutputTuple>::type T7;
         typedef typename std::tuple_element<8, OutputTuple>::type T8;
     public:
-        typedef typename std::tuple< tag_matching_port<T0>, tag_matching_port<T1>, tag_matching_port<T2>,
-                tag_matching_port<T3>, tag_matching_port<T4>, tag_matching_port<T5>, tag_matching_port<T6>,
-                tag_matching_port<T7>, tag_matching_port<T8> > input_ports_tuple_type;
+        typedef typename wrap_tuple_elements<9, tag_matching_port, OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_tuple_type, output_type > base_type;
+        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
         typedef typename internal::function_body<T0, tag_value> *f0_p;
         typedef typename internal::function_body<T1, tag_value> *f1_p;
         typedef typename internal::function_body<T2, tag_value> *f2_p;
@@ -1628,22 +1337,12 @@ namespace internal {
                     ) ) {}
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 10
     template<typename OutputTuple>
-    class unfolded_join_node<10,tag_matching_port,OutputTuple,tag_matching> : public internal::join_node_base<tag_matching,
-        std::tuple<
-                tag_matching_port<typename std::tuple_element<0,OutputTuple>::type>, 
-                tag_matching_port<typename std::tuple_element<1,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<2,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<3,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<4,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<5,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<6,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<7,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<8,OutputTuple>::type>,
-                tag_matching_port<typename std::tuple_element<9,OutputTuple>::type>
-            >, OutputTuple >
-                  {
+    class unfolded_join_node<10,tag_matching_port,OutputTuple,tag_matching> : public 
+            join_base<10,tag_matching_port,OutputTuple,tag_matching>::type {
         typedef typename std::tuple_element<0, OutputTuple>::type T0;
         typedef typename std::tuple_element<1, OutputTuple>::type T1;
         typedef typename std::tuple_element<2, OutputTuple>::type T2;
@@ -1655,12 +1354,10 @@ namespace internal {
         typedef typename std::tuple_element<8, OutputTuple>::type T8;
         typedef typename std::tuple_element<9, OutputTuple>::type T9;
     public:
-        typedef typename std::tuple< tag_matching_port<T0>, tag_matching_port<T1>, tag_matching_port<T2>,
-                tag_matching_port<T3>, tag_matching_port<T4>, tag_matching_port<T5>, tag_matching_port<T6>,
-                tag_matching_port<T7>, tag_matching_port<T8>, tag_matching_port<T9> > input_ports_tuple_type;
+        typedef typename wrap_tuple_elements<10, tag_matching_port, OutputTuple>::type input_ports_type;
         typedef OutputTuple output_type;
     private:
-        typedef join_node_base<tag_matching, input_ports_tuple_type, output_type > base_type;
+        typedef join_node_base<tag_matching, input_ports_type, output_type > base_type;
         typedef typename internal::function_body<T0, tag_value> *f0_p;
         typedef typename internal::function_body<T1, tag_value> *f1_p;
         typedef typename internal::function_body<T2, tag_value> *f2_p;
@@ -1689,14 +1386,14 @@ namespace internal {
                     ) ) {}
         unfolded_join_node(const unfolded_join_node &other) : base_type(other) {}
     };
+#endif
 
     //! templated function to refer to input ports of the join node
     template<size_t N, typename JNT>
-    typename std::tuple_element<N, typename JNT::input_ports_tuple_type>::type &input_port(JNT &jn) {
-        return std::get<N>(jn.inputs());
+    typename std::tuple_element<N, typename JNT::input_ports_type>::type &input_port(JNT &jn) {
+        return std::get<N>(jn.input_ports());
     }
 
 } 
-
 #endif // __TBB__flow_graph_join_impl_H
 
diff --git a/include/tbb/internal/_flow_graph_node_impl.h b/include/tbb/internal/_flow_graph_node_impl.h
index de2fe40..781454f 100644
--- a/include/tbb/internal/_flow_graph_node_impl.h
+++ b/include/tbb/internal/_flow_graph_node_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -299,44 +299,43 @@ namespace internal {
 
     };
 
-#if TBB_PREVIEW_GRAPH_NODES
     //! Implements methods for a function node that takes a type Input as input
     //  and has a tuple of output ports specified.  
     template< typename Input, typename OutputPortSet, typename A>
-    class multioutput_function_input : public function_input_base<Input, A, multioutput_function_input<Input,OutputPortSet,A> > {
+    class multifunction_input : public function_input_base<Input, A, multifunction_input<Input,OutputPortSet,A> > {
     public:
         typedef Input input_type;
         typedef OutputPortSet output_ports_type;
-        typedef multioutput_function_input<Input,OutputPortSet,A> my_class;
+        typedef multifunction_input<Input,OutputPortSet,A> my_class;
         typedef function_input_base<Input, A, my_class> base_type;
         typedef function_input_queue<input_type, A> input_queue_type;
 
 
         // constructor
         template<typename Body>
-        multioutput_function_input( 
+        multifunction_input( 
                 graph &g, 
                 size_t max_concurrency, 
                 Body& body,
                 function_input_queue<input_type,A> *q = NULL ) :
             base_type(g, max_concurrency, q),
-            my_body( new internal::multioutput_function_body_leaf<input_type, output_ports_type, Body>(body) ) {
+            my_body( new internal::multifunction_body_leaf<input_type, output_ports_type, Body>(body) ) {
         }
 
         //! Copy constructor
-        multioutput_function_input( const multioutput_function_input& src, input_queue_type *q = NULL ) : 
+        multifunction_input( const multifunction_input& src, input_queue_type *q = NULL ) : 
                 base_type(src, q),
                 my_body( src.my_body->clone() ) {
         }
 
-        ~multioutput_function_input() {
+        ~multifunction_input() {
             delete my_body;
         }
 
         template< typename Body >
         Body copy_function_object() {
-            internal::multioutput_function_body<input_type, output_ports_type> &body_ref = *this->my_body;
-            return dynamic_cast< internal::multioutput_function_body_leaf<input_type, output_ports_type, Body> & >(body_ref).get_body(); 
+            internal::multifunction_body<input_type, output_ports_type> &body_ref = *this->my_body;
+            return dynamic_cast< internal::multifunction_body_leaf<input_type, output_ports_type, Body> & >(body_ref).get_body(); 
         } 
 
         void apply_body_impl( const input_type &i) {
@@ -346,12 +345,12 @@ namespace internal {
         output_ports_type &output_ports(){ return my_output_ports; }
 
     protected:
-        multioutput_function_body<input_type, output_ports_type> *my_body;
+        multifunction_body<input_type, output_ports_type> *my_body;
         output_ports_type my_output_ports;
 
     };
 
-    // template to refer to an output port of a multioutput_function_node
+    // template to refer to an output port of a multifunction_node
     template<size_t N, typename MOP>
     typename std::tuple_element<N, typename MOP::output_ports_type>::type &output_port(MOP &op) {
         return std::get<N>(op.output_ports()); 
@@ -362,7 +361,7 @@ namespace internal {
     struct emit_element {
         template<typename T, typename P>
         static void emit_this(const T &t, P &p) {
-            std::get<N-1>(p).put(std::get<N-1>(t));
+            (void)std::get<N-1>(p).try_put(std::get<N-1>(t));
             emit_element<N-1>::emit_this(t,p);
         }
     };
@@ -371,10 +370,9 @@ namespace internal {
     struct emit_element<1> {
         template<typename T, typename P>
         static void emit_this(const T &t, P &p) {
-            std::get<0>(p).put(std::get<0>(t));
+            (void)std::get<0>(p).try_put(std::get<0>(t));
         }
     };
-#endif  // TBB_PREVIEW_GRAPH_NODES
 
     //! Implements methods for an executable node that takes continue_msg as input
     template< typename Output >
@@ -452,15 +450,14 @@ namespace internal {
             return true;
         }
 
-        // for multioutput_function_node.  The function_body that implements
+        // for multifunction_node.  The function_body that implements
         // the node will have an input and an output tuple of ports.  To put
         // an item to a successor, the body should
         //
-        //    get<I>(output_ports).put(output_value);
+        //    get<I>(output_ports).try_put(output_value);
         //
-        // successors must always accept (for instance, a queue_node) or items
-        // may be dropped.
-        void put(const output_type &i) { my_successors.try_put(i); }
+        // return value will be bool returned from successors.try_put.
+        bool try_put(const output_type &i) { return my_successors.try_put(i); }
           
     protected:
         broadcast_cache<output_type> my_successors;
diff --git a/include/tbb/internal/_flow_graph_or_impl.h b/include/tbb/internal/_flow_graph_or_impl.h
index f17f536..262c27e 100644
--- a/include/tbb/internal/_flow_graph_or_impl.h
+++ b/include/tbb/internal/_flow_graph_or_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -138,7 +138,7 @@ namespace internal {
             or_helper<StructTypes,N>::set_or_node_pointer(my_inputs, this);
         }
 
-        input_type &inputs() { return my_inputs; }
+        input_type &input_ports() { return my_inputs; }
     protected:
         input_type my_inputs;
     };
@@ -147,6 +147,7 @@ namespace internal {
     template<typename InputTuple, typename OutputType, typename StructTypes>
     class or_node_base : public graph_node, public or_node_FE<InputTuple, OutputType,StructTypes>,
                            public sender<OutputType> {
+       using graph_node::my_graph;
     public:
         static const size_t N = std::tuple_size<InputTuple>::value;
         typedef OutputType output_type;
@@ -207,12 +208,12 @@ namespace internal {
         }
         // ---------- end aggregator -----------
     public:
-        or_node_base( ) : input_ports_type() {
+        or_node_base(graph& g) : graph_node(g), input_ports_type() {
             my_successors.set_owner(this);
             my_aggregator.initialize_handler(my_handler(this));
         }
 
-        or_node_base( const or_node_base& /*other*/) : input_ports_type() {
+        or_node_base(const or_node_base& other) : graph_node(other.my_graph), input_ports_type(), sender<output_type>() {
             my_successors.set_owner(this);
             my_aggregator.initialize_handler(my_handler(this));
         }
@@ -243,22 +244,23 @@ namespace internal {
     template<typename OutputTuple>
     struct or_types {
         static const int N = std::tuple_size<OutputTuple>::value;
-        typedef typename wrap_tuple_elements<N,or_input_port,OutputTuple>::type input_ports_tuple_type;
+        typedef typename wrap_tuple_elements<N,or_input_port,OutputTuple>::type input_ports_type;
         typedef typename or_output_type<OutputTuple>::type output_type;
-        typedef internal::or_node_FE<input_ports_tuple_type,output_type,OutputTuple> or_FE_type;
-        typedef internal::or_node_base<input_ports_tuple_type, output_type, OutputTuple> or_base_type;
+        typedef internal::or_node_FE<input_ports_type,output_type,OutputTuple> or_FE_type;
+        typedef internal::or_node_base<input_ports_type, output_type, OutputTuple> or_base_type;
     };
 
     template<class OutputTuple>
     class unfolded_or_node : public or_types<OutputTuple>::or_base_type {
     public:
-        typedef typename or_types<OutputTuple>::input_ports_tuple_type input_ports_tuple_type;
+        typedef typename or_types<OutputTuple>::input_ports_type input_ports_type;
         typedef OutputTuple tuple_types;
         typedef typename or_types<OutputTuple>::output_type output_type;
     private:
         typedef typename or_types<OutputTuple>::or_base_type base_type;
     public:
-        unfolded_or_node() : base_type() {}
+        unfolded_or_node(graph& g) : base_type(g) {}
+        unfolded_or_node(const unfolded_or_node &other) : base_type(other) {}
     };
 
 
diff --git a/include/tbb/internal/_flow_graph_tagged_buffer_impl.h b/include/tbb/internal/_flow_graph_tagged_buffer_impl.h
index 8b87fd1..b9d7acd 100644
--- a/include/tbb/internal/_flow_graph_tagged_buffer_impl.h
+++ b/include/tbb/internal/_flow_graph_tagged_buffer_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -73,17 +73,8 @@ private:
 
     size_t mask() { return my_size - 1; }
 
-// #define ABYSMAL 1
     static size_t hash(TagType t) {
-#if ABYSMAL
-        return (size_t)1;
-#else
-#if __TBB_WORDSIZE == 4
-        return uintptr_t(t)*0x9E3779B9;
-#else
-        return uintptr_t(t)*0x9E3779B97F4A7C15;
-#endif
-#endif
+        return uintptr_t(t)*tbb::internal::size_t_select(0x9E3779B9,0x9E3779B97F4A7C15ULL);
     }
 
     void set_up_free_list( element_type **p_free_list, list_array_type *la, size_t sz) {
diff --git a/include/tbb/internal/_flow_graph_types_impl.h b/include/tbb/internal/_flow_graph_types_impl.h
index 335b04f..cedda32 100644
--- a/include/tbb/internal/_flow_graph_types_impl.h
+++ b/include/tbb/internal/_flow_graph_types_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -84,6 +84,7 @@ namespace internal {
             type;
     };
 
+#if __TBB_VARIADIC_MAX >= 6
     template<template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements<6, PT, TypeTuple> {
         typedef typename std::tuple<
@@ -95,7 +96,9 @@ namespace internal {
                 PT<typename std::tuple_element<5,TypeTuple>::type> >
             type;
     };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 7
     template<template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements<7, PT, TypeTuple> {
         typedef typename std::tuple<
@@ -108,7 +111,9 @@ namespace internal {
                 PT<typename std::tuple_element<6,TypeTuple>::type> >
             type;
     };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 8
     template<template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements<8, PT, TypeTuple> {
         typedef typename std::tuple<
@@ -122,7 +127,9 @@ namespace internal {
                 PT<typename std::tuple_element<7,TypeTuple>::type> >
             type;
     };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 9
     template<template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements<9, PT, TypeTuple> {
         typedef typename std::tuple<
@@ -137,7 +144,9 @@ namespace internal {
                 PT<typename std::tuple_element<8,TypeTuple>::type> >
             type;
     };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 10
     template<template<class> class PT, typename TypeTuple>
     struct wrap_tuple_elements<10, PT, TypeTuple> {
         typedef typename std::tuple<
@@ -153,6 +162,7 @@ namespace internal {
                 PT<typename std::tuple_element<9,TypeTuple>::type> >
             type;
     };
+#endif
 
 }  // namespace internal
 #endif  /* __TBB__flow_graph_types_impl_H */
diff --git a/include/tbb/internal/_tbb_windef.h b/include/tbb/internal/_tbb_windef.h
index bda75c7..da0a587 100644
--- a/include/tbb/internal/_tbb_windef.h
+++ b/include/tbb/internal/_tbb_windef.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -62,7 +62,7 @@ namespace std {
 #    endif
 #endif
 
-#if __TBB_BUILD && !defined(__TBB_NO_IMPLICIT_LINKAGE)
+#if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBB_NO_IMPLICIT_LINKAGE)
 #define __TBB_NO_IMPLICIT_LINKAGE 1
 #endif
 
diff --git a/include/tbb/machine/gcc_generic.h b/include/tbb/machine/gcc_generic.h
index 0192fde..e424283 100644
--- a/include/tbb/machine/gcc_generic.h
+++ b/include/tbb/machine/gcc_generic.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -35,15 +35,16 @@
 #include <stdint.h>
 #include <unistd.h>
 
-#define __TBB_WORDSIZE      __SIZEOF_INT__
+#define __TBB_WORDSIZE      __SIZEOF_POINTER__
 
-// For some reason straight mapping does not work on mingw
-#if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
-    #define __TBB_BIG_ENDIAN    0
-#elif __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__
-    #define __TBB_BIG_ENDIAN    1
-#else
-#error Unsupported endianness
+#ifdef __BYTE_ORDER__
+    #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
+        #define __TBB_BIG_ENDIAN    1
+    #elif __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__
+        #define __TBB_BIG_ENDIAN    0
+    #elif __BYTE_ORDER__==__ORDER_PDP_ENDIAN__
+        #define __TBB_BIG_ENDIAN -1 // not currently supported
+    #endif
 #endif
 
 /** As this generic implementation has absolutely no information about underlying
@@ -60,6 +61,10 @@
 inline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) {                    \
     return __sync_val_compare_and_swap(reinterpret_cast<volatile T *>(ptr),comparand,value);      \
 }                                                                                                 \
+                                                                                                  \
+inline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {                               \
+    return __sync_fetch_and_add(reinterpret_cast<volatile T *>(ptr),value);                       \
+}                                                                                                 \
 
 __TBB_MACHINE_DEFINE_ATOMICS(1,int8_t)
 __TBB_MACHINE_DEFINE_ATOMICS(2,int16_t)
@@ -68,7 +73,52 @@ __TBB_MACHINE_DEFINE_ATOMICS(8,int64_t)
 
 #undef __TBB_MACHINE_DEFINE_ATOMICS
 
-#define __TBB_USE_GENERIC_FETCH_ADD                 1
-#define __TBB_USE_GENERIC_FETCH_STORE               1
-#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE    1
-#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE        1
+namespace tbb{ namespace internal { namespace gcc_builtins {
+    inline int clz(unsigned int x){ return __builtin_clz(x);};
+    inline int clz(unsigned long int x){ return __builtin_clzl(x);};
+    inline int clz(unsigned long long int x){ return __builtin_clzll(x);};
+}}}
+//gcc __builtin_clz builtin count _number_ of leading zeroes
+static inline intptr_t __TBB_machine_lg( uintptr_t x ) {
+    return sizeof(x)*8 - tbb::internal::gcc_builtins::clz(x) -1 ;
+}
+
+static inline void __TBB_machine_or( volatile void *ptr, uintptr_t addend ) {
+    __sync_fetch_and_or(reinterpret_cast<volatile uintptr_t *>(ptr),addend);
+}
+
+static inline void __TBB_machine_and( volatile void *ptr, uintptr_t addend ) {
+    __sync_fetch_and_and(reinterpret_cast<volatile uintptr_t *>(ptr),addend);
+}
+
+
+typedef unsigned char __TBB_Flag;
+
+typedef __TBB_atomic __TBB_Flag __TBB_atomic_flag;
+
+inline bool __TBB_machine_try_lock_byte( __TBB_atomic_flag &flag ) {
+    return __sync_lock_test_and_set(&flag,1)==0;
+}
+
+inline void __TBB_machine_unlock_byte( __TBB_atomic_flag &flag , __TBB_Flag) {
+    __sync_lock_release(&flag);
+}
+
+// Machine specific atomic operations
+#define __TBB_AtomicOR(P,V)     __TBB_machine_or(P,V)
+#define __TBB_AtomicAND(P,V)    __TBB_machine_and(P,V)
+
+#define __TBB_TryLockByte   __TBB_machine_try_lock_byte
+#define __TBB_UnlockByte    __TBB_machine_unlock_byte
+
+// Definition of other functions
+#define __TBB_Log2(V)           __TBB_machine_lg(V)
+
+#define __TBB_USE_GENERIC_FETCH_STORE                       1
+#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
+#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
+#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
+
+#if __TBB_WORDSIZE==4
+    #define __TBB_USE_GENERIC_DWORD_LOAD_STORE              1
+#endif
diff --git a/include/tbb/machine/ibm_aix51.h b/include/tbb/machine/ibm_aix51.h
index 2cd606e..4d880db 100644
--- a/include/tbb/machine/ibm_aix51.h
+++ b/include/tbb/machine/ibm_aix51.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -35,7 +35,7 @@
 #define __TBB_machine_ibm_aix51_H
 
 #define __TBB_WORDSIZE 8
-#define __TBB_BIG_ENDIAN 1
+#define __TBB_BIG_ENDIAN 1 // assumption based on operating system
 
 #include <stdint.h>
 #include <unistd.h>
@@ -55,11 +55,12 @@ void __TBB_machine_isync ();
 
 #define __TBB_Yield() sched_yield()
 
-#define __TBB_USE_GENERIC_PART_WORD_CAS             1
-#define __TBB_USE_GENERIC_FETCH_ADD                 1
-#define __TBB_USE_GENERIC_FETCH_STORE               1
-#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE    1
-#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE        1
+#define __TBB_USE_GENERIC_PART_WORD_CAS                     1
+#define __TBB_USE_GENERIC_FETCH_ADD                         1
+#define __TBB_USE_GENERIC_FETCH_STORE                       1
+#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
+#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
+#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
 
 #if __GNUC__
     #define __TBB_control_consistency_helper() __asm__ __volatile__( "isync": : :"memory")
diff --git a/include/tbb/machine/linux_common.h b/include/tbb/machine/linux_common.h
index 2efa77d..2eeffb9 100644
--- a/include/tbb/machine/linux_common.h
+++ b/include/tbb/machine/linux_common.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 3218341..d243a74 100644
--- a/include/tbb/machine/linux_ia32.h
+++ b/include/tbb/machine/linux_ia32.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -92,8 +92,10 @@ __TBB_MACHINE_DEFINE_ATOMICS(4,int32_t,"l","=r")
 #pragma warning( disable: 998 )
 #endif
 
-static inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )
-{
+static inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand ) {
+#if __TBB_GCC_BUILTIN_ATOMICS_PRESENT
+    return __sync_val_compare_and_swap( reinterpret_cast<volatile int64_t*>(ptr), comparand, value );
+#else /* !__TBB_GCC_BUILTIN_ATOMICS_PRESENT */
     int64_t result;
     union {
         int64_t i64;
@@ -139,6 +141,7 @@ static inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value,
     );
 #endif /* __PIC__ */
     return result;
+#endif /* !__TBB_GCC_BUILTIN_ATOMICS_PRESENT */
 }
 
 #if __INTEL_COMPILER
@@ -166,12 +169,24 @@ static inline void __TBB_machine_pause( int32_t delay ) {
     return;
 }   
 
+//TODO: Check if it possible and profitable for IA-32 on (Linux and Windows)
+//to use of 64-bit load/store via floating point registers together with full fence
+//for sequentially consistent load/store, instead of CAS.
+
+#if __clang__
+#define __TBB_fildq  "fildll"
+#define __TBB_fistpq "fistpll"
+#else
+#define __TBB_fildq  "fildq"
+#define __TBB_fistpq "fistpq"
+#endif
+
 static inline int64_t __TBB_machine_load8 (const volatile void *ptr) {
     int64_t result;
     if( ((uint32_t)ptr&7u)==0 ) {
         // Aligned load
-        __asm__ __volatile__ ( "fildq %1\n\t"
-                               "fistpq %0" :  "=m"(result) : "m"(*(const __TBB_VOLATILE uint64_t*)ptr) : "memory" );
+        __asm__ __volatile__ ( __TBB_fildq  " %1\n\t"
+                               __TBB_fistpq " %0" :  "=m"(result) : "m"(*(const __TBB_VOLATILE uint64_t*)ptr) : "memory" );
     } else {
         // Unaligned load
         result = __TBB_machine_cmpswp8(const_cast<void*>(ptr),0,0);
@@ -187,8 +202,8 @@ extern "C" void __TBB_machine_store8_slow_perf_warning( volatile void *ptr );
 static inline void __TBB_machine_store8(volatile void *ptr, int64_t value) {
     if( ((uint32_t)ptr&7u)==0 ) {
         // Aligned store
-        __asm__ __volatile__ ( "fildq %1\n\t"
-                               "fistpq %0" :  "=m"(*(__TBB_VOLATILE int64_t*)ptr) : "m"(value) : "memory" );
+        __asm__ __volatile__ ( __TBB_fildq  " %1\n\t"
+                               __TBB_fistpq " %0" :  "=m"(*(__TBB_VOLATILE int64_t*)ptr) : "m"(value) : "memory" );
     } else {
         // Unaligned store
 #if TBB_USE_PERFORMANCE_WARNINGS
@@ -206,11 +221,12 @@ static inline void __TBB_machine_store8(volatile void *ptr, int64_t value) {
 #define __TBB_Pause(V) __TBB_machine_pause(V)
 #define __TBB_Log2(V)  __TBB_machine_lg(V)
 
-#define __TBB_USE_GENERIC_DWORD_FETCH_ADD           1
-#define __TBB_USE_GENERIC_DWORD_FETCH_STORE         1
-#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE   1
-#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE    1
-#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE        1
+#define __TBB_USE_GENERIC_DWORD_FETCH_ADD                   1
+#define __TBB_USE_GENERIC_DWORD_FETCH_STORE                 1
+#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1
+#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
+#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
+#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
 
 // API to retrieve/update FPU control setting
 #define __TBB_CPU_CTL_ENV_PRESENT 1
diff --git a/include/tbb/machine/linux_ia64.h b/include/tbb/machine/linux_ia64.h
index 7d92936..b687239 100644
--- a/include/tbb/machine/linux_ia64.h
+++ b/include/tbb/machine/linux_ia64.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -176,8 +176,9 @@ namespace internal {
 
 #undef __TBB_MACHINE_DEFINE_ATOMICS
 
-#define __TBB_USE_FENCED_ATOMICS 1
-#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE 1
+#define __TBB_USE_FENCED_ATOMICS                            1
+#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
+#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
 
 // Definition of Lock functions
 #define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)
diff --git a/include/tbb/machine/linux_intel64.h b/include/tbb/machine/linux_intel64.h
index 8e34e08..4803344 100644
--- a/include/tbb/machine/linux_intel64.h
+++ b/include/tbb/machine/linux_intel64.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -78,7 +78,7 @@ static inline  T __TBB_machine_fetchstore##S(volatile void *ptr, T value)
                           : "memory");                                               \
     return result;                                                                   \
 }                                                                                    \
-                                                                                     
+
 __TBB_MACHINE_DEFINE_ATOMICS(1,int8_t,"")
 __TBB_MACHINE_DEFINE_ATOMICS(2,int16_t,"")
 __TBB_MACHINE_DEFINE_ATOMICS(4,int32_t,"")
@@ -87,17 +87,18 @@ __TBB_MACHINE_DEFINE_ATOMICS(8,int64_t,"q")
 #undef __TBB_MACHINE_DEFINE_ATOMICS
 
 static inline int64_t __TBB_machine_lg( uint64_t x ) {
+    __TBB_ASSERT(x, "__TBB_Log2(0) undefined");
     int64_t j;
     __asm__ ("bsr %1,%0" : "=r"(j) : "r"(x));
     return j;
 }
 
-static inline void __TBB_machine_or( volatile void *ptr, uint64_t addend ) {
-    __asm__ __volatile__("lock\norq %1,%0" : "=m"(*(volatile uint64_t*)ptr) : "r"(addend), "m"(*(volatile uint64_t*)ptr) : "memory");
+static inline void __TBB_machine_or( volatile void *ptr, uint64_t value ) {
+    __asm__ __volatile__("lock\norq %1,%0" : "=m"(*(volatile uint64_t*)ptr) : "r"(value), "m"(*(volatile uint64_t*)ptr) : "memory");
 }
 
-static inline void __TBB_machine_and( volatile void *ptr, uint64_t addend ) {
-    __asm__ __volatile__("lock\nandq %1,%0" : "=m"(*(volatile uint64_t*)ptr) : "r"(addend), "m"(*(volatile uint64_t*)ptr) : "memory");
+static inline void __TBB_machine_and( volatile void *ptr, uint64_t value ) {
+    __asm__ __volatile__("lock\nandq %1,%0" : "=m"(*(volatile uint64_t*)ptr) : "r"(value), "m"(*(volatile uint64_t*)ptr) : "memory");
 }
 
 #define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)
@@ -116,9 +117,10 @@ static inline void __TBB_machine_pause( int32_t delay ) {
 
 #define __TBB_Log2(V)  __TBB_machine_lg(V)
 
-#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE   1
-#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE    1
-#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE        1
+#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1
+#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
+#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
+#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
 
 // API to retrieve/update FPU control setting
 #ifndef __TBB_CPU_CTL_ENV_PRESENT
diff --git a/include/tbb/machine/mac_ppc.h b/include/tbb/machine/mac_ppc.h
index bb7bd8a..26c7b38 100644
--- a/include/tbb/machine/mac_ppc.h
+++ b/include/tbb/machine/mac_ppc.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -47,12 +47,23 @@
     #define __TBB_WORDSIZE 4
 #endif
 
+#ifndef __BYTE_ORDER__
+    // Hopefully endianness can be validly determined at runtime.
+    // This may silently fail in some embedded systems with page-specific endianness.
+#elif __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
+    #define __TBB_BIG_ENDIAN 1
+#elif __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__
+    #define __TBB_BIG_ENDIAN 0
+#else
+     #define __TBB_BIG_ENDIAN -1 // not currently supported
+#endif
+
 // On Power Architecture, (lock-free) 64-bit atomics require 64-bit hardware:
 #if __TBB_WORDSIZE==8
     // Do not change the following definition, because TBB itself will use 64-bit atomics in 64-bit builds.
     #define __TBB_64BIT_ATOMICS 1
 #elif __bgp__
-    // Do not change the following definition on known 32-bit hardware.
+    // Do not change the following definition, because this is known 32-bit hardware.
     #define __TBB_64BIT_ATOMICS 0
 #else
     // To enable 64-bit atomics in 32-bit builds, set the value below to 1 instead of 0.
@@ -148,6 +159,7 @@ inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t
                          );
     return result;
 }
+
 #endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */
 
 #define __TBB_MACHINE_DEFINE_LOAD_STORE(S,ldx,stx,cmpx)                                                       \
@@ -275,14 +287,16 @@ namespace internal {
 
 #undef __TBB_MACHINE_DEFINE_LOAD_STORE
 
-#define __TBB_USE_GENERIC_PART_WORD_CAS 1
-#define __TBB_USE_GENERIC_FETCH_ADD     1
-#define __TBB_USE_GENERIC_FETCH_STORE   1
+#define __TBB_USE_GENERIC_PART_WORD_CAS                     1
+#define __TBB_USE_GENERIC_FETCH_ADD                         1
+#define __TBB_USE_GENERIC_FETCH_STORE                       1
+#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
 
 #define __TBB_control_consistency_helper() __asm__ __volatile__("isync": : :"memory")
 #define __TBB_full_memory_fence()          __asm__ __volatile__( "sync": : :"memory")
 
 static inline intptr_t __TBB_machine_lg( uintptr_t x ) {
+    __TBB_ASSERT(x, "__TBB_Log2(0) undefined");
     // cntlzd/cntlzw starts counting at 2^63/2^31 (ignoring any higher-order bits), and does not affect cr0
 #if __TBB_WORDSIZE==8
     __asm__ __volatile__ ("cntlzd %0,%0" : "+r"(x));
diff --git a/include/tbb/machine/macos_common.h b/include/tbb/machine/macos_common.h
index dd12779..570032c 100644
--- a/include/tbb/machine/macos_common.h
+++ b/include/tbb/machine/macos_common.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -89,7 +89,15 @@ static inline int64_t __TBB_machine_cmpswp8_OsX(volatile void *ptr, int64_t valu
 #define __TBB_WORDSIZE 4
 #endif
 
-#define __TBB_BIG_ENDIAN __BIG_ENDIAN__
+#ifdef __TBB_BIG_ENDIAN
+    // Already determined based on hardware architecture.
+#elif __BIG_ENDIAN__
+    #define __TBB_BIG_ENDIAN 1
+#elif __LITTLE_ENDIAN__
+    #define __TBB_BIG_ENDIAN 0
+#else
+    #define __TBB_BIG_ENDIAN -1 // not currently supported
+#endif
 
 /** As this generic implementation has absolutely no information about underlying
     hardware, its performance most likely will be sub-optimal because of full memory
@@ -124,13 +132,14 @@ static inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend
     return OSAtomicAdd64Barrier(addend, (int64_t*)ptr) - addend;
 }
 
-#define __TBB_USE_GENERIC_PART_WORD_CAS             1
-#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD       1
-#define __TBB_USE_GENERIC_FETCH_STORE               1
-#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE    1
-#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE        1
+#define __TBB_USE_GENERIC_PART_WORD_CAS                     1
+#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD               1
+#define __TBB_USE_GENERIC_FETCH_STORE                       1
+#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
+#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
 #if __TBB_WORDSIZE == 4
-    #define __TBB_USE_GENERIC_DWORD_LOAD_STORE      1
+    #define __TBB_USE_GENERIC_DWORD_LOAD_STORE              1
 #endif
+#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
 
 #endif /* __TBB_UnknownArchitecture */
diff --git a/include/tbb/machine/sunos_sparc.h b/include/tbb/machine/sunos_sparc.h
index e6e8079..84ddbb3 100644
--- a/include/tbb/machine/sunos_sparc.h
+++ b/include/tbb/machine/sunos_sparc.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -37,7 +37,7 @@
 #include <unistd.h>
 
 #define __TBB_WORDSIZE 8
-#define __TBB_BIG_ENDIAN 1
+#define __TBB_BIG_ENDIAN 1 // assumption (hardware may support page-specific bi-endianness)
 
 /** To those working on SPARC hardware. Consider relaxing acquire and release
     consistency helpers to no-op (as this port covers TSO mode only). **/
@@ -97,12 +97,12 @@ static inline int64_t __TBB_machine_cmpswp8(volatile void *ptr, int64_t value, i
  */
 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
+  __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");
@@ -118,11 +118,11 @@ static inline int32_t __TBB_machine_fetchadd4(volatile void *ptr, int32_t addend
 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
+                        "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");
@@ -134,6 +134,7 @@ static inline int64_t __TBB_machine_fetchadd8(volatile void *ptr, int64_t addend
 //--------------------------------------------------------
 
 static inline int64_t __TBB_machine_lg( uint64_t x ) {
+    __TBB_ASSERT(x, "__TBB_Log2(0) undefined");
     uint64_t count;
     // one hot encode
     x |= (x >> 1);
@@ -149,33 +150,33 @@ static inline int64_t __TBB_machine_lg( uint64_t x ) {
 
 //--------------------------------------------------------
 
-static inline void __TBB_machine_or( volatile void *ptr, uint64_t addend ) {
+static inline void __TBB_machine_or( volatile void *ptr, uint64_t value ) {
   __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
+                        "0:\t or\t %2, %3, %%g1\n"          // do operation
+                        "\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)
+                : "r"(ptr), "r"(*(int64_t *)ptr), "r"(value), "m"(*(int64_t *)ptr)
                 : "ccr", "g1", "memory");
 }
 
-static inline void __TBB_machine_and( volatile void *ptr, uint64_t addend ) {
+static inline void __TBB_machine_and( volatile void *ptr, uint64_t value ) {
   __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
+                        "0:\t and\t %2, %3, %%g1\n"         // do operation
+                        "\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
+                        "\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)
+                : "r"(ptr), "r"(*(int64_t *)ptr), "r"(value), "m"(*(int64_t *)ptr)
                 : "ccr", "g1", "memory");
 }
 
 
 static inline void __TBB_machine_pause( int32_t delay ) {
-    // do nothing, inlined, doesnt matter
+    // do nothing, inlined, doesn't matter
 }
 
 // put 0xff in memory location, return memory value,
@@ -191,11 +192,12 @@ static inline bool __TBB_machine_trylockbyte(unsigned char &flag){
     return result == 0;
 }
 
-#define __TBB_USE_GENERIC_PART_WORD_CAS             1
-#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD       1
-#define __TBB_USE_GENERIC_FETCH_STORE               1
-#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE    1
-#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE        1
+#define __TBB_USE_GENERIC_PART_WORD_CAS                     1
+#define __TBB_USE_GENERIC_PART_WORD_FETCH_ADD               1
+#define __TBB_USE_GENERIC_FETCH_STORE                       1
+#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
+#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
+#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
 
 #define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)
 #define __TBB_AtomicAND(P,V) __TBB_machine_and(P,V)
diff --git a/include/tbb/machine/windows_api.h b/include/tbb/machine/windows_api.h
index 3749560..adb22e9 100644
--- a/include/tbb/machine/windows_api.h
+++ b/include/tbb/machine/windows_api.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/machine/windows_ia32.h b/include/tbb/machine/windows_ia32.h
index 2902f18..d8e7092 100644
--- a/include/tbb/machine/windows_ia32.h
+++ b/include/tbb/machine/windows_ia32.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -112,13 +112,25 @@ __TBB_MACHINE_DEFINE_ATOMICS(4, ptrdiff_t, ptrdiff_t, eax, ecx)
 
 #undef __TBB_MACHINE_DEFINE_ATOMICS
 
-static inline __int32 __TBB_machine_lg( unsigned __int64 i ) {
-    unsigned __int32 j;
+#if ( _MSC_VER>=1400 && !defined(__INTEL_COMPILER) ) ||  (__INTEL_COMPILER>=1200)
+// MSVC did not have this intrinsic prior to VC8.
+// ICL 11.1 fails to compile a TBB example if __TBB_Log2 uses the intrinsic.
+#define __TBB_LOG2_USE_BSR_INTRINSIC 1
+extern "C" unsigned char _BitScanReverse( unsigned long* i, unsigned long w );
+#pragma intrinsic(_BitScanReverse)
+#endif
+
+static inline intptr_t __TBB_machine_lg( uintptr_t i ) {
+    unsigned long j;
+#if __TBB_LOG2_USE_BSR_INTRINSIC
+    _BitScanReverse( &j, i );
+#else
     __asm
     {
         bsr eax, i
         mov j, eax
     }
+#endif
     return j;
 }
 
@@ -144,10 +156,10 @@ static inline void __TBB_machine_pause (__int32 delay ) {
     _asm 
     {
         mov eax, delay
-      L1: 
+      __TBB_L1: 
         pause
         add eax, -1
-        jne L1  
+        jne __TBB_L1  
     }
     return;
 }
@@ -155,9 +167,13 @@ static inline void __TBB_machine_pause (__int32 delay ) {
 #define __TBB_AtomicOR(P,V) __TBB_machine_OR(P,V)
 #define __TBB_AtomicAND(P,V) __TBB_machine_AND(P,V)
 
-#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE   1
-#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE    1
-#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE        1
+//TODO: Check if it possible and profitable for IA-32 on (Linux and Windows)
+//to use of 64-bit load/store via floating point registers together with full fence
+//for sequentially consistent load/store, instead of CAS.
+#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1
+#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
+#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
+#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
 
 // Definition of other functions
 extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
diff --git a/include/tbb/machine/windows_intel64.h b/include/tbb/machine/windows_intel64.h
index 4d86eaf..4f17a0c 100644
--- a/include/tbb/machine/windows_intel64.h
+++ b/include/tbb/machine/windows_intel64.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -55,6 +55,7 @@
     extern "C" void _ReadWriteBarrier();
     #pragma intrinsic(_ReadWriteBarrier)
     #pragma intrinsic(_mm_mfence)
+    #pragma intrinsic(_mm_pause)
     #define __TBB_compiler_fence()    _ReadWriteBarrier()
     #define __TBB_full_memory_fence() _mm_mfence()
 #endif
@@ -72,7 +73,6 @@ extern "C" {
     __int16 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp2 (volatile void *ptr, __int16 value, __int16 comparand );
     __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd2 (volatile void *ptr, __int16 addend );
     __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore2 (volatile void *ptr, __int16 value );
-    void __TBB_EXPORTED_FUNC __TBB_machine_pause (__int32 delay );
 }
 
 inline long __TBB_machine_cmpswp4 (volatile void *ptr, __int32 value, __int32 comparand ) {
@@ -95,27 +95,23 @@ inline __int64 __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value ) {
     return _InterlockedExchange64( (__int64*)ptr, value );
 }
 
-#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE   1
-#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE    1
-#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE        1
+inline void __TBB_machine_pause_v6 (__int32 delay ) {
+    for (;delay>0; --delay )
+        _mm_pause();
+}
+
+#define __TBB_USE_FETCHSTORE_AS_FULL_FENCED_STORE           1
+#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
+#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
+#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
 
-#if !__INTEL_COMPILER
 extern "C" unsigned char _BitScanReverse64( unsigned long* i, unsigned __int64 w );
 #pragma intrinsic(_BitScanReverse64)
-#endif
+
 
 inline __int64 __TBB_machine_lg( unsigned __int64 i ) {
-#if __INTEL_COMPILER
-    unsigned __int64 j;
-    __asm
-    {
-        bsr rax, i
-        mov j, rax
-    }
-#else
     unsigned long j;
     _BitScanReverse64( &j, i );
-#endif
     return j;
 }
 
@@ -132,7 +128,7 @@ inline void __TBB_machine_AND( volatile void *operand, intptr_t addend ) {
 
 extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
 #define __TBB_Yield()  SwitchToThread()
-#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Pause(V) __TBB_machine_pause_v6(V)
 #define __TBB_Log2(V)  __TBB_machine_lg(V)
 
 // API to retrieve/update FPU control setting
diff --git a/include/tbb/machine/xbox360_ppc.h b/include/tbb/machine/xbox360_ppc.h
index 382b4ef..25aa40e 100644
--- a/include/tbb/machine/xbox360_ppc.h
+++ b/include/tbb/machine/xbox360_ppc.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -69,12 +69,13 @@ inline __int64 __TBB_machine_cmpswp8(volatile void *ptr, __int64 value, __int64
  return result;
 }
 
-#define __TBB_USE_GENERIC_PART_WORD_CAS             1
-#define __TBB_USE_GENERIC_FETCH_ADD                 1
-#define __TBB_USE_GENERIC_FETCH_STORE               1
-#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE    1
-#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE        1
-#define __TBB_USE_GENERIC_DWORD_LOAD_STORE          1
+#define __TBB_USE_GENERIC_PART_WORD_CAS                     1
+#define __TBB_USE_GENERIC_FETCH_ADD                         1
+#define __TBB_USE_GENERIC_FETCH_STORE                       1
+#define __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE            1
+#define __TBB_USE_GENERIC_RELAXED_LOAD_STORE                1
+#define __TBB_USE_GENERIC_DWORD_LOAD_STORE                  1
+#define __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE 1
 
 #pragma optimize( "", off )
 inline void __TBB_machine_pause (__int32 delay ) 
diff --git a/include/tbb/memory_pool.h b/include/tbb/memory_pool.h
index 980a8bf..cf3ef91 100644
--- a/include/tbb/memory_pool.h
+++ b/include/tbb/memory_pool.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -36,8 +36,11 @@
 
 #include "scalable_allocator.h"
 #include "tbb_stddef.h"
-#include "tbb_machine.h" // TODO: Itanium requires linkage with TBB library
+#include "tbb_machine.h" // TODO: avoid linkage with libtbb on IA-64
 #include <new> // std::bad_alloc
+#if __TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_CPP11_STD_FORWARD_BROKEN
+#include <utility> // std::forward
+#endif
 
 #if __TBB_EXTRA_DEBUG
 #define __TBBMALLOC_ASSERT ASSERT
@@ -133,7 +136,17 @@ public:
         return (max > 0 ? max : 1);
     }
     //! Copy-construct value at location pointed to by p.
+#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
+    template<typename... Args>
+    void construct(pointer p, Args&&... args)
+ #if __TBB_CPP11_STD_FORWARD_BROKEN
+        { ::new((void *)p) T((args)...); }
+ #else
+        { ::new((void *)p) T(std::forward<Args>(args)...); }
+ #endif
+#else // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
     void construct( pointer p, const value_type& value ) { ::new((void*)(p)) value_type(value); }
+#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
 
     //! Destroy value at location pointed to by p.
     void destroy( pointer p ) { p->~value_type(); }
@@ -211,12 +224,10 @@ public:
 
 template <typename Alloc>
 memory_pool<Alloc>::memory_pool(const Alloc &src) : my_alloc(src) {
-    rml::MemPoolPolicy args = {
-        allocate_request, deallocate_request, sizeof(typename Alloc::value_type)
-    };
-    my_pool = rml::pool_create(intptr_t(this), &args);
-    __TBBMALLOC_ASSERT(my_pool, "Pool is not created");
-    if( !my_pool ) __TBB_THROW(std::bad_alloc());
+    rml::MemPoolPolicy args(allocate_request, deallocate_request,
+                            sizeof(typename Alloc::value_type));
+    rml::MemPoolError res = rml::pool_create_v1(intptr_t(this), &args, &my_pool);
+    if( res!=rml::POOL_OK ) __TBB_THROW(std::bad_alloc());
 }
 template <typename Alloc>
 void *memory_pool<Alloc>::allocate_request(intptr_t pool_id, size_t & bytes) {
@@ -237,14 +248,13 @@ int memory_pool<Alloc>::deallocate_request(intptr_t pool_id, void* raw_ptr, size
     return 0;
 }
 inline fixed_pool::fixed_pool(void *buf, size_t size) : my_buffer(buf), my_size(size) {
-    rml::MemPoolPolicy args = { allocate_request, 0, size };
-    my_pool = rml::pool_create(intptr_t(this), &args);
-    __TBBMALLOC_ASSERT(my_pool, "Pool is not created");
-    if( !my_pool ) __TBB_THROW(std::bad_alloc());
+    rml::MemPoolPolicy args(allocate_request, 0, size, /*fixedPool=*/true);
+    rml::MemPoolError res = rml::pool_create_v1(intptr_t(this), &args, &my_pool);
+    if( res!=rml::POOL_OK ) __TBB_THROW(std::bad_alloc());
 }
 inline void *fixed_pool::allocate_request(intptr_t pool_id, size_t & bytes) {
     fixed_pool &self = *reinterpret_cast<fixed_pool*>(pool_id);
-    if( bytes > self.my_size || !__TBB_CompareAndSwapW(&self.my_size, 0, (bytes=self.my_size)) )
+    if( !__TBB_CompareAndSwapW(&self.my_size, 0, (bytes=self.my_size)) )
         return 0; // all the memory was given already
     return self.my_buffer;
 }
diff --git a/include/tbb/mutex.h b/include/tbb/mutex.h
index b45e67d..3dc0a7c 100644
--- a/include/tbb/mutex.h
+++ b/include/tbb/mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 b233b4b..ac73657 100644
--- a/include/tbb/null_mutex.h
+++ b/include/tbb/null_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 d7e51cf..4f08bbf 100644
--- a/include/tbb/null_rw_mutex.h
+++ b/include/tbb/null_rw_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 f54d3b3..0d33964 100644
--- a/include/tbb/parallel_do.h
+++ b/include/tbb/parallel_do.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 5b998fd..bc32778 100644
--- a/include/tbb/parallel_for.h
+++ b/include/tbb/parallel_for.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/parallel_for_each.h b/include/tbb/parallel_for_each.h
index 59200b1..3495a50 100644
--- a/include/tbb/parallel_for_each.h
+++ b/include/tbb/parallel_for_each.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/parallel_invoke.h b/include/tbb/parallel_invoke.h
index 6cc38e2..f56cc62 100644
--- a/include/tbb/parallel_invoke.h
+++ b/include/tbb/parallel_invoke.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -139,8 +139,8 @@ namespace internal {
             spawn_and_wait_for_all(*invoker);
         }
     };
-    // The class destroys root if exception occured as well as in normal case
-    class parallel_invoke_cleaner: internal::no_copy { 
+    // The class destroys root if exception occurred as well as in normal case
+    class parallel_invoke_cleaner: internal::no_copy {
     public:
 #if __TBB_TASK_GROUP_CONTEXT
         parallel_invoke_cleaner(int number_of_children, tbb::task_group_context& context)
@@ -337,7 +337,7 @@ void parallel_invoke(const F0& f0, const F1& f1, const F2& f2, const F3& f3, con
     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, 
+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)
diff --git a/include/tbb/parallel_reduce.h b/include/tbb/parallel_reduce.h
index 12d17ca..44ca6a0 100644
--- a/include/tbb/parallel_reduce.h
+++ b/include/tbb/parallel_reduce.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -43,20 +43,24 @@ namespace internal {
 
     using namespace tbb::internal;
 
-    //! 0 if root, 1 if a left child, 2 if a right child.
+    /** Values for reduction_context. */
+    enum {
+        root_task, left_child, right_child
+    };
+
     /** Represented as a char, not enum, for compactness. */
     typedef char reduction_context;
 
-    //! Task type use to combine the partial results of parallel_reduce.
+    //! Task type used to combine the partial results of parallel_reduce.
     /** @ingroup algorithms */
     template<typename Body>
     class finish_reduce: public flag_task {
-        //! Pointer to body, or NULL if the left child has not yet finished. 
+        //! Pointer to body, or NULL if the left child has not yet finished.
         bool has_right_zombie;
         const reduction_context my_context;
         Body* my_body;
         aligned_space<Body,1> zombie_space;
-        finish_reduce( reduction_context context_ ) : 
+        finish_reduce( reduction_context context_ ) :
             has_right_zombie(false), // TODO: substitute by flag_task::child_stolen?
             my_context(context_),
             my_body(NULL)
@@ -69,7 +73,7 @@ namespace internal {
                 my_body->join( *s );
                 s->~Body();
             }
-            if( my_context==1 )  // left child
+            if( my_context==left_child )
                 itt_store_word_with_release( static_cast<finish_reduce*>(parent())->my_body, my_body );
             return NULL;
         }
@@ -89,14 +93,14 @@ namespace internal {
         /*override*/ task* execute();
         template<typename Body_>
         friend class finish_reduce;
-    
+
 public:
         //! Constructor used for root task
         start_reduce( const Range& range, Body* body, Partitioner& partitioner ) :
             my_body(body),
             my_range(range),
             my_partition(partitioner),
-            my_context(0)
+            my_context(root_task)
         {
         }
         //! Splitting constructor used to generate children.
@@ -105,10 +109,10 @@ public:
             my_body(parent_.my_body),
             my_range(parent_.my_range,split()),
             my_partition(parent_.my_partition,split()),
-            my_context(2)
+            my_context(right_child)
         {
             my_partition.set_affinity(*this);
-            parent_.my_context = 1;
+            parent_.my_context = left_child;
         }
         //! Construct right child from the given range as response to the demand.
         /** parent_ remains left child.  Newly constructed object is right child. */
@@ -116,11 +120,11 @@ public:
             my_body(parent_.my_body),
             my_range(r),
             my_partition(parent_.my_partition,split()),
-            my_context(2) // right leaf mark
+            my_context(right_child)
         {
             my_partition.set_affinity(*this);
             my_partition.align_depth( d );
-            parent_.my_context = 1; // left leaf mark
+            parent_.my_context = left_child;
         }
         //! Update affinity info, if any
         /*override*/ void note_affinity( affinity_id id ) {
@@ -140,7 +144,7 @@ public:
         }
 #if __TBB_TASK_GROUP_CONTEXT
         static void run( const Range& range, Body& body, Partitioner& partitioner, task_group_context& context ) {
-            if( !range.empty() ) 
+            if( !range.empty() )
                 task::spawn_root_and_wait( *new(task::allocate_root(context)) start_reduce(range,&body,partitioner) );
         }
 #endif /* __TBB_TASK_GROUP_CONTEXT */
@@ -154,24 +158,24 @@ public:
     template<typename Range, typename Body, typename Partitioner>
     task* start_reduce<Range,Body,Partitioner>::execute() {
         my_partition.check_being_stolen( *this );
-        if( my_context==2 ) { // right child
+        if( my_context==right_child ) {
             finish_type* parent_ptr = static_cast<finish_type*>(parent());
             if( !itt_load_word_with_acquire(parent_ptr->my_body) ) { // TODO: replace by is_stolen_task() or by parent_ptr->ref_count() == 2???
                 my_body = new( parent_ptr->zombie_space.begin() ) Body(*my_body,split());
                 parent_ptr->has_right_zombie = true;
             }
-        } else __TBB_ASSERT(my_context==0,0);// because left leaf spawns right leafs without recycling
+        } else __TBB_ASSERT(my_context==root_task,NULL);// because left leaf spawns right leafs without recycling
         my_partition.execute(*this, my_range);
-        if( my_context==1 ) {
+        if( my_context==left_child ) {
             finish_type* parent_ptr = static_cast<finish_type*>(parent());
-            __TBB_ASSERT(my_body!=parent_ptr->zombie_space.begin(),0);
+            __TBB_ASSERT(my_body!=parent_ptr->zombie_space.begin(),NULL);
             itt_store_word_with_release(parent_ptr->my_body, my_body );
         }
         return NULL;
     }
 
 #if TBB_PREVIEW_DETERMINISTIC_REDUCE
-    //! Task type use to combine the partial results of parallel_deterministic_reduce.
+    //! Task type used to combine the partial results of parallel_deterministic_reduce.
     /** @ingroup algorithms */
     template<typename Body>
     class finish_deterministic_reduce: public task {
@@ -229,7 +233,7 @@ public:
         }
 #if __TBB_TASK_GROUP_CONTEXT
         static void run( const Range& range, Body& body, task_group_context& context ) {
-            if( !range.empty() ) 
+            if( !range.empty() )
                 task::spawn_root_and_wait( *new(task::allocate_root(context)) start_deterministic_reduce(range,body) );
         }
 #endif /* __TBB_TASK_GROUP_CONTEXT */
@@ -318,7 +322,7 @@ namespace internal {
     - \code Body::~Body(); \endcode                     Destructor
     - \code void Body::operator()( Range& r ); \endcode Function call operator applying body to range \c r
                                                         and accumulating the result
-    - \code void Body::join( Body& b ); \endcode        Join results. 
+    - \code void Body::join( Body& b ); \endcode        Join results.
                                                         The result in \c b should be merged into the result of \c this
 **/
 
diff --git a/include/tbb/parallel_scan.h b/include/tbb/parallel_scan.h
index a4a02cb..9cf8b5c 100644
--- a/include/tbb/parallel_scan.h
+++ b/include/tbb/parallel_scan.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -227,26 +227,26 @@ namespace internal {
             __TBB_ASSERT( !*return_slot, NULL );
         }
 
-        static void run(  const Range& range, Body& body, const Partitioner& partitioner ) {
-            if( !range.empty() ) {
+        static void run( const Range& range_, Body& body_, const Partitioner& partitioner_ ) {
+            if( !range_.empty() ) {
                 typedef internal::start_scan<Range,Body,Partitioner> start_pass1_type;
                 internal::sum_node<Range,Body>* root = NULL;
                 typedef internal::final_sum<Range,Body> final_sum_type;
-                final_sum_type* temp_body = new(task::allocate_root()) final_sum_type( body );
+                final_sum_type* temp_body = new(task::allocate_root()) final_sum_type( body_ );
                 start_pass1_type& pass1 = *new(task::allocate_root()) start_pass1_type(
                     /*return_slot=*/root,
-                    range,
+                    range_,
                     *temp_body,
-                    partitioner );
+                    partitioner_ );
                 task::spawn_root_and_wait( pass1 );
                 if( root ) {
                     root->body = temp_body;
                     root->incoming = NULL;
-                    root->stuff_last = &body;
+                    root->stuff_last = &body_;
                     task::spawn_root_and_wait( *root );
                 } else {
-                    body.assign(temp_body->body);
-                    temp_body->finish_construction( range, NULL );
+                    body_.assign(temp_body->body);
+                    temp_body->finish_construction( range_, NULL );
                     temp_body->destroy(*temp_body);
                 }
             }
diff --git a/include/tbb/parallel_sort.h b/include/tbb/parallel_sort.h
index cdfbb61..5a79294 100644
--- a/include/tbb/parallel_sort.h
+++ b/include/tbb/parallel_sort.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 94f9795..e2f0c83 100644
--- a/include/tbb/parallel_while.h
+++ b/include/tbb/parallel_while.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 9301be8..7805bff 100644
--- a/include/tbb/partitioner.h
+++ b/include/tbb/partitioner.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -44,7 +44,7 @@
 #include "atomic.h"
 
 #if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
-    // Workaround for overzealous compiler warnings 
+    // Workaround for overzealous compiler warnings
     #pragma warning (push)
     #pragma warning (disable: 4244)
 #endif
@@ -221,7 +221,7 @@ struct partition_type_base {
     }
     template<typename StartType, typename Range>
     void execute(StartType &start, Range &range) {
-        // The algorithm in a few words ([]-denotes calls to decision mathods of partitioner):
+        // The algorithm in a few words ([]-denotes calls to decision methods of partitioner):
         // [If this task is stolen, adjust depth and divisions if necessary, set flag].
         // If range is divisible {
         //    Spread the work while [initial divisions left];
@@ -263,7 +263,7 @@ struct partition_type_base {
                         continue; // note: check_for_demand() should guarantee increasing max_depth() next time
                 }
                 start.run_body( range_pool.back() );
-                range_pool.pop_back();  
+                range_pool.pop_back();
             } while( !range_pool.empty() && !start.is_cancelled() );
         }
     }
@@ -296,7 +296,7 @@ struct auto_partition_type_base : partition_type_base<Partition> {
 #if TBB_USE_EXCEPTIONS
                 // RTTI is available, check whether the cast is valid
                 __TBB_ASSERT(dynamic_cast<flag_task*>(t.parent()), 0);
-                // correctess of the cast rely on avoiding the root task for which:
+                // correctness of the cast relies on avoiding the root task for which:
                 // - initial value of my_divisor != 0 (protected by separate assertion)
                 // - is_stolen_task() always return false for the root task.
 #endif
@@ -347,15 +347,15 @@ class affinity_partition_type : public auto_partition_type_base<affinity_partiti
     }
 public:
     affinity_partition_type( tbb::internal::affinity_partitioner_base_v3& ap ) {
-        __TBB_ASSERT( (factor&(factor-1))==0, "factor must be power of two" ); 
+        __TBB_ASSERT( (factor&(factor-1))==0, "factor must be power of two" );
         ap.resize(factor);
         my_array = ap.my_array;
         map_begin = 0;
         map_end = unsigned(ap.my_size);
         set_mid();
         my_delay = true;
-        my_divisor /= __TBB_INITIAL_CHUNKS; // let excatly P tasks to be distributed across workers
-        my_max_depth = factor_power+1; // the first factor_power ranges will be spawned, and >=1 ranges should left
+        my_divisor /= __TBB_INITIAL_CHUNKS; // let exactly P tasks to be distributed across workers
+        my_max_depth = factor_power+1; // the first factor_power ranges will be spawned, and >=1 ranges should be left
         __TBB_ASSERT( my_max_depth < __TBB_RANGE_POOL_CAPACITY, 0 );
     }
     affinity_partition_type(affinity_partition_type& p, split)
@@ -371,7 +371,7 @@ public:
             t.set_affinity( my_array[map_begin] );
     }
     void note_affinity( task::affinity_id id ) {
-        if( map_begin<map_end ) 
+        if( map_begin<map_end )
             my_array[map_begin] = id;
     }
     bool check_for_demand( task &t ) {
@@ -441,8 +441,8 @@ public:
 //! @endcond
 } // namespace interfaceX
 
-//! A simple partitioner 
-/** Divides the range until the range is not divisible. 
+//! A simple partitioner
+/** Divides the range until the range is not divisible.
     @ingroup algorithms */
 class simple_partitioner {
 public:
@@ -463,7 +463,7 @@ private:
     typedef interface6::internal::simple_partition_type task_partition_type;
 };
 
-//! An auto partitioner 
+//! An auto partitioner
 /** The range is initial divided into several large chunks.
     Chunks are further subdivided into smaller pieces if demand detected and they are divisible.
     @ingroup algorithms */
diff --git a/include/tbb/pipeline.h b/include/tbb/pipeline.h
index 60fe09b..18f9d47 100644
--- a/include/tbb/pipeline.h
+++ b/include/tbb/pipeline.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,6 +34,10 @@
 #include "tbb_allocator.h"
 #include <cstddef>
 
+#if !TBB_IMPLEMENT_CPP0X
+#include <type_traits>
+#endif
+
 namespace tbb {
 
 class pipeline;
@@ -321,7 +325,30 @@ public:
 //! @cond INTERNAL
 namespace internal {
 
-template<typename T> struct is_large_object { enum { r = sizeof(T) > sizeof(void *) }; };
+template<typename T> struct tbb_large_object {enum { value = sizeof(T) > sizeof(void *) }; };
+
+#if TBB_IMPLEMENT_CPP0X
+// cannot use SFINAE in current compilers.  Explicitly list the types we wish to be
+// placed as-is in the pipeline input_buffers.
+template<typename T> struct tbb_trivially_copyable { enum { value = false }; };
+template<typename T> struct tbb_trivially_copyable <T*> { enum { value = true }; };
+template<> struct tbb_trivially_copyable <short> { enum { value = true }; };
+template<> struct tbb_trivially_copyable <unsigned short> { enum { value = true }; };
+template<> struct tbb_trivially_copyable <int> { enum { value = !tbb_large_object<int>::value }; };
+template<> struct tbb_trivially_copyable <unsigned int> { enum { value = !tbb_large_object<int>::value }; };
+template<> struct tbb_trivially_copyable <long> { enum { value = !tbb_large_object<long>::value }; };
+template<> struct tbb_trivially_copyable <unsigned long> { enum { value = !tbb_large_object<long>::value }; };
+template<> struct tbb_trivially_copyable <float> { enum { value = !tbb_large_object<float>::value }; };
+template<> struct tbb_trivially_copyable <double> { enum { value = !tbb_large_object<double>::value }; };
+#else
+#if __GNUC__==4 && __GNUC_MINOR__>=4 && __GXX_EXPERIMENTAL_CXX0X__
+template<typename T> struct tbb_trivially_copyable { enum { value = std::has_trivial_copy_constructor<T>::value }; };
+#else
+template<typename T> struct tbb_trivially_copyable { enum { value = std::is_trivially_copyable<T>::value }; };
+#endif //
+#endif // __TBB_USE_CPP0X
+
+template<typename T> struct is_large_object {enum { value = tbb_large_object<T>::value || !tbb_trivially_copyable<T>::value }; };
 
 template<typename T, bool> class token_helper;
 
@@ -388,9 +415,9 @@ class token_helper<T, false> {
 template<typename T, typename U, typename Body>
 class concrete_filter: public tbb::filter {
     const Body& my_body;
-    typedef token_helper<T,is_large_object<T>::r > t_helper;
+    typedef token_helper<T,is_large_object<T>::value > t_helper;
     typedef typename t_helper::pointer t_pointer;
-    typedef token_helper<U,is_large_object<U>::r > u_helper;
+    typedef token_helper<U,is_large_object<U>::value > u_helper;
     typedef typename u_helper::pointer u_pointer;
 
     /*override*/ void* operator()(void* input) {
@@ -408,7 +435,7 @@ public:
 template<typename U, typename Body>
 class concrete_filter<void,U,Body>: public filter {
     const Body& my_body;
-    typedef token_helper<U, is_large_object<U>::r > u_helper;
+    typedef token_helper<U, is_large_object<U>::value > u_helper;
     typedef typename u_helper::pointer u_pointer;
 
     /*override*/void* operator()(void*) {
@@ -432,7 +459,7 @@ public:
 template<typename T, typename Body>
 class concrete_filter<T,void,Body>: public filter {
     const Body& my_body;
-    typedef token_helper<T, is_large_object<T>::r > t_helper;
+    typedef token_helper<T, is_large_object<T>::value > t_helper;
     typedef typename t_helper::pointer t_pointer;
    
     /*override*/ void* operator()(void* input) {
diff --git a/include/tbb/queuing_mutex.h b/include/tbb/queuing_mutex.h
index a7e224b..04d675b 100644
--- a/include/tbb/queuing_mutex.h
+++ b/include/tbb/queuing_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -48,7 +48,7 @@
 
 namespace tbb {
 
-//! Queuing lock with local-only spinning.
+//! Queuing mutex with local-only spinning.
 /** @ingroup synchronization */
 class queuing_mutex {
 public:
@@ -71,6 +71,7 @@ public:
             internal::poison_pointer(next);
 #endif /* TBB_USE_ASSERT */
         }
+
     public:
         //! Construct lock that has not acquired a mutex.
         /** Equivalent to zero-initialization of *this. */
@@ -116,6 +117,7 @@ public:
     static const bool is_rw_mutex = false;
     static const bool is_recursive_mutex = false;
     static const bool is_fair_mutex = true;
+
 private:
     //! The last competitor requesting the lock
     atomic<scoped_lock*> q_tail;
diff --git a/include/tbb/queuing_rw_mutex.h b/include/tbb/queuing_rw_mutex.h
index 644bdfd..57e1d25 100644
--- a/include/tbb/queuing_rw_mutex.h
+++ b/include/tbb/queuing_rw_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -48,7 +48,7 @@
 
 namespace tbb {
 
-//! Reader-writer lock with local-only spinning.
+//! Queuing reader-writer mutex with local-only spinning.
 /** Adapted from Krieger, Stumm, et al. pseudocode at
     http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93
     @ingroup synchronization */
@@ -69,14 +69,11 @@ public:
 #endif
     }
 
-    class scoped_lock;
-    friend class scoped_lock;
-
     //! The scoped locking pattern
     /** It helps to avoid the common problem of forgetting to release lock.
         It also nicely provides the "node" for queuing locks. */
     class scoped_lock: internal::no_copy {
-        //! Initialize fields
+        //! Initialize fields to mean "no lock held".
         void initialize() {
             my_mutex = NULL;
 #if TBB_USE_ASSERT
@@ -85,6 +82,7 @@ public:
             internal::poison_pointer(my_prev);
 #endif /* TBB_USE_ASSERT */
         }
+
     public:
         //! Construct lock that has not acquired a mutex.
         /** Equivalent to zero-initialization of *this. */
@@ -104,21 +102,21 @@ public:
         //! Acquire lock on given mutex.
         void acquire( queuing_rw_mutex& m, bool write=true );
 
-        //! Try acquire lock on given mutex.
+        //! Acquire lock on given mutex if free (i.e. non-blocking)
         bool try_acquire( queuing_rw_mutex& m, bool write=true );
 
         //! Release lock.
         void release();
 
         //! Upgrade reader to become a writer.
-        /** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */
         bool upgrade_to_writer();
 
         //! Downgrade writer to become a reader.
         bool downgrade_to_reader();
 
     private:
-        //! The pointer to the current mutex to work
+        //! The pointer to the mutex owned, or NULL if not holding a mutex.
         queuing_rw_mutex* my_mutex;
 
         //! The pointer to the previous and next competitors for a mutex
diff --git a/include/tbb/reader_writer_lock.h b/include/tbb/reader_writer_lock.h
index 877234b..23084de 100644
--- a/include/tbb/reader_writer_lock.h
+++ b/include/tbb/reader_writer_lock.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@ namespace interface5 {
         invalid: the end state for all nodes; this is set in the
           destructor so if we encounter this state, we are looking at
           memory that has already been freed
-        
+
         The state diagrams below describe the status transitions.
         Single arrows indicate that the thread that owns the node is
         responsible for the transition; double arrows indicate that
@@ -70,12 +70,12 @@ namespace interface5 {
           |     _____________/       |
           V    V                     V
         active -----------------> invalid
-  
+
         State diagram for scoped_lock_read status:
 
-        waiting 
-          |                        
-          V                        
+        waiting
+          |
+          V
         active ----------------->invalid
 
     */
@@ -97,12 +97,12 @@ namespace interface5 {
     class scoped_lock : tbb::internal::no_copy {
     public:
         friend class reader_writer_lock;
- 
-        //! Construct with blocking attempt to acquire write lock on the passed-in lock 
+
+        //! Construct with blocking attempt to acquire write lock on the passed-in lock
         scoped_lock(reader_writer_lock& lock) {
             internal_construct(lock);
         }
-        
+
         //! Destructor, releases the write lock
         ~scoped_lock() {
             internal_destroy();
@@ -135,16 +135,16 @@ namespace interface5 {
     public:
         friend class reader_writer_lock;
 
-        //! Construct with blocking attempt to acquire read lock on the passed-in lock 
+        //! Construct with blocking attempt to acquire read lock on the passed-in lock
         scoped_lock_read(reader_writer_lock& lock) {
             internal_construct(lock);
         }
 
         //! Destructor, releases the read lock
-        ~scoped_lock_read() { 
+        ~scoped_lock_read() {
             internal_destroy();
         }
-        
+
         void* operator new(size_t s) {
             return tbb::internal::allocate_via_handler_v3(s);
         }
@@ -166,8 +166,8 @@ namespace interface5 {
         void __TBB_EXPORTED_METHOD internal_construct(reader_writer_lock&);
         void __TBB_EXPORTED_METHOD internal_destroy();
     };
-    
-    //! Acquires the reader_writer_lock for write.  
+
+    //! Acquires the reader_writer_lock for write.
     /** If the lock is currently held in write mode by another
         context, the writer will block by spinning on a local
         variable.  Exceptions thrown: improper_lock The context tries
@@ -175,21 +175,21 @@ namespace interface5 {
         ownership of.*/
     void __TBB_EXPORTED_METHOD lock();
 
-    //! Tries to acquire the reader_writer_lock for write.   
+    //! Tries to acquire the reader_writer_lock for write.
     /** This function does not block.  Return Value: True or false,
         depending on whether the lock is acquired or not.  If the lock
         is already held by this acquiring context, try_lock() returns
         false. */
     bool __TBB_EXPORTED_METHOD try_lock();
 
-    //! Acquires the reader_writer_lock for read.    
+    //! Acquires the reader_writer_lock for read.
     /** If the lock is currently held by a writer, this reader will
         block and wait until the writers are done.  Exceptions thrown:
         improper_lock The context tries to acquire a
         reader_writer_lock that it already has write ownership of. */
-    void __TBB_EXPORTED_METHOD lock_read(); 
+    void __TBB_EXPORTED_METHOD lock_read();
 
-    //! Tries to acquire the reader_writer_lock for read.  
+    //! Tries to acquire the reader_writer_lock for read.
     /** This function does not block.  Return Value: True or false,
         depending on whether the lock is acquired or not.  */
     bool __TBB_EXPORTED_METHOD try_lock_read();
@@ -206,7 +206,7 @@ namespace interface5 {
     bool start_write(scoped_lock *);
     //! Sets writer_head to w and attempts to unblock
     void set_next_writer(scoped_lock *w);
-    //! Relinquishes write lock to next waiting writer or group of readers 
+    //! Relinquishes write lock to next waiting writer or group of readers
     void end_write(scoped_lock *);
     //! Checks if current thread holds write lock
     bool is_current_writer();
@@ -228,7 +228,7 @@ namespace interface5 {
     //! Writer that owns the mutex; tbb_thread::id() otherwise.
     tbb_thread::id my_current_writer;
     //! Status of mutex
-    atomic<unsigned> rdr_count_and_flags;
+    atomic<uintptr_t> rdr_count_and_flags; // used with __TBB_AtomicOR, which assumes uintptr_t
 };
 
 } // namespace interface5
diff --git a/include/tbb/recursive_mutex.h b/include/tbb/recursive_mutex.h
index 185fd19..458eb48 100644
--- a/include/tbb/recursive_mutex.h
+++ b/include/tbb/recursive_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/runtime_loader.h b/include/tbb/runtime_loader.h
index e0d4526..7b0ee60 100644
--- a/include/tbb/runtime_loader.h
+++ b/include/tbb/runtime_loader.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 27f230e..25bdf39 100644
--- a/include/tbb/scalable_allocator.h
+++ b/include/tbb/scalable_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -97,22 +97,59 @@ size_t __TBB_EXPORTED_FUNC scalable_msize (void* ptr);
 namespace rml {
 class MemoryPool;
 
-#define MEM_POLICY_DEFINED 1
 typedef void *(*rawAllocType)(intptr_t pool_id, size_t &bytes);
 typedef int   (*rawFreeType)(intptr_t pool_id, void* raw_ptr, size_t raw_bytes);
 
+/*
+MemPoolPolicy extension must be compatible with such structure fields layout
+
 struct MemPoolPolicy {
     rawAllocType pAlloc;
     rawFreeType  pFree;
     size_t       granularity;   // granularity of pAlloc allocations
-    void        *pReserved;     // reserved for future extensions
-    size_t       szReserved;    // size of pReserved data
+};
+*/
+
+struct MemPoolPolicy {
+    enum {
+        VERSION = 1
+    };
+
+    rawAllocType pAlloc;
+    rawFreeType  pFree;
+                 // granularity of pAlloc allocations. 0 means default used.
+    size_t       granularity;
+    int          version;
+                 // all memory consumed at 1st pAlloc call and never returned,
+                 // no more pAlloc calls after 1st
+    unsigned     fixedPool : 1,
+                 // memory consumed but returned only at pool termination
+                 keepAllMemory : 1,
+                 reserved : 30;
+
+    MemPoolPolicy(rawAllocType pAlloc_, rawFreeType pFree_,
+                  size_t granularity_ = 0, bool fixedPool_ = false,
+                  bool keepAllMemory_ = false) :
+        pAlloc(pAlloc_), pFree(pFree_), granularity(granularity_), version(VERSION),
+        fixedPool(fixedPool_), keepAllMemory(keepAllMemory_),
+        reserved(0) {}
 };
 
-MemoryPool *pool_create(intptr_t pool_id, const MemPoolPolicy* memPoolPolicy);
+enum MemPoolError {
+    POOL_OK,            // pool created successfully
+    INVALID_POLICY,     // invalid policy parameters found
+    UNSUPPORTED_POLICY, // requested pool policy is not supported by allocator library
+    NO_MEMORY           // lack of memory during pool creation
+};
+
+MemPoolError pool_create_v1(intptr_t pool_id, const MemPoolPolicy *policy,
+                            rml::MemoryPool **pool);
+
 bool  pool_destroy(MemoryPool* memPool);
 void *pool_malloc(MemoryPool* memPool, size_t size);
 void *pool_realloc(MemoryPool* memPool, void *object, size_t size);
+void *pool_aligned_malloc(MemoryPool* mPool, size_t size, size_t alignment);
+void *pool_aligned_realloc(MemoryPool* mPool, void *ptr, size_t size, size_t alignment);
 bool  pool_reset(MemoryPool* memPool);
 bool  pool_free(MemoryPool *memPool, void *object);
 }
@@ -128,6 +165,9 @@ bool  pool_free(MemoryPool *memPool, void *object);
     #include "tbb_stddef.h"
 #endif
 
+#if __TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_CPP11_STD_FORWARD_BROKEN
+ #include <utility> // std::forward
+#endif
 
 namespace tbb {
 
@@ -177,7 +217,17 @@ public:
         size_type absolutemax = static_cast<size_type>(-1) / sizeof (value_type);
         return (absolutemax > 0 ? absolutemax : 1);
     }
+#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
+    template<typename... Args>
+    void construct(pointer p, Args&&... args)
+ #if __TBB_CPP11_STD_FORWARD_BROKEN
+        { ::new((void *)p) T((args)...); }
+ #else
+        { ::new((void *)p) T(std::forward<Args>(args)...); }
+ #endif
+#else // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
     void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}
+#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
     void destroy( pointer p ) {p->~value_type();}
 };
 
@@ -207,7 +257,7 @@ inline bool operator!=( const scalable_allocator<T>&, const scalable_allocator<U
 } // namespace tbb
 
 #if _MSC_VER
-    #if __TBB_BUILD && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)
+    #if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)
         #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1
     #endif
 
diff --git a/include/tbb/spin_mutex.h b/include/tbb/spin_mutex.h
index 0d200a1..2ed29b4 100644
--- a/include/tbb/spin_mutex.h
+++ b/include/tbb/spin_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 cfe806e..83c3c67 100644
--- a/include/tbb/spin_rw_mutex.h
+++ b/include/tbb/spin_rw_mutex.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -46,8 +46,8 @@ class spin_rw_mutex_v3 {
     //! Internal acquire write lock.
     bool __TBB_EXPORTED_METHOD internal_acquire_writer();
 
-    //! Out of line code for releasing a write lock.  
-    /** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
+    //! Out of line code for releasing a write lock.
+    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
     void __TBB_EXPORTED_METHOD internal_release_writer();
 
     //! Internal acquire read lock.
@@ -56,8 +56,8 @@ class spin_rw_mutex_v3 {
     //! Internal upgrade reader to become a writer.
     bool __TBB_EXPORTED_METHOD internal_upgrade();
 
-    //! Out of line code for downgrading a writer to a reader.   
-    /** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
+    //! Out of line code for downgrading a writer to a reader.
+    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
     void __TBB_EXPORTED_METHOD internal_downgrade();
 
     //! Internal release read lock.
@@ -107,18 +107,18 @@ public:
         //! Acquire lock on given mutex.
         void acquire( spin_rw_mutex& m, bool write = true ) {
             __TBB_ASSERT( !mutex, "holding mutex already" );
-            is_writer = write; 
+            is_writer = write;
             mutex = &m;
             if( write ) mutex->internal_acquire_writer();
             else        mutex->internal_acquire_reader();
         }
 
         //! Upgrade reader to become a writer.
-        /** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */
         bool upgrade_to_writer() {
             __TBB_ASSERT( mutex, "lock is not acquired" );
             __TBB_ASSERT( !is_writer, "not a reader" );
-            is_writer = true; 
+            is_writer = true;
             return mutex->internal_upgrade();
         }
 
@@ -138,15 +138,14 @@ public:
 
         //! Downgrade writer to become a reader.
         bool downgrade_to_reader() {
-#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
             __TBB_ASSERT( mutex, "lock is not acquired" );
             __TBB_ASSERT( is_writer, "not a writer" );
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
             mutex->internal_downgrade();
 #else
             __TBB_FetchAndAddW( &mutex->state, ((intptr_t)ONE_READER-WRITER));
 #endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
             is_writer = false;
-
             return true;
         }
 
diff --git a/include/tbb/task.h b/include/tbb/task.h
index a887431..9cbad16 100644
--- a/include/tbb/task.h
+++ b/include/tbb/task.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -244,6 +244,7 @@ namespace internal {
         //! Miscellaneous state that is not directly visible to users, stored as a byte for compactness.
         /** 0x0 -> version 1.0 task
             0x1 -> version >=2.1 task
+            0x10 -> task was enqueued 
             0x20 -> task_proxy
             0x40 -> task has live ref_count
             0x80 -> a stolen task */
@@ -300,8 +301,8 @@ class task_scheduler_init;
 
     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.
+    cancellation propagation direction. If a task in a cancellation group is cancelled
+    all the other tasks in this group and groups bound to it (as children) get cancelled too.
 
     IMPLEMENTATION NOTE:
     When adding new members to task_group_context or changing types of existing ones,
@@ -414,7 +415,7 @@ public:
 
         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
+        ones running, it is desirably to have all the nested algorithms cancelled
         as well. Such a behavior requires nested algorithms to use bound contexts.
 
         There is one good place where using isolated algorithms is beneficial. It is
@@ -466,7 +467,7 @@ public:
 
     //! Records the pending exception, and cancels the task group.
     /** May be called only from inside a catch-block. If the context is already
-        canceled, does nothing.
+        cancelled, 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
@@ -474,7 +475,7 @@ public:
     void __TBB_EXPORTED_METHOD register_pending_exception ();
 
 #if __TBB_TASK_PRIORITY
-    //! Changes priority of the task grop
+    //! Changes priority of the task group
     void set_priority ( priority_t );
 
     //! Retrieves current priority of the current task group
diff --git a/include/tbb/task_group.h b/include/tbb/task_group.h
index 2e42544..4a890d6 100644
--- a/include/tbb/task_group.h
+++ b/include/tbb/task_group.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/task_scheduler_init.h b/include/tbb/task_scheduler_init.h
index 576d370..0f0bb2a 100644
--- a/include/tbb/task_scheduler_init.h
+++ b/include/tbb/task_scheduler_init.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 4c09863..c7af037 100644
--- a/include/tbb/task_scheduler_observer.h
+++ b/include/tbb/task_scheduler_observer.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 259d1df..1581bd9 100644
--- a/include/tbb/tbb.h
+++ b/include/tbb/tbb.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -37,6 +37,9 @@
     Any header listed below can be included independently of others.
 **/
 
+#if TBB_PREVIEW_AGGREGATOR
+#include "aggregator.h"
+#endif
 #include "aligned_space.h"
 #include "atomic.h"
 #include "blocked_range.h"
@@ -65,9 +68,7 @@
 #include "queuing_mutex.h"
 #include "queuing_rw_mutex.h"
 #include "reader_writer_lock.h"
-#if TBB_PREVIEW_CONCURRENT_PRIORITY_QUEUE
 #include "concurrent_priority_queue.h"
-#endif
 #include "recursive_mutex.h"
 #include "spin_mutex.h"
 #include "spin_rw_mutex.h"
diff --git a/include/tbb/tbb_allocator.h b/include/tbb/tbb_allocator.h
index bb4690e..f4e366c 100644
--- a/include/tbb/tbb_allocator.h
+++ b/include/tbb/tbb_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,6 +31,9 @@
 
 #include "tbb_stddef.h"
 #include <new>
+#if __TBB_CPP11_RVALUE_REF_PRESENT && !__TBB_CPP11_STD_FORWARD_BROKEN
+ #include <utility> // std::forward
+#endif
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     // Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers
@@ -118,7 +121,17 @@ public:
     }
     
     //! Copy-construct value at location pointed to by p.
+#if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
+    template<typename... Args>
+    void construct(pointer p, Args&&... args)
+ #if __TBB_CPP11_STD_FORWARD_BROKEN
+        { ::new((void *)p) T((args)...); }
+ #else
+        { ::new((void *)p) T(std::forward<Args>(args)...); }
+ #endif
+#else // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
     void construct( pointer p, const value_type& value ) {::new((void*)(p)) value_type(value);}
+#endif // __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT && __TBB_CPP11_RVALUE_REF_PRESENT
 
     //! 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 8b86b89..aed2a8f 100644
--- a/include/tbb/tbb_config.h
+++ b/include/tbb/tbb_config.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -38,6 +38,9 @@
 **/
 
 #define __TBB_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
+#if __clang__
+#define __TBB_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
+#endif
 
 /** Presence of compiler features **/
 
@@ -46,9 +49,44 @@
     #define __TBB_GCC_WARNING_SUPPRESSION_PRESENT 1
 #endif
 
-/* TODO: The following condition should be extended when new compilers/runtimes 
-         with std::exception_ptr support appear. */
-#define __TBB_EXCEPTION_PTR_PRESENT  ((_MSC_VER >= 1600 || (__GXX_EXPERIMENTAL_CXX0X__ && __GNUC__==4 && __GNUC_MINOR__>=4)) && !__INTEL_COMPILER)
+
+/* Select particular features of C++11 based on compiler version.
+   ICC 12.1 (Linux), GCC 4.3 and higher, clang 2.9 and higher
+   set __GXX_EXPERIMENTAL_CXX0X__ in c++11 mode.
+
+   Compilers that mimics other compilers (ICC, clang) must be processed before
+   compilers they mimic.
+
+   TODO: The following conditions should be extended when new compilers/runtimes
+   support added.
+ */
+
+#if __INTEL_COMPILER
+    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT __GXX_EXPERIMENTAL_CXX0X__ && __VARIADIC_TEMPLATES
+    #define __TBB_CPP11_RVALUE_REF_PRESENT (__GXX_EXPERIMENTAL_CXX0X__ || _MSC_VER >= 1600) && (__INTEL_COMPILER >= 1200)
+    #define __TBB_EXCEPTION_PTR_PRESENT 0
+#elif __clang__
+    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_CLANG_VERSION >= 20900)
+    #define __TBB_CPP11_RVALUE_REF_PRESENT (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_CLANG_VERSION >= 20900)
+    #define __TBB_EXCEPTION_PTR_PRESENT __GXX_EXPERIMENTAL_CXX0X__
+#elif __GNUC__
+    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT __GXX_EXPERIMENTAL_CXX0X__
+    #define __TBB_CPP11_RVALUE_REF_PRESENT __GXX_EXPERIMENTAL_CXX0X__
+    #define __TBB_EXCEPTION_PTR_PRESENT __GXX_EXPERIMENTAL_CXX0X__
+#elif _MSC_VER
+    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 0
+    #define __TBB_CPP11_RVALUE_REF_PRESENT 0
+    #define __TBB_EXCEPTION_PTR_PRESENT (_MSC_VER >= 1600)
+#else
+    #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 0
+    #define __TBB_CPP11_RVALUE_REF_PRESENT 0
+    #define __TBB_EXCEPTION_PTR_PRESENT 0
+#endif
+
+// Work around a bug in MinGW32
+#if __MINGW32__ && __TBB_EXCEPTION_PTR_PRESENT && !defined(_GLIBCXX_ATOMIC_BUILTINS_4)
+    #define _GLIBCXX_ATOMIC_BUILTINS_4
+#endif
 
 #if __GNUC__ || __SUNPRO_CC || __IBMCPP__
     /* ICC defines __GNUC__ and so is covered */
@@ -57,7 +95,8 @@
     #define __TBB_DECLSPEC_ALIGN_PRESENT 1
 #endif
 
-#if (__TBB_GCC_VERSION >= 40102) && !defined(__INTEL_COMPILER)
+/* TODO: change the version back to 4.1.2 once macro __TBB_WORD_SIZE become optional */
+#if (__TBB_GCC_VERSION >= 40306) && !defined(__INTEL_COMPILER)
     /** built-in atomics available in GCC since 4.1.2 **/
     #define __TBB_GCC_BUILTIN_ATOMICS_PRESENT 1
 #endif
@@ -100,6 +139,10 @@
 #endif /* TBB_PEFORMANCE_WARNINGS */
 #endif /* TBB_USE_PERFORMANCE_WARNINGS */
 
+#if __MIC__ || __MIC2__
+#define __TBB_DEFINE_MIC 1
+#endif
+
 #if !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC) || defined(_XBOX)
     #if TBB_USE_EXCEPTIONS
         #error Compilation settings do not support exception handling. Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.
@@ -107,7 +150,13 @@
         #define TBB_USE_EXCEPTIONS 0
     #endif
 #elif !defined(TBB_USE_EXCEPTIONS)
+    #if __TBB_DEFINE_MIC
+    #define TBB_USE_EXCEPTIONS 0
+    #else
     #define TBB_USE_EXCEPTIONS 1
+    #endif
+#elif TBB_USE_EXCEPTIONS && __TBB_DEFINE_MIC
+    #error Please do not set TBB_USE_EXCEPTIONS macro or set it to 0.
 #endif
 
 #ifndef TBB_IMPLEMENT_CPP0X
@@ -138,15 +187,20 @@
 
 /** Internal TBB features & modes **/
 
+/** __TBB_DYNAMIC_LOAD_ENABLED describes the system possibility to dynamic load libraries
+    __TBB_SOURCE_DIRECTLY_INCLUDED is a mode used in whitebox testing when 
+    it's necessary to test internal functions not exported from TBB DLLs
+**/
+
 #ifndef __TBB_DYNAMIC_LOAD_ENABLED
-    #define __TBB_DYNAMIC_LOAD_ENABLED !__TBB_TASK_CPP_DIRECTLY_INCLUDED
-#elif !__TBB_DYNAMIC_LOAD_ENABLED
-    #if _WIN32||_WIN64
-        #define __TBB_NO_IMPLICIT_LINKAGE 1
-        #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1
-    #else
-        #define __TBB_WEAK_SYMBOLS 1
-    #endif
+    #define __TBB_DYNAMIC_LOAD_ENABLED 1
+#elif !(_WIN32||_WIN64) && !__TBB_DYNAMIC_LOAD_ENABLED
+    #define __TBB_WEAK_SYMBOLS 1
+#endif
+
+#if (_WIN32||_WIN64) && __TBB_SOURCE_DIRECTLY_INCLUDED
+    #define __TBB_NO_IMPLICIT_LINKAGE 1
+    #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1
 #endif
 
 #ifndef __TBB_COUNT_TASK_NODES
@@ -187,6 +241,16 @@
 #endif /* TBB_DEPRECATED */
 #endif /* !defined(__TBB_DEFAULT_PARTITIONER */
 
+#ifdef _VARIADIC_MAX
+#define __TBB_VARIADIC_MAX _VARIADIC_MAX
+#else
+#if _MSC_VER >= 1700
+#define __TBB_VARIADIC_MAX 5  // current VS11 setting, may change.
+#else
+#define __TBB_VARIADIC_MAX 10
+#endif
+#endif
+
 /** Macros of the form __TBB_XXX_BROKEN denote known issues that are caused by
     the bugs in compilers, standard or OS specific libraries. They should be 
     removed as soon as the corresponding bugs are fixed or the buggy OS/compiler
@@ -221,9 +285,9 @@
     #define __TBB_ICL_11_1_CODE_GEN_BROKEN 1
 #endif
 
-#if __GNUC__==3 && __GNUC_MINOR__==3 && !defined(__INTEL_COMPILER)
-    /** A bug in GCC 3.3 with access to nested classes declared in protected area */
-    #define __TBB_GCC_3_3_PROTECTED_BROKEN 1
+#if __clang__ || (__GNUC__==3 && __GNUC_MINOR__==3 && !defined(__INTEL_COMPILER))
+    /** Bugs with access to nested classes declared in protected area */
+    #define __TBB_PROTECTED_NESTED_CLASS_BROKEN 1
 #endif
 
 #if __MINGW32__ && (__GNUC__<4 || __GNUC__==4 && __GNUC_MINOR__<2)
@@ -259,4 +323,15 @@
     #define __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN 1
 #endif
 
+#if __INTEL_COMPILER
+    #define __TBB_CPP11_STD_FORWARD_BROKEN 1
+#else
+    #define __TBB_CPP11_STD_FORWARD_BROKEN 0
+#endif
+
+#if __TBB_DEFINE_MIC
+    /** Main thread and user's thread have different default thread affinity masks. **/
+    #define __TBB_MAIN_THREAD_AFFINITY_BROKEN 1
+#endif
+
 #endif /* __TBB_tbb_config_H */
diff --git a/include/tbb/tbb_exception.h b/include/tbb/tbb_exception.h
index 2346690..7754dbc 100644
--- a/include/tbb/tbb_exception.h
+++ b/include/tbb/tbb_exception.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -61,6 +61,12 @@ public:
     /*override*/ const char* what() const throw();
 };
 
+//! Exception for user-initiated abort
+class user_abort : 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:
@@ -95,6 +101,7 @@ enum exception_id {
     eid_invalid_swap,
     eid_reservation_length_error,
     eid_invalid_key,
+    eid_user_abort,
     //! 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. **/
diff --git a/include/tbb/tbb_machine.h b/include/tbb/tbb_machine.h
index 50636e5..6c83942 100644
--- a/include/tbb/tbb_machine.h
+++ b/include/tbb/tbb_machine.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -48,7 +48,7 @@
 
     In this case tbb_machine.h will add missing functionality based on a minimal set 
     of APIs that are required to be implemented by all plug-n headers as described
-    futher.
+    further.
     Note that these generic implementations may be sub-optimal for a particular
     architecture, and thus should be relied upon only after careful evaluation
     or as the last resort.
@@ -58,12 +58,27 @@
     be set to 1 explicitly, though normally this is not necessary as tbb_machine.h
     will set it automatically.
 
+    __TBB_BIG_ENDIAN macro can be defined by the implementation as well.
+    It is used only if the __TBB_USE_GENERIC_PART_WORD_CAS is set.
+    Possible values are:
+       -  1 if the system is big endian,
+       -  0 if it is little endian,
+       -  or -1 to explicitly state that __TBB_USE_GENERIC_PART_WORD_CAS can not be used.
+    -1 should be used when it is known in advance that endianness can change in run time
+    or it is  not simple big or little but something more complex.
+    The system will try to detect it in run time if it is not set(in assumption that it
+    is either a big or little one).
+
     Prerequisites for each architecture port
     ----------------------------------------
-    The following functions have no generic implementation. Therefore they must be 
+    The following functions and macros have no generic implementation. Therefore they must be
     implemented in each machine architecture specific header either as a conventional
     function or as a functional macro.
 
+    __TBB_WORDSIZE
+        This is the size of machine word in bytes, i.e. for 32 bit systems it
+        should be defined to 4.
+
     __TBB_Yield()
         Signals OS that the current thread is willing to relinquish the remainder
         of its time quantum.
@@ -89,14 +104,16 @@
     __TBB_control_consistency_helper()
         Bridges the memory-semantics gap between architectures providing only
         implicit C++0x "consume" semantics (like Power Architecture) and those
-        also implicitly obeying control dependencies (like Itanium).
+        also implicitly obeying control dependencies (like IA-64).
         It must be used only in conditional code where the condition is itself
         data-dependent, and will then make subsequent code behave as if the
         original data dependency were acquired.
-        It needs only an empty definition where implied by the architecture
-        either specifically (Itanium) or because generally stronger C++0x "acquire"
+        It needs only a compiler fence where implied by the architecture
+        either specifically (like IA-64) or because generally stronger "acquire"
         semantics are enforced (like x86).
-    
+        It is always valid, though potentially suboptimal, to replace
+        control with acquire on the load and then remove the helper.
+
     __TBB_acquire_consistency_helper(), __TBB_release_consistency_helper()
         Must be provided if __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE is set.
         Enforce acquire and release semantics in generic implementations of fenced
@@ -184,6 +201,11 @@ template<> struct atomic_selector<8> {
 #pragma managed(pop)
 #endif
 
+#elif __TBB_DEFINE_MIC
+
+    #include "machine/mic_common.h"
+    #include "machine/linux_intel64.h"
+
 #elif __linux__ || __FreeBSD__ || __NetBSD__
 
     #if (TBB_USE_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT)
@@ -345,43 +367,66 @@ void spin_wait_until_eq( const volatile T& location, const U value ) {
     while( location!=value ) backoff.pause();
 }
 
-// T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.
-// S should be either 1 or 2, for the mask calculation to work correctly.
-// Together, these rules limit applicability of Masked CAS to unsigned char and unsigned short.
-template<size_t S, typename T>
-inline T __TBB_MaskedCompareAndSwap (volatile T *ptr, T value, T comparand ) {
-    volatile uint32_t * base = (uint32_t*)( (uintptr_t)ptr & ~(uintptr_t)0x3 );
-#if __TBB_BIG_ENDIAN
-    const uint8_t bitoffset = uint8_t( 8*( 4-S - (uintptr_t(ptr) & 0x3) ) );
-#else
-    const uint8_t bitoffset = uint8_t( 8*((uintptr_t)ptr & 0x3) );
-#endif
-    const uint32_t mask = ( (1<<(S*8)) - 1 )<<bitoffset;
-    atomic_backoff b;
-    uint32_t result;
-    for(;;) {
-        result = *base; // reload the base value which might change during the pause
-        uint32_t old_value = ( result & ~mask ) | ( comparand << bitoffset );
-        uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
-        // __TBB_CompareAndSwap4 presumed to have full fence.
+//TODO: add static_assert for the requirements stated below
+//TODO: check if it works with signed types
+
+// there are following restrictions/limitations for this operation:
+//  - T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.
+//  - T should be integer type of at most 4 bytes, for the casts and calculations to work.
+//      (Together, these rules limit applicability of Masked CAS to uint8_t and uint16_t only,
+//      as it does nothing useful for 4 bytes).
+//  - The operation assumes that the architecture consistently uses either little-endian or big-endian:
+//      it does not support mixed-endian or page-specific bi-endian architectures.
+// This function is the only use of __TBB_BIG_ENDIAN.
+#if (__TBB_BIG_ENDIAN!=-1)
+    #if ( __TBB_USE_GENERIC_PART_WORD_CAS)
+        #error generic implementation of part-word CAS was explicitly disabled for this configuration
+    #endif
+template<typename T>
+inline T __TBB_MaskedCompareAndSwap (volatile T * const ptr, const T value, const T comparand ) {
+    struct endianness{ static bool is_big_endian(){
+        #ifndef __TBB_BIG_ENDIAN
+            const uint32_t probe = 0x03020100;
+            return (((const char*)(&probe))[0]==0x03);
+        #elif (__TBB_BIG_ENDIAN==0) || (__TBB_BIG_ENDIAN==1)
+            return __TBB_BIG_ENDIAN;
+        #else
+            #error unexpected value of __TBB_BIG_ENDIAN
+        #endif
+    }};
+
+    const uint32_t byte_offset            = (uint32_t) ((uintptr_t)ptr & 0x3);
+    volatile uint32_t * const aligned_ptr = (uint32_t*)((uintptr_t)ptr - byte_offset );
+
+    // location of T within uint32_t for a C++ shift operation
+    const uint32_t bits_to_shift     = 8*(endianness::is_big_endian() ? (4 - sizeof(T) - (byte_offset)) : byte_offset);
+    const uint32_t mask              = (((uint32_t)1<<(sizeof(T)*8)) - 1 )<<bits_to_shift;
+    const uint32_t shifted_comparand = ((uint32_t)comparand << bits_to_shift)&mask;
+    const uint32_t shifted_value     = ((uint32_t)value     << bits_to_shift)&mask;
+
+    for(atomic_backoff b;;b.pause()) {
+        const uint32_t surroundings  = *aligned_ptr & ~mask ; // reload the aligned_ptr value which might change during the pause
+        const uint32_t big_comparand = surroundings | shifted_comparand ;
+        const uint32_t big_value     = surroundings | shifted_value     ;
+        // __TBB_machine_cmpswp4 presumed to have full fence.
         // Cast shuts up /Wp64 warning
-        result = (uint32_t)__TBB_machine_cmpswp4( base, new_value, old_value );
-        if(  result==old_value               // CAS succeeded
-          || ((result^old_value)&mask)!=0 )  // CAS failed and the bits of interest have changed
-            break;
-        else                                 // CAS failed but the bits of interest left unchanged
-            b.pause();
+        const uint32_t big_result = (uint32_t)__TBB_machine_cmpswp4( aligned_ptr, big_value, big_comparand );
+        if( big_result == big_comparand                    // CAS succeeded
+          || ((big_result ^ big_comparand) & mask) != 0)   // CAS failed and the bits of interest have changed
+        {
+            return T((big_result & mask) >> bits_to_shift);
+        }
+        else continue;                                     // CAS failed but the bits of interest left unchanged
     }
-    return T((result & mask) >> bitoffset);
 }
-
+#endif
 template<size_t S, typename T>
 inline T __TBB_CompareAndSwapGeneric (volatile void *ptr, T value, T comparand );
 
 template<>
 inline uint8_t __TBB_CompareAndSwapGeneric <1,uint8_t> (volatile void *ptr, uint8_t value, uint8_t comparand ) {
 #if __TBB_USE_GENERIC_PART_WORD_CAS
-    return __TBB_MaskedCompareAndSwap<1,uint8_t>((volatile uint8_t *)ptr,value,comparand);
+    return __TBB_MaskedCompareAndSwap<uint8_t>((volatile uint8_t *)ptr,value,comparand);
 #else
     return __TBB_machine_cmpswp1(ptr,value,comparand);
 #endif
@@ -390,7 +435,7 @@ inline uint8_t __TBB_CompareAndSwapGeneric <1,uint8_t> (volatile void *ptr, uint
 template<>
 inline uint16_t __TBB_CompareAndSwapGeneric <2,uint16_t> (volatile void *ptr, uint16_t value, uint16_t comparand ) {
 #if __TBB_USE_GENERIC_PART_WORD_CAS
-    return __TBB_MaskedCompareAndSwap<2,uint16_t>((volatile uint16_t *)ptr,value,comparand);
+    return __TBB_MaskedCompareAndSwap<uint16_t>((volatile uint16_t *)ptr,value,comparand);
 #else
     return __TBB_machine_cmpswp2(ptr,value,comparand);
 #endif
@@ -447,7 +492,7 @@ inline T __TBB_FetchAndStoreGeneric (volatile void *ptr, T value) {
 #define __TBB_machine_fetchadd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t>
 #endif
 
-#if __TBB_USE_GENERIC_FETCH_ADD 
+#if __TBB_USE_GENERIC_FETCH_ADD
 #define __TBB_machine_fetchadd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t>
 #endif
 
@@ -460,7 +505,7 @@ inline T __TBB_FetchAndStoreGeneric (volatile void *ptr, T value) {
 #define __TBB_machine_fetchstore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t>
 #endif
 
-#if __TBB_USE_GENERIC_FETCH_STORE 
+#if __TBB_USE_GENERIC_FETCH_STORE
 #define __TBB_machine_fetchstore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t>
 #endif
 
@@ -493,7 +538,7 @@ inline void __TBB_machine_store8 (volatile void *ptr, int64_t value) {
 inline int64_t __TBB_machine_load8 (const volatile void *ptr) {
     // Comparand and new value may be anything, they only must be equal, and
     // the value should have a low probability to be actually found in 'location'.
-    const int64_t anyvalue = 2305843009213693951;
+    const int64_t anyvalue = 2305843009213693951LL;
     return __TBB_machine_cmpswp8(const_cast<volatile void *>(ptr),anyvalue,anyvalue);
 }
 #endif /* __TBB_USE_GENERIC_DWORD_LOAD_STORE */
@@ -518,6 +563,7 @@ struct machine_load_store {
     }
 };
 
+//in general, plain load and store of 32bit compiler is not atomic for 64bit types
 #if __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS
 template <typename T>
 struct machine_load_store<T,8> {
@@ -531,6 +577,7 @@ struct machine_load_store<T,8> {
 #endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */
 #endif /* __TBB_USE_GENERIC_HALF_FENCED_LOAD_STORE */
 
+#if __TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE
 template <typename T, size_t S>
 struct machine_load_store_seq_cst {
     static T load ( const volatile T& location ) {
@@ -557,7 +604,7 @@ struct machine_load_store_seq_cst<T,8> {
     static T load ( const volatile T& location ) {
         // Comparand and new value may be anything, they only must be equal, and
         // the value should have a low probability to be actually found in 'location'.
-        const int64_t anyvalue = 2305843009213693951ll;
+        const int64_t anyvalue = 2305843009213693951LL;
         return __TBB_machine_cmpswp8( (volatile void*)const_cast<volatile T*>(&location), anyvalue, anyvalue );
     }
     static void store ( volatile T &location, T value ) {
@@ -567,11 +614,12 @@ struct machine_load_store_seq_cst<T,8> {
     }
 };
 #endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */
+#endif /*__TBB_USE_GENERIC_SEQUENTIAL_CONSISTENCY_LOAD_STORE */
 
 #if __TBB_USE_GENERIC_RELAXED_LOAD_STORE
 // Relaxed operations add volatile qualifier to prevent compiler from optimizing them out.
 /** Volatile should not incur any additional cost on IA32, Intel64, and Sparc TSO
-    architectures. However on architectures with weak memory ordering compiler may 
+    architectures. However on architectures with weak memory ordering compiler may
     generate code with acquire/release semantics for operations on volatile data. **/
 template <typename T, size_t S>
 struct machine_load_store_relaxed {
@@ -596,6 +644,8 @@ struct machine_load_store_relaxed<T,8> {
 #endif /* __TBB_WORDSIZE==4 && __TBB_64BIT_ATOMICS */
 #endif /* __TBB_USE_GENERIC_RELAXED_LOAD_STORE */
 
+#undef __TBB_WORDSIZE //this macro is forbidden to use outside of atomic machinery
+
 template<typename T>
 inline T __TBB_load_with_acquire(const volatile T &location) {
     return machine_load_store<T,sizeof(T)>::load_with_acquire( location );
@@ -635,7 +685,7 @@ inline void __TBB_store_relaxed ( volatile size_t& location, size_t value ) {
     machine_load_store_relaxed<size_t,sizeof(size_t)>::store( const_cast<size_t&>(location), value );
 }
 
-// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as 
+// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as
 // strict as type T.  The type should have a trivial default constructor and destructor, so that
 // arrays of that type can be declared without initializers.
 // It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands
@@ -685,7 +735,7 @@ template<> struct type_with_alignment<16> {__TBB_machine_type_with_alignment_16
 template<> struct type_with_alignment<32> {__TBB_machine_type_with_alignment_32 member; };
 template<> struct type_with_alignment<64> {__TBB_machine_type_with_alignment_64 member; };
 
-#if __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN  
+#if __TBB_ALIGNOF_NOT_INSTANTIATED_TYPES_BROKEN
 //! 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). */
@@ -743,9 +793,8 @@ inline intptr_t __TBB_Log2( uintptr_t x ) {
     if( x==0 ) return -1;
     intptr_t result = 0;
     uintptr_t tmp;
-#if __TBB_WORDSIZE>=8
-    if( (tmp = x>>32) ) { x=tmp; result += 32; }
-#endif
+
+    if( sizeof(x)>4 && (tmp = ((uint64_t)x)>>32)) { x=tmp; result += 32; }
     if( (tmp = x>>16) ) { x=tmp; result += 16; }
     if( (tmp = x>>8) )  { x=tmp; result += 8; }
     if( (tmp = x>>4) )  { x=tmp; result += 4; }
@@ -801,7 +850,9 @@ inline __TBB_Flag __TBB_LockByte( __TBB_atomic_flag& flag ) {
 }
 #endif
 
+#ifndef  __TBB_UnlockByte
 #define __TBB_UnlockByte __TBB_store_with_release
+#endif
 
 #ifndef __TBB_ReverseByte
 inline unsigned char __TBB_ReverseByte(unsigned char src) {
diff --git a/include/tbb/tbb_profiling.h b/include/tbb/tbb_profiling.h
index a56039f..23c7292 100644
--- a/include/tbb/tbb_profiling.h
+++ b/include/tbb/tbb_profiling.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,7 +40,7 @@
 namespace tbb {
     namespace internal {
 #if _WIN32||_WIN64
-        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const wchar_t* name ); 
+        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const wchar_t* name );
         inline size_t multibyte_to_widechar( wchar_t* wcs, const char* mbs, size_t bufsize) {
 #if _MSC_VER>=1400
             size_t len;
@@ -54,13 +54,13 @@ namespace tbb {
 #endif
         }
 #else
-        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const char* name ); 
+        void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const char* name );
 #endif
     } // namespace internal
 } // namespace tbb
 
 //! Macro __TBB_DEFINE_PROFILING_SET_NAME(T) defines "set_name" methods for sync objects of type T
-/** Should be used in the "tbb" namespace only. 
+/** Should be used in the "tbb" namespace only.
     Don't place semicolon after it to avoid compiler warnings. **/
 #if _WIN32||_WIN64
     #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)    \
@@ -109,7 +109,7 @@ namespace tbb {
 
         enum notify_type {prepare=0, cancel, acquired, releasing};
         const uintptr_t NUM_NOTIFY_TYPES = 4; // set to # elements in enum above
-        
+
         void __TBB_EXPORTED_FUNC call_itt_notify_v5(int t, void *ptr);
         void __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3(void *dst, void *src);
         void* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3(const void *src);
@@ -133,7 +133,7 @@ namespace tbb {
             // This assertion should be replaced with static_assert
             __TBB_ASSERT(sizeof(T) == sizeof(void *), "Type must be word-sized.");
 #if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
-            // Workaround for overzealous compiler warnings 
+            // Workaround for overzealous compiler warnings
             #pragma warning (push)
             #pragma warning (disable: 4311)
 #endif
@@ -168,7 +168,7 @@ namespace tbb {
             return __TBB_load_with_acquire(src);
 #endif // TBB_USE_THREADING_TOOLS
         }
-        
+
         template <typename T>
         inline void itt_hide_store_word(T& dst, T src) {
 #if TBB_USE_THREADING_TOOLS
diff --git a/include/tbb/tbb_stddef.h b/include/tbb/tbb_stddef.h
index 7b25555..5f527b7 100644
--- a/include/tbb/tbb_stddef.h
+++ b/include/tbb/tbb_stddef.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,7 +34,7 @@
 #define TBB_VERSION_MINOR 0
 
 // Engineering-focused interface version
-#define TBB_INTERFACE_VERSION 6000
+#define TBB_INTERFACE_VERSION 6005
 #define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000
 
 // The oldest major interface version still supported
@@ -134,20 +134,72 @@
     #define __TBB_EXPORTED_METHOD
 #endif
 
+#if __INTEL_COMPILER || _MSC_VER
+#define __TBB_NOINLINE(decl) __declspec(noinline) decl
+#elif __GNUC__
+#define __TBB_NOINLINE(decl) decl __attribute__ ((noinline))
+#else
+#define __TBB_NOINLINE(decl) decl
+#endif
+
 #include <cstddef>      /* Need size_t and ptrdiff_t */
 
 #if _MSC_VER
     #define __TBB_tbb_windef_H
     #include "internal/_tbb_windef.h"
     #undef __TBB_tbb_windef_H
-#else
+#endif
+#if !defined(_MSC_VER) || _MSC_VER>=1600
     #include <stdint.h>
 #endif
 
+//! Type for an assertion handler
+typedef void(*assertion_handler_type)( const char* filename, int line, const char* expression, const char * comment );
+
+#if TBB_USE_ASSERT
+
+     #define __TBB_ASSERT_NS(predicate,message,ns) ((predicate)?((void)0) : ns::assertion_failure(__FILE__,__LINE__,#predicate,message))
+    //! Assert that x is true.
+    /** If x is false, print assertion failure message.  
+        If the comment argument is not NULL, it is printed as part of the failure message.  
+        The comment argument has no other effect. */
+#if __TBBMALLOC_BUILD
+namespace rml { namespace internal {
+    #define __TBB_ASSERT(predicate,message) __TBB_ASSERT_NS(predicate,message,rml::internal)
+#else
+namespace tbb {
+    #define __TBB_ASSERT(predicate,message) __TBB_ASSERT_NS(predicate,message,tbb)
+#endif
+
+    #define __TBB_ASSERT_EX __TBB_ASSERT
+
+    //! Set assertion handler and return previous value of it.
+    assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler );
+
+    //! Process an assertion failure.
+    /** Normally called from __TBB_ASSERT macro.
+        If assertion handler is null, print message for assertion failure and abort.
+        Otherwise call the assertion handler. */
+    void __TBB_EXPORTED_FUNC assertion_failure( const char* filename, int line, const char* expression, const char* comment );
+
+#if __TBBMALLOC_BUILD
+}}  // namespace rml::internal
+#else
+} // namespace tbb
+#endif
+#else /* !TBB_USE_ASSERT */
+
+    //! No-op version of __TBB_ASSERT.
+    #define __TBB_ASSERT(predicate,comment) ((void)0)
+    //! "Extended" version is useful to suppress warnings if a variable is only used with an assert
+    #define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))
+
+#endif /* !TBB_USE_ASSERT */
+
 //! The namespace tbb contains all components of the library.
 namespace tbb {
 
-#if _MSC_VER
+#if _MSC_VER && _MSC_VER<1600
     namespace internal {
         typedef __int8 int8_t;
         typedef __int16 int16_t;
@@ -174,36 +226,6 @@ namespace tbb {
     using std::size_t;
     using std::ptrdiff_t;
 
-    //! Type for an assertion handler
-    typedef void(*assertion_handler_type)( const char* filename, int line, const char* expression, const char * comment );
-
-#if TBB_USE_ASSERT
-
-    //! Assert that x is true.
-    /** If x is false, print assertion failure message.  
-        If the comment argument is not NULL, it is printed as part of the failure message.  
-        The comment argument has no other effect. */
-    #define __TBB_ASSERT(predicate,message) ((predicate)?((void)0):tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))
-    #define __TBB_ASSERT_EX __TBB_ASSERT
-
-    //! Set assertion handler and return previous value of it.
-    assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler );
-
-    //! Process an assertion failure.
-    /** Normally called from __TBB_ASSERT macro.
-        If assertion handler is null, print message for assertion failure and abort.
-        Otherwise call the assertion handler. */
-    void __TBB_EXPORTED_FUNC assertion_failure( const char* filename, int line, const char* expression, const char* comment );
-
-#else /* !TBB_USE_ASSERT */
-
-    //! No-op version of __TBB_ASSERT.
-    #define __TBB_ASSERT(predicate,comment) ((void)0)
-    //! "Extended" version is useful to suppress warnings if a variable is only used with an assert
-    #define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))
-
-#endif /* !TBB_USE_ASSERT */
-
 //! The function returns the interface version of the TBB shared library being used.
 /**
  * The version it returns is determined at runtime, not at compile/link time.
@@ -243,7 +265,7 @@ const size_t NFS_MaxLineSize = 128;
     both as a way to have the compiler help enforce use of the label and to quickly rule out
     one potential issue.
 
-    Note however that, with some architecture/compiler combinations, e.g. on Itanium, "volatile" 
+    Note however that, with some architecture/compiler combinations, e.g. on IA-64, "volatile" 
     also has non-portable memory semantics that are needlessly expensive for "relaxed" operations.
 
     Note that this must only be applied to data that will not change bit patterns when cast to/from
@@ -349,6 +371,15 @@ struct allocator_type<const T> {
 };
 #endif
 
+//! A function to select either 32-bit or 64-bit value, depending on machine word size.
+inline size_t size_t_select( unsigned u, unsigned long long ull ) {
+    /* Explicit cast of the arguments to size_t is done to avoid compiler warnings
+       (e.g. by Clang and MSVC) about possible truncation. The value of the right size,
+       which is selected by ?:, is anyway not truncated or promoted.
+       MSVC still warns if this trick is applied directly to constants, hence this function. */
+    return (sizeof(size_t)==sizeof(u)) ? size_t(u) : size_t(ull);
+}
+
 // Struct to be used as a version tag for inline functions.
 /** Version tag can be necessary to prevent loader on Linux from using the wrong 
     symbol in debug builds (when inline functions are compiled as out-of-line). **/
diff --git a/include/tbb/tbb_thread.h b/include/tbb/tbb_thread.h
index 5e71132..1edaa2e 100644
--- a/include/tbb/tbb_thread.h
+++ b/include/tbb/tbb_thread.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/include/tbb/tbbmalloc_proxy.h b/include/tbb/tbbmalloc_proxy.h
index f0f0ed7..181144f 100644
--- a/include/tbb/tbbmalloc_proxy.h
+++ b/include/tbb/tbbmalloc_proxy.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 394afb0..4c56e4e 100644
--- a/include/tbb/tick_count.h
+++ b/include/tbb/tick_count.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/index.html b/index.html
index 2dae025..7abe0f4 100644
--- a/index.html
+++ b/index.html
@@ -2,16 +2,16 @@
 <BODY>
 
 <H2>Overview</H2>
-Top level directory for Threading Building Blocks (TBB).
+Top level directory for Intel® Threading Building Blocks (Intel® TBB).
 <P>
-To build TBB, use the <A HREF=Makefile>top-level Makefile</A>; see also the <A HREF=build/index.html#build>build directions</A>.
-To port TBB to a new platform, operating system or architecture, see the <A HREF=build/index.html#port>porting directions</A>.
+To build Intel TBB, use the <A HREF=Makefile>top-level Makefile</A>; see also the <A HREF=build/index.html#build>build directions</A>.
+To port Intel TBB to a new platform, operating system or architecture, see the <A HREF=build/index.html#port>porting directions</A>.
 </P>
 
 <H2>Files</H2>
 <DL>
 <DT><A HREF="Makefile">Makefile</A>
-<DD>Top-level Makefile for TBB.  See also the <A HREF=build/index.html#build>build directions</A>.
+<DD>Top-level Makefile for Intel TBB.  See also the <A HREF=build/index.html#build>build directions</A>.
 </DL>
 
 <H2>Directories</H2>
@@ -25,14 +25,14 @@ To port TBB to a new platform, operating system or architecture, see the <A HREF
 <DT><A HREF="src/index.html">src</A>
 <DD>Source code for the library.
 <DT><A HREF="build/index.html">build</A>
-<DD>Internal Makefile infrastructure for TBB.  Do not use directly; see the <A HREF=build/index.html#build>build directions</A>.
+<DD>Internal Makefile infrastructure for Intel TBB.  Do not use directly; see the <A HREF=build/index.html#build>build directions</A>.
 <DT><A HREF="ia32">ia32</A>, <A HREF="intel64">intel64</A>, <A HREF="ia64">ia64</A>
 <DD>Platform-specific binary files for the library.
 </DL>
 
 <HR>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/Makefile b/src/Makefile
index 24fd3d0..74546b6 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 #
 # This file is part of Threading Building Blocks.
 #
diff --git a/src/index.html b/src/index.html
index 3a89fab..cf2a66a 100644
--- a/src/index.html
+++ b/src/index.html
@@ -66,7 +66,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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/old/concurrent_queue_v2.cpp b/src/old/concurrent_queue_v2.cpp
index 3fca17e..4e7101e 100644
--- a/src/old/concurrent_queue_v2.cpp
+++ b/src/old/concurrent_queue_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -49,7 +49,7 @@ namespace internal {
 class concurrent_queue_rep;
 
 //! A queue using simple locking.
-/** For efficiency, this class has no constructor.  
+/** For efficiency, this class has no constructor.
     The caller is expected to zero-initialize it. */
 struct micro_queue {
     typedef concurrent_queue_base::page page;
@@ -62,7 +62,7 @@ struct micro_queue {
     atomic<ticket> tail_counter;
 
     spin_mutex page_mutex;
-    
+
     class push_finalizer: no_copy {
         ticket my_ticket;
         micro_queue& my_queue;
@@ -96,7 +96,7 @@ struct micro_queue {
                 }
             }
             my_queue.head_counter = my_ticket;
-            if( p ) 
+            if( p )
                 operator delete(p);
         }
     };
@@ -105,7 +105,7 @@ struct micro_queue {
 };
 
 //! Internal representation of a ConcurrentQueue.
-/** For efficiency, this class has no constructor.  
+/** For efficiency, this class has no constructor.
     The caller is expected to zero-initialize it. */
 class concurrent_queue_rep {
 public:
@@ -119,7 +119,7 @@ private:
 
 public:
     //! Must be power of 2
-    static const size_t n_queue = 8; 
+    static const size_t n_queue = 8;
 
     //! Map ticket to an array index
     static size_t index( ticket k ) {
@@ -131,7 +131,7 @@ public:
 
     atomic<ticket> tail_counter;
     char pad2[NFS_MaxLineSize-sizeof(atomic<ticket>)];
-    micro_queue array[n_queue];    
+    micro_queue array[n_queue];
 
     micro_queue& choose( ticket k ) {
         // The formula here approximates LRU in a cache-oblivious way.
@@ -162,14 +162,14 @@ void micro_queue::push( const void* item, ticket k, concurrent_queue_base& base
         p->next = NULL;
     }
     {
-        push_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue ); 
+        push_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue );
         spin_wait_until_eq( tail_counter, k );
         if( p ) {
             spin_mutex::scoped_lock lock( page_mutex );
             if( page* q = tail_page )
                 q->next = p;
             else
-                head_page = p; 
+                head_page = p;
             tail_page = p;
         } else {
             p = tail_page;
@@ -177,7 +177,7 @@ void micro_queue::push( const void* item, ticket k, concurrent_queue_base& base
         base.copy_item( *p, index, item );
         // If no exception was thrown, mark item as present.
         p->mask |= uintptr_t(1)<<index;
-    } 
+    }
 }
 
 bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
@@ -187,9 +187,9 @@ bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
     page& p = *head_page;
     __TBB_ASSERT( &p, NULL );
     size_t index = (k/concurrent_queue_rep::n_queue & base.items_per_page-1);
-    bool success = false; 
+    bool success = false;
     {
-        pop_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? &p : NULL ); 
+        pop_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? &p : NULL );
         if( p.mask & uintptr_t(1)<<index ) {
             success = true;
             base.assign_and_destroy_item( dst, p, index );
@@ -205,21 +205,21 @@ bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
 //------------------------------------------------------------------------
 // concurrent_queue_base
 //------------------------------------------------------------------------
-concurrent_queue_base::concurrent_queue_base( size_t item_size ) {
-    items_per_page = item_size<=8 ? 32 :
-                     item_size<=16 ? 16 : 
-                     item_size<=32 ? 8 :
-                     item_size<=64 ? 4 :
-                     item_size<=128 ? 2 :
+concurrent_queue_base::concurrent_queue_base( size_t item_sz ) {
+    items_per_page = item_sz<=  8 ? 32 :
+                     item_sz<= 16 ? 16 :
+                     item_sz<= 32 ?  8 :
+                     item_sz<= 64 ?  4 :
+                     item_sz<=128 ?  2 :
                      1;
-    my_capacity = size_t(-1)/(item_size>1 ? item_size : 2); 
+    my_capacity = size_t(-1)/(item_sz>1 ? item_sz : 2);
     my_rep = cache_aligned_allocator<concurrent_queue_rep>().allocate(1);
     __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, "alignment error" );
     __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, "alignment error" );
     __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, "alignment error" );
     __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, "alignment error" );
     memset(my_rep,0,sizeof(concurrent_queue_rep));
-    this->item_size = item_size;
+    this->item_size = item_sz;
 }
 
 concurrent_queue_base::~concurrent_queue_base() {
@@ -244,7 +244,7 @@ void concurrent_queue_base::internal_push( const void* src ) {
             backoff.pause();
             e = const_cast<volatile ptrdiff_t&>(my_capacity);
         }
-    } 
+    }
     r.choose(k).push(src,k,*this);
 }
 
@@ -260,11 +260,10 @@ bool concurrent_queue_base::internal_pop_if_present( void* dst ) {
     concurrent_queue_rep& r = *my_rep;
     concurrent_queue_rep::ticket k;
     do {
-        atomic_backoff backoff;
-        for(;;) {
+        for( atomic_backoff backoff;;backoff.pause() ) {
             k = r.head_counter;
             if( r.tail_counter<=k ) {
-                // Queue is empty 
+                // Queue is empty
                 return false;
             }
             // Queue had item with ticket k when we looked.  Attempt to get that item.
@@ -272,7 +271,6 @@ bool concurrent_queue_base::internal_pop_if_present( void* dst ) {
                 break;
             }
             // Another thread snatched the item, so pause and retry.
-            backoff.pause();
         }
     } while( !r.choose(k).pop(dst,k,*this) );
     return true;
@@ -280,19 +278,17 @@ bool concurrent_queue_base::internal_pop_if_present( void* dst ) {
 
 bool concurrent_queue_base::internal_push_if_not_full( const void* src ) {
     concurrent_queue_rep& r = *my_rep;
-    atomic_backoff backoff;
     concurrent_queue_rep::ticket k;
-    for(;;) {
+    for( atomic_backoff backoff;;backoff.pause() ) {
         k = r.tail_counter;
         if( (ptrdiff_t)(k-r.head_counter)>=my_capacity ) {
             // Queue is full
             return false;
         }
         // Queue had empty slot with ticket k when we looked.  Attempt to claim that slot.
-        if( r.tail_counter.compare_and_swap(k+1,k)==k ) 
+        if( r.tail_counter.compare_and_swap(k+1,k)==k )
             break;
         // Another thread claimed the slot, so pause and retry.
-        backoff.pause();
     }
     r.choose(k).push(src,k,*this);
     return true;
@@ -303,7 +299,7 @@ ptrdiff_t concurrent_queue_base::internal_size() const {
     return ptrdiff_t(my_rep->tail_counter-my_rep->head_counter);
 }
 
-void concurrent_queue_base::internal_set_capacity( ptrdiff_t capacity, size_t /*item_size*/ ) {
+void concurrent_queue_base::internal_set_capacity( ptrdiff_t capacity, size_t /*item_sz*/ ) {
     my_capacity = capacity<0 ? concurrent_queue_rep::infinite_capacity : capacity;
 }
 
@@ -313,10 +309,10 @@ void concurrent_queue_base::internal_set_capacity( ptrdiff_t capacity, size_t /*
 class  concurrent_queue_iterator_rep: no_assign {
 public:
     typedef concurrent_queue_rep::ticket ticket;
-    ticket head_counter;   
+    ticket head_counter;
     const concurrent_queue_base& my_queue;
     concurrent_queue_base::page* array[concurrent_queue_rep::n_queue];
-    concurrent_queue_iterator_rep( const concurrent_queue_base& queue ) : 
+    concurrent_queue_iterator_rep( const concurrent_queue_base& queue ) :
         head_counter(queue.my_rep->head_counter),
         my_queue(queue)
     {
@@ -359,7 +355,7 @@ void concurrent_queue_iterator_base::assign( const concurrent_queue_iterator_bas
 }
 
 void concurrent_queue_iterator_base::advance() {
-    __TBB_ASSERT( my_item, "attempt to increment iterator past end of queue" );  
+    __TBB_ASSERT( my_item, "attempt to increment iterator past end of queue" );
     size_t k = my_rep->head_counter;
     const concurrent_queue_base& queue = my_rep->my_queue;
     __TBB_ASSERT( my_item==my_rep->choose(k), NULL );
diff --git a/src/old/concurrent_queue_v2.h b/src/old/concurrent_queue_v2.h
index 994128f..ed3dc13 100644
--- a/src/old/concurrent_queue_v2.h
+++ b/src/old/concurrent_queue_v2.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -218,9 +218,9 @@ class concurrent_queue: public internal::concurrent_queue_base {
         ~destroyer() {my_value.~T();}          
     };
 
-    T& get_ref( page& page, size_t index ) {
+    T& get_ref( page& pg, size_t index ) {
         __TBB_ASSERT( index<items_per_page, NULL );
-        return static_cast<T*>(static_cast<void*>(&page+1))[index];
+        return static_cast<T*>(static_cast<void*>(&pg+1))[index];
     }
 
     /*override*/ virtual void copy_item( page& dst, size_t index, const void* src ) {
@@ -302,8 +302,8 @@ public:
     //! Set the capacity
     /** Setting the capacity to 0 causes subsequent push_if_not_full operations to always fail,
         and subsequent push operations to block forever. */
-    void set_capacity( size_type capacity ) {
-        internal_set_capacity( capacity, sizeof(T) );
+    void set_capacity( size_type new_capacity ) {
+        internal_set_capacity( new_capacity, sizeof(T) );
     }
 
     typedef internal::concurrent_queue_iterator<concurrent_queue,T> iterator;
diff --git a/src/old/concurrent_vector_v2.cpp b/src/old/concurrent_vector_v2.cpp
index d54e84c..9480eb8 100644
--- a/src/old/concurrent_vector_v2.cpp
+++ b/src/old/concurrent_vector_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -37,14 +37,13 @@
     #pragma warning (disable: 4530)
 #endif
 
-#include <stdexcept>
+#include <stdexcept> // std::length_error
 #include <cstring>
 
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     #pragma warning (pop)
 #endif
 
-
 #if defined(_MSC_VER) && defined(_Wp64)
     // Workaround for overzealous compiler warnings in /Wp64 mode
     #pragma warning (disable: 4267)
@@ -92,14 +91,14 @@ void concurrent_vector_base::helper::extend_segment( concurrent_vector_base& v )
     segment_t* s = (segment_t*)NFS_Allocate( pointers_per_long_segment, sizeof(segment_t), NULL );
     std::memset( s, 0, pointers_per_long_segment*sizeof(segment_t) );
     // 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.
+    // assignments before we copy the short segment to the long segment.
     atomic_backoff backoff;
     while( !v.my_storage[0].array || !v.my_storage[1].array ) {
         backoff.pause();
     }
     s[0] = v.my_storage[0]; 
     s[1] = v.my_storage[1]; 
-    if( v.my_segment.compare_and_swap( s, v.my_storage )!=v.my_storage ) 
+    if( v.my_segment.compare_and_swap( s, v.my_storage )!=v.my_storage )
         NFS_Free(s);
 }
 
@@ -109,7 +108,7 @@ concurrent_vector_base::size_type concurrent_vector_base::internal_capacity() co
 
 void concurrent_vector_base::internal_reserve( size_type n, size_type element_size, size_type max_size ) {
     if( n>max_size ) {
-        __TBB_THROW( std::length_error("argument to ConcurrentVector::reserve exceeds ConcurrentVector::max_size()") );
+        __TBB_THROW( std::length_error("argument to concurrent_vector::reserve exceeds concurrent_vector::max_size()") );
     }
     for( segment_index_t k = helper::find_segment_end(*this); segment_base(k)<n; ++k ) {
         helper::extend_segment_if_necessary(*this,k);
@@ -130,7 +129,7 @@ void concurrent_vector_base::internal_copy( const concurrent_vector_base& src, s
             size_t m = segment_size(k);
             __TBB_ASSERT( !my_segment[k].array, "concurrent operation during copy construction?" );
             my_segment[k].array = NFS_Allocate( m, element_size, NULL );
-            if( m>n-b ) m = n-b; 
+            if( m>n-b ) m = n-b;
             copy( my_segment[k].array, src.my_segment[k].array, m );
         }
     }
@@ -138,7 +137,7 @@ void concurrent_vector_base::internal_copy( const concurrent_vector_base& src, s
 
 void concurrent_vector_base::internal_assign( const concurrent_vector_base& src, size_type element_size, internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy ) {
     size_type n = src.my_early_size;
-    while( my_early_size>n ) { 
+    while( my_early_size>n ) {
         segment_index_t k = segment_index_of( my_early_size-1 );
         size_type b=segment_base(k);
         size_type new_end = b>=n ? b : n;
@@ -160,13 +159,13 @@ void concurrent_vector_base::internal_assign( const concurrent_vector_base& src,
             a = dst_initialized_size-b;
             if( a>m ) a = m;
             assign( my_segment[k].array, src.my_segment[k].array, a );
-            m -= a; 
-            a *= element_size; 
+            m -= a;
+            a *= element_size;
         }
-        if( m>0 ) 
+        if( m>0 )
             copy( (char*)my_segment[k].array+a, (char*)src.my_segment[k].array+a, m );
     }
-    __TBB_ASSERT( src.my_early_size==n, "detected use of ConcurrentVector::operator= with right side that was concurrently modified" );
+    __TBB_ASSERT( src.my_early_size==n, "detected use of concurrent_vector::operator= with right side that was concurrently modified" );
 }
 
 void* concurrent_vector_base::internal_push_back( size_type element_size, size_type& index ) {
@@ -236,7 +235,7 @@ void concurrent_vector_base::internal_grow( const size_type start, size_type fin
 
 void concurrent_vector_base::internal_clear( internal_array_op1 destroy, bool reclaim_storage ) {
     // Set "my_early_size" early, so that subscripting errors can be caught.
-    // FIXME - doing so may be hurting exception saftey
+    // FIXME - doing so may be hurting exception safety
     __TBB_ASSERT( my_segment, NULL );
     size_type finish = my_early_size;
     my_early_size = 0;
@@ -261,14 +260,14 @@ void concurrent_vector_base::internal_clear( internal_array_op1 destroy, bool re
             s.array = NULL;
             NFS_Free( array );
         }
-        // Clear short segment.  
+        // Clear short segment.
         my_storage[0].array = NULL;
         my_storage[1].array = NULL;
         segment_t* s = my_segment;
         if( s!=my_storage ) {
             my_segment = my_storage;
             NFS_Free( s );
-        } 
+        }
     }
 }
 
diff --git a/src/old/concurrent_vector_v2.h b/src/old/concurrent_vector_v2.h
index 68f7547..6f07736 100644
--- a/src/old/concurrent_vector_v2.h
+++ b/src/old/concurrent_vector_v2.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -60,21 +60,24 @@ namespace internal {
     /** @ingroup containers */
     class concurrent_vector_base {
     protected:
+
+        // Basic types declarations
         typedef unsigned long segment_index_t;
+        typedef size_t size_type;
 
-        //! Log2 of "min_segment_size".  
+        //! Log2 of "min_segment_size".
         static const int lg_min_segment_size = 4;
 
         //! Minimum size (in physical items) of a segment.
         static const int min_segment_size = segment_index_t(1)<<lg_min_segment_size;
-      
-        static segment_index_t segment_index_of( size_t index ) { 
+
+        static segment_index_t segment_index_of( size_t index ) {
             uintptr_t i = index|1<<(lg_min_segment_size-1);
-            uintptr_t j = __TBB_Log2(i); 
-            return segment_index_t(j-(lg_min_segment_size-1)); 
+            uintptr_t j = __TBB_Log2(i);
+            return segment_index_t(j-(lg_min_segment_size-1));
         }
 
-        static segment_index_t segment_base( segment_index_t k ) { 
+        static segment_index_t segment_base( segment_index_t k ) {
             return min_segment_size>>1<<k & -min_segment_size;
         }
 
@@ -84,8 +87,6 @@ namespace internal {
             return result;
         }
 
-        typedef size_t size_type;
-
         void __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );
 
         size_type __TBB_EXPORTED_METHOD internal_capacity() const;
@@ -104,10 +105,16 @@ namespace internal {
 #endif /* TBB_USE_ASSERT */
         };
 
+        // Data fields
+
+        //! Pointer to the segments table
         atomic<segment_t*> my_segment;
 
+        //! embedded storage of segment pointers
         segment_t my_storage[2];
 
+        // Methods
+
         concurrent_vector_base() {
             my_early_size = 0;
             my_storage[0].array = NULL;
@@ -115,7 +122,7 @@ namespace internal {
             my_segment = my_storage;
         }
 
-        //! An operation on an n-lement array starting at begin.
+        //! An operation on an n-element array starting at begin.
         typedef void(__TBB_EXPORTED_FUNC *internal_array_op1)(void* begin, size_type n );
 
         //! An operation on n-element destination array and n-element source array.
@@ -132,7 +139,6 @@ namespace internal {
 private:
         //! Private functionality that does not cross DLL boundary.
         class helper;
-
         friend class helper;
     };
 
@@ -140,8 +146,8 @@ private:
     /** Value is either the T or const T type of the container.
         @ingroup containers */
     template<typename Container, typename Value>
-    class vector_iterator 
-#if defined(_WIN64) && defined(_MSC_VER) 
+    class vector_iterator
+#if defined(_WIN64) && defined(_MSC_VER)
         // Ensure that Microsoft's internal template function _Val_type works correctly.
         : public std::iterator<std::random_access_iterator_tag,Value>
 #endif /* defined(_WIN64) && defined(_MSC_VER) */
@@ -149,13 +155,13 @@ private:
         //! concurrent_vector over which we are iterating.
         Container* my_vector;
 
-        //! Index into the vector 
+        //! Index into the vector
         size_t my_index;
 
         //! Caches my_vector->internal_subscript(my_index)
         /** NULL if cached value is not available */
         mutable Value* my_item;
-    
+
         template<typename C, typename T, typename U>
         friend bool operator==( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
 
@@ -164,7 +170,7 @@ private:
 
         template<typename C, typename T, typename U>
         friend ptrdiff_t operator-( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
-    
+
         template<typename C, typename U>
         friend class internal::vector_iterator;
 
@@ -173,11 +179,11 @@ private:
         friend class tbb::concurrent_vector;
 #else
 public: // workaround for MSVC
-#endif 
+#endif
 
-        vector_iterator( const Container& vector, size_t index ) : 
-            my_vector(const_cast<Container*>(&vector)), 
-            my_index(index), 
+        vector_iterator( const Container& vector, size_t index ) :
+            my_vector(const_cast<Container*>(&vector)),
+            my_index(index),
             my_item(NULL)
         {}
 
@@ -241,7 +247,7 @@ public: // workaround for MSVC
 
         //! Pre decrement
         vector_iterator& operator--() {
-            __TBB_ASSERT( my_index>0, "operator--() applied to iterator already at beginning of concurrent_vector" ); 
+            __TBB_ASSERT( my_index>0, "operator--() applied to iterator already at beginning of concurrent_vector" );
             size_t k = my_index--;
             if( my_item ) {
                 // Following test uses 2's-complement wizardry and fact that
@@ -332,7 +338,7 @@ private:
         typedef const T& const_reference;
         typedef I iterator;
         typedef ptrdiff_t difference_type;
-        generic_range_type( I begin_, I end_, size_t grainsize ) : blocked_range<I>(begin_,end_,grainsize) {} 
+        generic_range_type( I begin_, I end_, size_t grainsize_ ) : blocked_range<I>(begin_,end_,grainsize_) {}
         generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}
     };
 
@@ -341,14 +347,17 @@ private:
 public:
     typedef T& reference;
     typedef const T& const_reference;
+    typedef T value_type;
+    typedef ptrdiff_t difference_type;
 
     //! Construct empty vector.
     concurrent_vector() {}
 
     //! Copy a vector.
-    concurrent_vector( const concurrent_vector& vector ) {internal_copy(vector,sizeof(T),&copy_array);}
+    concurrent_vector( const concurrent_vector& vector ) : internal::concurrent_vector_base()
+    { internal_copy(vector,sizeof(T),&copy_array); }
 
-    //! Assignment 
+    //! Assignment
     concurrent_vector& operator=( const concurrent_vector& vector ) {
         if( this!=&vector )
             internal_assign(vector,sizeof(T),&destroy_array,&assign_array,&copy_array);
@@ -373,7 +382,7 @@ public:
             internal_grow_to_at_least( n, sizeof(T), &initialize_array );
     };
 
-    //! Push item 
+    //! Push item
     size_type push_back( const_reference item ) {
         size_type k;
         new( internal_push_back(sizeof(T),k) ) T(item);
@@ -393,12 +402,12 @@ public:
     }
 
     //------------------------------------------------------------------------
-    // Parallel algorithm support
+    // STL support (iterators)
     //------------------------------------------------------------------------
     typedef internal::vector_iterator<concurrent_vector,T> iterator;
     typedef internal::vector_iterator<concurrent_vector,const T> const_iterator;
 
-#if !defined(_MSC_VER) || _CPPLIB_VER>=300 
+#if !defined(_MSC_VER) || _CPPLIB_VER>=300
     // Assume ISO standard definition of std::reverse_iterator
     typedef std::reverse_iterator<iterator> reverse_iterator;
     typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
@@ -408,31 +417,48 @@ public:
     typedef std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
 #endif /* defined(_MSC_VER) && (_MSC_VER<1300) */
 
+    // Forward sequence 
+    iterator begin() {return iterator(*this,0);}
+    iterator end() {return iterator(*this,size());}
+    const_iterator begin() const {return const_iterator(*this,0);}
+    const_iterator end() const {return const_iterator(*this,size());}
+
+    // Reverse sequence
+    reverse_iterator rbegin() {return reverse_iterator(end());}
+    reverse_iterator rend() {return reverse_iterator(begin());}
+    const_reverse_iterator rbegin() const {return const_reverse_iterator(end());}
+    const_reverse_iterator rend() const {return const_reverse_iterator(begin());}
+
+    //------------------------------------------------------------------------
+    // Support for TBB algorithms (ranges)
+    //------------------------------------------------------------------------
     typedef generic_range_type<iterator> range_type;
     typedef generic_range_type<const_iterator> const_range_type;
 
+    //! Get range to use with parallel algorithms
     range_type range( size_t grainsize = 1 ) {
         return range_type( begin(), end(), grainsize );
     }
 
+    //! Get const range for iterating with parallel algorithms
     const_range_type range( size_t grainsize = 1 ) const {
         return const_range_type( begin(), end(), grainsize );
     }
 
     //------------------------------------------------------------------------
-    // Capacity
+    // Size and capacity
     //------------------------------------------------------------------------
     //! Return size of vector.
     size_type size() const {return my_early_size;}
 
-    //! Return size of vector.
+    //! Return false if vector is not empty.
     bool empty() const {return !my_early_size;}
 
     //! Maximum size to which array can grow without allocating more memory.
     size_type capacity() const {return internal_capacity();}
 
     //! Allocate enough space to grow to size n without having to allocate more memory later.
-    /** Like most of the methods provided for STL compatibility, this method is *not* thread safe. 
+    /** 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. */
     void reserve( size_type n ) {
         if( n )
@@ -442,26 +468,9 @@ public:
     //! Upper bound on argument to reserve.
     size_type max_size() const {return (~size_t(0))/sizeof(T);}
 
-    //------------------------------------------------------------------------
-    // STL support
-    //------------------------------------------------------------------------
-
-    typedef T value_type;
-    typedef ptrdiff_t difference_type;
-
-    iterator begin() {return iterator(*this,0);}
-    iterator end() {return iterator(*this,size());}
-    const_iterator begin() const {return const_iterator(*this,0);}
-    const_iterator end() const {return const_iterator(*this,size());}
-
-    reverse_iterator rbegin() {return reverse_iterator(end());}
-    reverse_iterator rend() {return reverse_iterator(begin());}
-    const_reverse_iterator rbegin() const {return const_reverse_iterator(end());}
-    const_reverse_iterator rend() const {return const_reverse_iterator(begin());}
-
     //! Not thread safe
     /** Does not change capacity. */
-    void clear() {internal_clear(&destroy_array,/*reclaim_storage=*/false);}       
+    void clear() {internal_clear(&destroy_array,/*reclaim_storage=*/false);}
 private:
     //! Get reference to element at given index.
     T& internal_subscript( size_type index ) const;
diff --git a/src/old/spin_rw_mutex_v2.cpp b/src/old/spin_rw_mutex_v2.cpp
index a2f2a0b..3c99b80 100644
--- a/src/old/spin_rw_mutex_v2.cpp
+++ b/src/old/spin_rw_mutex_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,17 +40,15 @@ static inline bool CAS(volatile uintptr_t &addr, uintptr_t newv, uintptr_t oldv)
 
 //! Signal that write lock is released
 void spin_rw_mutex::internal_itt_releasing(spin_rw_mutex *mutex) {
+    __TBB_ASSERT_EX(mutex, NULL); // To prevent compiler warnings
     ITT_NOTIFY(sync_releasing, mutex);
-#if !DO_ITT_NOTIFY
-    (void)mutex;
-#endif
 }
 
+//! Acquire write (exclusive) lock on the given mutex.
 bool spin_rw_mutex::internal_acquire_writer(spin_rw_mutex *mutex)
 {
     ITT_NOTIFY(sync_prepare, mutex);
-    atomic_backoff backoff;
-    for(;;) {
+    for( atomic_backoff backoff;;backoff.pause() ) {
         state_t s = mutex->state;
         if( !(s & BUSY) ) { // no readers, no writers
             if( CAS(mutex->state, WRITER, s) )
@@ -59,32 +57,29 @@ bool spin_rw_mutex::internal_acquire_writer(spin_rw_mutex *mutex)
         } else if( !(s & WRITER_PENDING) ) { // no pending writers
             __TBB_AtomicOR(&mutex->state, WRITER_PENDING);
         }
-        backoff.pause();
     }
     ITT_NOTIFY(sync_acquired, mutex);
     __TBB_ASSERT( (mutex->state & BUSY)==WRITER, "invalid state of a write lock" );
     return false;
 }
 
-//! Signal that write lock is released
+//! Release write lock on the given mutex
 void spin_rw_mutex::internal_release_writer(spin_rw_mutex *mutex) {
     __TBB_ASSERT( (mutex->state & BUSY)==WRITER, "invalid state of a write lock" );
     ITT_NOTIFY(sync_releasing, mutex);
     mutex->state = 0; 
 }
 
-//! Acquire lock on given mutex.
+//! Acquire read (shared) lock on the given mutex.
 void spin_rw_mutex::internal_acquire_reader(spin_rw_mutex *mutex) {
     ITT_NOTIFY(sync_prepare, mutex);
-    atomic_backoff backoff;
-    for(;;) {
+    for( atomic_backoff backoff;;backoff.pause() ) {
         state_t s = mutex->state;
         if( !(s & (WRITER|WRITER_PENDING)) ) { // no writer or write requests
             if( CAS(mutex->state, s+ONE_READER, s) )
                 break; // successfully stored increased number of readers
             backoff.reset(); // we could be very close to complete op.
         }
-        backoff.pause();
     }
     ITT_NOTIFY(sync_acquired, mutex);
     __TBB_ASSERT( mutex->state & READERS, "invalid state of a read lock: no readers" );
@@ -92,7 +87,7 @@ void spin_rw_mutex::internal_acquire_reader(spin_rw_mutex *mutex) {
 }
 
 //! Upgrade reader to become a writer.
-/** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+/** Returns whether the upgrade happened without releasing and re-acquiring the lock */
 bool spin_rw_mutex::internal_upgrade(spin_rw_mutex *mutex) {
     state_t s = mutex->state;
     __TBB_ASSERT( s & READERS, "invalid state before upgrade: no readers " );
@@ -103,13 +98,11 @@ bool spin_rw_mutex::internal_upgrade(spin_rw_mutex *mutex) {
     while( (s & READERS)==ONE_READER || !(s & WRITER_PENDING) ) {
         if( CAS(mutex->state, s | WRITER_PENDING, s) )
         {
-            atomic_backoff backoff;
             ITT_NOTIFY(sync_prepare, mutex);
-            while( (mutex->state & READERS) != ONE_READER ) // more than 1 reader
-                backoff.pause();
-            // the state should be 0...0110, i.e. 1 reader and waiting writer;
-            // both new readers and writers are blocked
+            for( atomic_backoff backoff; (mutex->state & READERS) != ONE_READER; )
+                backoff.pause(); // while more than 1 reader
             __TBB_ASSERT(mutex->state == (ONE_READER | WRITER_PENDING),"invalid state when upgrading to writer");
+            // both new readers and writers are blocked at this time
             mutex->state = WRITER;
             ITT_NOTIFY(sync_acquired, mutex);
             __TBB_ASSERT( (mutex->state & BUSY) == WRITER, "invalid state after upgrade" );
@@ -123,6 +116,7 @@ bool spin_rw_mutex::internal_upgrade(spin_rw_mutex *mutex) {
     return internal_acquire_writer(mutex); // always returns false
 }
 
+//! Downgrade writer to a reader
 void spin_rw_mutex::internal_downgrade(spin_rw_mutex *mutex) {
     __TBB_ASSERT( (mutex->state & BUSY) == WRITER, "invalid state before downgrade" );
     ITT_NOTIFY(sync_releasing, mutex);
@@ -131,6 +125,7 @@ void spin_rw_mutex::internal_downgrade(spin_rw_mutex *mutex) {
     __TBB_ASSERT( !(mutex->state & WRITER), "invalid state after downgrade: active writer" );
 }
 
+//! Release read lock on the given mutex
 void spin_rw_mutex::internal_release_reader(spin_rw_mutex *mutex)
 {
     __TBB_ASSERT( mutex->state & READERS, "invalid state of a read lock: no readers" );
@@ -139,10 +134,11 @@ void spin_rw_mutex::internal_release_reader(spin_rw_mutex *mutex)
     __TBB_FetchAndAddWrelease((volatile void *)&(mutex->state),-(intptr_t)ONE_READER);
 }
 
+//! Try to acquire write lock on the given mutex
 bool spin_rw_mutex::internal_try_acquire_writer( spin_rw_mutex * mutex )
 {
-// for a writer: only possible to acquire if no active readers or writers
-    state_t s = mutex->state; // on Itanium, this volatile load has acquire semantic
+    // for a writer: only possible to acquire if no active readers or writers
+    state_t s = mutex->state; // on IA-64, this volatile load has acquire semantic
     if( !(s & BUSY) ) // no readers, no writers; mask is 1..1101
         if( CAS(mutex->state, WRITER, s) ) {
             ITT_NOTIFY(sync_acquired, mutex);
@@ -151,10 +147,11 @@ bool spin_rw_mutex::internal_try_acquire_writer( spin_rw_mutex * mutex )
     return false;
 }
 
+//! Try to acquire read lock on the given mutex
 bool spin_rw_mutex::internal_try_acquire_reader( spin_rw_mutex * mutex )
 {
-// for a reader: acquire if no active or waiting writers
-    state_t s = mutex->state;    // on Itanium, a load of volatile variable has acquire semantic
+    // for a reader: acquire if no active or waiting writers
+    state_t s = mutex->state;    // on IA-64, a load of volatile variable has acquire semantic
     while( !(s & (WRITER|WRITER_PENDING)) ) // no writers
         if( CAS(mutex->state, s+ONE_READER, s) ) {
             ITT_NOTIFY(sync_acquired, mutex);
diff --git a/src/old/spin_rw_mutex_v2.h b/src/old/spin_rw_mutex_v2.h
index 8bab4ae..1bffe5e 100644
--- a/src/old/spin_rw_mutex_v2.h
+++ b/src/old/spin_rw_mutex_v2.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -44,8 +44,8 @@ class spin_rw_mutex {
     //! Internal acquire write lock.
     static bool __TBB_EXPORTED_FUNC internal_acquire_writer(spin_rw_mutex *);
 
-    //! Out of line code for releasing a write lock.  
-    /** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
+    //! Out of line code for releasing a write lock.
+    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
     static void __TBB_EXPORTED_FUNC internal_release_writer(spin_rw_mutex *);
 
     //! Internal acquire read lock.
@@ -54,8 +54,8 @@ class spin_rw_mutex {
     //! Internal upgrade reader to become a writer.
     static bool __TBB_EXPORTED_FUNC internal_upgrade(spin_rw_mutex *);
 
-    //! Out of line code for downgrading a writer to a reader.   
-    /** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
+    //! Out of line code for downgrading a writer to a reader.
+    /** This code has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
     static void __TBB_EXPORTED_FUNC internal_downgrade(spin_rw_mutex *);
 
     //! Internal release read lock.
@@ -82,14 +82,13 @@ public:
     //! The scoped locking pattern
     /** It helps to avoid the common problem of forgetting to release lock.
         It also nicely provides the "node" for queuing locks. */
-    class scoped_lock : private internal::no_copy {
+    class scoped_lock : internal::no_copy {
     public:
         //! Construct lock that has not acquired a mutex.
         /** Equivalent to zero-initialization of *this. */
         scoped_lock() : mutex(NULL) {}
 
-        //! Acquire lock on given mutex.
-        /** Upon entry, *this should not be in the "have acquired a mutex" state. */
+        //! Construct and acquire lock on given mutex.
         scoped_lock( spin_rw_mutex& m, bool write = true ) : mutex(NULL) {
             acquire(m, write);
         }
@@ -102,18 +101,18 @@ public:
         //! Acquire lock on given mutex.
         void acquire( spin_rw_mutex& m, bool write = true ) {
             __TBB_ASSERT( !mutex, "holding mutex already" );
-            is_writer = write; 
             mutex = &m;
+            is_writer = write;
             if( write ) internal_acquire_writer(mutex);
             else        internal_acquire_reader(mutex);
         }
 
         //! Upgrade reader to become a writer.
-        /** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+        /** Returns whether the upgrade happened without releasing and re-acquiring the lock */
         bool upgrade_to_writer() {
             __TBB_ASSERT( mutex, "lock is not acquired" );
             __TBB_ASSERT( !is_writer, "not a reader" );
-            is_writer = true; 
+            is_writer = true;
             return internal_upgrade(mutex);
         }
 
@@ -135,15 +134,14 @@ public:
 
         //! Downgrade writer to become a reader.
         bool downgrade_to_reader() {
-#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
             __TBB_ASSERT( mutex, "lock is not acquired" );
             __TBB_ASSERT( is_writer, "not a writer" );
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
             internal_downgrade(mutex);
 #else
             mutex->state = 4; // Bit 2 - reader, 00..00100
 #endif
             is_writer = false;
-
             return true;
         }
 
@@ -162,7 +160,7 @@ public:
         //! The pointer to the current mutex that is held, or NULL if no mutex is held.
         spin_rw_mutex* mutex;
 
-        //! True if holding a writer lock, false if holding a reader lock.
+        //! If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.
         /** Not defined if not holding a lock. */
         bool is_writer;
     };
@@ -180,6 +178,6 @@ private:
     volatile state_t state;
 };
 
-} // namespace ThreadingBuildingBlocks
+} // namespace tbb
 
 #endif /* __TBB_spin_rw_mutex_H */
diff --git a/src/old/task_v2.cpp b/src/old/task_v2.cpp
index 53c360a..96dd3d9 100644
--- a/src/old/task_v2.cpp
+++ b/src/old/task_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 b00a848..9dc24ae 100644
--- a/src/old/test_concurrent_queue_v2.cpp
+++ b/src/old/test_concurrent_queue_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -83,7 +83,7 @@ static tbb::atomic<long> PopKind[3];
 
 const int M = 10000;
 
-struct Body {
+struct Body: NoAssign {
     tbb::concurrent_queue<Foo>* queue;
     const int nthread;
     Body( int nthread_ ) : nthread(nthread_) {}
@@ -245,20 +245,20 @@ void TestIterator() {
     tbb::concurrent_queue<Foo> queue;
     tbb::concurrent_queue<Foo>& const_queue = queue;
     for( int j=0; j<500; ++j ) {
-        TestIteratorAux( queue.begin(), queue.end(), j );
+        TestIteratorAux(       queue.begin(),       queue.end(), j );
         TestIteratorAux( const_queue.begin(), const_queue.end(), j );
-        TestIteratorAux( const_queue.begin(), queue.end(), j );
-        TestIteratorAux( queue.begin(), const_queue.end(), j );
+        TestIteratorAux( const_queue.begin(),       queue.end(), j );
+        TestIteratorAux(       queue.begin(), const_queue.end(), j );
         Foo f;
         f.serial = j+1;
         queue.push(f);
     }
     TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( const_queue.begin() );
-    TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( queue.begin() );
-    TestIteratorAssignment<tbb::concurrent_queue<Foo>::iterator>( queue.begin() );
+    TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>(       queue.begin() );
+    TestIteratorAssignment<tbb::concurrent_queue<Foo>::      iterator>(       queue.begin() );
 }
 
-void TestConcurrenetQueueType() {
+void TestConcurrentQueueType() {
     AssertSameType( tbb::concurrent_queue<Foo>::value_type(), Foo() );
     Foo f;
     const Foo g;
@@ -301,7 +301,7 @@ void TestFullQueue() {
 }
 
 template<typename T>
-struct TestNegativeQueueBody {
+struct TestNegativeQueueBody: NoAssign {
     tbb::concurrent_queue<T>& queue;
     const int nthread;
     TestNegativeQueueBody( tbb::concurrent_queue<T>& q, int n ) : queue(q), nthread(n) {}
@@ -338,7 +338,7 @@ int TestMain () {
     TestEmptyQueue<char>();
     TestEmptyQueue<Foo>();
     TestFullQueue();
-    TestConcurrenetQueueType();
+    TestConcurrentQueueType();
     TestIterator();
 
     // Test concurrent operations
diff --git a/src/old/test_concurrent_vector_v2.cpp b/src/old/test_concurrent_vector_v2.cpp
index 319b09a..ad9c12a 100644
--- a/src/old/test_concurrent_vector_v2.cpp
+++ b/src/old/test_concurrent_vector_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -79,12 +79,12 @@ public:
         ASSERT( x.state==DefaultInitialized||x.state==CopyInitialized, NULL );
         ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );
         my_bar = x.my_bar;
-    } 
+    }
 };
 
 inline void NextSize( int& s ) {
     if( s<=32 ) ++s;
-    else s += s/10;     
+    else s += s/10;
 }
 
 static void CheckVector( const tbb::concurrent_vector<Foo>& cv, size_t expected_size, size_t old_size ) {
@@ -111,7 +111,7 @@ void TestResizeAndCopy() {
             ASSERT( count+new_size==FooCount, NULL );
             for( int j=0; j<new_size; ++j ) {
                 int expected = j<old_size ? j*j : Foo::initial_value_of_bar;
-                if( v[j].bar()!=expected ) 
+                if( v[j].bar()!=expected )
                     std::printf("ERROR on line %d for old_size=%ld new_size=%ld v[%ld].bar()=%d != %d\n",__LINE__,long(old_size),long(new_size),long(j),v[j].bar(), expected);
             }
             ASSERT( v.size()==size_t(new_size), NULL );
@@ -132,7 +132,7 @@ void TestResizeAndCopy() {
 void TestCapacity() {
     for( size_t old_size=0; old_size<=10000; old_size=(old_size<5 ? old_size+1 : 3*old_size) ) {
         for( size_t new_size=0; new_size<=10000; new_size=(new_size<5 ? new_size+1 : 3*new_size) ) {
-            long count = FooCount; 
+            long count = FooCount;
             {
                 typedef tbb::concurrent_vector<Foo> vector_t;
                 vector_t v;
@@ -149,7 +149,7 @@ void TestCapacity() {
             }
             ASSERT( FooCount==count, NULL );
         }
-    } 
+    }
 }
 
 struct AssignElement {
@@ -180,16 +180,17 @@ struct CheckElement {
 #include "tbb/parallel_for.h"
 #include "../test/harness.h"
 
+//! Test parallel access by iterators
 void TestParallelFor( int nthread ) {
     typedef tbb::concurrent_vector<int> vector_t;
     vector_t v;
-    v.grow_to_at_least(N);  
+    v.grow_to_at_least(N);
     tbb::tick_count t0 = tbb::tick_count::now();
     if( Verbose )
         std::printf("Calling parallel_for.h with %ld threads\n",long(nthread));
     tbb::parallel_for( v.range(10000), AssignElement(v.begin()) );
     tbb::tick_count t1 = tbb::tick_count::now();
-    const vector_t& u = v;      
+    const vector_t& u = v;
     tbb::parallel_for( u.range(10000), CheckElement(u.begin()) );
     tbb::tick_count t2 = tbb::tick_count::now();
     if( Verbose )
@@ -213,9 +214,9 @@ void TestIteratorAssignment( Iterator2 j ) {
 
 template<typename Iterator, typename T>
 void TestIteratorTraits() {
-    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) ); 
-    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) ); 
-    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) ); 
+    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) );
+    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) );
+    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) );
     AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::random_access_iterator_tag*>(0) );
     T x;
     typename Iterator::reference xr = x;
@@ -235,7 +236,7 @@ void CheckConstIterator( const Vector& u, int i, const Iterator& cp ) {
     ASSERT( u.begin()[i].bar()==i, NULL );
 }
 
-template<typename Iterator1, typename Iterator2, typename V> 
+template<typename Iterator1, typename Iterator2, typename V>
 void CheckIteratorComparison( V& u ) {
     Iterator1 i = u.begin();
     for( int i_count=0; i_count<100; ++i_count ) {
@@ -261,7 +262,7 @@ void TestSequentialFor() {
     V v;
     v.grow_by(N);
 
-    // Check iterator 
+    // Check iterator
     tbb::tick_count t0 = tbb::tick_count::now();
     typename V::iterator p = v.begin();
     ASSERT( !(*p).is_const(), NULL );
@@ -276,9 +277,9 @@ void TestSequentialFor() {
         ASSERT( -delta<=0, "difference type not signed?" );
     }
     tbb::tick_count t1 = tbb::tick_count::now();
-    
+
     // Check const_iterator going forwards
-    const V& u = v;     
+    const V& u = v;
     typename V::const_iterator cp = u.begin();
     ASSERT( (*cp).is_const(), NULL );
     ASSERT( cp->is_const(), NULL );
@@ -308,24 +309,24 @@ void TestSequentialFor() {
 
     // Now go forwards and backwards
     cp = u.begin();
-    ptrdiff_t j = 0;
+    ptrdiff_t k = 0;
     for( size_t i=0; i<u.size(); ++i ) {
-        CheckConstIterator(u,int(j),cp);
+        CheckConstIterator(u,int(k),cp);
         typename V::difference_type delta = i*3 % u.size();
-        if( 0<=j+delta && size_t(j+delta)<u.size() ) {
+        if( 0<=k+delta && size_t(k+delta)<u.size() ) {
             cp += delta;
-            j += delta; 
-        } 
+            k += delta;
+        }
         delta = i*7 % u.size();
-        if( 0<=j-delta && size_t(j-delta)<u.size() ) {
-            if( i&1 ) 
+        if( 0<=k-delta && size_t(k-delta)<u.size() ) {
+            if( i&1 )
                 cp -= delta;            // Test operator-=
             else
                 cp = cp - delta;        // Test operator-
-            j -= delta; 
-        } 
+            k -= delta;
+        }
     }
-    
+
     for( int i=0; size_t(i)<u.size(); i=(i<50?i+1:i*3) )
         for( int j=-i; size_t(i+j)<u.size(); j=(j<50?j+1:j*5) ) {
             ASSERT( (u.begin()+i)[j].bar()==i+j, NULL );
@@ -343,7 +344,7 @@ void TestSequentialFor() {
     TestIteratorAssignment<typename V::const_iterator>( v.begin() );
     TestIteratorAssignment<typename V::iterator>( v.begin() );
 
-    // Check reverse_iterator 
+    // Check reverse_iterator
     typename V::reverse_iterator rp = v.rbegin();
     for( size_t i=v.size(); i>0; --i, ++rp ) {
         typename V::reference pref = *rp;
@@ -351,8 +352,8 @@ void TestSequentialFor() {
         ASSERT( rp!=v.rend(), NULL );
     }
     ASSERT( rp==v.rend(), NULL );
-    
-    // Check const_reverse_iterator 
+
+    // Check const_reverse_iterator
     typename V::const_reverse_iterator crp = u.rbegin();
     for( size_t i=v.size(); i>0; --i, ++crp ) {
         typename V::const_reference cpref = *crp;
@@ -397,7 +398,7 @@ public:
     void operator()( const tbb::blocked_range<int>& range ) const {
         for( int i=range.begin(); i!=range.end(); ++i ) {
             if( i%3 ) {
-                Foo& element = my_vector[my_vector.grow_by(1)]; 
+                Foo& element = my_vector[my_vector.grow_by(1)];
                 element.bar() = i;
             } else {
                 Foo f;
@@ -457,7 +458,7 @@ void TestAssign() {
             for( int i=0; i<src_size; ++i )
                 ASSERT( v[i].bar()==(i*i), NULL );
         }
-    }    
+    }
 }
 
 //------------------------------------------------------------------------
@@ -475,7 +476,7 @@ static tbb::concurrent_vector<Number> Primes;
 class FindPrimes {
     bool is_prime( Number val ) const {
         int limit, factor = 3;
-        if( val<5u ) 
+        if( val<5u )
             return val==2;
         else {
             limit = long(sqrtf(float(val))+0.5f);
@@ -486,7 +487,7 @@ class FindPrimes {
     }
 public:
     void operator()( const tbb::blocked_range<Number>& r ) const {
-        for( Number i=r.begin(); i!=r.end(); ++i ) { 
+        for( Number i=r.begin(); i!=r.end(); ++i ) {
             if( i%2 && is_prime(i) ) {
                 Primes[Primes.grow_by(1)] = i;
             }
@@ -507,10 +508,10 @@ static void TestFindPrimes() {
     // Time fully subscribed run.
     double t2 = TimeFindPrimes( tbb::task_scheduler_init::automatic );
 
-    // Time parallel run that is very likely oversubscribed.  
+    // Time parallel run that is very likely oversubscribed.
     double t128 = TimeFindPrimes(128);
 
-    if( Verbose ) 
+    if( Verbose )
         std::printf("TestFindPrimes: t2==%g t128=%g\n", t2, t128 );
 
     // We allow the 128-thread run a little extra time to allow for thread overhead.
@@ -519,7 +520,7 @@ static void TestFindPrimes() {
     // and the generalization to fix the issue is not worth the trouble.
     if( t128>1.10*t2 ) {
         std::printf("Warning: grow_by is pathetically slow: t2==%g t128=%g\n", t2, t128);
-    } 
+    }
 }
 
 //------------------------------------------------------------------------
diff --git a/src/old/test_mutex_v2.cpp b/src/old/test_mutex_v2.cpp
index b84f1ee..24fb32b 100644
--- a/src/old/test_mutex_v2.cpp
+++ b/src/old/test_mutex_v2.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -44,12 +44,6 @@
 #include <cstdlib>
 #include <cstdio>
 
-#if __linux__
-#define STD std
-#else
-#define STD   /* Cater to broken Windows compilers that are missing "std". */
-#endif /* __linux__ */
-
 // This test deliberately avoids a "using tbb" statement,
 // so that the error of putting types in the wrong namespace will be caught.
 
@@ -62,7 +56,7 @@ struct Counter {
 
 //! Function object for use with parallel_for.h.
 template<typename C>
-struct AddOne {
+struct AddOne: NoAssign {
     C& counter;
     /** Increments counter once for each iteration in the iteration space. */
     void operator()( tbb::blocked_range<size_t>& range ) const {
@@ -95,12 +89,12 @@ void Test( const char * name ) {
     counter.value = 0;
     const int n = 100000;
     tbb::tick_count t0 = tbb::tick_count::now();
-    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10000),AddOne<Counter<M> >(counter));
+    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,n/10),AddOne<Counter<M> >(counter));
     tbb::tick_count t1 = tbb::tick_count::now();
     if( Verbose )
         printf("%g usec\n",(t1-t0).seconds());
     if( counter.value!=n )
-        STD::printf("ERROR for %s: counter.value=%ld\n",name,counter.value);
+        printf("ERROR for %s: counter.value=%ld\n",name,counter.value);
 }
 
 template<typename M, size_t N>
@@ -113,7 +107,7 @@ struct Invariant {
     Invariant( const char* mutex_name_ ) :
         mutex_name(mutex_name_)
     {
-    single_value = 0;
+        single_value = 0;
         for( size_t k=0; k<N; ++k )
             value[k] = 0;
     }
@@ -124,10 +118,8 @@ struct Invariant {
     bool value_is( long expected_value ) const {
         long tmp;
         for( size_t k=0; k<N; ++k )
-//            if( value[k]!=expected_value )
-//                return false;
             if( (tmp=value[k])!=expected_value ) {
-                printf("ATTN! %ld!=%ld\n", tmp, expected_value);
+                printf("ERROR: %ld!=%ld\n", tmp, expected_value);
                 return false;
             }
         return true;
@@ -139,72 +131,60 @@ struct Invariant {
 
 //! Function object for use with parallel_for.h.
 template<typename I>
-struct TwiddleInvariant {
+struct TwiddleInvariant: NoAssign {
     I& invariant;
+    TwiddleInvariant( I& invariant_ ) : invariant(invariant_) {}
+
     /** Increments counter once for each iteration in the iteration space. */
     void operator()( tbb::blocked_range<size_t>& range ) const {
         for( size_t i=range.begin(); i!=range.end(); ++i ) {
             //! Every 8th access is a write access
-            bool write = (i%8)==7;
+            const bool write = (i%8)==7;
             bool okay = true;
             bool lock_kept = true;
             if( (i/8)&1 ) {
                 // Try implicit acquire and explicit release
                 typename I::mutex_type::scoped_lock lock(invariant.mutex,write);
-                if( write ) {
-                    long my_value = invariant.value[0];
-                    invariant.update();
-                    if( i%16==7 ) {
-                        lock_kept = lock.downgrade_to_reader();
-                        if( !lock_kept )
-                            my_value = invariant.value[0] - 1;
-                        okay = invariant.value_is(my_value+1);
-                    }
-                } else {
-                    okay = invariant.is_okay();
-                    if( i%8==3 ) {
-                        long my_value = invariant.value[0];
-                        lock_kept = lock.upgrade_to_writer();
-                        if( !lock_kept )
-                            my_value = invariant.value[0];
-                        invariant.update();
-                        okay = invariant.value_is(my_value+1);
-                    }
-                }
+                execute_aux(lock, i, write, okay, lock_kept);
                 lock.release();
             } else {
                 // Try explicit acquire and implicit release
                 typename I::mutex_type::scoped_lock lock;
                 lock.acquire(invariant.mutex,write);
-                if( write ) {
-                    long my_value = invariant.value[0];
-                    invariant.update();
-                    if( i%16==7 ) {
-                        lock_kept = lock.downgrade_to_reader();
-                        if( !lock_kept )
-                            my_value = invariant.value[0] - 1;
-                        okay = invariant.value_is(my_value+1);
-                    }
-                } else {
-                    okay = invariant.is_okay();
-                    if( i%8==3 ) {
-                        long my_value = invariant.value[0];
-                        lock_kept = lock.upgrade_to_writer();
-                        if( !lock_kept )
-                            my_value = invariant.value[0];
-                        invariant.update();
-                        okay = invariant.value_is(my_value+1);
-                    }
-                }
+                execute_aux(lock, i, write, okay, lock_kept);
             }
             if( !okay ) {
-                STD::printf( "ERROR for %s at %ld: %s %s %s %s\n",invariant.mutex_name, long(i),
-                             write?"write,":"read,", write?(i%16==7?"downgrade,":""):(i%8==3?"upgrade,":""),
-                             lock_kept?"lock kept,":"lock not kept,", (i/8)&1?"imp/exp":"exp/imp" );
+                printf( "ERROR for %s at %ld: %s %s %s %s\n",invariant.mutex_name, long(i),
+                        write     ? "write,"                  : "read,",
+                        write     ? (i%16==7?"downgrade,":"") : (i%8==3?"upgrade,":""),
+                        lock_kept ? "lock kept,"              : "lock not kept,", // TODO: only if downgrade/upgrade
+                        (i/8)&1   ? "impl/expl"               : "expl/impl" );
+            }
+        }
+    }
+private:
+    void execute_aux(typename I::mutex_type::scoped_lock & lock, const size_t i, const bool write, bool & okay, bool & lock_kept) const {
+        if( write ) {
+            long my_value = invariant.value[0];
+            invariant.update();
+            if( i%16==7 ) {
+                lock_kept = lock.downgrade_to_reader();
+                if( !lock_kept )
+                    my_value = invariant.value[0] - 1;
+                okay = invariant.value_is(my_value+1);
+            }
+        } else {
+            okay = invariant.is_okay();
+            if( i%8==3 ) {
+                long my_value = invariant.value[0];
+                lock_kept = lock.upgrade_to_writer();
+                if( !lock_kept )
+                    my_value = invariant.value[0];
+                invariant.update();
+                okay = invariant.value_is(my_value+1);
             }
         }
     }
-    TwiddleInvariant( I& invariant_ ) : invariant(invariant_) {}
 };
 
 /** This test is generic so that we can test any other kinds of ReaderWriter locks we write later. */
@@ -217,14 +197,14 @@ void TestReaderWriterLock( const char * mutex_name ) {
     Invariant<M,8> invariant(mutex_name);
     const size_t n = 500000;
     tbb::tick_count t0 = tbb::tick_count::now();
-    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,5000),TwiddleInvariant<Invariant<M,8> >(invariant));
+    tbb::parallel_for(tbb::blocked_range<size_t>(0,n,n/100),TwiddleInvariant<Invariant<M,8> >(invariant));
     tbb::tick_count t1 = tbb::tick_count::now();
     // There is either a writer or a reader upgraded to a writer for each 4th iteration
     long expected_value = n/4;
     if( !invariant.value_is(expected_value) )
-        STD::printf("ERROR for %s: final invariant value is wrong\n",mutex_name);
+        printf("ERROR for %s: final invariant value is wrong\n",mutex_name);
     if( Verbose )
-        printf("%g usec\n",(t1-t0).seconds());
+        printf("%g usec\n", (t1-t0).seconds());
 }
 
 /** Test try_acquire functionality of a non-reenterable mutex */
@@ -235,16 +215,16 @@ void TestTryAcquire_OneThread( const char * mutex_name ) {
     if( lock1.try_acquire(tested_mutex) )
         lock1.release();
     else
-        STD::printf("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
+        printf("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
     {
         typename M::scoped_lock lock2(tested_mutex);
         if( lock1.try_acquire(tested_mutex) )
-            STD::printf("ERROR for %s: try_acquire succeeded though it should not\n", mutex_name);
+            printf("ERROR for %s: try_acquire succeeded though it should not\n", mutex_name);
     }
     if( lock1.try_acquire(tested_mutex) )
         lock1.release();
     else
-        STD::printf("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
+        printf("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
 }
 
 #include "tbb/task_scheduler_init.h"
@@ -254,10 +234,10 @@ int TestMain () {
         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 ) {
+        const int n = 3;
+        // Run each test several times.
+        for( int i=0; i<n; ++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" );
         }
diff --git a/src/perf/coarse_grained_raii_lru_cache.h b/src/perf/coarse_grained_raii_lru_cache.h
new file mode 100644
index 0000000..b087d94
--- /dev/null
+++ b/src/perf/coarse_grained_raii_lru_cache.h
@@ -0,0 +1,153 @@
+/*
+    Copyright 2005-2012 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 coarse_grained_raii_lru_cache_H
+#define coarse_grained_raii_lru_cache_H
+
+#include <map>
+#include <list>
+
+#include "tbb/spin_mutex.h"
+#include "tbb/tbb_stddef.h"
+template <typename key_type, typename value_type, typename value_functor_type = value_type (*)(key_type) >
+class coarse_grained_raii_lru_cache : tbb::internal::no_assign{
+    typedef value_functor_type value_function_type;
+
+    typedef std::size_t ref_counter_type;
+    struct map_value_type;
+    typedef std::map<key_type, map_value_type> map_storage_type;
+    typedef std::list<typename map_storage_type::iterator> lru_list_type;
+    struct map_value_type {
+        value_type my_value;
+        ref_counter_type my_ref_counter;
+        typename lru_list_type::iterator my_lru_list_iterator;
+        bool my_is_ready;
+
+        map_value_type (value_type const& a_value,  ref_counter_type a_ref_counter,    typename lru_list_type::iterator a_lru_list_iterator, bool a_is_ready)
+            : my_value(a_value), my_ref_counter(a_ref_counter), my_lru_list_iterator (a_lru_list_iterator)
+            ,my_is_ready(a_is_ready)
+        {}
+    };
+
+    class handle_object;
+public:
+    typedef handle_object handle;
+
+    coarse_grained_raii_lru_cache(value_function_type f, std::size_t number_of_lru_history_items): my_value_function(f),my_number_of_lru_history_items(number_of_lru_history_items){}
+    handle_object operator[](key_type k){
+        tbb::spin_mutex::scoped_lock lock(my_mutex);
+        bool is_new_value_needed = false;
+        typename map_storage_type::iterator it = my_map_storage.find(k);
+        if (it == my_map_storage.end()){
+            it = my_map_storage.insert(it,std::make_pair(k,map_value_type(value_type(),0,my_lru_list.end(),false)));
+            is_new_value_needed = true;
+        }else {
+            typename lru_list_type::iterator list_it = it->second.my_lru_list_iterator;
+            if (list_it!=my_lru_list.end()) {
+                my_lru_list.erase(list_it);
+                it->second.my_lru_list_iterator= my_lru_list.end();
+            }
+        }
+        typename map_storage_type::reference value_ref = *it;
+        //increase ref count
+        ++(value_ref.second.my_ref_counter);
+        if (is_new_value_needed){
+            lock.release();
+            value_ref.second.my_value = my_value_function(k);
+            __TBB_store_with_release(value_ref.second.my_is_ready, true);
+
+        }else{
+            if (!value_ref.second.my_is_ready){
+                lock.release();
+                tbb::internal::spin_wait_while_eq(value_ref.second.my_is_ready,false);
+            }
+        }
+        return handle_object(*this,(value_ref));
+    }
+private:
+    void signal_end_of_usage(typename map_storage_type::reference value_ref){
+        tbb::spin_mutex::scoped_lock lock(my_mutex);
+        typename map_storage_type::iterator it = my_map_storage.find(value_ref.first);
+        __TBB_ASSERT(it!=my_map_storage.end(),"cache should not return past-end iterators to outer world");
+        __TBB_ASSERT(&(*it) == &value_ref,"dangling reference has been returned to outside world? data race ?");
+        __TBB_ASSERT( my_lru_list.end()== std::find(my_lru_list.begin(),my_lru_list.end(),it),
+                "object in use should not be in list of unused objects ");
+        if (! --(it->second.my_ref_counter)){ //decrease ref count, and check if it was the last reference
+            if (my_lru_list.size()>=my_number_of_lru_history_items){
+                size_t number_of_elements_to_evict = 1 + my_lru_list.size() - my_number_of_lru_history_items;
+                for (size_t i=0; i<number_of_elements_to_evict; ++i){
+                    typename map_storage_type::iterator it_to_evict = my_lru_list.back();
+                    my_lru_list.pop_back();
+                    my_map_storage.erase(it_to_evict);
+                }
+            }
+            my_lru_list.push_front(it);
+            it->second.my_lru_list_iterator = my_lru_list.begin();
+        }
+    }
+private:
+    value_function_type my_value_function;
+    std::size_t const my_number_of_lru_history_items;
+    map_storage_type my_map_storage;
+    lru_list_type my_lru_list;
+    tbb::spin_mutex my_mutex;
+private:
+    struct handle_move_t:tbb::internal::no_assign{
+        coarse_grained_raii_lru_cache & my_cache_ref;
+        typename map_storage_type::reference my_value_ref;
+        handle_move_t(coarse_grained_raii_lru_cache & cache_ref, typename map_storage_type::reference value_ref):my_cache_ref(cache_ref),my_value_ref(value_ref) {};
+    };
+    class handle_object {
+        coarse_grained_raii_lru_cache * my_cache_pointer;
+        typename map_storage_type::reference my_value_ref;
+    public:
+        handle_object(coarse_grained_raii_lru_cache & cache_ref, typename map_storage_type::reference value_ref):my_cache_pointer(&cache_ref), my_value_ref(value_ref) {}
+        handle_object(handle_move_t m):my_cache_pointer(&m.my_cache_ref), my_value_ref(m.my_value_ref){}
+        operator handle_move_t(){ return move(*this);}
+        value_type& value(){return my_value_ref.second.my_value;}
+        ~handle_object(){
+            if (my_cache_pointer){
+                my_cache_pointer->signal_end_of_usage(my_value_ref);
+            }
+        }
+    private:
+        friend handle_move_t move(handle_object& h){
+            return handle_object::move(h);
+        }
+        static handle_move_t move(handle_object& h){
+            __TBB_ASSERT(h.my_cache_pointer,"move from the same object twice ?");
+            coarse_grained_raii_lru_cache * cache_pointer = NULL;
+            std::swap(cache_pointer,h.my_cache_pointer);
+            return handle_move_t(*cache_pointer,h.my_value_ref);
+        }
+    private:
+        void operator=(handle_object&);
+        handle_object(handle_object &);
+    };
+};
+#endif //coarse_grained_raii_lru_cache_H
diff --git a/src/perf/fibonacci_cutoff.cpp b/src/perf/fibonacci_cutoff.cpp
index 20cbff2..0da712f 100644
--- a/src/perf/fibonacci_cutoff.cpp
+++ b/src/perf/fibonacci_cutoff.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 569f0eb..c33471a 100644
--- a/src/perf/fibonacci_impl_tbb.cpp
+++ b/src/perf/fibonacci_impl_tbb.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/perf.cpp b/src/perf/perf.cpp
index d72572d..7b3fe8e 100644
--- a/src/perf/perf.cpp
+++ b/src/perf/perf.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -759,11 +759,14 @@ inline bool __TBB_bool( bool b ) { return b; }
 
     void Report ( char const* fmt, ... ) {
         va_list args;
-        va_start( args, fmt );
-        if ( ResFile )
+        if ( ResFile ) {
+            va_start( args, fmt );
             vfprintf( ResFile, fmt, args );
+            va_end( args );
+        }
         va_start( args, fmt );
         vprintf( fmt, args );
+        va_end( args );
     }
 
     void PrintResults () {
diff --git a/src/perf/perf.h b/src/perf/perf.h
index 42ff1d1..0403fd5 100644
--- a/src/perf/perf.h
+++ b/src/perf/perf.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/perf_sched.cpp b/src/perf/perf_sched.cpp
index 489f558..fa64ef4 100644
--- a/src/perf/perf_sched.cpp
+++ b/src/perf/perf_sched.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/run_statistics.sh b/src/perf/run_statistics.sh
index a1f7463..183efdd 100644
--- a/src/perf/run_statistics.sh
+++ b/src/perf/run_statistics.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+# Copyright 2005-2012 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 3d8bc36..cf73533 100644
--- a/src/perf/statistics.cpp
+++ b/src/perf/statistics.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 c4d96ae..aec3e93 100644
--- a/src/perf/statistics.h
+++ b/src/perf/statistics.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -181,7 +181,12 @@ private:
 };
 
 //! using: Func(const char *fmt, ...) { vargf2buff(buff, 128, fmt);...
-#define vargf2buff(name, size, fmt) char name[size]; memset(name, 0, size); va_list args; va_start(args, fmt); vsnprintf( name, size-1, fmt, args)
+#define vargf2buff(name, size, fmt) \ 
+    char name[size]; memset(name, 0, size); \
+    va_list args; va_start(args, fmt); \
+    vsnprintf(name, size-1, fmt, args); \
+    va_end(args);
+
 
 inline std::string Format(const char *fmt, ...) {
     vargf2buff(buf, 1024, fmt); // from statistics.h
diff --git a/src/perf/statistics_xml.h b/src/perf/statistics_xml.h
index b050ab3..c3aed3c 100644
--- a/src/perf/statistics_xml.h
+++ b/src/perf/statistics_xml.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 3e61ac5..ffcde42 100644
--- a/src/perf/time_framework.h
+++ b/src/perf/time_framework.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 9b86ed1..a3ee3c5 100644
--- a/src/perf/time_hash_map.cpp
+++ b/src/perf/time_hash_map.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 3d3996f..0c27b24 100644
--- a/src/perf/time_hash_map_fill.cpp
+++ b/src/perf/time_hash_map_fill.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/time_hash_map_fill.html b/src/perf/time_hash_map_fill.html
index 2f36d1e..5d62c3a 100644
--- a/src/perf/time_hash_map_fill.html
+++ b/src/perf/time_hash_map_fill.html
@@ -110,7 +110,7 @@ In addition, a size of the source array correlates with input rates in order to
 <HR>
 <A HREF="../index.html">Up to parent directory</A>
 <p></p>
-Copyright © 2005-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/perf/time_locked_work.cpp b/src/perf/time_locked_work.cpp
index 4c21ccf..30255f5 100644
--- a/src/perf/time_locked_work.cpp
+++ b/src/perf/time_locked_work.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/perf/time_lru_cache_throughput.cpp b/src/perf/time_lru_cache_throughput.cpp
new file mode 100644
index 0000000..63e04f2
--- /dev/null
+++ b/src/perf/time_lru_cache_throughput.cpp
@@ -0,0 +1,224 @@
+/*
+    Copyright 2005-2012 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 "../examples/common/utility/utility.h"
+#include "tbb/tick_count.h"
+//#include <tbb/parallel_for.h>
+#include "tbb/task_scheduler_init.h" //for number of threads
+#include <functional>
+
+#include "coarse_grained_raii_lru_cache.h"
+#define TBB_PREVIEW_CONCURRENT_LRU_CACHE 1
+#include "tbb/concurrent_lru_cache.h"
+
+#define HARNESS_CUSTOM_MAIN 1
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+
+#include "../src/test/harness.h"
+#include "../src/test/harness_barrier.h"
+
+#include <vector>
+#include <algorithm>
+#include "tbb/mutex.h"
+
+//TODO: probably move this to separate header utlity file
+namespace micro_benchmarking{
+namespace utils{
+    template <typename type>
+    void disable_elimination(type const& v){
+        volatile type dummy = v;
+        (void) dummy;
+    }
+    //Busy work and calibration helpers
+    unsigned int one_us_iters = 345; // default value
+
+    //TODO: add a CLI parameter for calibration run
+    // if user wants to calibrate to microseconds on particular machine, call
+    // this at beginning of program; sets one_us_iters to number of iters to
+    // busy_wait for approx. 1 us
+    void calibrate_busy_wait() {
+        tbb::tick_count t0 = tbb::tick_count::now();
+        for (volatile unsigned int i=0; i<1000000; ++i) continue;
+        tbb::tick_count t1 = tbb::tick_count::now();
+
+        one_us_iters = (unsigned int)((1000000.0/(t1-t0).seconds())*0.000001);
+    }
+
+    void busy_wait(int us)
+    {
+        unsigned int iter = us*one_us_iters;
+        for (volatile unsigned int i=0; i<iter; ++i) continue;
+    }
+}
+}
+
+struct parameter_pack{
+    size_t time_window_sec;
+    size_t time_check_granularity_ops;
+    size_t cache_lru_history_size;
+    size_t time_of_item_use_usec;
+    size_t cache_miss_percent;
+    int threads_number;
+    size_t weight_of_initiation_call_usec;
+    bool use_serial_initiation_function;
+    parameter_pack(
+            size_t a_time_window_sec
+            ,size_t a_time_check_granularity_ops
+            ,size_t a_cache_lru_history_size
+            ,size_t a_time_of_item_use_usec, size_t a_cache_miss_percent
+            , int a_threads_number ,size_t a_weight_of_initiation_call_usec
+            , bool a_use_serial_initiation_function
+    )   :
+        time_window_sec(a_time_window_sec)
+        ,time_check_granularity_ops(a_time_check_granularity_ops)
+        ,cache_lru_history_size(a_cache_lru_history_size)
+        ,time_of_item_use_usec(a_time_of_item_use_usec)
+        ,cache_miss_percent(a_cache_miss_percent)
+        ,threads_number(a_threads_number)
+        ,weight_of_initiation_call_usec(a_weight_of_initiation_call_usec)
+        ,use_serial_initiation_function(a_use_serial_initiation_function)
+    {}
+};
+
+struct return_size_t {
+    size_t m_weight_of_initiation_call_usec;
+    bool use_serial_initiation_function;
+    return_size_t(size_t a_weight_of_initiation_call_usec, bool a_use_serial_initiation_function)
+        :m_weight_of_initiation_call_usec(a_weight_of_initiation_call_usec), use_serial_initiation_function(a_use_serial_initiation_function)
+    {}
+    size_t operator()(size_t key){
+        static tbb::mutex mtx;
+        if (use_serial_initiation_function){
+            mtx.lock();
+        }
+        micro_benchmarking::utils::busy_wait(m_weight_of_initiation_call_usec);
+        if (use_serial_initiation_function){
+            mtx.unlock();
+        }
+
+        return key;
+    }
+};
+
+template< typename a_cache_type>
+struct throughput {
+    typedef throughput self_type;
+    typedef a_cache_type cache_type;
+
+    parameter_pack m_parameter_pack;
+
+
+    const size_t per_thread_sample_size ;
+    typedef std::vector<size_t> access_sequence_type;
+    access_sequence_type m_access_sequence;
+    cache_type m_cache;
+    Harness::SpinBarrier m_barrier;
+    tbb::atomic<size_t> loops_count;
+
+    throughput(parameter_pack a_parameter_pack)
+        :m_parameter_pack(a_parameter_pack)
+        ,per_thread_sample_size(m_parameter_pack.cache_lru_history_size *(1 +  m_parameter_pack.cache_miss_percent/100))
+        ,m_access_sequence(m_parameter_pack.threads_number * per_thread_sample_size )
+        ,m_cache(return_size_t(m_parameter_pack.weight_of_initiation_call_usec,m_parameter_pack.use_serial_initiation_function),m_parameter_pack.cache_lru_history_size)
+
+    {
+        loops_count=0;
+        //TODO: check if changing from generating longer sequence to generating indexes in a specified range (i.e. making per_thread_sample_size fixed) give any change
+        std::generate(m_access_sequence.begin(),m_access_sequence.end(),std::rand);
+    }
+
+    size_t operator()(){
+        struct _{ static void  retrieve_from_cache(self_type* _this, size_t thread_index){
+            parameter_pack& p = _this->m_parameter_pack;
+            access_sequence_type::iterator const begin_it =_this->m_access_sequence.begin()+ thread_index * _this->per_thread_sample_size;
+            access_sequence_type::iterator const end_it = begin_it +  _this->per_thread_sample_size;
+
+            _this->m_barrier.wait();
+            tbb::tick_count start = tbb::tick_count::now();
+
+            size_t local_loops_count =0;
+            do {
+                size_t part_of_the_sample_so_far = (local_loops_count * p.time_check_granularity_ops) % _this->per_thread_sample_size;
+                access_sequence_type::iterator const iteration_begin_it = begin_it + part_of_the_sample_so_far;
+                access_sequence_type::iterator const iteration_end_it = iteration_begin_it +
+                        (std::min)(p.time_check_granularity_ops, _this->per_thread_sample_size - part_of_the_sample_so_far);
+
+                for (access_sequence_type::iterator it = iteration_begin_it; it < iteration_end_it; ++it){
+                    typename cache_type::handle h = _this->m_cache(*it);
+                    micro_benchmarking::utils::busy_wait(p.time_of_item_use_usec);
+                    micro_benchmarking::utils::disable_elimination(h.value());
+                }
+                ++local_loops_count;
+            }while((tbb::tick_count::now()-start).seconds() < p.time_window_sec);
+            _this->loops_count+=local_loops_count;
+        }};
+        m_barrier.initialize(m_parameter_pack.threads_number);
+
+        NativeParallelFor(m_parameter_pack.threads_number,std::bind1st(std::ptr_fun(&_::retrieve_from_cache),this));
+
+        return loops_count * m_parameter_pack.time_check_granularity_ops;
+    }
+};
+
+int main(int argc,const char** args ){
+
+    size_t time_window_sec = 10;
+    size_t cache_lru_history_size = 1000;
+    size_t time_check_granularity_ops = 200;
+    size_t time_of_item_use_usec = 100;
+    size_t cache_miss_percent = 5;
+    int threads_number =tbb::task_scheduler_init::default_num_threads();
+    size_t weight_of_initiation_call_usec =1000;
+    bool use_serial_initiation_function = false;
+    bool use_coarse_grained_locked_cache = false;
+
+    parameter_pack p(time_window_sec, time_check_granularity_ops, cache_lru_history_size,time_of_item_use_usec,cache_miss_percent,threads_number,weight_of_initiation_call_usec,use_serial_initiation_function);
+
+    utility::parse_cli_arguments(argc,args,utility::cli_argument_pack()
+            .arg(p.cache_lru_history_size,"cache-lru-history-size","")
+            .arg(p.time_window_sec,"time-window","time frame for measuring, in seconds")
+            .arg(p.threads_number,"n-of-threads","number of threads to run on")
+            .arg(p.time_of_item_use_usec,"time-of-item-use","time between  consequent requests to the cache, in microseconds")
+            .arg(p.cache_miss_percent,"cache-miss-percent","cache miss percent ")
+            .arg(p.weight_of_initiation_call_usec,"initiation-call-weight","time occupied by a single call to initiation function, in microseconds")
+            .arg(p.use_serial_initiation_function,"use-serial-initiation-function","limit lock-based serial initiation function")
+            .arg(use_coarse_grained_locked_cache,"use-locked-version","use stl coarse grained lock based version")
+            );
+
+    typedef tbb::concurrent_lru_cache<size_t,size_t,return_size_t> tbb_cache;
+    typedef coarse_grained_raii_lru_cache<size_t,size_t,return_size_t> coarse_grained_locked_cache;
+
+    size_t operations =0;
+    if (!use_coarse_grained_locked_cache){
+        operations = throughput<tbb_cache>(p)();
+    }else{
+        operations = throughput<coarse_grained_locked_cache>(p)();
+    }
+    std::cout<<"operations: "<<operations<<std::endl;
+    return 0;
+}
diff --git a/src/perf/time_sandbox.h b/src/perf/time_sandbox.h
index 28f07d8..76cf975 100644
--- a/src/perf/time_sandbox.h
+++ b/src/perf/time_sandbox.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 adeb275..951c0c0 100644
--- a/src/perf/time_vector.cpp
+++ b/src/perf/time_vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 4807347..c013c8f 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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/rml/client/library_assert.h b/src/rml/client/library_assert.h
index c640028..9b8cd50 100644
--- a/src/rml/client/library_assert.h
+++ b/src/rml/client/library_assert.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 a46e524..d38b230 100644
--- a/src/rml/client/omp_dynamic_link.cpp
+++ b/src/rml/client/omp_dynamic_link.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 0bcdcd1..d3cfd61 100644
--- a/src/rml/client/omp_dynamic_link.h
+++ b/src/rml/client/omp_dynamic_link.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 e012675..3af8447 100644
--- a/src/rml/client/rml_factory.h
+++ b/src/rml/client/rml_factory.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/client/rml_omp.cpp b/src/rml/client/rml_omp.cpp
index 0648fa4..7f961d4 100644
--- a/src/rml/client/rml_omp.cpp
+++ b/src/rml/client/rml_omp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 2ac8a84..b2d8a4d 100644
--- a/src/rml/client/rml_tbb.cpp
+++ b/src/rml/client/rml_tbb.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 3de3a77..b377757 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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/rml/include/rml_base.h b/src/rml/include/rml_base.h
index ceb66d9..6f32b7d 100644
--- a/src/rml/include/rml_base.h
+++ b/src/rml/include/rml_base.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 bc6b74f..ad17a0d 100644
--- a/src/rml/include/rml_omp.h
+++ b/src/rml/include/rml_omp.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 be9598e..af8fafd 100644
--- a/src/rml/include/rml_tbb.h
+++ b/src/rml/include/rml_tbb.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 8a3f350..8527d21 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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/rml/perfor/omp_nested.cpp b/src/rml/perfor/omp_nested.cpp
index bfed45e..0844cb4 100644
--- a/src/rml/perfor/omp_nested.cpp
+++ b/src/rml/perfor/omp_nested.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/perfor/omp_simple.cpp b/src/rml/perfor/omp_simple.cpp
index efba5bb..14215b6 100644
--- a/src/rml/perfor/omp_simple.cpp
+++ b/src/rml/perfor/omp_simple.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/perfor/tbb_multi_omp.cpp b/src/rml/perfor/tbb_multi_omp.cpp
index 4b8522c..97a6404 100644
--- a/src/rml/perfor/tbb_multi_omp.cpp
+++ b/src/rml/perfor/tbb_multi_omp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/perfor/tbb_simple.cpp b/src/rml/perfor/tbb_simple.cpp
index 3beb204..e63831f 100644
--- a/src/rml/perfor/tbb_simple.cpp
+++ b/src/rml/perfor/tbb_simple.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/perfor/thread_level.h b/src/rml/perfor/thread_level.h
index 7f949f1..9c323da 100644
--- a/src/rml/perfor/thread_level.h
+++ b/src/rml/perfor/thread_level.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/server/index.html b/src/rml/server/index.html
index 27ea108..4107716 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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/rml/server/irml.rc b/src/rml/server/irml.rc
index 80b711c..1ed76ba 100644
--- a/src/rml/server/irml.rc
+++ b/src/rml/server/irml.rc
@@ -1,4 +1,4 @@
-// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
@@ -90,7 +90,7 @@ BEGIN
             VALUE "FileDescription", "Threading Building Blocks resource manager library\0"
             VALUE "FileVersion", TBB_VERSION "\0"
 //what is it?            VALUE "InternalName", "irml\0"
-            VALUE "LegalCopyright", "Copyright 2005-2011 Intel Corporation.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright 2005-2012 Intel Corporation.  All Rights Reserved.\0"
             VALUE "LegalTrademarks", "\0"
 #ifndef TBB_USE_DEBUG
             VALUE "OriginalFilename", "irml.dll\0"
diff --git a/src/rml/server/job_automaton.h b/src/rml/server/job_automaton.h
index 5114e7f..8720cbe 100644
--- a/src/rml/server/job_automaton.h
+++ b/src/rml/server/job_automaton.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 012116b..780c18c 100644
--- a/src/rml/server/lin-rml-export.def
+++ b/src/rml/server/lin-rml-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 451698f..7a0fd63 100644
--- a/src/rml/server/rml_server.cpp
+++ b/src/rml/server/rml_server.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -38,7 +38,7 @@
 #include "tbb/spin_mutex.h"
 #include "tbb/tbb_misc.h"           // Get AvailableHwConcurrency() from here.
 #if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
-// VS2008/VC9 seems to have an issue; 
+// VS2008/VC9 seems to have an issue;
 #pragma warning( push )
 #pragma warning( disable: 4985 )
 #endif
@@ -92,11 +92,11 @@ class omp_connection_v2;
 //! State of a server_thread
 /** Below are diagrams of legal state transitions.
 
-                          ts_busy         
+                          ts_busy
                           ^      ^
                          /        \
                         /          V
-    ts_done <----- ts_asleep <------> ts_idle 
+    ts_done <----- ts_asleep <------> ts_idle
 */
 
 enum thread_state_t {
@@ -126,11 +126,11 @@ enum thread_grab_t {
 /** Below are diagrams of legal state transitions.
 
     OMP
-              ts_omp_busy               
-              ^          ^       
-             /            \       
-            /              V       
-    ts_asleep <-----------> ts_idle 
+              ts_omp_busy
+              ^          ^
+             /            \
+            /              V
+    ts_asleep <-----------> ts_idle
 
 
               ts_deactivated
@@ -139,11 +139,11 @@ enum thread_grab_t {
            V                \
     ts_none  <--------------> ts_reactivated
 
-    TBB 
-              ts_tbb_busy               
-              ^          ^       
-             /            \       
-            /              V       
+    TBB
+              ts_tbb_busy
+              ^          ^
+             /            \
+            /              V
     ts_asleep <-----------> ts_idle --> ts_done
 
     For TBB only. Extra state transition.
@@ -151,7 +151,7 @@ enum thread_grab_t {
     ts_created -> ts_started -> ts_visited
  */
 enum thread_state_t {
-    //! Thread not doing anything useful, but running and looking for work. 
+    //! Thread not doing anything useful, but running and looking for work.
     ts_idle,
     //! Thread not doing anything useful and is asleep */
     ts_asleep,
@@ -174,7 +174,7 @@ enum thread_state_t {
 #if TBB_USE_ASSERT
 #define PRODUCE_ARG(x) ,x
 #else
-#define PRODUCE_ARG(x) 
+#define PRODUCE_ARG(x)
 #endif /* TBB_USE_ASSERT */
 
 //! Synchronizes dispatch of OpenMP work.
@@ -205,7 +205,7 @@ public:
 };
 
 //! A reference count.
-/** No default constructor, because users of ref_count must be very careful about whether the 
+/** No default constructor, because users of ref_count must be very careful about whether the
     initial reference count is 0 or 1. */
 class ref_count: no_copy {
     friend class thread_map;
@@ -221,7 +221,7 @@ public:
     }
     //! Subtract one and return new value.
     int remove_ref() {
-        int k = --my_ref_count; 
+        int k = --my_ref_count;
         __TBB_ASSERT(k>=0,"reference count underflow");
         return k;
     }
@@ -255,7 +255,7 @@ class server_thread_rep : no_copy {
 public:
     //! Ctor
     server_thread_rep( bool assigned, IScheduler* s, IExecutionResource* r, thread_map& map, rml::client& cl ) :
-        uid( GetExecutionContextId() ), my_scheduler(s), my_proxy(NULL), 
+        uid( GetExecutionContextId() ), my_scheduler(s), my_proxy(NULL),
         my_thread_map(map), my_client(cl), my_job(NULL)
     {
         my_state = assigned ? ts_busy : ts_idle;
@@ -369,7 +369,7 @@ public:
 class omp_server_thread : public server_thread {
     friend class omp_connection_v2;
 public:
-    omp_server_thread( bool assigned, IScheduler* s, IExecutionResource* r, omp_connection_v2* con, thread_map& map, rml::client& cl ) : 
+    omp_server_thread( bool assigned, IScheduler* s, IExecutionResource* r, omp_connection_v2* con, thread_map& map, rml::client& cl ) :
         server_thread(false,assigned,s,r,map,cl), my_conn(con), my_cookie(NULL), my_index(UINT_MAX) {}
     ~omp_server_thread() {}
     /*override*/ void Dispatch( DispatchState* );
@@ -468,13 +468,13 @@ class connection_scavenger_thread {
      */
     tbb::atomic<thread_state_t> state;
 
-    /* We steal two bits from a connection pointer to encode 
+    /* We steal two bits from a connection pointer to encode
      * whether the connection is for TBB or for OMP.
      *
      * ----------------------------------
      * |                          |  |  |
      * ----------------------------------
-     *                              ^  ^ 
+     *                              ^  ^
      *                             /   |
      *            1 : tbb, 0 : omp     |
      *                  if set, terminate
@@ -490,7 +490,7 @@ public:
     connection_scavenger_thread() : thr_handle(NULL) {
         state = ts_asleep;
 #if TBB_USE_ASSERT
-        n_scavenger_threads = 0; 
+        n_scavenger_threads = 0;
 #endif
     }
 
@@ -507,8 +507,8 @@ public:
 
     static __RML_DECL_THREAD_ROUTINE thread_routine( void* arg );
 
-    void launch() { 
-        thread_monitor::launch( connection_scavenger_thread::thread_routine, this, NULL ); 
+    void launch() {
+        thread_monitor::launch( connection_scavenger_thread::thread_routine, this, NULL );
     }
 
     template<typename Server, typename Client>
@@ -542,10 +542,10 @@ struct thread_map_base {
         server_thread& wait_for_thread() const {
             for(;;) {
                 server_thread* ptr=const_cast<server_thread*volatile&>(my_thread);
-                if( ptr ) 
+                if( ptr )
                     return *ptr;
                 __TBB_Yield();
-            } 
+            }
         }
         /** Shortly after when a connection is established, it is possible for the server
             to grab a server_thread that has not yet created a job object for that server. */
@@ -557,7 +557,7 @@ struct thread_map_base {
         }
     private:
         server_thread* my_thread;
-        /** Marked mutable because though it is physically modified, conceptually it is a duplicate of 
+        /** Marked mutable because though it is physically modified, conceptually it is a duplicate of
             the job held by job_automaton. */
         mutable rml::job* my_job;
         job_automaton my_automaton;
@@ -589,8 +589,8 @@ static tbb::atomic<int> the_balance;
 static tbb::atomic<tbb::internal::do_once_state> rml_module_state;
 
 #if !RML_USE_WCRM
-//! Per thread information 
-/** ref_count holds number of clients that are using this, 
+//! Per thread information
+/** ref_count holds number of clients that are using this,
     plus 1 if a host thread owns this instance. */
 class server_thread: public ref_count {
     friend class thread_map;
@@ -619,7 +619,7 @@ private:
     bool has_active_thread;
 #endif /* TBB_USE_ASSERT */
 
-    //! Volunteer to sleep. 
+    //! Volunteer to sleep.
     void sleep_perhaps( thread_state_t asleep );
 
     //! Destroy job corresponding to given client
@@ -632,7 +632,7 @@ private:
     bool do_termination();
 
     void loop();
-    static __RML_DECL_THREAD_ROUTINE thread_routine( void* arg ); 
+    static __RML_DECL_THREAD_ROUTINE thread_routine( void* arg );
 
 public:
     server_thread();
@@ -655,7 +655,7 @@ public:
     //! Launch a thread that is bound to *this.
     void launch( size_t stack_size );
 
-    //! Attempt to wakeup a thread 
+    //! Attempt to wakeup a thread
     /** The value "to" is the new state for the thread, if it was woken up.
         Returns true if thread was woken up, false otherwise. */
     bool wakeup( thread_state_t to, thread_state_t from );
@@ -680,8 +680,8 @@ class private_thread_bag {
     };
     //! Root of atomic linked list of list_thread
     /** ABA problem is avoided because items are only atomically pushed, never popped. */
-    tbb::atomic<list_thread*> my_root; 
-    tbb::cache_aligned_allocator<padded<list_thread> > my_allocator; 
+    tbb::atomic<list_thread*> my_root;
+    tbb::cache_aligned_allocator<padded<list_thread> > my_allocator;
 public:
     //! Construct empty bag
     private_thread_bag() {my_root=NULL;}
@@ -696,10 +696,10 @@ public:
             old_root = my_root;
             t->next = old_root;
         } while( my_root.compare_and_swap( t, old_root )!=old_root );
-        return *t;  
+        return *t;
     }
 
-    //! Destroy the bag and threads in it. 
+    //! Destroy the bag and threads in it.
     ~private_thread_bag() {
         while( my_root ) {
             // Unlink thread from list.
@@ -707,7 +707,7 @@ public:
             my_root = t->next;
             // Destroy and deallocate the thread.
             t->~list_thread();
-            my_allocator.deallocate(static_cast<padded<list_thread>*>(t),1);    
+            my_allocator.deallocate(static_cast<padded<list_thread>*>(t),1);
         }
     }
 };
@@ -715,13 +715,13 @@ public:
 //! Forward declaration
 void wakeup_some_tbb_threads();
 
-//! Type-independent part of class generic_connection. 
+//! Type-independent part of class generic_connection.
 /** One to one map from server threads to jobs, and associated reference counting. */
 class thread_map : public thread_map_base {
 public:
     typedef rml::client::size_type size_type;
     //! ctor
-    thread_map( wait_counter& fc, ::rml::client& client ) : 
+    thread_map( wait_counter& fc, ::rml::client& client ) :
         all_visited_at_least_once(false), my_min_stack_size(0), my_server_ref_count(1),
         my_client_ref_count(1), my_client(client), my_factory_counter(fc)
     { my_unrealized_threads = 0; }
@@ -813,7 +813,7 @@ thread_map::value_type* thread_map::add_one_thread( bool is_omp_thread_ ) {
     return &v;
 }
 
-void thread_map::bind() { 
+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?" );
@@ -844,7 +844,7 @@ void thread_map::assist_cleanup( bool assist_null_only ) {
                 // server thread did not get a chance to create a job.
             }
             remove_client_ref();
-        } 
+        }
     }
 }
 
@@ -866,7 +866,7 @@ thread_map::size_type thread_map::wakeup_tbb_threads( size_type n ) {
                     goto skip;
                 }
             }
-            if( --n==0 ) 
+            if( --n==0 )
                 return 0;
         } else {
             // overdraft.
@@ -895,8 +895,8 @@ class thread_map : no_copy {
     hash_map_type my_map;
     bool shutdown_in_progress;
     std::vector<IExecutionResource*> original_exec_resources;
-    tbb::cache_aligned_allocator<padded<tbb_server_thread> > my_tbb_allocator; 
-    tbb::cache_aligned_allocator<padded<omp_server_thread> > my_omp_allocator; 
+    tbb::cache_aligned_allocator<padded<tbb_server_thread> > my_tbb_allocator;
+    tbb::cache_aligned_allocator<padded<omp_server_thread> > my_omp_allocator;
     tbb::cache_aligned_allocator<padded<thread_scavenger_thread> > my_scavenger_allocator;
     IResourceManager* my_concrt_resource_manager;
     IScheduler* my_scheduler;
@@ -907,12 +907,12 @@ class thread_map : no_copy {
     tbb::atomic<int> n_thread_scavengers_created;
 #endif
 public:
-    thread_map( wait_counter& fc, ::rml::client& client ) : 
+    thread_map( wait_counter& fc, ::rml::client& client ) :
         my_min_stack_size(0), my_client(client), my_factory_counter(fc),
         my_server_ref_count(1), my_client_ref_count(1), shutdown_in_progress(false),
         my_concrt_resource_manager(NULL), my_scheduler(NULL), my_scheduler_proxy(NULL)
-    { 
-        my_thread_scavenger_thread = NULL; 
+    {
+        my_thread_scavenger_thread = NULL;
 #if TBB_USE_ASSERT
         n_add_vp_requests = 0;
         n_thread_scavengers_created;
@@ -936,14 +936,14 @@ public:
                 while( ((tbb_server_thread*)thr)->activation_count>1 )
                     __TBB_Yield();
                 ((tbb_server_thread*)thr)->~tbb_server_thread();
-                my_tbb_allocator.deallocate(static_cast<padded<tbb_server_thread>*>(thr),1);    
+                my_tbb_allocator.deallocate(static_cast<padded<tbb_server_thread>*>(thr),1);
             } else {
                 ((omp_server_thread*)thr)->~omp_server_thread();
-                my_omp_allocator.deallocate(static_cast<padded<omp_server_thread>*>(thr),1);    
+                my_omp_allocator.deallocate(static_cast<padded<omp_server_thread>*>(thr),1);
             }
         }
         if( my_scheduler_proxy ) {
-            my_scheduler_proxy->Shutdown(); 
+            my_scheduler_proxy->Shutdown();
             my_concrt_resource_manager->Release();
             __TBB_ASSERT( my_scheduler, NULL );
             delete my_scheduler;
@@ -957,7 +957,7 @@ public:
     iterator begin() {return my_map.begin();}
     iterator end() {return my_map.end();}
     iterator find( key_type k ) {return my_map.find( k );}
-    iterator insert( key_type k, server_thread* v ) { 
+    iterator insert( key_type k, server_thread* v ) {
         std::pair<iterator,bool> res = my_map.insert( value_type(k,v) );
         return res.first;
     }
@@ -994,10 +994,10 @@ public:
     void create_oversubscribers( unsigned n, std::vector<server_thread*>& thr_vec, omp_connection_v2& conn, ::tbb::spin_mutex& mtx );
     void wakeup_tbb_threads( int c, ::tbb::spin_mutex& mtx );
     void mark_virtual_processors_as_returned( IVirtualProcessorRoot** vprocs, unsigned int count, tbb::spin_mutex& mtx );
-    inline void addto_original_exec_resources( IExecutionResource* r, ::tbb::spin_mutex& mtx ) { 
+    inline void addto_original_exec_resources( IExecutionResource* r, ::tbb::spin_mutex& mtx ) {
         ::tbb::spin_mutex::scoped_lock lck(mtx);
         __TBB_ASSERT( !is_closing(), "try to regster master while connection is being shutdown?" );
-        original_exec_resources.push_back( r ); 
+        original_exec_resources.push_back( r );
     }
 #if !__RML_REMOVE_VIRTUAL_PROCESSORS_DISABLED
     void allocate_thread_scavenger( IExecutionResource* v );
@@ -1041,12 +1041,12 @@ protected:
     thread_map my_thread_map;
     generic_connection* next_conn;
     size_t my_ec;
-#if RML_USE_WCRM 
+#if RML_USE_WCRM
     // FIXME: pad it?
     tbb::spin_mutex map_mtx;
     IScheduler* my_scheduler;
-    void do_open( IScheduler* s ) { 
-        my_scheduler = s; 
+    void do_open( IScheduler* s ) {
+        my_scheduler = s;
         my_thread_map.bind( s );
     }
     bool is_closing() { return my_thread_map.is_closing(); }
@@ -1060,7 +1060,7 @@ protected:
 #if !RML_USE_WCRM
     generic_connection( wait_counter& fc, Client& c ) : my_thread_map(fc,c), next_conn(NULL), my_ec(0) {}
 #else
-    generic_connection( wait_counter& fc, Client& c ) : 
+    generic_connection( wait_counter& fc, Client& c ) :
             my_thread_map(fc,c), next_conn(NULL), my_ec(0), map_mtx(), my_scheduler(NULL) {}
     void add_virtual_processors( IVirtualProcessorRoot** vprocs, unsigned int count );
     void remove_virtual_processors( IVirtualProcessorRoot** vprocs, unsigned int count );
@@ -1112,7 +1112,7 @@ class tbb_connection_v2: public generic_connection<tbb_server,tbb_client> {
     /*override*/ void register_master ( rml::server::execution_resource_t& /*v*/ ) {}
     /*override*/ void unregister_master ( rml::server::execution_resource_t /*v*/ ) {}
 #endif
-#else 
+#else
     /*override*/ void register_master ( rml::server::execution_resource_t& v ) {
         my_thread_map.register_as_master(v);
         if( v ) ++nesting;
@@ -1126,7 +1126,7 @@ class tbb_connection_v2: public generic_connection<tbb_server,tbb_client> {
 #endif
             }
         }
-        my_thread_map.unregister(v); 
+        my_thread_map.unregister(v);
     }
     IScheduler* create_scheduler() {return( scheduler<tbb_connection_v2>::create( *this ) );}
     friend void  free_all_connections( uintptr_t );
@@ -1173,7 +1173,7 @@ public:
             client().process(job);
             visited = true;
         }
-        ++my_slack; 
+        ++my_slack;
         return visited;
     }
 
@@ -1239,7 +1239,7 @@ class omp_connection_v2: public generic_connection<omp_server,omp_client> {
     friend class scheduler<omp_connection_v2>;
     /*override*/ int current_balance() const {return my_thread_map.current_balance();}
 #endif /* !RML_USE_WCRM */
-    /*override*/ int  try_increase_load( size_type n, bool strict ); 
+    /*override*/ int  try_increase_load( size_type n, bool strict );
     /*override*/ void decrease_load( size_type n );
     /*override*/ void get_threads( size_type request_size, void* cookie, job* array[] );
 #if !RML_USE_WCRM
@@ -1288,13 +1288,13 @@ public:
 /* to deal with cases where the machine is oversubscribed; we want each thread to trip to try_process() at least once */
 /* this should not involve computing the_balance */
 bool thread_map::wakeup_next_thread( thread_map::iterator this_thr, tbb_connection_v2& conn ) {
-    if( all_visited_at_least_once ) 
+    if( all_visited_at_least_once )
         return false;
 
     iterator e = end();
 retry:
     bool exist = false;
-    iterator k=this_thr; 
+    iterator k=this_thr;
     for( ++k; k!=e; ++k ) {
         // If another thread added *k, there is a tiny timing window where thread() is invalid.
         server_thread& t = k->wait_for_thread();
@@ -1313,10 +1313,10 @@ retry:
                 return true;
     }
 
-    if( exist ) 
+    if( exist )
         if( conn.has_slack() )
             goto retry;
-    else 
+    else
         all_visited_at_least_once = true;
     return false;
 }
@@ -1343,7 +1343,7 @@ void thread_map::remove_client_ref() {
         --my_factory_counter;
         // Notify client that RML is done with the client object.
         my_client.acknowledge_close_connection();
-    } 
+    }
 }
 
 #if RML_USE_WCRM
@@ -1363,10 +1363,10 @@ void make_job( Connection& c, typename Connection::server_thread_type& t ) {
 #if _MSC_VER && !defined(__INTEL_COMPILER)
 // Suppress "conditional expression is constant" warning.
 #pragma warning( push )
-#pragma warning( disable: 4127 ) 
+#pragma warning( disable: 4127 )
 #endif
 #if RML_USE_WCRM
-template<typename Server, typename Client>    
+template<typename Server, typename Client>
 void generic_connection<Server,Client>::request_close_connection( bool exiting ) {
     // for TBB connections, exiting should always be false
     if( connection_traits<Server,Client>::is_tbb )
@@ -1389,7 +1389,7 @@ void generic_connection<Server,Client>::request_close_connection( bool exiting )
         return;
     }
 #else /* !RML_USE_WCRM */
-template<typename Server, typename Client>    
+template<typename Server, typename Client>
 void generic_connection<Server,Client>::request_close_connection( bool ) {
 #endif /* RML_USE_WCRM */
     if( connection_traits<Server,Client>::is_tbb ) {
@@ -1435,19 +1435,19 @@ void generic_connection<Server,Client>::request_close_connection( bool ) {
 
 #if RML_USE_WCRM
 
-template<typename Server, typename Client>    
+template<typename Server, typename Client>
 void generic_connection<Server,Client>::add_virtual_processors( IVirtualProcessorRoot** vproots, unsigned int count )
 {}
 
-template<>    
+template<>
 void generic_connection<tbb_server,tbb_client>::add_virtual_processors( IVirtualProcessorRoot** vproots, unsigned int count )
 {
     my_thread_map.add_virtual_processors( vproots, count, (tbb_connection_v2&)*this, map_mtx );
 }
-template<>    
+template<>
 void generic_connection<omp_server,omp_client>::add_virtual_processors( IVirtualProcessorRoot** vproots, unsigned int count )
 {
-    // For OMP, since it uses ScheudlerPolicy of MinThreads==MaxThreads, this is called once when 
+    // For OMP, since it uses ScheudlerPolicy of MinThreads==MaxThreads, this is called once when
     // RequestInitialVirtualProcessors() is  called.
     my_thread_map.add_virtual_processors( vproots, count, (omp_connection_v2&)*this, map_mtx );
 }
@@ -1459,7 +1459,7 @@ void generic_connection<Server,Client>::remove_virtual_processors( IVirtualProce
 }
 /* For OMP, RemoveVirtualProcessors() will never be called. */
 
-template<>    
+template<>
 void generic_connection<tbb_server,tbb_client>::remove_virtual_processors( IVirtualProcessorRoot** vproots, unsigned int count )
 {
     my_thread_map.remove_virtual_processors( vproots, count, map_mtx );
@@ -1521,7 +1521,7 @@ void tbb_connection_v2::adjust_job_count_estimate( int delta ) {
     if( c>0 ) {
         ++n_adjust_job_count_requests;
         // The client has work to do and there are threads available
-        thread_map::size_type n = my_thread_map.wakeup_tbb_threads(c); 
+        thread_map::size_type n = my_thread_map.wakeup_tbb_threads(c);
 
         server_thread* new_threads_anchor = NULL;
         thread_map::size_type i;
@@ -1530,7 +1530,7 @@ void tbb_connection_v2::adjust_job_count_estimate( int delta ) {
         for( i=0; i<n; ++i ) {
             // Obtain unrealized threads
             thread_map::value_type* k = my_thread_map.add_one_thread( false );
-            if( !k ) 
+            if( !k )
                 // No unrealized threads left.
                 break;
             // Eagerly start the thread off.
@@ -1544,7 +1544,7 @@ void tbb_connection_v2::adjust_job_count_estimate( int delta ) {
         // Implicit destruction of fpa resets original affinity mask.
         }
 
-        thread_map::size_type j=0; 
+        thread_map::size_type j=0;
         for( ; the_balance>0 && j<i; ++j ) {
             if( --the_balance>=0 ) {
                 // Withdraw a coin from the bank
@@ -1552,7 +1552,7 @@ void tbb_connection_v2::adjust_job_count_estimate( int delta ) {
 
                 server_thread* t = new_threads_anchor;
                 new_threads_anchor = t->link;
-                while( !t->try_grab_for( ts_tbb_busy ) ) 
+                while( !t->try_grab_for( ts_tbb_busy ) )
                     __TBB_Yield();
                 t->my_extra_state = ts_started;
             } else {
@@ -1587,7 +1587,7 @@ int omp_connection_v2::try_increase_load( size_type n, bool strict ) {
             // Don't read the_system_balance; if it changes, compare_and_swap will fail anyway.
             old = the_balance.compare_and_swap( int(n)<avail ? avail-n : 0, avail );
         } while( old!=avail );
-        if( int(n)>avail ) 
+        if( int(n)>avail )
             n=avail;
     }
 #if TBB_USE_ASSERT
@@ -1675,7 +1675,7 @@ void omp_connection_v2::deactivate( rml::job* j )
 
 void omp_connection_v2::reactivate( rml::job* j )
 {
-    // Should not adjust the_balance because OMP client is supposed to 
+    // Should not adjust the_balance because OMP client is supposed to
     // do try_increase_load() to reserve the threads to use.
     omp_server_thread* thr = (omp_server_thread*) scratch_ptr( *j );
     (thr->get_virtual_processor())->Activate( thr );
@@ -1687,9 +1687,9 @@ void omp_connection_v2::reactivate( rml::job* j )
 //! Wake up some available tbb threads
 void wakeup_some_tbb_threads()
 {
-    /* First, atomically grab the connection, then increase the server ref count to keep 
-       it from being released prematurely.  Second, check if the balance is available for TBB 
-       and the tbb conneciton has slack to exploit.  If the answer is true, go ahead and 
+    /* First, atomically grab the connection, then increase the server ref count to keep
+       it from being released prematurely.  Second, check if the balance is available for TBB
+       and the tbb conneciton has slack to exploit.  If the answer is true, go ahead and
        try to wake some up. */
     if( generic_connection<tbb_server,tbb_client >::get_addr(active_tbb_connections)==0 )
         // the next connection will see the change; return.
@@ -1709,7 +1709,7 @@ start_it_over:
     // compete with the current one to claim coins.
     // One that is about to close the connection increments the event count
     // after it removes the connection from the list.  But it will keep around
-    // the connection until all readers including this one catch up. So, reading 
+    // the connection until all readers including this one catch up. So, reading
     // the head and clearing the lock bit should be o.k.
     generic_connection<tbb_server,tbb_client>* next_conn_wake_up = generic_connection<tbb_server,tbb_client>::get_addr( active_tbb_connections );
 
@@ -1717,14 +1717,14 @@ start_it_over:
         /* some threads are creating tbb server threads; they may not see my changes made to the_balance */
         /* When a thread is in adjust_job_count_estimate() to increase the slack
            RML tries to activate worker threads on behalf of the requesting thread
-           by repeatedly drawing a coin from the bank optimistically and grabbing a 
-           thread.  If it finds the bank overdrafted, it returns the coin back to 
+           by repeatedly drawing a coin from the bank optimistically and grabbing a
+           thread.  If it finds the bank overdrafted, it returns the coin back to
            the bank and returns the control to the thread (return from the method).
-           There lies a tiny timing hole.  
+           There lies a tiny timing hole.
 
            When the overdraft occurs (note that multiple masters may be in
            adjust_job_count_estimate() so the_balance can be any negative value) and
-           a worker returns from the TBB work at that moment, its returning the coin 
+           a worker returns from the TBB work at that moment, its returning the coin
            does not bump up the_balance over 0, so it happily returns from
            wakeup_some_tbb_threads() without attempting to give coins to worker threads
            that are ready.
@@ -1740,7 +1740,7 @@ start_it_over:
         tbb_connection_v2* tbb_conn = (tbb_connection_v2*)next_conn_wake_up;
         int my_slack = tbb_conn->my_slack;
         if( my_slack>0 ) tbb_conn->wakeup_tbb_threads( my_slack );
-        next_conn_wake_up = next_conn_wake_up->next_conn; 
+        next_conn_wake_up = next_conn_wake_up->next_conn;
     }
 
     int delta = current_tbb_conn_readers -= n_curr_readers;
@@ -1771,7 +1771,7 @@ int omp_connection_v2::try_increase_load( size_type n, bool strict ) {
             // don't read the_balance; if it changes, compare_and_swap will fail anyway.
             old = the_balance.compare_and_swap( int(n)<avail ? avail-n : 0, avail );
         } while( old!=avail );
-        if( int(n)>avail ) 
+        if( int(n)>avail )
             n=avail;
     }
 #if TBB_USE_ASSERT
@@ -1790,7 +1790,7 @@ void omp_connection_v2::decrease_load( size_type n ) {
 
 void omp_connection_v2::get_threads( size_type request_size, void* cookie, job* array[] ) {
 
-    if( !request_size ) 
+    if( !request_size )
         return;
 
     unsigned index = 0;
@@ -1805,9 +1805,9 @@ void omp_connection_v2::get_threads( size_type request_size, void* cookie, job*
                 job& j = k->wait_for_job();
                 array[index] = &j;
                 t.omp_dispatch.produce( client(), j, cookie, index PRODUCE_ARG(*this) );
-                if( ++index==request_size ) 
+                if( ++index==request_size )
                     return;
-            } 
+            }
         }
         // Need to allocate more threads
         for( unsigned i=index; i<request_size; ++i ) {
@@ -1826,7 +1826,7 @@ void omp_connection_v2::get_threads( size_type request_size, void* cookie, job*
                 array[index] = &j;
                 // The preincrement instead of post-increment of index is deliberate.
                 t.omp_dispatch.produce( client(), j, cookie, index PRODUCE_ARG(*this) );
-                if( ++index==request_size ) 
+                if( ++index==request_size )
                     return;
             } // else someone else snatched it.
         }
@@ -1838,9 +1838,9 @@ void omp_connection_v2::get_threads( size_type request_size, void* cookie, job*
 // Methods of omp_dispatch_type
 //------------------------------------------------------------------------
 void omp_dispatch_type::consume() {
-    job_type* j = job; 
     // Wait for short window between when master sets state of this thread to ts_omp_busy
     // and master thread calls produce.
+    job_type* j = job; 
     if( !j ) {
         tbb::internal::atomic_backoff bo;
         do {
@@ -1871,7 +1871,7 @@ void omp_connection_v2::deactivate( rml::job* j )
 
 void omp_connection_v2::reactivate( rml::job* j )
 {
-    // Should not adjust the_balance because OMP client is supposed to 
+    // Should not adjust the_balance because OMP client is supposed to
     // do try_increase_load() to reserve the threads to use.
     __TBB_ASSERT( j, NULL );
     server_thread* thr = (server_thread*) scratch_ptr( *j );
@@ -1883,7 +1883,7 @@ void omp_connection_v2::reactivate( rml::job* j )
 // Methods of server_thread
 //------------------------------------------------------------------------
 
-server_thread::server_thread() : 
+server_thread::server_thread() :
     ref_count(0),
     link(NULL),
     my_map_pos(),
@@ -1930,7 +1930,7 @@ 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; 
+    thread_monitor::cookie c;
     monitor.prepare_wait(c);
     if( state.compare_and_swap( asleep, ts_idle )==ts_idle ) {
         if( !terminate ) {
@@ -1967,15 +1967,15 @@ bool server_thread::wakeup( thread_state_t to, thread_state_t from ) {
         // at worst the result is slight temporary oversubscription.
         monitor.notify();
         success = true;
-    } 
+    }
     return success;
 }
 
-//! Attempt to change a thread's state to ts_omp_busy, and waking it up if necessary. 
+//! Attempt to change a thread's state to ts_omp_busy, and waking it up if necessary.
 bool server_thread::try_grab_for( thread_state_t target_state ) {
     bool success = false;
     switch( read_state() ) {
-        case ts_asleep: 
+        case ts_asleep:
             success = wakeup( target_state, ts_asleep );
             break;
         case ts_idle:
@@ -1992,7 +1992,7 @@ bool server_thread::try_grab_for( thread_state_t target_state ) {
 void server_thread::deactivate() {
     thread_state_t es = (thread_state_t) my_extra_state.fetch_and_store( ts_deactivated );
     __TBB_ASSERT( my_extra_state==ts_deactivated, "someone else tampered with my_extra_state?" );
-    if( es==ts_none ) 
+    if( es==ts_none )
         state = ts_idle;
     else
         __TBB_ASSERT( es==ts_reactivated, "Cannot call deactivate() while in ts_deactivated" );
@@ -2052,7 +2052,7 @@ bool server_thread::destroy_job( Connection& c ) {
             // Some other thread took responsibility for cleaning up the job.
         }
     }
-    // Must do remove client reference first, because execution of 
+    // Must do remove client reference first, because execution of
     // c.remove_ref() can cause *this to be destroyed.
     int k = remove_ref();
     __TBB_ASSERT_EX( k==0, "more than one references?" );
@@ -2079,19 +2079,19 @@ void server_thread::loop() {
     for(;;) {
         __TBB_Yield();
         if( state==ts_idle )
-            sleep_perhaps( ts_asleep );   
+            sleep_perhaps( ts_asleep );
 
         // Check whether I should quit.
         if( terminate )
             if( do_termination() )
-                return;     
-             
-        // read the state 
+                return;
+
+        // read the state
         thread_state_t s = read_state();
         __TBB_ASSERT( s==ts_idle||s==ts_omp_busy||s==ts_tbb_busy, NULL );
 
         if( s==ts_omp_busy ) {
-            // Enslaved by OpenMP team.  
+            // Enslaved by OpenMP team.
             omp_dispatch.consume();
             /* here wake tbb threads up if feasible */
             if( ++the_balance>0 )
@@ -2204,13 +2204,13 @@ void scheduler<tbb_connection_v2>::RemoveVirtualProcessors( IVirtualProcessorRoo
 template<>
 void scheduler<tbb_connection_v2>::NotifyResourcesExternallyIdle( IVirtualProcessorRoot** /*vproots*/, unsigned int /*count*/)
 {
-    __TBB_ASSERT( false, "NotifyResourcesExternallyIdle() is not allowed for TBB" ); 
+    __TBB_ASSERT( false, "NotifyResourcesExternallyIdle() is not allowed for TBB" );
 }
 
 template<>
 void scheduler<tbb_connection_v2>::NotifyResourcesExternallyBusy( IVirtualProcessorRoot** /*vproots*/, unsigned int /*count*/ )
 {
-    __TBB_ASSERT( false, "NotifyResourcesExternallyBusy() is not allowed for TBB" ); 
+    __TBB_ASSERT( false, "NotifyResourcesExternallyBusy() is not allowed for TBB" );
 }
 
 template<>
@@ -2224,7 +2224,7 @@ scheduler<omp_connection_v2>::scheduler( omp_connection_v2& conn ) : uid(GetSche
 
 template<>
 void scheduler<omp_connection_v2>::RemoveVirtualProcessors( IVirtualProcessorRoot** /*vproots*/, unsigned int /*count*/ ) {
-    __TBB_ASSERT( false, "RemoveVirtualProcessors() is not allowed for OMP" ); 
+    __TBB_ASSERT( false, "RemoveVirtualProcessors() is not allowed for OMP" );
 }
 
 template<>
@@ -2247,7 +2247,7 @@ void tbb_server_thread::Dispatch( DispatchState* ) {
 
     for( ;; ) {
         // Try to wake some tbb threads if the balance is positive.
-        // When a thread is added by ConcRT and enter here for the first time, 
+        // When a thread is added by ConcRT and enter here for the first time,
         // the thread may wake itself up (i.e., atomically change its state to ts_busy.
         if( the_balance>0 )
              wakeup_some_tbb_threads();
@@ -2258,7 +2258,7 @@ void tbb_server_thread::Dispatch( DispatchState* ) {
             if( initiate_termination() )
                 return;
         if( read_state()==ts_busy ) {
-            // this thread has a coin (i.e., state=ts_busy; it should trip to the scheduler at least once 
+            // this thread has a coin (i.e., state=ts_busy; it should trip to the scheduler at least once
             if ( tbb_conn->has_slack() ) {
                 do {
                     tbb_conn->try_process( *wait_for_job() );
@@ -2282,7 +2282,7 @@ void tbb_server_thread::Dispatch( DispatchState* ) {
                 } // else the new request will see my changes to state & the_balance.
             } else {
                 __TBB_ASSERT( false, "someone tampered with my state" );
-            } 
+            }
         } // someone else might set the state to somthing other than ts_idle
     }
 }
@@ -2308,12 +2308,12 @@ void omp_server_thread::Dispatch( DispatchState* ) {
     }
 }
 
-//! Attempt to change a thread's state to ts_omp_busy, and waking it up if necessary. 
+//! Attempt to change a thread's state to ts_omp_busy, and waking it up if necessary.
 thread_grab_t server_thread_rep::try_grab_for() {
     thread_grab_t res = wk_failed;
     thread_state_t s = read_state();
     switch( s ) {
-    case ts_asleep: 
+    case ts_asleep:
         if( wakeup( ts_busy, ts_asleep ) )
             res = wk_from_asleep;
         __TBB_ASSERT( res==wk_failed||read_state()==ts_busy, NULL );
@@ -2334,9 +2334,9 @@ thread_grab_t server_thread_rep::try_grab_for() {
 bool tbb_server_thread::switch_out() {
     thread_state_t s = read_state();
     __TBB_ASSERT( s==ts_asleep||s==ts_busy, NULL );
-    // This thread comes back from the TBB scheduler, and changed its state to ts_asleep successfully.  
+    // This thread comes back from the TBB scheduler, and changed its state to ts_asleep successfully.
     // The master enlisted it and woke it up by Activate()'ing it; now it is emerging from Deactivated().
-    // ConcRT requested for removal of the vp associated with the thread, and RML marks it removed.  
+    // ConcRT requested for removal of the vp associated with the thread, and RML marks it removed.
     // Now, it has ts_busy, and removed. -- we should remove it.
     IExecutionResource* old_vp = my_execution_resource;
     if( s==ts_busy ) {
@@ -2382,7 +2382,7 @@ bool tbb_server_thread::switch_out() {
             my_client.cleanup(*j);
             my_conn->remove_client_ref();
         }
-        // Must do remove client reference first, because execution of 
+        // Must do remove client reference first, because execution of
         // c.remove_ref() can cause *this to be destroyed.
         if( !activated )
             proxy->SwitchTo( my_thread_map.get_thread_scavenger(), Idle );
@@ -2456,13 +2456,13 @@ void omp_server_thread::sleep_perhaps () {
         __TBB_ASSERT( s==ts_busy, NULL );
     }
 }
-        
+
 bool tbb_server_thread::initiate_termination() {
     if( read_state()==ts_busy ) {
-        int bal = ++the_balance; 
+        int bal = ++the_balance;
         if( bal>0 ) wakeup_some_tbb_threads();
     }
-    return destroy_job( (tbb_connection_v2*) my_conn ); 
+    return destroy_job( (tbb_connection_v2*) my_conn );
 }
 
 template<typename Connection>
@@ -2474,7 +2474,7 @@ bool server_thread_rep::destroy_job( Connection* c ) {
         my_client.cleanup(*j);
         c->remove_client_ref();
     }
-    // Must do remove client reference first, because execution of 
+    // Must do remove client reference first, because execution of
     // c.remove_ref() can cause *this to be destroyed.
     c->remove_server_ref();
     return true;
@@ -2494,7 +2494,7 @@ void thread_map::assist_cleanup( bool assist_null_only ) {
                 // server thread did not get a chance to create a job.
             }
             remove_client_ref();
-        } 
+        }
     }
 }
 
@@ -2533,7 +2533,7 @@ void thread_map::add_virtual_processors( IVirtualProcessorRoot** vproots, unsign
                 IVirtualProcessorRoot* r = t->get_virtual_processor();
                 __TBB_ASSERT( r==c_remove_prepare||r==c_remove_returned, NULL );
 #endif
-                continue;   
+                continue;
             }
 
             if( my_unrealized_threads>0 ) {
@@ -2598,7 +2598,7 @@ void thread_map::add_virtual_processors( IVirtualProcessorRoot** vproots, unsign
             }
         }
 
-        // we could check is_closing() earlier.  That requires marking the newly allocated server_thread objects 
+        // we could check is_closing() earlier.  That requires marking the newly allocated server_thread objects
         // that are not inserted into the thread_map, and deallocate them.  Doing so seems more cumbersome
         // than simply adding these to the thread_map and let thread_map's destructor take care of reclamation.
         __TBB_ASSERT( closing==is_closing(), NULL );
@@ -2636,7 +2636,7 @@ void thread_map::remove_virtual_processors( IVirtualProcessorRoot** vproots, uns
         if( i==my_map.end() ) {
             thread_scavenger_thread* tst = my_thread_scavenger_thread;
             if( !tst ) {
-                // Remove unknown vp from my scheduler; 
+                // Remove unknown vp from my scheduler;
                 vproots[c]->Remove( my_scheduler );
             } else {
                 while( (tst=my_thread_scavenger_thread)==c_claimed )
@@ -2661,7 +2661,7 @@ void thread_map::remove_virtual_processors( IVirtualProcessorRoot** vproots, uns
                 // wake the thread up so that it Switches Out itself.
                 thr->get_virtual_processor()->Activate( thr );
             } // else, it is Switched Out
-        } // else the thread will see that it is removed and proceed to switch itself out without Deactivation 
+        } // else the thread will see that it is removed and proceed to switch itself out without Deactivation
     }
 }
 
@@ -2684,7 +2684,7 @@ void thread_map::add_virtual_processors( IVirtualProcessorRoot** vproots, unsign
         if( vec[i]==end ) {
             tvec[i] = my_omp_allocator.allocate(1);
             new ( tvec[i] ) omp_server_thread( false, my_scheduler, (IExecutionResource*)vproots[i], &conn, *this, my_client );
-        } 
+        }
     }
 
     {
@@ -2699,7 +2699,7 @@ void thread_map::add_virtual_processors( IVirtualProcessorRoot** vproots, unsign
             }
         }
 
-        // we could check is_closing() earlier.  That requires marking the newly allocated server_thread objects 
+        // we could check is_closing() earlier.  That requires marking the newly allocated server_thread objects
         // that are not inserted into the thread_map, and deallocate them.  Doing so seems more cumbersome
         // than simply adding these to the thread_map and let thread_map's destructor take care of reclamation.
         if( is_closing() ) return;
@@ -2729,7 +2729,7 @@ void thread_map::mark_virtual_processors_as_lent( IVirtualProcessorRoot** vproot
         } else {
             server_thread* thr = (*i).second;
             if( ((uintptr_t)thr)&~(uintptr_t)1 ) {
-                __TBB_ASSERT( !thr->is_removed(), "incorrectly removed" ); 
+                __TBB_ASSERT( !thr->is_removed(), "incorrectly removed" );
                 ((omp_server_thread*)thr)->set_lent();
             }
         }
@@ -2745,8 +2745,8 @@ void thread_map::create_oversubscribers( unsigned n, std::vector<server_thread*>
     typedef std::vector<IExecutionResource*>::iterator iterator_er;
     typedef ::std::vector<std::pair<hash_map_type::key_type, hash_map_type::mapped_type> > hash_val_vector_t;
     hash_val_vector_t v_vec(n);
-    iterator_er begin = curr_exec_rsc.begin(); 
-    iterator_er end   = curr_exec_rsc.end(); 
+    iterator_er begin = curr_exec_rsc.begin();
+    iterator_er end   = curr_exec_rsc.end();
     iterator_er i = begin;
     for( unsigned c=0; c<n; ++c ) {
         IVirtualProcessorRoot* vpr = my_scheduler_proxy->CreateOversubscriber( *i );
@@ -2772,9 +2772,9 @@ void thread_map::create_oversubscribers( unsigned n, std::vector<server_thread*>
                 unsigned lent = (unsigned) (*i).second;
                 __TBB_ASSERT( lent<=1, "vproc map entry added incorrectly?");
                 (*i).second = thr_vec[c];
-                if( lent ) 
+                if( lent )
                     ((omp_server_thread*)thr_vec[c])->set_lent();
-                else 
+                else
                     ((omp_server_thread*)thr_vec[c])->set_returned();
             }
             my_client_ref_count.add_ref();
@@ -2801,7 +2801,7 @@ void thread_map::wakeup_tbb_threads( int c, ::tbb::spin_mutex& mtx ) {
         for( iterator i=begin(); i!=end(); ++i ) {
             tbb_server_thread* thr = (tbb_server_thread*) (*i).second;
             // ConcRT RM should take threads away from TBB scheduler instead of lending them to another scheduler
-            if( thr->is_removed() ) 
+            if( thr->is_removed() )
                 continue;
 
             if( --the_balance>=0 ) {
@@ -2858,7 +2858,7 @@ void thread_map::mark_virtual_processors_as_returned( IVirtualProcessorRoot** vp
             } else {
                 omp_server_thread* thr = (omp_server_thread*) (*i).second;
                 if( ((uintptr_t)thr)&~(uintptr_t)1 ) {
-                    __TBB_ASSERT( !thr->is_removed(), "incorrectly removed" ); 
+                    __TBB_ASSERT( !thr->is_removed(), "incorrectly removed" );
                     // we shoud not make any assumption on the initial state of an added vproc.
                     thr->set_returned();
                 }
@@ -2888,7 +2888,7 @@ void thread_map::unbind( rml::server& /*server*/, tbb::spin_mutex& mtx ) {
                     while( t->get_virtual_processor()>c_remove_returned )
                         __TBB_Yield();
 #endif
-                    // A removed thread is supposed to proceed to SwithcOut. 
+                    // A removed thread is supposed to proceed to SwithcOut.
                     // There, we remove client&server references.
                 }
             } else {
@@ -2896,7 +2896,7 @@ void thread_map::unbind( rml::server& /*server*/, tbb::spin_mutex& mtx ) {
                     if( t->tbb_thread )
                         ++((tbb_server_thread*)t)->activation_count;
                     t->get_virtual_processor()->Activate( t );
-                    // We mark in the thread_map such that when termination sequence started, we ignore 
+                    // We mark in the thread_map such that when termination sequence started, we ignore
                     // all notification from ConcRT RM.
                 }
             }
@@ -2917,7 +2917,7 @@ void thread_map::unbind( rml::server& /*server*/, tbb::spin_mutex& mtx ) {
 }
 
 #if !__RML_REMOVE_VIRTUAL_PROCESSORS_DISABLED
-void thread_map::allocate_thread_scavenger( IExecutionResource* v ) 
+void thread_map::allocate_thread_scavenger( IExecutionResource* v )
 {
     if( my_thread_scavenger_thread>c_claimed ) return;
     thread_scavenger_thread* c = my_thread_scavenger_thread.fetch_and_store((thread_scavenger_thread*)c_claimed);
@@ -2983,13 +2983,13 @@ void free_all_connections( uintptr_t conn_ex ) {
         if( is_tbb ) {
             tbb_connection_v2* tbb_conn = reinterpret_cast<tbb_connection_v2*>(curr_conn);
             conn_ex = reinterpret_cast<uintptr_t>(tbb_conn->next_conn);
-            while( tbb_conn->my_thread_map.remove_server_ref()>0 ) 
+            while( tbb_conn->my_thread_map.remove_server_ref()>0 )
                 __TBB_Yield();
             delete tbb_conn;
         } else {
             omp_connection_v2* omp_conn = reinterpret_cast<omp_connection_v2*>(curr_conn);
             conn_ex = reinterpret_cast<uintptr_t>(omp_conn->next_conn);
-            while( omp_conn->my_thread_map.remove_server_ref()>0 ) 
+            while( omp_conn->my_thread_map.remove_server_ref()>0 )
                 __TBB_Yield();
             delete omp_conn;
         }
@@ -2998,7 +2998,7 @@ void free_all_connections( uintptr_t conn_ex ) {
 
 void assist_cleanup_connections()
 {
-    //signal to connection_scavenger_thread to terminate 
+    //signal to connection_scavenger_thread to terminate
     uintptr_t tail = connections_to_reclaim.tail;
     while( connections_to_reclaim.tail.compare_and_swap( garbage_connection_queue::plugged, tail )!=tail ) {
         __TBB_Yield();
@@ -3032,11 +3032,11 @@ void assist_cleanup_connections()
 
 void connection_scavenger_thread::sleep_perhaps() {
     uintptr_t tail = connections_to_reclaim.tail;
-    // connections_to_reclaim.tail==garbage_connection_queue::plugged --> terminate, 
+    // connections_to_reclaim.tail==garbage_connection_queue::plugged --> terminate,
     // connections_to_reclaim.tail>garbage_connection_queue::plugged : we got work to do
-    if( tail>=garbage_connection_queue::plugged ) return; 
+    if( tail>=garbage_connection_queue::plugged ) return;
     __TBB_ASSERT( !tail, NULL );
-    thread_monitor::cookie c; 
+    thread_monitor::cookie c;
     monitor.prepare_wait(c);
     if( state.compare_and_swap( ts_asleep, ts_busy )==ts_busy ) {
         if( connections_to_reclaim.tail!=garbage_connection_queue::plugged ) {
@@ -3074,12 +3074,12 @@ void connection_scavenger_thread::process_requests( uintptr_t conn_ex )
         if( is_tbb ) {
             tbb_conn = reinterpret_cast<tbb_connection_v2*>(curr_conn);
             next_conn = reinterpret_cast<uintptr_t>(tbb_conn->next_conn);
-            while( tbb_conn->my_thread_map.get_server_ref_count()>1 ) 
+            while( tbb_conn->my_thread_map.get_server_ref_count()>1 )
                 __TBB_Yield();
         } else {
             omp_conn = reinterpret_cast<omp_connection_v2*>(curr_conn);
             next_conn = reinterpret_cast<uintptr_t>(omp_conn->next_conn);
-            while( omp_conn->my_thread_map.get_server_ref_count()>1 ) 
+            while( omp_conn->my_thread_map.get_server_ref_count()>1 )
                 __TBB_Yield();
         }
 
@@ -3088,7 +3088,7 @@ void connection_scavenger_thread::process_requests( uintptr_t conn_ex )
 
         if( next_conn==0 ) {
             uintptr_t tail = connections_to_reclaim.tail;
-            if( tail==garbage_connection_queue::plugged ) { 
+            if( tail==garbage_connection_queue::plugged ) {
                 tail = garbage_connection_queue::plugged_acked; // connection scavenger saw the flag, and it freed all connections.
                 done = true;
             } else if( tail==conn_ex ) {
@@ -3097,16 +3097,16 @@ void connection_scavenger_thread::process_requests( uintptr_t conn_ex )
                     done = true;
                 }
             }
-            
+
             if( !done ) {
-                // A new connection to close is added to connections_to_reclaim.tail; 
+                // A new connection to close is added to connections_to_reclaim.tail;
                 // Wait for curr_conn->next_conn to be set.
                 if( is_tbb ) {
-                    while( !tbb_conn->next_conn ) 
+                    while( !tbb_conn->next_conn )
                         __TBB_Yield();
                     conn_ex = reinterpret_cast<uintptr_t>(tbb_conn->next_conn);
                 } else {
-                    while( !omp_conn->next_conn ) 
+                    while( !omp_conn->next_conn )
                         __TBB_Yield();
                     conn_ex = reinterpret_cast<uintptr_t>(omp_conn->next_conn);
                 }
@@ -3130,10 +3130,10 @@ __RML_DECL_THREAD_ROUTINE connection_scavenger_thread::thread_routine( void* arg
     thr->thr_handle = GetCurrentThread();
 #if TBB_USE_ASSERT
     ++thr->n_scavenger_threads;
-#endif 
+#endif
     for(;;) {
         __TBB_Yield();
-        thr->sleep_perhaps();   
+        thr->sleep_perhaps();
         if( connections_to_reclaim.tail==garbage_connection_queue::plugged || connections_to_reclaim.tail==garbage_connection_queue::plugged_acked ) {
             thr->state = ts_asleep;
             return 0;
@@ -3185,7 +3185,7 @@ uintptr_t connection_scavenger_thread::grab_and_prepend( generic_connection<omp_
 {
     uintptr_t conn_ex = (uintptr_t)last_conn_to_close;
     uintptr_t head = connections_to_reclaim.head.fetch_and_store( garbage_connection_queue::empty );
-    reinterpret_cast<omp_connection_v2*>(last_conn_to_close)->next_conn = reinterpret_cast<omp_connection_v2*>(head); 
+    reinterpret_cast<omp_connection_v2*>(last_conn_to_close)->next_conn = reinterpret_cast<omp_connection_v2*>(head);
     return conn_ex;
 }
 
@@ -3205,7 +3205,7 @@ bool is_windows7_or_later ()
 template<typename Connection, typename Server, typename Client>
 static factory::status_type connect( factory& f, Server*& server, Client& client ) {
     server = new Connection(*static_cast<wait_counter*>(f.scratch_ptr),client);
-    return factory::st_success; 
+    return factory::st_success;
 }
 
 void init_rml_module () {
@@ -3216,7 +3216,7 @@ void init_rml_module () {
 }
 
 extern "C" factory::status_type __RML_open_factory( factory& f, version_type& server_version, version_type client_version ) {
-    // Hack to keep this library from being closed by causing the first client's dlopen to not have a corresponding dlclose. 
+    // Hack to keep this library from being closed by causing the first client's dlopen to not have a corresponding dlclose.
     // This code will be removed once we figure out how to do shutdown of the RML perfectly.
     static tbb::atomic<bool> one_time_flag;
     if( one_time_flag.compare_and_swap(true,false)==false) {
@@ -3265,7 +3265,7 @@ extern "C" void __RML_close_factory( factory& f ) {
 
 void call_with_build_date_str( ::rml::server_info_callback_t cb, void* arg );
 
-}} // rml::internal 
+}} // rml::internal
 
 namespace tbb {
 namespace internal {
@@ -3297,10 +3297,10 @@ extern "C" void __KMP_call_with_my_server_info( ::rml::server_info_callback_t cb
 /*
  * RML server info
  */
-#include "version_string.tmp"
+#include "version_string.ver"
 
 #ifndef __TBB_VERSION_STRINGS
-#pragma message("Warning: version_string.tmp isn't generated properly by version_info.sh script!")
+#pragma message("Warning: version_string.ver isn't generated properly by version_info.sh script!")
 #endif
 
 // We use the build time as the RML server info. TBB is required to build RML, so we make it the same as the TBB build time.
@@ -3324,4 +3324,4 @@ void call_with_build_date_str( ::rml::server_info_callback_t cb, void* arg )
     (*cb)( arg, RML_SERVER_BUILD_TIME );
     (*cb)( arg, RML_SERVER_VERSION_ST );
 }
-}} // rml::internal 
+}} // rml::internal
diff --git a/src/rml/server/thread_monitor.h b/src/rml/server/thread_monitor.h
index c5d8467..6e18885 100644
--- a/src/rml/server/thread_monitor.h
+++ b/src/rml/server/thread_monitor.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -163,7 +163,7 @@ inline void thread_monitor::yield() {
 #if USE_PTHREAD
 inline void thread_monitor::check( int error_code, const char* routine ) {
     if( error_code ) {
-        fprintf(stderr,"thread_monitor %s\n", strerror(error_code) );
+        fprintf(stderr,"thread_monitor %s in %s\n", strerror(error_code), routine );
         exit(1);
     }
 }
diff --git a/src/rml/server/wait_counter.h b/src/rml/server/wait_counter.h
index 4f567da..0f01b1f 100644
--- a/src/rml/server/wait_counter.h
+++ b/src/rml/server/wait_counter.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 a52ab52..10cdc9a 100644
--- a/src/rml/server/win32-rml-export.def
+++ b/src/rml/server/win32-rml-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 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 a52ab52..10cdc9a 100644
--- a/src/rml/server/win64-rml-export.def
+++ b/src/rml/server/win64-rml-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 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 5b41dc1..59aab9a 100644
--- a/src/rml/test/rml_omp_stub.cpp
+++ b/src/rml/test/rml_omp_stub.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/test/test_job_automaton.cpp b/src/rml/test/test_job_automaton.cpp
index 2bb8613..5c76c99 100644
--- a/src/rml/test/test_job_automaton.cpp
+++ b/src/rml/test/test_job_automaton.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/test/test_rml_mixed.cpp b/src/rml/test/test_rml_mixed.cpp
index 364c9de..fd46d3e 100644
--- a/src/rml/test/test_rml_mixed.cpp
+++ b/src/rml/test/test_rml_mixed.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -64,6 +64,52 @@ private:
     /*override*/void cleanup( job& j ) {delete &j;}
 };
 
+#if _WIN32
+#include <direct.h>
+#define PATH_LEN MAX_PATH+1
+#define SLASH '\\'
+#define ROOT_DIR "\\"
+// ROOT_DIR_REST means how many symbols before first slash in the path
+#define ROOT_DIR_REST 2
+#else
+#include <unistd.h>
+#include <limits.h>
+#define PATH_LEN PATH_MAX+1
+#define SLASH '/'
+#define ROOT_DIR "/"
+// ROOT_DIR_REST means how many symbols before first slash in the path
+#define ROOT_DIR_REST 0
+#define _getcwd getcwd
+#define _chdir  chdir
+#endif
+
+class ChangeCurrentDir {
+    char dir[PATH_LEN+1];
+    char *last_slash;
+public:
+    ChangeCurrentDir() {
+        if ( !_getcwd( dir, PATH_LEN ) ) {
+            REPORT_FATAL_ERROR("ERROR: Couldn't get current working directory\n");
+        }
+
+        last_slash = strrchr( dir, SLASH );
+        ASSERT( last_slash, "The current directory doesn't contain slashes" );
+        *last_slash = 0;
+
+        if ( _chdir( last_slash-dir == ROOT_DIR_REST ? ROOT_DIR : dir ) ) {
+            REPORT_FATAL_ERROR("ERROR: Couldn't change current working directory (%s)\n", dir );
+        }
+    }
+
+    // Restore current dir
+    ~ChangeCurrentDir() {
+        *last_slash = SLASH;
+        if ( _chdir(dir) ) {
+            REPORT_FATAL_ERROR("ERROR: Couldn't change current working directory\n");
+        }
+    }
+};
+
 //! Represents a TBB or OpenMP run-time that uses RML.
 template<typename Factory, typename Client>
 class RunTime {
@@ -147,6 +193,9 @@ class OMP_Client: public ClientBase<__kmp::rml::omp_client> {
     }
 };
 
+// A global instance of ChangeCurrentDir should be declared before TBB_RunTime and OMP_RunTime
+// since we want to change current directory before opening factory
+ChangeCurrentDir Changer;
 RunTime<tbb::internal::rml::tbb_factory, TBB_Client> TBB_RunTime;
 RunTime<__kmp::rml::omp_factory, OMP_Client> OMP_RunTime;
 
@@ -237,7 +286,7 @@ void TBBOutSideOpenMPInside() {
         TBBWork();
     }
     TotalThreadLevel.change_level(-1);
-}  
+}
 
 int TestMain () {
     for( int TBB_MaxThread=MinThread; TBB_MaxThread<=MaxThread; ++TBB_MaxThread ) {
diff --git a/src/rml/test/test_rml_omp.cpp b/src/rml/test/test_rml_omp.cpp
index 86d3136..47364bc 100644
--- a/src/rml/test/test_rml_omp.cpp
+++ b/src/rml/test/test_rml_omp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -71,9 +71,9 @@ public:
     MyServer* server;
     /*override*/void process( job& j, void* cookie, size_type index ) {
         MyTeam& t = *static_cast<MyTeam*>(cookie);
-        ASSERT( t.self_ptr==&t, "trashed cookie" ); 
-        ASSERT( index<t.max_thread, NULL ); 
-        ASSERT( !t.info[index].ran, "duplicate index?" ); 
+        ASSERT( t.self_ptr==&t, "trashed cookie" );
+        ASSERT( index<t.max_thread, NULL );
+        ASSERT( !t.info[index].ran, "duplicate index?" );
         t.info[index].job = &j;
         t.info[index].ran = true;
         do_process(j);
@@ -87,7 +87,7 @@ public:
             if( nesting.level==0 ) {
                 if( index&1 ) {
                     size_type target = index-1;
-                    ASSERT(  target<t.max_thread, NULL ); 
+                    ASSERT(  target<t.max_thread, NULL );
                     // wait until t.info[target].job is defined
                     tbb::internal::spin_wait_until_eq( t.info[target].ran, true );
                     server->try_increase_load( 1, true );
@@ -124,7 +124,7 @@ void FireUpJobs( MyServer& server, MyClient& client, int max_thread, int n_extra
                 // No change in number of threads
                 break;
             case 2:
-                // Decrease number of threads.  
+                // Decrease number of threads.
                 n_thread = int(max_thread)/2;
                 break;
             // Case 3 is same code as the default, but has effect of increasing the number of threads.
@@ -157,7 +157,7 @@ void FireUpJobs( MyServer& server, MyClient& client, int max_thread, int n_extra
             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 );
-            }      
+            }
             // Protocol requires that master wait until workers have called "done_processing"
             while( team.barrier!=n_delivered ) {
                 ASSERT( team.barrier>=0, NULL );
diff --git a/src/rml/test/test_rml_omp_c_linkage.c b/src/rml/test/test_rml_omp_c_linkage.c
index 4fb0565..285001c 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/test/test_rml_tbb.cpp b/src/rml/test/test_rml_tbb.cpp
index 269c99f..cebd85d 100644
--- a/src/rml/test/test_rml_tbb.cpp
+++ b/src/rml/test/test_rml_tbb.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/test/test_server.h b/src/rml/test/test_server.h
index c993c38..40afc77 100644
--- a/src/rml/test/test_server.h
+++ b/src/rml/test/test_server.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/rml/test/test_thread_monitor.cpp b/src/rml/test/test_thread_monitor.cpp
index f486d6b..5b0453c 100644
--- a/src/rml/test/test_thread_monitor.cpp
+++ b/src/rml/test/test_thread_monitor.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -73,7 +73,7 @@ void ThreadState::loop() {
     }
 }
 
-// Linux on Itanium seems to require at least 1<<18 bytes per stack.
+// Linux on IA-64 seems to require at least 1<<18 bytes per stack.
 const size_t MinStackSize = 1<<18;
 const size_t MaxStackSize = 1<<22;
 
diff --git a/src/tbb/arena.cpp b/src/tbb/arena.cpp
index b9efae9..c516bcb 100644
--- a/src/tbb/arena.cpp
+++ b/src/tbb/arena.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -152,13 +152,14 @@ arena::arena ( market& m, unsigned max_num_workers ) {
     my_market = &m;
     my_limit = 1;
     // Two slots are mandatory: for the master, and for 1 worker (required to support starvation resistant tasks).
-    my_num_slots = max(2u, max_num_workers + 1);
+    my_num_slots = num_slots_to_reserve(max_num_workers);
     my_max_num_workers = max_num_workers;
     my_num_threads_active = 1; // accounts for the master
     __TBB_get_cpu_ctl_env(&my_cpu_ctl_env);
 #if __TBB_TASK_PRIORITY
     my_bottom_priority = my_top_priority = normalized_normal_priority;
 #endif /* __TBB_TASK_PRIORITY */
+    my_aba_epoch = m.my_arenas_aba_epoch;
     __TBB_ASSERT ( my_max_num_workers < my_num_slots, NULL );
     // Construct mailboxes. Mark internal synchronization elements for the tools.
     for( unsigned i = 0; i < my_num_slots; ++i ) {
@@ -197,7 +198,13 @@ arena& arena::allocate_arena( market& m, unsigned max_num_workers ) {
 }
 
 void arena::free_arena () {
+    __TBB_ASSERT( is_alive(my_guard), NULL );
     __TBB_ASSERT( !my_num_threads_active, "There are threads in the dying arena" );
+    __TBB_ASSERT( !my_num_workers_requested && !my_num_workers_allotted, "Dying arena requests workers" );
+    __TBB_ASSERT( my_pool_state == SNAPSHOT_EMPTY || !my_max_num_workers, "Inconsistent state of a dying arena" );
+#if !__TBB_STATISTICS_EARLY_DUMP
+    GATHER_STATISTIC( dump_arena_statistics() );
+#endif
     poison_value( my_guard );
     intptr_t drained = 0;
     for ( unsigned i = 1; i <= my_num_slots; ++i )
@@ -231,15 +238,6 @@ void arena::free_arena () {
     NFS_Free( storage );
 }
 
-void arena::close_arena () {
-#if !__TBB_STATISTICS_EARLY_DUMP
-    GATHER_STATISTIC( dump_arena_statistics() );
-#endif
-    my_market->detach_arena( *this );
-    __TBB_ASSERT( is_alive(my_guard), NULL );
-    free_arena();
-}
-
 #if __TBB_STATISTICS
 void arena::dump_arena_statistics () {
     statistics_counters total;
@@ -272,11 +270,13 @@ void arena::dump_arena_statistics () {
 #endif /* __TBB_STATISTICS */
 
 #if __TBB_TASK_PRIORITY
+// TODO: This function seems deserving refactoring
 inline bool arena::may_have_tasks ( generic_scheduler* s, arena_slot& slot, bool& tasks_present, bool& dequeuing_possible ) {
+    suppress_unused_warning(slot);
     if ( !s ) {
         // This slot is vacant
         __TBB_ASSERT( slot.task_pool == EmptyTaskPool, NULL );
-        __TBB_ASSERT ( slot.tail == slot.head, "Someone is tinkering with a vacant arena slot" );
+        __TBB_ASSERT( slot.tail == slot.head, "Someone is tinkering with a vacant arena slot" );
         return false;
     }
     dequeuing_possible |= s->worker_outermost_level();
@@ -307,7 +307,7 @@ bool arena::is_out_of_work() {
                 return true;
             case SNAPSHOT_FULL: {
                 // Use unique id for "busy" in order to avoid ABA problems.
-                const pool_state_t busy = pool_state_t(this);
+                const pool_state_t busy = pool_state_t(&busy);
                 // Request permission to take snapshot
                 if( my_pool_state.compare_and_swap( busy, SNAPSHOT_FULL )==SNAPSHOT_FULL ) {
                     // Got permission. Take the snapshot.
@@ -418,7 +418,7 @@ bool arena::is_out_of_work() {
                                         }
                                     }
                                     if ( switch_back )
-                                        advertise_new_work<true>();
+                                        advertise_new_work</*Spawned*/false>();
 #endif /* __TBB_TASK_PRIORITY */
                                     return true;
                                 }
diff --git a/src/tbb/arena.h b/src/tbb/arena.h
index d4d0075..485b532 100644
--- a/src/tbb/arena.h
+++ b/src/tbb/arena.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -85,10 +85,13 @@ struct arena_base : intrusive_list_node {
     unsigned my_num_workers_allotted;
 
     //! Number of threads in the arena at the moment
-    /** Consists of the workers servicing the arena and one master until it starts 
+    /** Consists of the workers servicing the arena and one master until it starts
         arena shutdown and detaches from it. Plays the role of the arena's ref count. **/
     atomic<unsigned> my_num_threads_active;
 
+    //! ABA prevention marker
+    uintptr_t my_aba_epoch;
+
     //! FPU control settings of arena's master thread captured at the moment of arena instantiation.
     __TBB_cpu_ctl_env_t my_cpu_ctl_env;
 
@@ -236,14 +239,11 @@ private:
     /** Return true if no job or if arena is being cleaned up. */
     bool is_out_of_work();
 
-    //! Initiates arena shutdown.
-    void close_arena ();
-
     //! Registers the worker with the arena and enters TBB scheduler dispatch loop
     void process( generic_scheduler& );
 
     //! Notification that worker or master leaves its arena
-    inline void on_thread_leaving ();
+    inline void on_thread_leaving ( bool master = false );
 
 #if __TBB_STATISTICS
     //! Outputs internal statistics accumulated by the arena
@@ -274,8 +274,14 @@ private:
 namespace tbb {
 namespace internal {
 
-inline void arena::on_thread_leaving () {
-    // In case of using fire-and-forget tasks (scheduled via task::enqueue()) 
+inline void arena::on_thread_leaving ( bool master ) {
+    //
+    // Implementation of arena destruction synchronization logic contained various
+    // bugs/flaws at the different stages of its evolution, so below is a detailed
+    // description of the issues taken into consideration in the framework of the
+    // current design.
+    //
+    // In case of using fire-and-forget tasks (scheduled via task::enqueue())
     // master thread is allowed to leave its arena before all its work is executed,
     // and market may temporarily revoke all workers from this arena. Since revoked
     // workers never attempt to reset arena state to EMPTY and cancel its request
@@ -283,24 +289,45 @@ inline void arena::on_thread_leaving () {
     // thread is leaving it and arena's state is EMPTY (that is its master thread
     // left and it does not contain any work).
     //
-    // A worker that checks for work presence and transitions arena to the EMPTY 
+    // A worker that checks for work presence and transitions arena to the EMPTY
     // state (in snapshot taking procedure arena::is_out_of_work()) updates
     // arena::my_pool_state first and only then arena::my_num_workers_requested.
-    // So the below check for work absence must be done against the latter field.
+    // So the check for work absence must be done against the latter field.
     //
-    // Besides there is a time window between decrementing the active threads count
-    // and checking if there is an outstanding request for workers. New worker 
-    // thread may arrive during this window, finish whatever work is present, and
-    // then shutdown the arena. This sequence may result in destructing the same
-    // arena twice. So a local copy of the outstanding request value must be done
-    // before decrementing active threads count.
+    // In a time window between decrementing the active threads count and checking
+    // if there is an outstanding request for workers. New worker thread may arrive,
+    // finish remaining work, set arena state to empty, and leave decrementing its
+    // refcount and destroying. Then the current thread will destroy the arena
+    // the second time. To preclude it a local copy of the outstanding request
+    // value can be stored before decrementing active threads count.
     //
-    int requested = __TBB_load_with_acquire(my_num_workers_requested);
-    if ( --my_num_threads_active==0 && !requested ) {
-        __TBB_ASSERT( !my_num_workers_requested, NULL );
-        __TBB_ASSERT( my_pool_state == SNAPSHOT_EMPTY || !my_max_num_workers, NULL );
-        close_arena();
-    }
+    // But this technique may cause two other problem. When the stored request is
+    // zero, it is possible that arena still has threads and they can generate new
+    // tasks and thus re-establish non-zero requests. Then all the threads can be
+    // revoked (as described above) leaving this thread the last one, and causing
+    // it to destroy non-empty arena.
+    //
+    // The other problem takes place when the stored request is non-zero. Another
+    // thread may complete the work, set arena state to empty, and leave without
+    // arena destruction before this thread decrements the refcount. This thread
+    // cannot destroy the arena either. Thus the arena may be "orphaned".
+    //
+    // In both cases we cannot dereference arena pointer after the refcount is
+    // decremented, as our arena may already be destroyed.
+    //
+    // If this is the master thread, market can be concurrently destroyed.
+    // In case of workers market's liveness is ensured by the RML connection
+    // rundown protocol, according to which the client (i.e. the market) lives
+    // until RML server notifies it about connection termination, and this
+    // notification is fired only after all workers return into RML.
+    //
+    // Thus if we decremented refcount to zero we ask the market to check arena
+    // state (including the fact if it is alive) under the lock.
+    //
+    uintptr_t aba_epoch = my_aba_epoch;
+    market* m = my_market;
+    if ( !--my_num_threads_active )
+        market::try_destroy_arena( m, this, aba_epoch, master );
 }
 
 template<bool Spawned> void arena::advertise_new_work() {
diff --git a/src/tbb/cache_aligned_allocator.cpp b/src/tbb/cache_aligned_allocator.cpp
index e8e6b78..148abef 100644
--- a/src/tbb/cache_aligned_allocator.cpp
+++ b/src/tbb/cache_aligned_allocator.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -123,7 +123,7 @@ static const dynamic_link_descriptor MallocLinkTable[] = {
 /** Caller is responsible for ensuring this routine is called exactly once.
     The routine attempts to dynamically link with the TBB memory allocator.
     If that allocator is not found, it links to malloc and free. */
-void initialize_cache_aligned_allocator() {
+void initialize_handler_pointers() {
     __TBB_ASSERT( MallocHandler==&DummyMalloc, NULL );
     bool success = dynamic_link( MALLOCLIB_NAME, MallocLinkTable, 4 );
     if( !success ) {
@@ -141,33 +141,35 @@ void initialize_cache_aligned_allocator() {
 #endif
 }
 
-//! Defined in tbb_main.cpp
-extern void DoOneTimeInitializations();
+static tbb::atomic<do_once_state> initialization_state;
+void initialize_cache_aligned_allocator() {
+    atomic_do_once( &initialize_handler_pointers, initialization_state );
+}
 
 //! Executed on very first call through MallocHandler
 static void* DummyMalloc( size_t size ) {
-    DoOneTimeInitializations();
+    initialize_cache_aligned_allocator();
     __TBB_ASSERT( MallocHandler!=&DummyMalloc, NULL );
     return (*MallocHandler)( size );
 }
 
 //! Executed on very first call throught FreeHandler
 static void DummyFree( void * ptr ) {
-    DoOneTimeInitializations();
+    initialize_cache_aligned_allocator();
     __TBB_ASSERT( FreeHandler!=&DummyFree, NULL );
     (*FreeHandler)( ptr );
 }
 
 //! Executed on very first call through padded_allocate_handler
 static void* dummy_padded_allocate( size_t bytes, size_t alignment ) {
-    DoOneTimeInitializations();
+    initialize_cache_aligned_allocator();
     __TBB_ASSERT( padded_allocate_handler!=&dummy_padded_allocate, NULL );
     return (*padded_allocate_handler)(bytes, alignment);
 }
 
 //! Executed on very first call throught padded_free_handler
 static void dummy_padded_free( void * ptr ) {
-    DoOneTimeInitializations();
+    initialize_cache_aligned_allocator();
     __TBB_ASSERT( padded_free_handler!=&dummy_padded_free, NULL );
     (*padded_free_handler)( ptr );
 }    
@@ -259,13 +261,3 @@ bool __TBB_EXPORTED_FUNC is_malloc_used_v3() {
 } // namespace internal
 
 } // namespace tbb
-
-#if __TBB_RML_STATIC
-namespace tbb {
-namespace internal {
-static tbb::atomic<do_once_state> module_state;
-void DoOneTimeInitializations() {
-    atomic_do_once( &initialize_cache_aligned_allocator, module_state );
-}
-}} //namespace tbb::internal
-#endif
diff --git a/src/tbb/cilk-tbb-interop.h b/src/tbb/cilk-tbb-interop.h
index b50e5f1..43caf24 100644
--- a/src/tbb/cilk-tbb-interop.h
+++ b/src/tbb/cilk-tbb-interop.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/concurrent_hash_map.cpp b/src/tbb/concurrent_hash_map.cpp
index 9b55ac3..571ad96 100644
--- a/src/tbb/concurrent_hash_map.cpp
+++ b/src/tbb/concurrent_hash_map.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/concurrent_monitor.cpp b/src/tbb/concurrent_monitor.cpp
index b155b6d..829efdf 100644
--- a/src/tbb/concurrent_monitor.cpp
+++ b/src/tbb/concurrent_monitor.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,16 +31,28 @@
 namespace tbb {
 namespace internal {
 
-void concurrent_monitor::prepare_wait( thread_context& thr, void* ctx ) {
+void concurrent_monitor::thread_context::init() {
+    new (sema.begin()) binary_semaphore;
+    ready = true;
+}
+
+concurrent_monitor::~concurrent_monitor() {
+    abort_all();
+    __TBB_ASSERT( waitset_ec.empty(), "waitset not empty?" );
+}
+
+void concurrent_monitor::prepare_wait( thread_context& thr, uintptr_t ctx ) {
+    if( !thr.ready )
+        thr.init();
     // this is good place to pump previous spurious wakeup
-    if( thr.spurious ) {
+    else if( thr.spurious ) {
         thr.spurious = false;
-        thr.sema.P();
+        thr.semaphore().P();
     }
     thr.context = ctx;
     thr.in_waitset = true;
     {
-        spin_mutex::scoped_lock l( mutex_ec );
+        tbb::spin_mutex::scoped_lock l( mutex_ec );
         __TBB_store_relaxed( thr.epoch, __TBB_load_relaxed(epoch) );
         waitset_ec.add( (waitset_t::node_t*)&thr );
     }
@@ -79,7 +91,7 @@ void concurrent_monitor::notify_one_relaxed() {
         }
     }
     if( n!=end )
-        to_thread_context(n)->sema.V();
+        to_thread_context(n)->semaphore().V();
 }
 
 void concurrent_monitor::notify_all_relaxed() {
@@ -98,9 +110,33 @@ void concurrent_monitor::notify_all_relaxed() {
     waitset_node_t* nxt;
     for( waitset_node_t* n=temp.front(); n!=end; n=nxt ) {
         nxt = n->next;
-        to_thread_context(n)->sema.V();
+        to_thread_context(n)->semaphore().V();
+    }
+#if TBB_USE_ASSERT
+    temp.clear();
+#endif
+}
+
+void concurrent_monitor::abort_all_relaxed() {
+    if( waitset_ec.empty() )
+        return;
+    dllist_t temp;
+    const waitset_node_t* end;
+    {
+        tbb::spin_mutex::scoped_lock l( mutex_ec );
+        __TBB_store_relaxed( epoch, __TBB_load_relaxed(epoch) + 1 );
+        waitset_ec.flush_to( temp );
+        end = temp.end();
+        for( waitset_node_t* n=temp.front(); n!=end; n=n->next )
+            to_thread_context(n)->in_waitset = false;
+    }
+    waitset_node_t* nxt;
+    for( waitset_node_t* n=temp.front(); n!=end; n=nxt ) {
+        nxt = n->next;
+        to_thread_context(n)->aborted = true;
+        to_thread_context(n)->semaphore().V();
     }
-#if TBB_USE_DEBUG
+#if TBB_USE_ASSERT
     temp.clear();
 #endif
 }
diff --git a/src/tbb/concurrent_monitor.h b/src/tbb/concurrent_monitor.h
index 0792e5f..cf42742 100644
--- a/src/tbb/concurrent_monitor.h
+++ b/src/tbb/concurrent_monitor.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,6 +32,8 @@
 #include "tbb/tbb_stddef.h"
 #include "tbb/atomic.h"
 #include "tbb/spin_mutex.h"
+#include "tbb/tbb_exception.h"
+#include "tbb/aligned_space.h"
 
 #include "semaphore.h"
 
@@ -88,20 +90,16 @@ public:
         }
     }
 
-#if !TBB_USE_DEBUG
+    void clear() {head.next = head.prev = &head; __TBB_store_relaxed(count, 0);}
 private:
-#endif
     __TBB_atomic size_t count;
     node_t head;
-    void clear() {head.next = &head; head.prev = &head;__TBB_store_relaxed(count, 0);}
 };
 
 typedef circular_doubly_linked_list_with_sentinel waitset_t;
 typedef circular_doubly_linked_list_with_sentinel dllist_t;
 typedef circular_doubly_linked_list_with_sentinel::node_t waitset_node_t;
 
-class concurrent_monitor;
-
 //! concurrent_monitor
 /** fine-grained concurrent_monitor implementation */
 class concurrent_monitor : no_copy {
@@ -110,21 +108,39 @@ public:
     class thread_context : waitset_node_t, no_copy {
         friend class concurrent_monitor;
     public:
-        thread_context() : spurious(false), context(NULL) {epoch = 0; in_waitset = false;}
-        ~thread_context() { if( spurious ) sema.P(); }
+        thread_context() : spurious(false), aborted(false), ready(false), context(0) {
+            epoch = 0;
+            in_waitset = false;
+        }
+        ~thread_context() {
+            if (ready) {
+                if( spurious ) semaphore().P();
+                semaphore().~binary_semaphore();
+            }
+        }
+        binary_semaphore& semaphore() { return *sema.begin(); }
     private:
-        binary_semaphore   sema;
+        //! The method for lazy initialization of the thread_context's semaphore.
+        //  Inlining of the method is undesirable, due to extra instructions for
+        //  exception support added at caller side.
+        __TBB_NOINLINE( void init() );
+        tbb::aligned_space<binary_semaphore, 1> sema;
         __TBB_atomic unsigned epoch;
-        tbb::atomic<bool>     in_waitset;
-        bool         spurious;
-        void*        context;
+        tbb::atomic<bool> in_waitset;
+        bool  spurious;
+        bool  aborted;
+        bool  ready;
+        uintptr_t context;
     };
 
     //! ctor
     concurrent_monitor() {__TBB_store_relaxed(epoch, 0);}
 
+    //! dtor
+    ~concurrent_monitor() ; 
+
     //! prepare wait by inserting 'thr' into the wailt queue
-    void prepare_wait( thread_context& thr, void* ctx = 0 );
+    void prepare_wait( thread_context& thr, uintptr_t ctx = 0 );
 
     //! Commit wait if event count has not changed; otherwise, cancel wait.
     /** Returns true if committed, false if canceled. */
@@ -132,8 +148,11 @@ public:
         const bool do_it = thr.epoch == __TBB_load_relaxed(epoch);
         // this check is just an optimization
         if( do_it ) {
-            thr.sema.P();
+            __TBB_ASSERT( thr.ready, "use of commit_wait() without prior prepare_wait()");
+            thr.semaphore().P();
             __TBB_ASSERT( !thr.in_waitset, "still in the queue?" );
+            if( thr.aborted )
+                throw_exception( eid_user_abort );
         } else {
             cancel_wait( thr );
         }
@@ -142,6 +161,10 @@ public:
     //! Cancel the wait. Removes the thread from the wait queue if not removed yet.
     void cancel_wait( thread_context& thr );
 
+    //! Wait for a condition to be satisfied with waiting-on context
+    template<typename WaitUntil, typename Context>
+    void wait( WaitUntil until, Context on );
+
     //! Notify one thread about the event
     void notify_one() {atomic_fence(); notify_one_relaxed();}
 
@@ -160,6 +183,12 @@ public:
     //! Notify waiting threads of the event that satisfies the given predicate; Relaxed version
     template<typename P> void notify_relaxed( const P& predicate );
 
+    //! Abort any sleeping threads at the time of the call
+    void abort_all() {atomic_fence(); abort_all_relaxed(); }
+ 
+    //! Abort any sleeping threads at the time of the call; Relaxed version
+    void abort_all_relaxed();
+
 private:
     tbb::spin_mutex mutex_ec;
     waitset_t       waitset_ec;
@@ -167,6 +196,22 @@ private:
     thread_context* to_thread_context( waitset_node_t* n ) { return static_cast<thread_context*>(n); }
 };
 
+template<typename WaitUntil, typename Context>
+void concurrent_monitor::wait( WaitUntil until, Context on )
+{
+    bool slept = false;
+    thread_context thr_ctx;
+    prepare_wait( thr_ctx, on() );
+    while( !until() ) {
+        if( (slept = commit_wait( thr_ctx ) )==true )
+            if( until() ) break;
+        slept = false;
+        prepare_wait( thr_ctx, on() );
+    }
+    if( !slept )
+        cancel_wait( thr_ctx );
+}
+
 template<typename P>
 void concurrent_monitor::notify_relaxed( const P& predicate ) {
         if( waitset_ec.empty() )
@@ -191,9 +236,9 @@ void concurrent_monitor::notify_relaxed( const P& predicate ) {
         end = temp.end();
         for( waitset_node_t* n=temp.front(); n!=end; n=nxt ) {
             nxt = n->next;
-            to_thread_context(n)->sema.V();
+            to_thread_context(n)->semaphore().V();
         }
-#if TBB_USE_DEBUG
+#if TBB_USE_ASSERT
         temp.clear();
 #endif
 }
diff --git a/src/tbb/concurrent_queue.cpp b/src/tbb/concurrent_queue.cpp
index 2923131..fcf6e16 100644
--- a/src/tbb/concurrent_queue.cpp
+++ b/src/tbb/concurrent_queue.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -81,8 +81,9 @@ struct micro_queue {
     atomic<ticket> tail_counter;
 
     spin_mutex page_mutex;
-    
+
     void push( const void* item, ticket k, concurrent_queue_base& base );
+    void abort_push( ticket k, concurrent_queue_base& base );
 
     bool pop( void* dst, ticket k, concurrent_queue_base& base );
 
@@ -98,7 +99,7 @@ class micro_queue_pop_finalizer: no_copy {
     typedef concurrent_queue_base::page page;
     ticket my_ticket;
     micro_queue& my_queue;
-    page* my_page; 
+    page* my_page;
     concurrent_queue_base &base;
 public:
     micro_queue_pop_finalizer( micro_queue& queue, concurrent_queue_base& b, ticket k, page* p ) :
@@ -123,7 +124,7 @@ public:
 struct predicate_leq {
     ticket t;
     predicate_leq( ticket t_ ) : t(t_) {}
-    bool operator() ( void* p ) const {return (ticket)p<=t;}
+    bool operator() ( uintptr_t p ) const {return (ticket)p<=t;}
 };
 
 //! Internal representation of a ConcurrentQueue.
@@ -139,7 +140,7 @@ private:
 
 public:
     //! Must be power of 2
-    static const size_t n_queue = 8; 
+    static const size_t n_queue = 8;
 
     //! Map ticket to an array index
     static size_t index( ticket k ) {
@@ -154,7 +155,7 @@ public:
     atomic<ticket> tail_counter;
     concurrent_monitor slots_avail;
     char pad2[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(concurrent_monitor))&(NFS_MaxLineSize-1))];
-    micro_queue array[n_queue];    
+    micro_queue array[n_queue];
 
     micro_queue& choose( ticket k ) {
         // The formula here approximates LRU in a cache-oblivious way.
@@ -179,8 +180,9 @@ static void* invalid_page;
 void micro_queue::push( const void* item, ticket k, concurrent_queue_base& base ) {
     k &= -concurrent_queue_rep::n_queue;
     page* p = NULL;
+    // find index on page where we would put the data
     size_t index = k/concurrent_queue_rep::n_queue & (base.items_per_page-1);
-    if( !index ) {
+    if( !index ) {  // make a new page
         __TBB_TRY {
             p = base.allocate_page();
         } __TBB_CATCH(...) {
@@ -191,6 +193,7 @@ void micro_queue::push( const void* item, ticket k, concurrent_queue_base& base
         p->next = NULL;
     }
 
+    // wait for my turn
     if( tail_counter!=k ) {
         atomic_backoff backoff;
         do {
@@ -202,32 +205,41 @@ void micro_queue::push( const void* item, ticket k, concurrent_queue_base& base
             }
         } while( tail_counter!=k ) ;
     }
-        
-    if( p ) {
+
+    if( p ) { // page is newly allocated; insert in micro_queue
         spin_mutex::scoped_lock lock( page_mutex );
         if( page* q = tail_page )
             q->next = p;
         else
-            head_page = p; 
+            head_page = p;
         tail_page = p;
-    } else {
-        p = tail_page;
     }
-    ITT_NOTIFY( sync_acquired, p );
 
-    __TBB_TRY {
-        base.copy_item( *p, index, item );
+    if (item) {
+        p = tail_page;
+        ITT_NOTIFY( sync_acquired, p );
+        __TBB_TRY {
+            base.copy_item( *p, index, item );
+        }  __TBB_CATCH(...) {
+            ++base.my_rep->n_invalid_entries;
+            tail_counter += concurrent_queue_rep::n_queue; 
+            __TBB_RETHROW();
+        }
         ITT_NOTIFY( sync_releasing, p );
         // If no exception was thrown, mark item as present.
         p->mask |= uintptr_t(1)<<index;
-        tail_counter += concurrent_queue_rep::n_queue; 
-    } __TBB_CATCH(...) {
-        ++base.my_rep->n_invalid_entries;
-        tail_counter += concurrent_queue_rep::n_queue; 
-        __TBB_RETHROW();
     }
+    else // no item; this was called from abort_push
+        ++base.my_rep->n_invalid_entries;
+
+    tail_counter += concurrent_queue_rep::n_queue; 
 }
 
+
+void micro_queue::abort_push( ticket k, concurrent_queue_base& base ) {
+    push(NULL, k, base);
+} 
+
 bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
     k &= -concurrent_queue_rep::n_queue;
     spin_wait_until_eq( head_counter, k );
@@ -235,9 +247,9 @@ bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
     page& p = *head_page;
     __TBB_ASSERT( &p, NULL );
     size_t index = k/concurrent_queue_rep::n_queue & (base.items_per_page-1);
-    bool success = false; 
+    bool success = false;
     {
-        micro_queue_pop_finalizer finalizer( *this, base, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? &p : NULL ); 
+        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_t(1)<<index ) {
             success = true;
             ITT_NOTIFY( sync_acquired, dst );
@@ -314,7 +326,7 @@ void micro_queue::make_invalid( ticket k )
         if( page* q = tail_page )
             q->next = static_cast<page*>(invalid_page);
         else
-            head_page = static_cast<page*>(invalid_page); 
+            head_page = static_cast<page*>(invalid_page);
         tail_page = static_cast<page*>(invalid_page);
     }
     __TBB_RETHROW();
@@ -327,14 +339,14 @@ void micro_queue::make_invalid( ticket k )
 //------------------------------------------------------------------------
 // concurrent_queue_base
 //------------------------------------------------------------------------
-concurrent_queue_base_v3::concurrent_queue_base_v3( size_t item_size ) {
-    items_per_page = item_size<=8 ? 32 :
-                     item_size<=16 ? 16 : 
-                     item_size<=32 ? 8 :
-                     item_size<=64 ? 4 :
-                     item_size<=128 ? 2 :
+concurrent_queue_base_v3::concurrent_queue_base_v3( size_t item_sz ) {
+    items_per_page = item_sz<=  8 ? 32 :
+                     item_sz<= 16 ? 16 :
+                     item_sz<= 32 ?  8 :
+                     item_sz<= 64 ?  4 :
+                     item_sz<=128 ?  2 :
                      1;
-    my_capacity = size_t(-1)/(item_size>1 ? item_size : 2); 
+    my_capacity = size_t(-1)/(item_sz>1 ? item_sz : 2);
     my_rep = cache_aligned_allocator<concurrent_queue_rep>().allocate(1);
     __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, "alignment error" );
     __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, "alignment error" );
@@ -343,7 +355,7 @@ concurrent_queue_base_v3::concurrent_queue_base_v3( size_t item_size ) {
     memset(my_rep,0,sizeof(concurrent_queue_rep));
     new ( &my_rep->items_avail ) concurrent_monitor();
     new ( &my_rep->slots_avail ) concurrent_monitor();
-    this->item_size = item_size;
+    this->item_size = item_sz;
 }
 
 concurrent_queue_base_v3::~concurrent_queue_base_v3() {
@@ -357,33 +369,36 @@ void concurrent_queue_base_v3::internal_push( const void* src ) {
     concurrent_queue_rep& r = *my_rep;
     ticket k = r.tail_counter++;
     ptrdiff_t e = my_capacity;
-    atomic_backoff backoff;
-    concurrent_monitor::thread_context thr_ctx;
 #if DO_ITT_NOTIFY
     bool sync_prepare_done = false;
 #endif
-    while( (ptrdiff_t)(k-r.head_counter)>=e ) {
+    if( (ptrdiff_t)(k-r.head_counter)>=e ) { // queue is full
 #if DO_ITT_NOTIFY
         if( !sync_prepare_done ) {
             ITT_NOTIFY( sync_prepare, &sync_prepare_done );
             sync_prepare_done = true;
         }
 #endif
-        if( !backoff.bounded_pause() ) {
-            bool slept = false;
-            r.slots_avail.prepare_wait( thr_ctx, (void*) ((ptrdiff_t)(k-e)) );
-            while( (ptrdiff_t)(k-r.head_counter)>=const_cast<volatile ptrdiff_t&>(e = my_capacity) ) {
-                if( (slept = r.slots_avail.commit_wait( thr_ctx ) )==true )
-                    break;
-                r.slots_avail.prepare_wait( thr_ctx, (void*) ((ptrdiff_t)(k-e)) );
+        bool slept = false;
+        concurrent_monitor::thread_context thr_ctx;
+        r.slots_avail.prepare_wait( thr_ctx, ((ptrdiff_t)(k-e)) );
+        while( (ptrdiff_t)(k-r.head_counter)>=const_cast<volatile ptrdiff_t&>(e = my_capacity) ) {
+            __TBB_TRY {
+                slept = r.slots_avail.commit_wait( thr_ctx );
+            } __TBB_CATCH( tbb::user_abort& ) {
+                r.choose(k).abort_push(k, *this);
+                __TBB_RETHROW();
+            } __TBB_CATCH(...) {
+                __TBB_RETHROW();
             }
-            if( !slept )
-                r.slots_avail.cancel_wait( thr_ctx );
-            break;
+            if (slept == true) break;
+            r.slots_avail.prepare_wait( thr_ctx, ((ptrdiff_t)(k-e)) );
         }
-        e = const_cast<volatile ptrdiff_t&>(my_capacity);
+        if( !slept )
+            r.slots_avail.cancel_wait( thr_ctx );
     }
     ITT_NOTIFY( sync_acquired, &sync_prepare_done );
+    __TBB_ASSERT( (ptrdiff_t)(k-r.head_counter)<my_capacity, NULL);
     r.choose( k ).push( src, k, *this );
     r.items_avail.notify( predicate_leq(k) );
 }
@@ -391,48 +406,57 @@ void concurrent_queue_base_v3::internal_push( const void* src ) {
 void concurrent_queue_base_v3::internal_pop( void* dst ) {
     concurrent_queue_rep& r = *my_rep;
     ticket k;
-    atomic_backoff backoff;
-    concurrent_monitor::thread_context thr_ctx;
 #if DO_ITT_NOTIFY
     bool sync_prepare_done = false;
 #endif
     do {
         k=r.head_counter++;
-        while( r.tail_counter<=k ) {
+        if ( (ptrdiff_t)(r.tail_counter-k)<=0 ) { // queue is empty
 #if DO_ITT_NOTIFY
             if( !sync_prepare_done ) {
                 ITT_NOTIFY( sync_prepare, dst );
                 sync_prepare_done = true;
             }
 #endif
-            // Queue is empty; pause and re-try a few times
-            if( !backoff.bounded_pause() ) {
-                bool slept = false;
-                r.items_avail.prepare_wait( thr_ctx, (void*)k );
-                while( r.tail_counter<=k ) {
-                    if( (slept = r.items_avail.commit_wait( thr_ctx ) )==true )
-                        break;
-                    r.items_avail.prepare_wait( thr_ctx, (void*)k );
+            bool slept = false;
+            concurrent_monitor::thread_context thr_ctx;
+            r.items_avail.prepare_wait( thr_ctx, k );
+            while( (ptrdiff_t)(r.tail_counter-k)<=0 ) {
+                __TBB_TRY {
+                    slept = r.items_avail.commit_wait( thr_ctx );
+                } __TBB_CATCH( tbb::user_abort& ) {
+                    r.head_counter--;
+                    __TBB_RETHROW();
+                } __TBB_CATCH(...) {
+                    __TBB_RETHROW();
                 }
-                if( !slept )
-                    r.items_avail.cancel_wait( thr_ctx );
-                break; // break from inner while
+                if (slept == true) break;
+                r.items_avail.prepare_wait( thr_ctx, k );
             }
-        } // break to here
+            if( !slept )
+                r.items_avail.cancel_wait( thr_ctx );
+        }
+        __TBB_ASSERT((ptrdiff_t)(r.tail_counter-k)>0, NULL);
     } while( !r.choose(k).pop(dst,k,*this) );
 
     // wake up a producer..
     r.slots_avail.notify( predicate_leq(k) );
 }
 
+void concurrent_queue_base_v3::internal_abort() {
+    concurrent_queue_rep& r = *my_rep;
+    r.items_avail.abort_all();
+    r.slots_avail.abort_all();
+}
+
 bool concurrent_queue_base_v3::internal_pop_if_present( void* dst ) {
     concurrent_queue_rep& r = *my_rep;
     ticket k;
     do {
         k = r.head_counter;
         for(;;) {
-            if( r.tail_counter<=k ) {
-                // Queue is empty 
+            if( (ptrdiff_t)(r.tail_counter-k)<=0 ) {
+                // Queue is empty
                 return false;
             }
             // Queue had item with ticket k when we looked.  Attempt to get that item.
@@ -460,9 +484,9 @@ bool concurrent_queue_base_v3::internal_push_if_not_full( const void* src ) {
         // Queue had empty slot with ticket k when we looked.  Attempt to claim that slot.
         ticket tk=k;
         k = r.tail_counter.compare_and_swap( tk+1, tk );
-        if( k==tk ) 
+        if( k==tk )
             break;
-        // Another thread claimed the slot, so retry. 
+        // Another thread claimed the slot, so retry.
     }
     r.choose(k).push(src,k,*this);
 
@@ -482,7 +506,7 @@ bool concurrent_queue_base_v3::internal_empty() const {
     return ( tc==my_rep->tail_counter && ptrdiff_t(tc-hc-my_rep->n_invalid_entries)<=0 );
 }
 
-void concurrent_queue_base_v3::internal_set_capacity( ptrdiff_t capacity, size_t /*item_size*/ ) {
+void concurrent_queue_base_v3::internal_set_capacity( ptrdiff_t capacity, size_t /*item_sz*/ ) {
     my_capacity = capacity<0 ? concurrent_queue_rep::infinite_capacity : capacity;
 }
 
@@ -515,7 +539,7 @@ void concurrent_queue_base_v3::assign( const concurrent_queue_base& src ) {
     for( size_t i = 0; i<my_rep->n_queue; ++i )
         my_rep->array[i].assign( src.my_rep->array[i], *this);
 
-    __TBB_ASSERT( my_rep->head_counter==src.my_rep->head_counter && my_rep->tail_counter==src.my_rep->tail_counter, 
+    __TBB_ASSERT( my_rep->head_counter==src.my_rep->head_counter && my_rep->tail_counter==src.my_rep->tail_counter,
             "the source concurrent queue should not be concurrently modified." );
 }
 
@@ -524,11 +548,11 @@ void concurrent_queue_base_v3::assign( const concurrent_queue_base& src ) {
 //------------------------------------------------------------------------
 class concurrent_queue_iterator_rep: no_assign {
 public:
-    ticket head_counter;   
+    ticket head_counter;
     const concurrent_queue_base& my_queue;
     const size_t offset_of_last;
     concurrent_queue_base::page* array[concurrent_queue_rep::n_queue];
-    concurrent_queue_iterator_rep( const concurrent_queue_base& queue, size_t offset_of_last_ ) : 
+    concurrent_queue_iterator_rep( const concurrent_queue_base& queue, size_t offset_of_last_ ) :
         head_counter(queue.my_rep->head_counter),
         my_queue(queue),
         offset_of_last(offset_of_last_)
@@ -586,7 +610,7 @@ void concurrent_queue_iterator_base_v3::assign( const concurrent_queue_iterator_
 }
 
 void concurrent_queue_iterator_base_v3::advance() {
-    __TBB_ASSERT( my_item, "attempt to increment iterator past end of queue" );  
+    __TBB_ASSERT( my_item, "attempt to increment iterator past end of queue" );
     size_t k = my_rep->head_counter;
     const concurrent_queue_base& queue = my_rep->my_queue;
 #if TBB_USE_ASSERT
diff --git a/src/tbb/concurrent_vector.cpp b/src/tbb/concurrent_vector.cpp
index cb9c6d2..1c2d707 100644
--- a/src/tbb/concurrent_vector.cpp
+++ b/src/tbb/concurrent_vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -97,7 +97,7 @@ public:
 
     //! Publish segment so other threads can see it.
     inline static void publish_segment( segment_t& s, void* rhs ) {
-    // see also itt_store_pointer_with_release_v3()
+        // see also itt_store_pointer_with_release_v3()
         ITT_NOTIFY( sync_releasing, &s.array );
         __TBB_store_with_release( s.array, rhs );
     }
@@ -113,7 +113,7 @@ public:
     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
+        segment_t &s = v.my_segment[index]; // TODO: pass v.my_segment as argument
         if( !__TBB_load_with_acquire(s.array) ) { // do not check for internal::vector_allocation_error_flag 
             if( owner ) {
                 enable_segment( v, index, element_size );
@@ -208,19 +208,20 @@ public:
 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++ )
+    // assignments 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) );
+    std::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 )
@@ -290,7 +291,7 @@ void concurrent_vector_base_v3::helper::cleanup() {
         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
+        // fill allocated items
         first_segment();
         goto recover;
     }
@@ -523,7 +524,7 @@ void *concurrent_vector_base_v3::internal_compact( size_type element_size, void
 
     segment_t *const segment_table = my_segment;
     internal_segments_table &old = *static_cast<internal_segments_table*>( table );
-    memset(&old, 0, sizeof(old));
+    std::memset(&old, 0, sizeof(old));
 
     if ( k != first_block && k ) // first segment optimization
     {
@@ -567,7 +568,7 @@ void *concurrent_vector_base_v3::internal_compact( size_type element_size, void
     if ( k_stop < k_end ) {
         old.first_block = first_block;
         memcpy(old.table+k_stop, segment_table+k_stop, (k_end-k_stop) * sizeof(segment_t));
-        memset(segment_table+k_stop, 0, (k_end-k_stop) * sizeof(segment_t));
+        std::memset(segment_table+k_stop, 0, (k_end-k_stop) * sizeof(segment_t));
         if( !k ) my_first_block = 0;
     }
     return table;
diff --git a/src/tbb/condition_variable.cpp b/src/tbb/condition_variable.cpp
index b8b4e91..e757a16 100644
--- a/src/tbb/condition_variable.cpp
+++ b/src/tbb/condition_variable.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/critical_section.cpp b/src/tbb/critical_section.cpp
index ceebef6..83deebe 100644
--- a/src/tbb/critical_section.cpp
+++ b/src/tbb/critical_section.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/custom_scheduler.h b/src/tbb/custom_scheduler.h
index 2be052d..b0ec8e8 100644
--- a/src/tbb/custom_scheduler.h
+++ b/src/tbb/custom_scheduler.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -97,12 +97,11 @@ class custom_scheduler: private generic_scheduler {
         task_prefix& p = s.prefix();
         if( SchedulerTraits::itt_possible )
             ITT_NOTIFY(sync_releasing, &p.ref_count);
-        if( SchedulerTraits::has_slow_atomic && p.ref_count==1 ) {
+        if( SchedulerTraits::has_slow_atomic && p.ref_count==1 )
             p.ref_count=0;
-        } else {
-            if( __TBB_FetchAndDecrementWrelease(&p.ref_count) > 1 ) // more references exist
-                return;
-        }
+        else if( __TBB_FetchAndDecrementWrelease(&p.ref_count) > 1 ) // more references exist
+            return;
+
         // Ordering on p.ref_count (superfluous if SchedulerTraits::has_slow_atomic)
         __TBB_control_consistency_helper();
         __TBB_ASSERT(p.ref_count==0, "completion of task caused predecessor's reference count to underflow");
@@ -404,8 +403,8 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
                 assert_task_pool_valid();
 #if __TBB_TASK_PRIORITY
                 intptr_t p = priority(*t);
-                assert_priority_valid(p);
-                if ( p != *my_ref_top_priority ) {
+                if ( p != *my_ref_top_priority && (t->prefix().extra_state & es_task_enqueued) == 0) {
+                    assert_priority_valid(p);
                     if ( p != my_arena->my_top_priority ) {
                         my_market->update_arena_priority( *my_arena, p );
                     }
@@ -451,7 +450,7 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
                     if (t_next) {
                         __TBB_ASSERT( t_next->state()==task::allocated,
                                 "if task::execute() returns task, it must be marked as allocated" );
-                        t_next->prefix().extra_state &= ~es_task_is_stolen;
+                        reset_extra_state(t_next);
 #if TBB_USE_ASSERT
                         affinity_id next_affinity=t_next->prefix().affinity;
                         if (next_affinity != 0 && next_affinity != my_affinity_id)
@@ -476,7 +475,7 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
                     case task::recycle: // set by recycle_as_safe_continuation()
                         t->prefix().state = task::allocated;
                         __TBB_ASSERT( t_next != t, "a task returned from method execute() can not be recycled in another way" );
-                        t->prefix().extra_state &= ~es_task_is_stolen;
+                        reset_extra_state(t);
                         // for safe continuation, need atomically decrement ref_count;
                         tally_completion_of_predecessor(*t, t_next);
                         assert_task_pool_valid();
@@ -486,12 +485,12 @@ void custom_scheduler<SchedulerTraits>::local_wait_for_all( task& parent, task*
                         __TBB_ASSERT( t_next, "reexecution requires that method execute() return another task" );
                         __TBB_ASSERT( t_next != t, "a task returned from method execute() can not be recycled in another way" );
                         t->prefix().state = task::allocated;
-                        t->prefix().extra_state &= ~es_task_is_stolen;
+                        reset_extra_state(t);
                         local_spawn( *t, t->prefix().next );
                         assert_task_pool_valid();
                         break;
                     case task::allocated:
-                        t->prefix().extra_state &= ~es_task_is_stolen;
+                        reset_extra_state(t);
                         break;
 #if TBB_USE_ASSERT
                     case task::ready:
diff --git a/src/tbb/dynamic_link.cpp b/src/tbb/dynamic_link.cpp
index e1b228c..25698fd 100644
--- a/src/tbb/dynamic_link.cpp
+++ b/src/tbb/dynamic_link.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,7 +34,6 @@
     LIBRARY_ASSERT and DYNAMIC_LINK_WARNING instead.
 */
 
-
 #ifndef LIBRARY_ASSERT
     #include "tbb/tbb_stddef.h"
     #define LIBRARY_ASSERT(x,y) __TBB_ASSERT(x,y)
@@ -45,6 +44,9 @@
     #include <malloc.h>     /* alloca */
 #else
     #include <dlfcn.h>
+    #include <string.h>
+    #include <unistd.h>
+    #include <limits.h>
 #if __FreeBSD__ || __NetBSD__
     #include <stdlib.h>     /* alloca */
 #else
@@ -58,7 +60,7 @@
 
 OPEN_INTERNAL_NAMESPACE
 
-#if !defined(DYNAMIC_LINK_WARNING) && (!__TBB_WEAK_SYMBOLS || __TBB_TASK_CPP_DIRECTLY_INCLUDED)
+#if !defined(DYNAMIC_LINK_WARNING) && __TBB_DYNAMIC_LOAD_ENABLED
     // Report runtime errors and continue.
     #define DYNAMIC_LINK_WARNING dynamic_link_warning
     static void dynamic_link_warning( dynamic_link_error_t code, ... ) {
@@ -66,6 +68,7 @@ OPEN_INTERNAL_NAMESPACE
     } // library_warning
 #endif /* DYNAMIC_LINK_WARNING */
 
+#if __TBB_DYNAMIC_LOAD_ENABLED
 #if _WIN32 || _WIN64
 /*
     There is a security issue on Windows: LoadLibrary() may load and execute malicious code.
@@ -87,7 +90,7 @@ OPEN_INTERNAL_NAMESPACE
         in  name -- Name of a file (may be with relative path; it must not be an absolute one).
         out path -- Buffer to save result (absolute path) to.
         in  len  -- Size of buffer.
-        ret      -- 0         -- Error occured.
+        ret      -- 0         -- Error occurred.
                     > len     -- Buffer too short, required size returned.
                     otherwise -- Ok, number of characters (not counting terminating null) written to
                                  buffer.
@@ -109,7 +112,7 @@ static size_t abs_path( char const * name, char * path, size_t len ) {
 
     // Now get path to our DLL.
     DWORD drc = GetModuleFileName( handle, path, static_cast< DWORD >( len ) );
-    if ( drc == 0 ) {    // Error occured.
+    if ( drc == 0 ) {    // Error occurred.
         int err = GetLastError();
         DYNAMIC_LINK_WARNING( dl_sys_fail, "GetModuleFileName", err );
         return drc;
@@ -140,8 +143,106 @@ static size_t abs_path( char const * name, char * path, size_t len ) {
     LIBRARY_ASSERT( rc == strlen( path ), NULL );
     return rc;
 } // abs_path
+#else /* WIN */
+    class _abs_path {
+        char _path[PATH_MAX+1];
+        size_t _len;
+        enum {
+            ap_invalid = 0,
+            ap_only_cwd,
+            ap_ready
+        } _state;
+
+        bool prepare_full_path() {
+            LIBRARY_ASSERT( _state==ap_only_cwd, NULL );
+
+            Dl_info dlinfo;
+            int res = dladdr( (void*)&dynamic_unlink, &dlinfo );
+            if ( !res ) {
+                char const * err = dlerror();
+                DYNAMIC_LINK_WARNING( dl_sys_fail, "dladdr", err );
+                return false;
+            }
+
+            size_t fname_len = strlen( dlinfo.dli_fname );
+            // Find the position of the last backslash.
+            while ( fname_len>0 && dlinfo.dli_fname[fname_len-1]!='/' ) fname_len-=1;
+
+            size_t rc;
+
+            if ( dlinfo.dli_fname[0]=='/' ) {
+                rc = 0;
+                _len = fname_len;
+            } else {
+                rc = _len;
+                _len += fname_len;
+            }
+
+            if ( fname_len>0 ) {
+                if ( _len>PATH_MAX ) {
+                    DYNAMIC_LINK_WARNING( dl_buff_too_small );
+                    return false;
+                }
+                memcpy( _path+rc, dlinfo.dli_fname, fname_len*sizeof(char) );
+                _path[_len]=0;
+            }
+
+            return true;
+        }
+    public:
+        _abs_path() {
+            if ( getcwd( _path, PATH_MAX+1 ) ) {
+                _state = ap_only_cwd;
+                _len = strlen( _path );
+                _path[_len++]='/';
+            } else {
+                DYNAMIC_LINK_WARNING( dl_buff_too_small );
+                _state = ap_invalid;
+            }
+        }
 
+        /*
+            The function constructs absolute path for given relative path. Important: Base directory is not
+            current one, it is the directory libtbb.so loaded from.
+
+            Arguments:
+            in  name -- Name of a file (may be with relative path; it must not be an absolute one).
+            out path -- Buffer to save result (absolute path) to.
+            in  len  -- Size of buffer.
+            ret      -- 0         -- Error occured.
+                        > len     -- Buffer too short, required size returned.
+                        otherwise -- Ok, number of characters (not counting terminating null) written to
+                                     buffer.
+        */
+        size_t operator ()( char const * name, char * path, size_t len ) {
+            switch ( _state ) {
+                case ap_only_cwd:
+                    if ( !prepare_full_path() ) {
+                        _state = ap_invalid;
+                        return 0;
+                    }
+                    _state = ap_ready;
+                    // 'break' is missed since we really want to do next case.
+                case ap_ready: {
+                        size_t name_len = strlen( name );
+                        size_t full_len = name_len+_len;
+                        if ( full_len+_len < len ) {
+                            memcpy( path, _path, _len );
+                            memcpy( path+_len, name, name_len );
+                            path[full_len] = 0;
+                        }
+                        return full_len;
+                    }
+                default:
+                    return 0;
+            }
+        }
+
+    };
+
+_abs_path abs_path;
 #endif /* WIN */
+#endif /* __TBB_DYNAMIC_LOAD_ENABLED */
 
 #if __TBB_WEAK_SYMBOLS
 
@@ -257,6 +358,7 @@ bool dynamic_link( const char* library, const dynamic_link_descriptor descriptor
     // Get library handle in case it is already loaded into the current process
 #if ! __TBB_DYNAMIC_LOAD_ENABLED
     dynamic_link_handle library_handle = NULL;
+    __TBB_ASSERT_EX( library, "library name must be provided");
 #elif _WIN32||_WIN64
     dynamic_link_handle library_handle = GetModuleHandle( library );
 #else
@@ -265,10 +367,10 @@ bool dynamic_link( const char* library, const dynamic_link_descriptor descriptor
 
     // Get descriptors from the library
     if ( library_handle && dynamic_link( library_handle, descriptors, n, required ) ) {
-#if !__TBB_DYNAMIC_LOAD_ENABLED && !__TBB_TASK_CPP_DIRECTLY_INCLUDED
+#if !__TBB_DYNAMIC_LOAD_ENABLED
         return true;
 #else
-        // The library have been loaded by another module and contains requested symbols.
+        // The library has been loaded by another module and contains requested symbols.
         // But after we obtained the library's handle it can be unloaded by another thread
         // invalidating our handle copy. Therefore we need to pin the library in memory.
 #if _WIN32||_WIN64
@@ -318,7 +420,7 @@ bool dynamic_link( const char* library, const dynamic_link_descriptor descriptor
         library_handle = 0;
     }
 
-#if __TBB_DYNAMIC_LOAD_ENABLED || __TBB_TASK_CPP_DIRECTLY_INCLUDED
+#if __TBB_DYNAMIC_LOAD_ENABLED
     if ( !library_handle ) {
 #if _WIN32||_WIN64
 #if _XBOX
@@ -342,10 +444,17 @@ bool dynamic_link( const char* library, const dynamic_link_descriptor descriptor
         } // if
 #endif /* !_XBOX */
 #else /* !WIN */
-        library_handle = dlopen( library, RTLD_LAZY );
-        if ( library_handle == NULL ) {
-            char const * err = dlerror();
-            DYNAMIC_LINK_WARNING( dl_lib_not_found, library, err );
+        library_handle = NULL;
+        // Construct absolute path to the library.
+        size_t const len = PATH_MAX + 1;
+        char path[ len ];
+        size_t rc = abs_path( library, path, len );
+        if ( 0 < rc && rc < len ) {
+            library_handle = dlopen( path, RTLD_LAZY );
+            if ( library_handle == NULL ) {
+                char const * err = dlerror();
+                DYNAMIC_LINK_WARNING( dl_lib_not_found, library, err );
+            } // if
         } // if
 #endif /* !WIN */
         if( library_handle ) {
diff --git a/src/tbb/dynamic_link.h b/src/tbb/dynamic_link.h
index d6f5006..fb69cd6 100644
--- a/src/tbb/dynamic_link.h
+++ b/src/tbb/dynamic_link.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/governor.cpp b/src/tbb/governor.cpp
index 5547c64..03b2e64 100644
--- a/src/tbb/governor.cpp
+++ b/src/tbb/governor.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -44,7 +44,7 @@ namespace internal {
 //------------------------------------------------------------------------
 
 #if __TBB_SURVIVE_THREAD_SWITCH
-// Suuport for interoperability with Intel(R) Cilk(tm) Plus.
+// Support for interoperability with Intel(R) Cilk(tm) Plus.
 
 #if _WIN32
 #define CILKLIB_NAME "cilkrts20.dll"
@@ -86,9 +86,6 @@ void governor::acquire_resources () {
 #endif
     if( status )
         handle_perror(status, "TBB failed to initialize task scheduler TLS\n");
-
-    ::rml::factory::status_type res = theRMLServerFactory.open(); 
-    UsePrivateRML = res != ::rml::factory::st_success;
 }
 
 void governor::release_resources () {
@@ -109,7 +106,7 @@ rml::tbb_server* governor::create_rml_server ( rml::tbb_client& client ) {
         ::rml::factory::status_type status = theRMLServerFactory.make_server( server, client );
         if( status != ::rml::factory::st_success ) {
             UsePrivateRML = true;
-            runtime_warning( "rml::tbb_factorymake_server failed with status %x, falling back on private rml", status );
+            runtime_warning( "rml::tbb_factory::make_server failed with status %x, falling back on private rml", status );
         }
     }
     if ( !server ) {
@@ -141,6 +138,7 @@ void governor::sign_on(generic_scheduler* s) {
 }
 
 void governor::sign_off(generic_scheduler* s) {
+    suppress_unused_warning(s);
     __TBB_ASSERT( theTLS.get()==s, "attempt to unregister a wrong scheduler instance" );
     theTLS.set(NULL);
 #if __TBB_SURVIVE_THREAD_SWITCH
@@ -203,6 +201,11 @@ void governor::print_version_info () {
 #endif /* __TBB_SURVIVE_THREAD_SWITCH */
 }
 
+void governor::initialize_rml_factory () {
+    ::rml::factory::status_type res = theRMLServerFactory.open(); 
+    UsePrivateRML = res != ::rml::factory::st_success;
+}
+
 #if __TBB_SURVIVE_THREAD_SWITCH
 __cilk_tbb_retcode governor::stack_op_handler( __cilk_tbb_stack_op op, void* data ) {
     __TBB_ASSERT(data,NULL);
@@ -210,9 +213,9 @@ __cilk_tbb_retcode governor::stack_op_handler( __cilk_tbb_stack_op op, void* dat
 #if TBB_USE_ASSERT
     void* current = theTLS.get();
 #if _WIN32||_WIN64
-    unsigned thread_id = GetCurrentThreadId();
+    uintptr_t thread_id = GetCurrentThreadId();
 #else
-    unsigned thread_id = unsigned(pthread_self());
+    uintptr_t thread_id = uintptr_t(pthread_self());
 #endif
 
 #endif /* TBB_USE_ASSERT */
@@ -224,7 +227,7 @@ __cilk_tbb_retcode governor::stack_op_handler( __cilk_tbb_stack_op op, void* dat
                           current==s && s->my_cilk_state==generic_scheduler::cs_running, "invalid adoption" );
 #if TBB_USE_ASSERT
             if( current==s ) 
-                runtime_warning( "redundant adoption of %p by thread %x\n", s, thread_id );
+                runtime_warning( "redundant adoption of %p by thread %p\n", s, (void*)thread_id );
             s->my_cilk_state = generic_scheduler::cs_running;
 #endif /* TBB_USE_ASSERT */
             theTLS.set(s);
diff --git a/src/tbb/governor.h b/src/tbb/governor.h
index b3aa6e3..b2a4cd2 100644
--- a/src/tbb/governor.h
+++ b/src/tbb/governor.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -60,9 +60,9 @@ class governor {
     //! TLS for scheduler instances associated with individual threads
     static basic_tls<generic_scheduler*> theTLS;
 
-    //! Caches the maximal level of paralellism supported by the hardware 
+    //! Caches the maximal level of paralellism supported by the hardware
     static unsigned DefaultNumberOfThreads;
-    
+
     static rml::tbb_factory theRMLServerFactory;
 
     static bool UsePrivateRML;
@@ -83,7 +83,7 @@ class governor {
 public:
     static unsigned default_num_threads () {
         // No memory fence required, because at worst each invoking thread calls AvailableHwConcurrency once.
-        return DefaultNumberOfThreads ? DefaultNumberOfThreads : 
+        return DefaultNumberOfThreads ? DefaultNumberOfThreads :
                                         DefaultNumberOfThreads = AvailableHwConcurrency();
     }
     //! Processes scheduler initialization request (possibly nested) in a master thread
@@ -97,10 +97,10 @@ public:
     //! Returns number of worker threads in the currently active arena.
     inline static unsigned max_number_of_workers ();
 
-    //! Register TBB scheduler instance in thread local storage.
+    //! Register TBB scheduler instance in thread-local storage.
     static void sign_on(generic_scheduler* s);
 
-    //! Unregister TBB scheduler instance from thread local storage.
+    //! Unregister TBB scheduler instance from thread-local storage.
     static void sign_off(generic_scheduler* s);
 
     //! Used to check validity of the local scheduler TLS contents.
@@ -109,7 +109,7 @@ public:
     //! Temporarily set TLS slot to the given scheduler
     static void assume_scheduler( generic_scheduler* s ) { theTLS.set( s ); }
 
-    //! Obtain the thread local instance of the TBB scheduler.
+    //! Obtain the thread-local instance of the TBB scheduler.
     /** If the scheduler has not been initialized yet, initialization is done automatically.
         Note that auto-initialized scheduler instance is destroyed only when its thread terminates. **/
     static generic_scheduler* local_scheduler () {
@@ -128,6 +128,8 @@ public:
 
     static void print_version_info ();
 
+    static void initialize_rml_factory ();
+
 #if __TBB_SURVIVE_THREAD_SWITCH
     static __cilk_tbb_retcode stack_op_handler( __cilk_tbb_stack_op op, void* );
 #endif /* __TBB_SURVIVE_THREAD_SWITCH */
diff --git a/src/tbb/ia32-masm/atomic_support.asm b/src/tbb/ia32-masm/atomic_support.asm
index 42af4a8..a87cf74 100644
--- a/src/tbb/ia32-masm/atomic_support.asm
+++ b/src/tbb/ia32-masm/atomic_support.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 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 9fc42b3..0e9a24a 100644
--- a/src/tbb/ia32-masm/lock_byte.asm
+++ b/src/tbb/ia32-masm/lock_byte.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 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 833b940..5d0f943 100644
--- a/src/tbb/ia64-gas/atomic_support.s
+++ b/src/tbb/ia64-gas/atomic_support.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2012 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 497918c..2f5889a 100644
--- a/src/tbb/ia64-gas/ia64_misc.s
+++ b/src/tbb/ia64-gas/ia64_misc.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2012 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 147b73f..377fc80 100644
--- a/src/tbb/ia64-gas/lock_byte.s
+++ b/src/tbb/ia64-gas/lock_byte.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2012 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 d79b762..7cef1c5 100644
--- a/src/tbb/ia64-gas/log2.s
+++ b/src/tbb/ia64-gas/log2.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 //
 // This file is part of Threading Building Blocks.
 //
@@ -24,7 +24,6 @@
 // invalidate any other reasons why the executable file might be covered by
 // the GNU General Public License.
 
-	// Support for class ConcurrentVector
 	.section .text
 	.align 16
 	// unsigned long __TBB_machine_lg( unsigned long x );
diff --git a/src/tbb/ia64-gas/pause.s b/src/tbb/ia64-gas/pause.s
index 292268a..97e1cc0 100644
--- a/src/tbb/ia64-gas/pause.s
+++ b/src/tbb/ia64-gas/pause.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2012 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 e9cadfc..9001cd2 100644
--- a/src/tbb/ibm_aix51/atomic_support.c
+++ b/src/tbb/ibm_aix51/atomic_support.c
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 c9dbfbe..6da0f26 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-2011 Intel Corporation.  All Rights Reserved.
+Copyright © 2005-2012 Intel Corporation.  All Rights Reserved.
 <P></P>
 Intel is a registered trademark or trademark of Intel Corporation
 or its subsidiaries in the United States and other countries.
diff --git a/src/tbb/intel64-masm/atomic_support.asm b/src/tbb/intel64-masm/atomic_support.asm
index beb6843..b46af21 100644
--- a/src/tbb/intel64-masm/atomic_support.asm
+++ b/src/tbb/intel64-masm/atomic_support.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/tbb/intel64-masm/intel64_misc.asm b/src/tbb/intel64-masm/intel64_misc.asm
index 72c831c..e9fb3d6 100644
--- a/src/tbb/intel64-masm/intel64_misc.asm
+++ b/src/tbb/intel64-masm/intel64_misc.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/tbb/intrusive_list.h b/src/tbb/intrusive_list.h
index 4064069..d9eb8bc 100644
--- a/src/tbb/intrusive_list.h
+++ b/src/tbb/intrusive_list.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 b1a643d..b8c31d9 100644
--- a/src/tbb/itt_notify.cpp
+++ b/src/tbb/itt_notify.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,19 +32,36 @@
     #ifndef UNICODE
         #define UNICODE
     #endif
+#else
+    #pragma weak dlopen
+    #pragma weak dlsym
+    #pragma weak dlerror
 #endif /* WIN */
 
-extern "C" void ITT_DoOneTimeInitialization();
+#if __TBB_BUILD
 
-#define ITT_SIMPLE_INIT 1
+extern "C" void ITT_DoOneTimeInitialization();
 #define __itt_init_ittlib_name(x,y) (ITT_DoOneTimeInitialization(), true)
 
+#elif __TBBMALLOC_BUILD
+
+extern "C" void MallocInitializeITT();
+#define __itt_init_ittlib_name(x,y) (MallocInitializeITT(), true)
+
+#else
+#error This file is expected to be used for either TBB or TBB allocator build.
+#endif // __TBB_BUILD
+
 #include "tools_api/ittnotify_static.c"
 
 namespace tbb {
 namespace internal {
 int __TBB_load_ittnotify() {
-    return __itt_init_ittlib(NULL, __itt_group_none);
+    return __itt_init_ittlib(NULL,          // groups for:
+      (__itt_group_id)(__itt_group_sync     // prepare/cancel/acquired/releasing
+                       | __itt_group_thread // name threads
+                       | __itt_group_stitch // stack stitching
+                           ));
 }
 
 }} // namespaces
diff --git a/src/tbb/itt_notify.h b/src/tbb/itt_notify.h
index 3d4a041..830cd14 100644
--- a/src/tbb/itt_notify.h
+++ b/src/tbb/itt_notify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,9 +39,12 @@
     #endif
 #endif /* WIN */
 
+#ifndef INTEL_ITTNOTIFY_API_PRIVATE
+#define INTEL_ITTNOTIFY_API_PRIVATE
+#endif
+
 #include "tools_api/ittnotify.h"
 #include "tools_api/legacy/ittnotify.h"
-#include "tools_api/internal/ittnotify.h"
 
 #if _WIN32||_WIN64
     #undef _T
diff --git a/src/tbb/lin32-tbb-export.def b/src/tbb/lin32-tbb-export.def
index 5e4aabe..6440ddc 100644
--- a/src/tbb/lin32-tbb-export.def
+++ b/src/tbb/lin32-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/lin32-tbb-export.lst b/src/tbb/lin32-tbb-export.lst
index 10c093e..15a5ff1 100644
--- a/src/tbb/lin32-tbb-export.lst
+++ b/src/tbb/lin32-tbb-export.lst
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -136,6 +136,12 @@ __TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
 __TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )
+__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )
+__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTSN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTVN3tbb10user_abortE )
 
 /* tbb_misc.cpp */
 __TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
@@ -295,6 +301,7 @@ __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityEij )
 __TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
 __TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )
diff --git a/src/tbb/lin64-tbb-export.def b/src/tbb/lin64-tbb-export.def
index 97ffe14..0c6e09a 100644
--- a/src/tbb/lin64-tbb-export.def
+++ b/src/tbb/lin64-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/lin64-tbb-export.lst b/src/tbb/lin64-tbb-export.lst
index abbd167..e35a655 100644
--- a/src/tbb/lin64-tbb-export.lst
+++ b/src/tbb/lin64-tbb-export.lst
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -136,7 +136,12 @@ __TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
 __TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
-
+__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )
+__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )
+__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTSN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTVN3tbb10user_abortE )
 /* tbb_misc.cpp */
 __TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
 __TBB_SYMBOL( _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E )
@@ -293,6 +298,7 @@ __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm )
 __TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
diff --git a/src/tbb/lin64ipf-tbb-export.def b/src/tbb/lin64ipf-tbb-export.def
index 76fc8ef..7629551 100644
--- a/src/tbb/lin64ipf-tbb-export.def
+++ b/src/tbb/lin64ipf-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/lin64ipf-tbb-export.lst b/src/tbb/lin64ipf-tbb-export.lst
index 1facd71..694235b 100644
--- a/src/tbb/lin64ipf-tbb-export.lst
+++ b/src/tbb/lin64ipf-tbb-export.lst
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -136,6 +136,12 @@ __TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
 __TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )
+__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )
+__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTSN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTVN3tbb10user_abortE )
 
 /* tbb_misc.cpp */
 __TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
@@ -293,6 +299,7 @@ __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm )
 __TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
diff --git a/src/tbb/mac32-tbb-export.def b/src/tbb/mac32-tbb-export.def
index 6c12ee3..33b5c4c 100644
--- a/src/tbb/mac32-tbb-export.def
+++ b/src/tbb/mac32-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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/tbb/mac32-tbb-export.lst b/src/tbb/mac32-tbb-export.lst
index 169e63f..c459860 100644
--- a/src/tbb/mac32-tbb-export.lst
+++ b/src/tbb/mac32-tbb-export.lst
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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
@@ -150,6 +150,12 @@ __TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
 __TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )
+__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )
+__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTSN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTVN3tbb10user_abortE )
 
 // tbb_misc.cpp
 __TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
@@ -310,6 +316,7 @@ __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityEim )
 __TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
 __TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v314internal_emptyEv )
diff --git a/src/tbb/mac64-tbb-export.def b/src/tbb/mac64-tbb-export.def
index 4af04ba..6bef209 100644
--- a/src/tbb/mac64-tbb-export.def
+++ b/src/tbb/mac64-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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/tbb/mac64-tbb-export.lst b/src/tbb/mac64-tbb-export.lst
index 660c5be..7c573e5 100644
--- a/src/tbb/mac64-tbb-export.lst
+++ b/src/tbb/mac64-tbb-export.lst
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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
@@ -150,6 +150,13 @@ __TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
 __TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )
+__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )
+__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTSN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTVN3tbb10user_abortE )
+
 
 // tbb_misc.cpp
 __TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
@@ -306,6 +313,7 @@ __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm )
 __TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
diff --git a/src/tbb/mailbox.h b/src/tbb/mailbox.h
index e0d4eae..00e1785 100644
--- a/src/tbb/mailbox.h
+++ b/src/tbb/mailbox.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -78,7 +78,8 @@ struct task_proxy : public task {
             const intptr_t cleaner_bit = location_mask & ~from_bit;
             // Attempt to transition the proxy to the "empty" state with
             // cleaner_bit specifying entity responsible for its eventual freeing.
-            if ( __TBB_CompareAndSwapW( &task_and_tag, cleaner_bit, tat ) == tat ) {
+            // Explicit cast to void* is to work around a seeming ICC 11.1 bug.
+            if ( __TBB_CompareAndSwapW( (void*)&task_and_tag, cleaner_bit, tat ) == tat ) {
                 // Successfully grabbed the task, and left new owner with the job of freeing the proxy
                 return task_ptr(tat);
             }
@@ -132,7 +133,7 @@ class mail_outbox : unpadded_mail_outbox {
             } else {
                 // Some other thread updated my_last but has not filled in first->next_in_mailbox
                 // Wait until first item points to second item.
-                for( atomic_backoff backoff; !(second = first->next_in_mailbox); backoff.pause() );
+                for( atomic_backoff backoff; !(second = first->next_in_mailbox); backoff.pause() ) {}
                 my_first = second;
             }
         }
diff --git a/src/tbb/market.cpp b/src/tbb/market.cpp
index cb0e9dd..aaec6a5 100644
--- a/src/tbb/market.cpp
+++ b/src/tbb/market.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -155,18 +155,72 @@ arena& market::create_arena ( unsigned max_num_workers, size_t stack_size ) {
     return a;
 }
 
+/** This method must be invoked under my_arenas_list_mutex. **/
 void market::detach_arena ( arena& a ) {
     __TBB_ASSERT( theMarket == this, "Global market instance was destroyed prematurely?" );
-    spin_mutex::scoped_lock lock(my_arenas_list_mutex);
 #if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
     __TBB_ASSERT( !a.my_num_workers_present, NULL );
 #endif /* __TBB_TRACK_PRIORITY_LEVEL_SATURATION */
     __TBB_ASSERT( !a.my_slots[0].my_scheduler, NULL );
     remove_arena_from_list(a);
+    if ( a.my_aba_epoch == my_arenas_aba_epoch )
+        ++my_arenas_aba_epoch;
+}
+
+void market::try_destroy_arena ( arena* a, uintptr_t aba_epoch ) {
+    __TBB_ASSERT ( a, NULL );
+    spin_mutex::scoped_lock lock(my_arenas_list_mutex);
+    assert_market_valid();
+#if __TBB_TASK_PRIORITY
+    for ( int p = my_global_top_priority; p >= my_global_bottom_priority; --p ) {
+        priority_level_info &pl = my_priority_levels[p];
+        arena_list_type &my_arenas = pl.arenas;
+#endif /* __TBB_TASK_PRIORITY */
+        arena_list_type::iterator it = my_arenas.begin();
+        for ( ; it != my_arenas.end(); ++it ) {
+            if ( a == &*it ) {
+                if ( it->my_aba_epoch == aba_epoch ) {
+                    // Arena is alive
+                    if ( !a->my_num_workers_requested && !a->my_num_threads_active ) {
+                        __TBB_ASSERT( !a->my_num_workers_allotted && (a->my_pool_state == arena::SNAPSHOT_EMPTY || !a->my_max_num_workers), "Inconsistent arena state" );
+                        // Arena is abandoned. Destroy it.
+                        detach_arena( *a );
+                        lock.release();
+                        a->free_arena();
+                    }
+                }
+                return;
+            }
+        }
+#if __TBB_TASK_PRIORITY
+    }
+#endif /* __TBB_TASK_PRIORITY */
+}
+
+void market::try_destroy_arena ( market* m, arena* a, uintptr_t aba_epoch, bool master ) {
+    // Arena may have been orphaned. Or it may have been destroyed.
+    // Thus we cannot dereference the pointer to it until its liveness is verified.
+    // Arena is alive if it is found in the market's list.
+
+    if ( m != theMarket ) {
+        // The market has already been emptied.
+        return;
+    }
+    else if ( master ) {
+        // If this is a master thread, market can be destroyed at any moment.
+        // So protect it with an extra refcount.
+        global_market_mutex_type::scoped_lock lock(theMarketMutex);
+        if ( m != theMarket )
+            return;
+        ++m->my_ref_count;
+    }
+    m->try_destroy_arena( a, aba_epoch );
+    if ( master )
+        m->release();
 }
 
+/** This method must be invoked under my_arenas_list_mutex. **/
 arena* market::arena_in_need ( arena_list_type &arenas, arena_list_type::iterator& next ) {
-    // This method is executed under my_arenas_list_mutex lock
     if ( arenas.empty() )
         return NULL;
     __TBB_ASSERT( next != arenas.end(), NULL );
@@ -244,8 +298,9 @@ arena* market::arena_in_need (
         --prev_arena->my_num_workers_present;
         --pl.workers_present;
         if ( !--prev_arena->my_num_threads_active && !prev_arena->my_num_workers_requested ) {
+            detach_arena( *a );
             lock.release();
-            prev_arena->close_arena();
+            a->free_arena();
             lock.acquire();
         }
     }
@@ -384,6 +439,7 @@ void market::adjust_demand ( arena& a, int delta ) {
 
 void market::process( job& j ) {
     generic_scheduler& s = static_cast<generic_scheduler&>(j);
+    __TBB_ASSERT( governor::is_set(&s), NULL );
 #if __TBB_TRACK_PRIORITY_LEVEL_SATURATION
     arena *a = NULL;
     while ( (a = arena_in_need(a)) )
diff --git a/src/tbb/market.h b/src/tbb/market.h
index 827149a..5873e44 100644
--- a/src/tbb/market.h
+++ b/src/tbb/market.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -155,6 +155,9 @@ private:
     int my_total_demand;
 #endif /* !__TBB_TASK_PRIORITY */
 
+    //! ABA prevention marker to assign to newly created arenas
+    uintptr_t my_arenas_aba_epoch;
+
 #if __TBB_COUNT_TASK_NODES
     //! Net number of nodes that have been allocated from heap.
     /** Updated each time a scheduler or arena is destroyed. */
@@ -170,6 +173,8 @@ private:
     //! Destroys and deallocates market object created by market::create()
     void destroy ();
 
+    void try_destroy_arena ( arena*, uintptr_t aba_epoch );
+
 #if __TBB_TASK_PRIORITY
     //! Returns next arena that needs more workers, or NULL.
     arena* arena_in_need (
@@ -263,6 +268,9 @@ public:
     static arena& create_arena ( unsigned max_num_workers, size_t stack_size );
 
     //! Removes the arena from the market's list
+    static void try_destroy_arena ( market*, arena*, uintptr_t aba_epoch, bool master );
+
+    //! Removes the arena from the market's list
     void detach_arena ( arena& );
 
     //! Decrements market's refcount and destroys it in the end
diff --git a/src/tbb/mutex.cpp b/src/tbb/mutex.cpp
index f86586f..139163c 100644
--- a/src/tbb/mutex.cpp
+++ b/src/tbb/mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/observer_proxy.cpp b/src/tbb/observer_proxy.cpp
index f57585b..a08e347 100644
--- a/src/tbb/observer_proxy.cpp
+++ b/src/tbb/observer_proxy.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/observer_proxy.h b/src/tbb/observer_proxy.h
index 6715b86..0b8fe8e 100644
--- a/src/tbb/observer_proxy.h
+++ b/src/tbb/observer_proxy.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 e09102d..2cb0629 100644
--- a/src/tbb/pipeline.cpp
+++ b/src/tbb/pipeline.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -66,7 +66,7 @@ class input_buffer {
 
     typedef  Token  size_type;
 
-    //! Array of deferred tasks that cannot yet start executing. 
+    //! Array of deferred tasks that cannot yet start executing.
     task_info* array;
 
     //! for thread-bound filter, semaphore for waiting, NULL otherwise.
@@ -94,10 +94,10 @@ class input_buffer {
     //! Used for out of order buffer, and for assigning my_token if is_ordered and my_token not already assigned
     Token high_token;
 
-    //! True for ordered filter, false otherwise. 
+    //! True for ordered filter, false otherwise.
     bool is_ordered;
 
-    //! True for thread-bound filter, false otherwise. 
+    //! True for thread-bound filter, false otherwise.
     bool is_bound;
 
     //! for parallel filters that accepts NULLs, thread-local flag for reaching end_of_input
@@ -112,9 +112,9 @@ class input_buffer {
 
 public:
     //! Construct empty buffer.
-    input_buffer( bool is_ordered_, bool is_bound_ ) : 
+    input_buffer( bool is_ordered_, bool is_bound_ ) :
             array(NULL), my_sem(NULL), array_size(0),
-            low_token(0), high_token(0), 
+            low_token(0), high_token(0),
             is_ordered(is_ordered_), is_bound(is_bound_),
             end_of_input_tls_allocated(false) {
         grow(initial_buffer_size);
@@ -162,7 +162,7 @@ public:
             if( token!=low_token || is_bound || force_put ) {
                 // Trying to put token that is beyond low_token.
                 // Need to wait until low_token catches up before dispatching.
-                if( token-low_token>=array_size ) 
+                if( token-low_token>=array_size )
                     grow( token-low_token+1 );
                 ITT_NOTIFY( sync_releasing, this );
                 array[token&(array_size-1)] = info_;
@@ -243,7 +243,7 @@ public:
 void input_buffer::grow( size_type minimum_size ) {
     size_type old_size = array_size;
     size_type new_size = old_size ? 2*old_size : initial_buffer_size;
-    while( new_size<minimum_size ) 
+    while( new_size<minimum_size )
         new_size*=2;
     task_info* new_array = cache_aligned_allocator<task_info>().allocate(new_size);
     task_info* old_array = array;
@@ -262,7 +262,7 @@ class stage_task: public task, public task_info {
 private:
     friend class tbb::pipeline;
     pipeline& my_pipeline;
-    filter* my_filter;  
+    filter* my_filter;
     //! True if this task has not yet read the input.
     bool my_at_start;
 
@@ -270,7 +270,7 @@ public:
     //! Construct stage_task for first stage in a pipeline.
     /** Such a stage has not read any input yet. */
     stage_task( pipeline& pipeline ) :
-        my_pipeline(pipeline), 
+        my_pipeline(pipeline),
         my_filter(pipeline.filter_list),
         my_at_start(true)
     {
@@ -279,7 +279,7 @@ public:
     //! Construct stage_task for a subsequent stage in a pipeline.
     stage_task( pipeline& pipeline, filter* filter_, const task_info& info ) :
         task_info(info),
-        my_pipeline(pipeline), 
+        my_pipeline(pipeline),
         my_filter(filter_),
         my_at_start(false)
     {}
@@ -292,7 +292,7 @@ public:
     //! The virtual task execution method
     /*override*/ task* execute();
 #if __TBB_TASK_GROUP_CONTEXT
-    ~stage_task()    
+    ~stage_task()
     {
         if (my_filter && my_object && (my_filter->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(4)) {
             __TBB_ASSERT(is_cancelled(), "Trying to finalize the task that wasn't cancelled");
@@ -304,7 +304,7 @@ public:
     //! Creates and spawns stage_task from task_info
     void spawn_stage_task(const task_info& info)
     {
-        stage_task* clone = new (allocate_additional_child_of(*parent())) 
+        stage_task* clone = new (allocate_additional_child_of(*parent()))
                                 stage_task( my_pipeline, my_filter, info );
         spawn(*clone);
     }
@@ -316,7 +316,7 @@ task* stage_task::execute() {
     if( my_at_start ) {
         if( my_filter->is_serial() ) {
             my_object = (*my_filter)(my_object);
-            if( my_object || ( my_filter->object_may_be_null() && !my_pipeline.end_of_input) ) 
+            if( my_object || ( my_filter->object_may_be_null() && !my_pipeline.end_of_input) )
             {
                 if( my_filter->is_ordered() ) {
                     my_token = my_pipeline.token_counter++; // ideally, with relaxed semantics
@@ -334,7 +334,7 @@ task* stage_task::execute() {
                         spawn( *new( allocate_additional_child_of(*parent()) ) stage_task( my_pipeline ) );
                 }
             } else {
-                my_pipeline.end_of_input = true; 
+                my_pipeline.end_of_input = true;
                 return NULL;
             }
         } else /*not is_serial*/ {
@@ -349,8 +349,8 @@ task* stage_task::execute() {
                 spawn( *new( allocate_additional_child_of(*parent()) ) stage_task( my_pipeline ) );
             my_object = (*my_filter)(my_object);
             if( !my_object && (!my_filter->object_may_be_null() || my_filter->my_input_buffer->my_tls_end_of_input()) )
-            { 
-                my_pipeline.end_of_input = true; 
+            {
+                my_pipeline.end_of_input = true;
                 if( (my_filter->my_filter_mode & my_filter->version_mask) >= __TBB_PIPELINE_VERSION(5) ) {
                     if( my_pipeline.has_thread_bound_filters )
                         my_pipeline.token_counter--;  // fix token_counter
@@ -364,7 +364,7 @@ task* stage_task::execute() {
         if( my_filter->is_serial() )
             my_filter->my_input_buffer->note_done(my_token, *this);
     }
-    my_filter = my_filter->next_filter_in_pipeline; 
+    my_filter = my_filter->next_filter_in_pipeline;
     if( my_filter ) {
         // There is another filter to execute.
         // Crank up priority a notch.
@@ -381,7 +381,7 @@ task* stage_task::execute() {
                     // Check if there is an item ready to process
                     if( my_filter && my_filter->my_input_buffer->return_item(*this, !my_filter->is_serial()))
                         goto process_another_stage;
-                } 
+                }
                 my_filter = NULL; // To prevent deleting my_object twice if exception occurs
                 return NULL;
             }
@@ -425,7 +425,7 @@ class pipeline_root_task: public task {
                 }
         if( do_segment_scanning ) {
             filter* current_filter = my_pipeline.filter_list->next_segment;
-            /* first non-thread-bound filter that follows thread-bound one 
+            /* first non-thread-bound filter that follows thread-bound one
             and may have valid items to process */
             filter* first_suitable_filter = current_filter;
             while( current_filter ) {
@@ -449,15 +449,15 @@ class pipeline_root_task: public task {
                         current_filter = first_suitable_filter;
                         __TBB_Yield();
                     }
-                } else { 
-                    /* The preceding pipeline segment is empty. 
+                } else {
+                    /* The preceding pipeline segment is empty.
                     Fast-forward to the next post-TBF segment. */
                     first_suitable_filter = first_suitable_filter->next_segment;
-                    current_filter = first_suitable_filter; 
+                    current_filter = first_suitable_filter;
                 }
             } /* while( current_filter ) */
             return NULL;
-        } else { 
+        } else {
             if( !my_pipeline.end_of_input ) {
                 recycle_as_continuation();
                 return this;
@@ -471,7 +471,7 @@ public:
         __TBB_ASSERT( my_pipeline.filter_list, NULL );
         filter* first = my_pipeline.filter_list;
         if( (first->my_filter_mode & first->version_mask) >= __TBB_PIPELINE_VERSION(5) ) {
-            // Scanning the pipeline for segments 
+            // Scanning the pipeline for segments
             filter* head_of_previous_segment = first;
             for(  filter* subfilter=first->next_filter_in_pipeline;
                   subfilter!=NULL;
@@ -495,17 +495,17 @@ public:
 
 // The class destroys end_counter and clears all input buffers if pipeline was cancelled.
 class pipeline_cleaner: internal::no_copy {
-    pipeline& my_pipeline;  
+    pipeline& my_pipeline;
 public:
-    pipeline_cleaner(pipeline& _pipeline) : 
+    pipeline_cleaner(pipeline& _pipeline) :
         my_pipeline(_pipeline)
     {}
     ~pipeline_cleaner(){
 #if __TBB_TASK_GROUP_CONTEXT
         if (my_pipeline.end_counter->is_cancelled()) // Pipeline was cancelled
-            my_pipeline.clear_filters(); 
+            my_pipeline.clear_filters();
 #endif
-        my_pipeline.end_counter = NULL;            
+        my_pipeline.end_counter = NULL;
     }
 };
 
@@ -525,7 +525,7 @@ void pipeline::clear_filters() {
 }
 #endif
 
-pipeline::pipeline() : 
+pipeline::pipeline() :
     filter_list(NULL),
     filter_end(NULL),
     end_counter(NULL),
@@ -544,7 +544,7 @@ void pipeline::clear() {
     filter* next;
     for( filter* f = filter_list; f; f=next ) {
         if( internal::input_buffer* b = f->my_input_buffer ) {
-            delete b; 
+            delete b;
             f->my_input_buffer = NULL;
         }
         next=f->next_filter_in_pipeline;
@@ -561,11 +561,11 @@ void pipeline::clear() {
 
 void pipeline::add_filter( filter& filter_ ) {
 #if TBB_USE_ASSERT
-    if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) ) 
+    if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) )
         __TBB_ASSERT( filter_.prev_filter_in_pipeline==filter::not_in_pipeline(), "filter already part of pipeline?" );
     __TBB_ASSERT( filter_.next_filter_in_pipeline==filter::not_in_pipeline(), "filter already part of pipeline?" );
     __TBB_ASSERT( !end_counter, "invocation of add_filter on running pipeline" );
-#endif    
+#endif
     if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) ) {
         filter_.my_pipeline = this;
         filter_.prev_filter_in_pipeline = filter_end;
@@ -580,7 +580,7 @@ void pipeline::add_filter( filter& filter_ ) {
     {
         if( !filter_end )
             filter_end = reinterpret_cast<filter*>(&filter_list);
-        
+
         *reinterpret_cast<filter**>(filter_end) = &filter_;
         filter_end = reinterpret_cast<filter*>(&filter_.next_filter_in_pipeline);
         *reinterpret_cast<filter**>(filter_end) = NULL;
@@ -591,7 +591,7 @@ void pipeline::add_filter( filter& filter_ ) {
                 has_thread_bound_filters = true;
             filter_.my_input_buffer = new internal::input_buffer( filter_.is_ordered(), filter_.is_bound() );
         }
-        else { 
+        else {
             if(filter_.prev_filter_in_pipeline) {
                 if(filter_.prev_filter_in_pipeline->is_bound()) {
                     // successors to bound filters must have an input_buffer
@@ -618,20 +618,20 @@ void pipeline::remove_filter( filter& filter_ ) {
     __TBB_ASSERT( filter_.prev_filter_in_pipeline!=filter::not_in_pipeline(), "filter not part of pipeline" );
     __TBB_ASSERT( filter_.next_filter_in_pipeline!=filter::not_in_pipeline(), "filter not part of pipeline" );
     __TBB_ASSERT( !end_counter, "invocation of remove_filter on running pipeline" );
-    if (&filter_ == filter_list) 
+    if (&filter_ == filter_list)
         filter_list = filter_.next_filter_in_pipeline;
     else {
-        __TBB_ASSERT( filter_.prev_filter_in_pipeline, "filter list broken?" ); 
+        __TBB_ASSERT( filter_.prev_filter_in_pipeline, "filter list broken?" );
         filter_.prev_filter_in_pipeline->next_filter_in_pipeline = filter_.next_filter_in_pipeline;
     }
     if (&filter_ == filter_end)
         filter_end = filter_.prev_filter_in_pipeline;
     else {
-        __TBB_ASSERT( filter_.next_filter_in_pipeline, "filter list broken?" ); 
+        __TBB_ASSERT( filter_.next_filter_in_pipeline, "filter list broken?" );
         filter_.next_filter_in_pipeline->prev_filter_in_pipeline = filter_.prev_filter_in_pipeline;
     }
     if( internal::input_buffer* b = filter_.my_input_buffer ) {
-        delete b; 
+        delete b;
         filter_.my_input_buffer = NULL;
     }
     filter_.next_filter_in_pipeline = filter_.prev_filter_in_pipeline = filter::not_in_pipeline();
@@ -657,7 +657,7 @@ void pipeline::run( size_t max_number_of_live_tokens
                 filter_list->my_input_buffer->sema_V();
             }
         }
-#if __TBB_TASK_GROUP_CONTEXT            
+#if __TBB_TASK_GROUP_CONTEXT
         end_counter = new( task::allocate_root(context) ) internal::pipeline_root_task( *this );
 #else
         end_counter = new( task::allocate_root() ) internal::pipeline_root_task( *this );
@@ -678,9 +678,9 @@ void pipeline::run( size_t max_number_of_live_tokens
 #if __TBB_TASK_GROUP_CONTEXT
 void pipeline::run( size_t max_number_of_live_tokens ) {
     if( filter_list ) {
-        // Construct task group context with the exception propagation mode expected 
+        // Construct task group context with the exception propagation mode expected
         // by the pipeline caller.
-        uintptr_t ctx_traits = filter_list->my_filter_mode & filter::exact_exception_propagation ? 
+        uintptr_t ctx_traits = filter_list->my_filter_mode & filter::exact_exception_propagation ?
                 task_group_context::default_traits :
                 task_group_context::default_traits & ~task_group_context::exact_exception;
         task_group_context context(task_group_context::bound, ctx_traits);
@@ -699,7 +699,7 @@ filter::~filter() {
     if ( (my_filter_mode & version_mask) >= __TBB_PIPELINE_VERSION(3) ) {
         if ( next_filter_in_pipeline != filter::not_in_pipeline() )
             my_pipeline->remove_filter(*this);
-        else 
+        else
             __TBB_ASSERT( prev_filter_in_pipeline == filter::not_in_pipeline(), "probably filter list is broken" );
     } else {
         __TBB_ASSERT( next_filter_in_pipeline==filter::not_in_pipeline(), "cannot destroy filter that is part of pipeline" );
@@ -738,7 +738,7 @@ thread_bound_filter::result_type thread_bound_filter::internal_process_item(bool
         if( my_pipeline->end_of_input )
             return end_of_stream;
         while(my_pipeline->input_tokens == 0) {
-            if( !is_blocking ) 
+            if( !is_blocking )
                 return item_not_available;
             my_input_buffer->sema_P();
         }
@@ -752,8 +752,8 @@ thread_bound_filter::result_type thread_bound_filter::internal_process_item(bool
             }
             my_pipeline->token_counter++; // ideally, with relaxed semantics
         } else {
-            my_pipeline->end_of_input = true; 
-            return end_of_stream; 
+            my_pipeline->end_of_input = true;
+            return end_of_stream;
         }
     } else { /* this is not an input filter */
         while(!my_input_buffer->has_item()) {
diff --git a/src/tbb/private_server.cpp b/src/tbb/private_server.cpp
index f795101..dce544f 100644
--- a/src/tbb/private_server.cpp
+++ b/src/tbb/private_server.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -356,9 +356,11 @@ void private_server::wake_some( int additional_slack ) {
         tbb::spin_mutex::scoped_lock lock(my_asleep_list_mutex);
         while( my_asleep_list_root && w<wakee+2 ) {
             if( additional_slack>0 ) {
+                if (additional_slack+my_slack<=0) // additional demand does not exceed surplus supply
+                    break;
                 --additional_slack;
             } else {
-                // Try to claim unit of slack
+                // Chain reaction; Try to claim unit of slack
                 int old;
                 do {
                     old = my_slack;
diff --git a/src/tbb/queuing_mutex.cpp b/src/tbb/queuing_mutex.cpp
index 5481f7f..0d4f578 100644
--- a/src/tbb/queuing_mutex.cpp
+++ b/src/tbb/queuing_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,13 +26,12 @@
     the GNU General Public License.
 */
 
+#include "tbb/queuing_mutex.h"
 #include "tbb/tbb_machine.h"
 #include "tbb/tbb_stddef.h"
 #include "tbb_misc.h"
-#include "tbb/queuing_mutex.h"
 #include "itt_notify.h"
 
-
 namespace tbb {
 
 using namespace internal;
diff --git a/src/tbb/queuing_rw_mutex.cpp b/src/tbb/queuing_rw_mutex.cpp
index 27eceb3..25eabfa 100644
--- a/src/tbb/queuing_rw_mutex.cpp
+++ b/src/tbb/queuing_rw_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -30,10 +30,10 @@
     with SPIN tool using <TBB directory>/tools/spin_models/ReaderWriterMutex.pml.
     There could be some code looking as "can be restructured" but its structure does matter! */
 
+#include "tbb/queuing_rw_mutex.h"
 #include "tbb/tbb_machine.h"
 #include "tbb/tbb_stddef.h"
 #include "tbb/tbb_machine.h"
-#include "tbb/queuing_rw_mutex.h"
 #include "itt_notify.h"
 
 
@@ -43,27 +43,22 @@ using namespace internal;
 
 //! Flag bits in a state_t that specify information about a locking request.
 enum state_t_flags {
-    STATE_NONE = 0,
-    STATE_WRITER = 1,
-    STATE_READER = 1<<1,
-    STATE_READER_UNBLOCKNEXT = 1<<2,
+    STATE_NONE                   = 0,
+    STATE_WRITER                 = 1<<0,
+    STATE_READER                 = 1<<1,
+    STATE_READER_UNBLOCKNEXT     = 1<<2,
+    STATE_ACTIVEREADER           = 1<<3,
+    STATE_UPGRADE_REQUESTED      = 1<<4,
+    STATE_UPGRADE_WAITING        = 1<<5,
+    STATE_UPGRADE_LOSER          = 1<<6,
     STATE_COMBINED_WAITINGREADER = STATE_READER | STATE_READER_UNBLOCKNEXT,
-    STATE_ACTIVEREADER = 1<<3,
-    STATE_COMBINED_READER = STATE_COMBINED_WAITINGREADER | STATE_ACTIVEREADER,
-    STATE_UPGRADE_REQUESTED = 1<<4,
-    STATE_UPGRADE_WAITING = 1<<5,
-    STATE_UPGRADE_LOSER = 1<<6,
-    STATE_COMBINED_UPGRADING = STATE_UPGRADE_WAITING | STATE_UPGRADE_LOSER
+    STATE_COMBINED_READER        = STATE_COMBINED_WAITINGREADER | STATE_ACTIVEREADER,
+    STATE_COMBINED_UPGRADING     = STATE_UPGRADE_WAITING | STATE_UPGRADE_LOSER
 };
 
 const unsigned char RELEASED = 0;
 const unsigned char ACQUIRED = 1;
 
-template<typename T>
-inline atomic<T>& as_atomic( T& t ) {
-    return *(atomic<T>*)&t;
-}
-
 inline bool queuing_rw_mutex::scoped_lock::try_acquire_internal_lock()
 {
     return as_atomic(my_internal_lock).compare_and_swap<tbb::acquire>(ACQUIRED,RELEASED) == RELEASED;
@@ -153,6 +148,7 @@ uintptr_t get_flag( queuing_rw_mutex::scoped_lock* ptr ) {
 // Methods of queuing_rw_mutex::scoped_lock
 //------------------------------------------------------------------------
 
+//! A method to acquire queuing_rw_mutex lock
 void queuing_rw_mutex::scoped_lock::acquire( queuing_rw_mutex& m, bool write )
 {
     __TBB_ASSERT( !my_mutex, "scoped_lock is already holding a mutex");
@@ -213,6 +209,8 @@ void queuing_rw_mutex::scoped_lock::acquire( queuing_rw_mutex& m, bool write )
                 spin_wait_until_eq(my_going, 1);
             }
         }
+
+        // The protected state must have been acquired here before it can be further released to any other reader(s):
         unsigned short old_state = my_state.compare_and_swap<tbb::acquire>(STATE_ACTIVEREADER, STATE_READER);
         if( old_state!=STATE_READER ) {
 #if DO_ITT_NOTIFY
@@ -236,6 +234,7 @@ void queuing_rw_mutex::scoped_lock::acquire( queuing_rw_mutex& m, bool write )
     __TBB_load_with_acquire(my_going);
 }
 
+//! A method to acquire queuing_rw_mutex if it is free
 bool queuing_rw_mutex::scoped_lock::try_acquire( queuing_rw_mutex& m, bool write )
 {
     __TBB_ASSERT( !my_mutex, "scoped_lock is already holding a mutex");
@@ -264,6 +263,7 @@ bool queuing_rw_mutex::scoped_lock::try_acquire( queuing_rw_mutex& m, bool write
     return true;
 }
 
+//! A method to release queuing_rw_mutex lock
 void queuing_rw_mutex::scoped_lock::release( )
 {
     __TBB_ASSERT(my_mutex!=NULL, "no lock acquired");
@@ -319,7 +319,7 @@ retry:
                     // Now owner of pred is waiting for _us_ to release its lock
                     pred->release_internal_lock();
                 }
-                else ; // The "in use" flag is back -> the predecessor didn't get it and will release itself; nothing to do
+                // else the "in use" flag is back -> the predecessor didn't get it and will release itself; nothing to do
 
                 tmp = NULL;
                 goto retry;
diff --git a/src/tbb/reader_writer_lock.cpp b/src/tbb/reader_writer_lock.cpp
index bd9e6a5..78c6177 100644
--- a/src/tbb/reader_writer_lock.cpp
+++ b/src/tbb/reader_writer_lock.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -31,36 +31,35 @@
 #include "tbb/tbb_exception.h"
 #include "itt_notify.h"
 
+#if defined(_MSC_VER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (disable: 4244)
+#endif
+
 namespace tbb {
 namespace interface5 {
 
-const unsigned WFLAG1 = 0x1;  // writer interested or active
-const unsigned WFLAG2 = 0x2;  // writers interested, no entering readers
-const unsigned RFLAG = 0x4;   // reader interested but not active
-const unsigned RC_INCR = 0x8; // to adjust reader count
+const uintptr_t WFLAG1 = 0x1;  // writer interested or active
+const uintptr_t WFLAG2 = 0x2;  // writers interested, no entering readers
+const uintptr_t RFLAG = 0x4;   // reader interested but not active
+const uintptr_t RC_INCR = 0x8; // to adjust reader count
 
 
-// Perform an atomic bitwise-OR on the operand with the addend, and return
-// the previous value of the operand.
-inline unsigned fetch_and_or(atomic<unsigned>& operand, unsigned addend) {
-    tbb::internal::atomic_backoff backoff;
-    for (;;) {
-        unsigned old = operand;
-        unsigned result = operand.compare_and_swap(old|addend, old);
-        if (result==old) return old;
-        backoff.pause();
+// Perform an atomic bitwise-OR on the operand, and return its previous value.
+inline uintptr_t fetch_and_or(atomic<uintptr_t>& operand, uintptr_t value) {
+    for (tbb::internal::atomic_backoff b;;b.pause()) {
+        uintptr_t old = operand;
+        uintptr_t result = operand.compare_and_swap(old|value, old);
+        if (result==old) return result;
     }
 }
 
-// Perform an atomic bitwise-AND on the operand with the addend, and return
-// the previous value of the operand.
-inline unsigned fetch_and_and(atomic<unsigned>& operand, unsigned addend) {
-    tbb::internal::atomic_backoff backoff;
-    for (;;) {
-        unsigned old = operand;
-        unsigned result = operand.compare_and_swap(old&addend, old);
-        if (result==old) return old;
-        backoff.pause();
+// Perform an atomic bitwise-AND on the operand, and return its previous value.
+inline uintptr_t fetch_and_and(atomic<uintptr_t>& operand, uintptr_t value) {
+    for (tbb::internal::atomic_backoff b;;b.pause()) {
+        uintptr_t old = operand;
+        uintptr_t result = operand.compare_and_swap(old&value, old);
+        if (result==old) return result;
     }
 }
 
@@ -99,8 +98,8 @@ void reader_writer_lock::internal_destroy() {
     __TBB_ASSERT(writer_head==NULL, "reader_writer_lock destroyed with pending/active writers.");
 }
 
-// Acquires the reader_writer_lock for write.    If the lock is currently held in write 
-// mode by another context, the writer will block by spinning on a local variable. 
+// Acquires the reader_writer_lock for write.    If the lock is currently held in write
+// mode by another context, the writer will block by spinning on a local variable.
 // Throws exception improper_lock if the context tries to acquire a
 // reader_writer_lock that it already has write ownership of.
 void reader_writer_lock::lock() {
@@ -115,7 +114,7 @@ void reader_writer_lock::lock() {
 }
 
 // Tries to acquire the reader_writer_lock for write.    This function does not block.
-// Return Value: True or false, depending on whether the lock is acquired or not.    
+// Return Value: True or false, depending on whether the lock is acquired or not.
 // If the lock is already held by this acquiring context, try_lock() returns false.
 bool reader_writer_lock::try_lock() {
     if (is_current_writer()) { // recursive lock attempt
@@ -127,7 +126,7 @@ bool reader_writer_lock::try_lock() {
         return start_write(a_writer_lock);
     }
 }
-    
+
 bool reader_writer_lock::start_write(scoped_lock *I) {
     tbb_thread::id id = this_tbb_thread::get_id();
     scoped_lock *pred = NULL;
@@ -141,7 +140,7 @@ bool reader_writer_lock::start_write(scoped_lock *I) {
         ITT_NOTIFY(sync_prepare, this);
         pred = writer_tail.fetch_and_store(I);
     }
-    if (pred) 
+    if (pred)
         pred->next = I;
     else {
         set_next_writer(I);
@@ -166,7 +165,7 @@ bool reader_writer_lock::start_write(scoped_lock *I) {
     my_current_writer = id;
     return true;
 }
-    
+
 void reader_writer_lock::set_next_writer(scoped_lock *W) {
     writer_head = W;
     if (W->status == waiting_nonblocking) {
@@ -180,15 +179,15 @@ void reader_writer_lock::set_next_writer(scoped_lock *W) {
         }
         else { // no reader in timing window
             __TBB_AtomicOR(&rdr_count_and_flags, WFLAG2);
-        } 
+        }
         spin_wait_while_geq(rdr_count_and_flags, RC_INCR); // block until readers finish
         W->status = active;
    }
 }
-    
+
 // Acquires the reader_writer_lock for read.    If the lock is currently held by a writer,
-// this reader will block and wait until the writers are done. 
-// Throws exception improper_lock when the context tries to acquire a reader_writer_lock 
+// this reader will block and wait until the writers are done.
+// Throws exception improper_lock when the context tries to acquire a reader_writer_lock
 // that it already has write ownership of.
 void reader_writer_lock::lock_read() {
     if (is_current_writer()) { // recursive lock attempt
@@ -200,9 +199,9 @@ void reader_writer_lock::lock_read() {
         start_read(&a_reader_lock);
     }
 }
-    
+
 // Tries to acquire the reader_writer_lock for read.    This function does not block.
-// Return Value: True or false, depending on whether the lock is acquired or not.    
+// Return Value: True or false, depending on whether the lock is acquired or not.
 bool reader_writer_lock::try_lock_read() {
     if (is_current_writer()) { // recursive lock attempt
         return false;
@@ -247,13 +246,13 @@ void reader_writer_lock::unblock_readers() {
     if (rdr_count_and_flags & WFLAG1 && !(rdr_count_and_flags & WFLAG2)) {
         __TBB_AtomicOR(&rdr_count_and_flags, WFLAG2);
     }
-    // unblock waiting readers 
+    // unblock waiting readers
     scoped_lock_read *head = reader_head.fetch_and_store(NULL);
     __TBB_ASSERT(head, NULL);
     __TBB_ASSERT(head->status == waiting, NULL);
     head->status = active;
 }
-    
+
 // Releases the reader_writer_lock
 void reader_writer_lock::unlock() {
     if( my_current_writer!=tbb_thread::id() ) {
@@ -269,7 +268,7 @@ void reader_writer_lock::unlock() {
         end_read();
     }
 }
-    
+
 void reader_writer_lock::end_write(scoped_lock *I) {
     __TBB_ASSERT(I==writer_head, "Internal error: can't unlock a thread that is not holding the lock.");
     my_current_writer = tbb_thread::id();
@@ -291,7 +290,7 @@ void reader_writer_lock::end_write(scoped_lock *I) {
         }
     }
 }
-    
+
 void reader_writer_lock::end_read() {
     ITT_NOTIFY(sync_releasing, this);
     __TBB_ASSERT(rdr_count_and_flags >= RC_INCR, "unlock() called but no readers hold the lock.");
@@ -302,7 +301,7 @@ inline bool reader_writer_lock::is_current_writer() {
     return my_current_writer==this_tbb_thread::get_id();
 }
 
-// Construct with a blocking attempt to acquire a write lock on the passed reader_writer_lock 
+// Construct with a blocking attempt to acquire a write lock on the passed reader_writer_lock
 void reader_writer_lock::scoped_lock::internal_construct (reader_writer_lock& lock) {
     mutex = &lock;
     next = NULL;
@@ -320,7 +319,7 @@ inline reader_writer_lock::scoped_lock::scoped_lock() : mutex(NULL), next(NULL)
     status = waiting;
 }
 
-// Construct with a blocking attempt to acquire a write lock on the passed reader_writer_lock 
+// Construct with a blocking attempt to acquire a write lock on the passed reader_writer_lock
 void reader_writer_lock::scoped_lock_read::internal_construct (reader_writer_lock& lock) {
     mutex = &lock;
     next = NULL;
@@ -333,7 +332,7 @@ void reader_writer_lock::scoped_lock_read::internal_construct (reader_writer_loc
         mutex->start_read(this);
     }
 }
-  
+
 inline reader_writer_lock::scoped_lock_read::scoped_lock_read() : mutex(NULL), next(NULL) {
     status = waiting;
 }
@@ -346,9 +345,9 @@ void reader_writer_lock::scoped_lock::internal_destroy() {
     status = invalid;
 }
 
-void reader_writer_lock::scoped_lock_read::internal_destroy() { 
-    if (mutex)  
-        mutex->end_read(); 
+void reader_writer_lock::scoped_lock_read::internal_destroy() {
+    if (mutex)
+        mutex->end_read();
     status = invalid;
 }
 
diff --git a/src/tbb/recursive_mutex.cpp b/src/tbb/recursive_mutex.cpp
index 6b5775b..2c848b6 100644
--- a/src/tbb/recursive_mutex.cpp
+++ b/src/tbb/recursive_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/scheduler.cpp b/src/tbb/scheduler.cpp
index 21874a8..bea35a0 100644
--- a/src/tbb/scheduler.cpp
+++ b/src/tbb/scheduler.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,7 +58,7 @@ uintptr_t the_context_state_propagation_epoch = 0;
 //! Context to be associated with dummy tasks of worker threads schedulers.
 /** It is never used for its direct purpose, and is introduced solely for the sake
     of avoiding one extra conditional branch in the end of wait_for_all method. **/
-static task_group_context dummy_context(task_group_context::isolated);
+static task_group_context the_dummy_context(task_group_context::isolated);
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
 void Scheduler_OneTimeInitialization ( bool itt_present ) {
@@ -67,7 +67,7 @@ void Scheduler_OneTimeInitialization ( bool itt_present ) {
 #if __TBB_TASK_GROUP_CONTEXT && __TBB_TASK_PRIORITY
     // There are no tasks belonging to this fake task group. So it should never
     // prevent tasks from being passed to execution.
-    dummy_context.my_priority = num_priority_levels - 1;
+    the_dummy_context.my_priority = num_priority_levels - 1;
 #endif /* __TBB_TASK_GROUP_CONTEXT && __TBB_TASK_PRIORITY */
 }
 
@@ -112,7 +112,7 @@ generic_scheduler::generic_scheduler( arena* a, size_t index )
     , my_small_task_count(1)   // Extra 1 is a guard reference
     , my_return_list(NULL)
 #if __TBB_TASK_GROUP_CONTEXT
-    , my_local_ctx_list_update(0)
+    , my_local_ctx_list_update(make_atomic(uintptr_t(0)))
 #endif /* __TBB_TASK_GROUP_CONTEXT */
     , my_dispatching_task(NULL)
 #if __TBB_TASK_PRIORITY
@@ -124,13 +124,15 @@ generic_scheduler::generic_scheduler( arena* a, size_t index )
     , my_pool_reshuffling_pending(false)
 #endif /* __TBB_TASK_PRIORITY */
 #if __TBB_TASK_GROUP_CONTEXT
-    , my_nonlocal_ctx_list_update(0)
+    , my_nonlocal_ctx_list_update(make_atomic(uintptr_t(0)))
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 #if __TBB_SURVIVE_THREAD_SWITCH && TBB_USE_ASSERT
     , my_cilk_state(cs_none)
 #endif /* __TBB_SURVIVE_THREAD_SWITCH && TBB_USE_ASSERT */
 {
     my_dummy_slot.task_pool = allocate_task_pool(min_task_pool_size);
+    my_dummy_slot.hint_for_push = index ^ unsigned(this-(generic_scheduler*)NULL)>>16; // randomizer seed
+    my_dummy_slot.hint_for_pop  = index; // initial value for round-robin
     __TBB_ASSERT( my_task_pool_size == min_task_pool_size, NULL );
     __TBB_store_relaxed(my_dummy_slot.head, 0);
     __TBB_store_relaxed(my_dummy_slot.tail, 0);
@@ -210,6 +212,7 @@ void generic_scheduler::init_stack_info () {
     // non-portable method (on all modern Linux) or the simplified approach
     // based on the common sense assumptions. The most important assumption
     // is that the main thread's stack size is not less than that of other threads.
+    // See also comment 3 at the end of this file
     void    *stack_base = &stack_size;
 #if __TBB_ipf
     void    *rsb_base = __TBB_get_bsp();
@@ -217,27 +220,25 @@ void generic_scheduler::init_stack_info () {
 #if __linux__
     size_t  np_stack_size = 0;
     void    *stack_limit = NULL;
-    pthread_attr_t  attr_stack, np_attr_stack;
-    #if __bgp__
+    pthread_attr_t  np_attr_stack;
+#if __bgp__
     // Workaround pthread_attr_init() before pthread_getattr_np() prevents subsequent abort() in pthread_attr_destroy() when
     // freeing an erroneously invalid pointer value for cpuset (refers to the implementation of opaque type pthread_attr_t).
     if( 0 == pthread_attr_init(&np_attr_stack) )
-    #endif
+#endif
     if( 0 == pthread_getattr_np(pthread_self(), &np_attr_stack) ) {
         if ( 0 == pthread_attr_getstack(&np_attr_stack, &stack_limit, &np_stack_size) ) {
+#if __TBB_ipf
+            pthread_attr_t  attr_stack;
             if ( 0 == pthread_attr_init(&attr_stack) ) {
-                if ( 0 == pthread_attr_getstacksize(&attr_stack, &stack_size) )
-                {
-                    stack_base = (char*)stack_limit + np_stack_size;
+                if ( 0 == pthread_attr_getstacksize(&attr_stack, &stack_size) ) {
                     if ( np_stack_size < stack_size ) {
                         // We are in a secondary thread. Use reliable data.
-#if __TBB_ipf
                         // IA64 stack is split into RSE backup and memory parts
                         rsb_base = stack_limit;
                         stack_size = np_stack_size/2;
-#else
-                        stack_size = np_stack_size;
-#endif /* !__TBB_ipf */
+                        // Limit of the memory part of the stack
+                        stack_limit = (char*)stack_limit + stack_size;
                     }
                     // We are either in the main thread or this thread stack
                     // is bigger that that of the main one. As we cannot discern
@@ -245,15 +246,17 @@ void generic_scheduler::init_stack_info () {
                 }
                 pthread_attr_destroy(&attr_stack);
             }
+            // IA64 stack is split into RSE backup and memory parts
+            my_rsb_stealing_threshold = (uintptr_t)((char*)rsb_base + stack_size/2);
+#endif /* __TBB_ipf */
+            // Size of the stack free part 
+            stack_size = size_t((char*)stack_base - (char*)stack_limit);
         }
         pthread_attr_destroy(&np_attr_stack);
     }
 #endif /* __linux__ */
     __TBB_ASSERT( stack_size>0, "stack size must be positive" );
     my_stealing_threshold = (uintptr_t)((char*)stack_base - stack_size/2);
-#if __TBB_ipf
-    my_rsb_stealing_threshold = (uintptr_t)((char*)rsb_base + stack_size/2);
-#endif
 #endif /* USE_PTHREAD */
 }
 
@@ -267,7 +270,7 @@ void generic_scheduler::cleanup_local_context_list () {
     // Detach contexts remaining in the local list
     bool wait_for_concurrent_destroyers_to_leave = false;
     uintptr_t local_count_snapshot = my_context_state_propagation_epoch;
-    my_local_ctx_list_update = 1;
+    my_local_ctx_list_update.store<relaxed>(1);
     {
         // This is just a definition. Actual lock is acquired only in case of conflict.
         spin_mutex::scoped_lock lock;
@@ -275,7 +278,7 @@ void generic_scheduler::cleanup_local_context_list () {
         // load from my_nonlocal_ctx_list_update.
         atomic_fence();
         // Check for the conflict with concurrent destroyer or cancelation propagator
-        if ( my_nonlocal_ctx_list_update || local_count_snapshot != the_context_state_propagation_epoch )
+        if ( my_nonlocal_ctx_list_update.load<relaxed>() || local_count_snapshot != the_context_state_propagation_epoch )
             lock.acquire(my_context_list_mutex);
         // No acquire fence is necessary for loading my_context_list_head.my_next,
         // as the list can be updated by this thread only.
@@ -291,7 +294,7 @@ void generic_scheduler::cleanup_local_context_list () {
                 wait_for_concurrent_destroyers_to_leave = true;
         }
     }
-    __TBB_store_with_release( my_local_ctx_list_update, 0 );
+    my_local_ctx_list_update.store<release>(0);
     // Wait until other threads referencing this scheduler object finish with it
     if ( wait_for_concurrent_destroyers_to_leave )
         spin_wait_until_eq( my_nonlocal_ctx_list_update, 0u );
@@ -340,7 +343,7 @@ task& generic_scheduler::allocate_task( size_t number_of_bytes,
             my_free_list = t->prefix().next;
         } else if( my_return_list ) {
             // No fence required for read of my_return_list above, because __TBB_FetchAndStoreW has a fence.
-            t = (task*)__TBB_FetchAndStoreW( &my_return_list, 0 );
+            t = (task*)__TBB_FetchAndStoreW( &my_return_list, 0 ); // with acquire
             __TBB_ASSERT( t, "another thread emptied the my_return_list" );
             __TBB_ASSERT( t->prefix().origin==this, "task returned to wrong my_return_list" );
             ITT_NOTIFY( sync_acquired, &my_return_list );
@@ -650,6 +653,7 @@ void generic_scheduler::local_enqueue( task& t
     __TBB_ASSERT( governor::is_set(this), NULL );
     __TBB_ASSERT( t.state()==task::allocated, "attempt to enqueue task that is not in 'allocated' state" );
     t.prefix().state = task::ready;
+    t.prefix().extra_state |= es_task_enqueued; // enqueued task marker
 
 #if TBB_USE_ASSERT
     if( task* parent = t.parent() ) {
@@ -932,6 +936,7 @@ task* generic_scheduler::steal_task( arena_slot& victim_slot ) {
     task* result = NULL;
     size_t H = __TBB_load_relaxed(victim_slot.head); // mirror
     const size_t H0 = H;
+    int skip_and_bump = 0; // +1 for skipped task and +1 for bumped head&tail
 retry:
     __TBB_store_relaxed( victim_slot.head, ++H );
     atomic_fence();
@@ -939,6 +944,7 @@ retry:
         // Stealing attempt failed, deque contents has not been changed by us
         GATHER_STATISTIC( ++my_counters.thief_backoffs );
         __TBB_store_relaxed( victim_slot.head, /*dead: H = */ H0 );
+        skip_and_bump++; // trigger that we bumped head and tail
         __TBB_ASSERT ( !result, NULL );
     }
     else {
@@ -952,6 +958,8 @@ retry:
             {
                 GATHER_STATISTIC( ++my_counters.proxies_bypassed );
                 result = NULL;
+                __TBB_ASSERT( skip_and_bump < 2, NULL );
+                skip_and_bump = 1; // note we skipped a task
                 goto retry;
             }
         }
@@ -970,10 +978,18 @@ retry:
             // These changes in the deque must be released to the owner.
             memmove( victim_pool + H1, victim_pool + H0, (H - H1) * sizeof(task*) );
             __TBB_store_with_release( victim_slot.head, /*dead: H = */ H1 );
+            if ( (intptr_t)H >= (intptr_t)__TBB_load_relaxed(victim_slot.tail) )
+                skip_and_bump++; // trigger that we bumped head and tail
         }
         poison_pointer( victim_pool[H0] );
     }
     unlock_task_pool( &victim_slot, victim_pool );
+    __TBB_ASSERT( skip_and_bump <= 2, NULL );
+    if( --skip_and_bump > 0 ) { // if both: task skipped and head&tail bumped
+        // Synchronize with snapshot as we bumped head and tail which can falsely trigger EMPTY state
+        atomic_fence();
+        my_arena->advertise_new_work</*Spawned=*/true>();
+    }
     return result;
 }
 
@@ -1018,7 +1034,7 @@ void generic_scheduler::leave_arena() {
 generic_scheduler* generic_scheduler::create_worker( market& m, size_t index ) {
     generic_scheduler* s = allocate_scheduler( NULL, index );
 #if __TBB_TASK_GROUP_CONTEXT
-    s->my_dummy_task->prefix().context = &dummy_context;
+    s->my_dummy_task->prefix().context = &the_dummy_context;
     // Sync up the local cancellation state with the global one. No need for fence here.
     s->my_context_state_propagation_epoch = the_context_state_propagation_epoch;
 #endif /* __TBB_TASK_GROUP_CONTEXT */
@@ -1075,12 +1091,11 @@ generic_scheduler* generic_scheduler::create_master( arena& a ) {
     return s;
 }
 
-void generic_scheduler::cleanup_worker( void* arg, bool is_worker ) {
+void generic_scheduler::cleanup_worker( void* arg, bool worker ) {
     generic_scheduler& s = *(generic_scheduler*)arg;
     __TBB_ASSERT( s.my_dummy_slot.task_pool, "cleaning up worker with missing task pool" );
-// APM TODO: Decide how observers should react to each entry/leave to/from arena
 #if __TBB_SCHEDULER_OBSERVER
-    s.notify_exit_observers( is_worker );
+    s.notify_exit_observers( worker );
 #endif /* __TBB_SCHEDULER_OBSERVER */
     // When comparing "head" and "tail" indices ">=" is used because this worker's
     // task pool may still be published in the arena, and thieves can optimistically
@@ -1095,7 +1110,7 @@ void generic_scheduler::cleanup_master() {
     generic_scheduler& s = *this; // for similarity with cleanup_worker
     __TBB_ASSERT( s.my_dummy_slot.task_pool, "cleaning up master with missing task pool" );
 #if __TBB_SCHEDULER_OBSERVER
-    s.notify_exit_observers(/*is_worker=*/false);
+    s.notify_exit_observers(/*worker=*/false);
 #endif /* __TBB_SCHEDULER_OBSERVER */
     if( in_arena() ) {
         acquire_task_pool();
@@ -1142,7 +1157,7 @@ void generic_scheduler::cleanup_master() {
 #if __TBB_STATISTICS_EARLY_DUMP
     GATHER_STATISTIC( a->dump_arena_statistics() );
 #endif
-    a->on_thread_leaving();
+    a->on_thread_leaving( /*is_master*/ true );
 }
 
 #if __TBB_SCHEDULER_OBSERVER
@@ -1150,8 +1165,8 @@ void generic_scheduler::cleanup_master() {
         my_local_last_observer_proxy = observer_proxy::process_list(my_local_last_observer_proxy,is_worker(),/*is_entry=*/true);
     }
 
-    void generic_scheduler::notify_exit_observers( bool is_worker ) {
-        observer_proxy::process_list(my_local_last_observer_proxy,is_worker,/*is_entry=*/false);
+    void generic_scheduler::notify_exit_observers( bool worker ) {
+        observer_proxy::process_list(my_local_last_observer_proxy,worker,/*is_entry=*/false);
     }
 #endif /* __TBB_SCHEDULER_OBSERVER */
 
diff --git a/src/tbb/scheduler.h b/src/tbb/scheduler.h
index a5f14f8..9260cff 100644
--- a/src/tbb/scheduler.h
+++ b/src/tbb/scheduler.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -296,7 +296,7 @@ class generic_scheduler: public scheduler, public ::rml::job {
     static generic_scheduler* create_worker( market& m, size_t index );
 
     //! Perform necessary cleanup when a worker thread finishes.
-    static void cleanup_worker( void* arg, bool is_worker );
+    static void cleanup_worker( void* arg, bool worker );
 
 protected:
     generic_scheduler( arena*, size_t index );
@@ -395,7 +395,7 @@ public:
     void free_nonlocal_small_task( task& t ); 
 
 #if __TBB_TASK_GROUP_CONTEXT
-    //! Padding isolating thread local members from members that can be written to by other threads.
+    //! Padding isolating thread-local members from members that can be written to by other threads.
     char _padding1[NFS_MaxLineSize - sizeof(context_list_node_t)];
 
     //! Head of the thread specific list of task group contexts.
@@ -417,7 +417,7 @@ public:
     /** Together with my_nonlocal_ctx_list_update constitute synchronization protocol
         that keeps hot path of context destruction (by the owner thread) mostly 
         lock-free. **/
-    uintptr_t my_local_ctx_list_update;
+    tbb::atomic<uintptr_t> my_local_ctx_list_update;
 
     //! Task, in the context of which the current TBB dispatch loop is running.
     /** Outside of or in the outermost dispatch loop (not in a nested call to
@@ -490,7 +490,7 @@ private:
 #if __TBB_TASK_GROUP_CONTEXT
     //! Flag indicating that a context is being destructed by non-owner thread.
     /** See also my_local_ctx_list_update. **/
-    uintptr_t my_nonlocal_ctx_list_update;
+    tbb::atomic<uintptr_t> my_nonlocal_ctx_list_update;
 #endif /* __TBB_TASK_GROUP_CONTEXT */
 
 #if __TBB_SURVIVE_THREAD_SWITCH
@@ -683,7 +683,7 @@ inline intptr_t generic_scheduler::effective_reference_priority () const {
             ? *my_ref_top_priority : my_arena->my_top_priority;
 }
 
-inline void generic_scheduler::offload_task ( task& t, intptr_t p ) {
+inline void generic_scheduler::offload_task ( task& t, intptr_t /*priority*/ ) {
     GATHER_STATISTIC( ++my_counters.prio_tasks_offloaded );
     __TBB_ASSERT( my_offloaded_task_list_tail_link && !*my_offloaded_task_list_tail_link, NULL );
 #if TBB_USE_ASSERT
diff --git a/src/tbb/scheduler_common.h b/src/tbb/scheduler_common.h
index f5f089c..aab2cf1 100644
--- a/src/tbb/scheduler_common.h
+++ b/src/tbb/scheduler_common.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -99,7 +99,7 @@ static const priority_t priority_from_normalized_rep[num_priority_levels] = {
 };
 
 inline void assert_priority_valid ( intptr_t& p ) {
-    __TBB_ASSERT( p >= 0 && p < num_priority_levels, NULL );
+    __TBB_ASSERT_EX( p >= 0 && p < num_priority_levels, NULL );
 }
 
 inline intptr_t& priority ( task& t ) {
@@ -138,6 +138,8 @@ enum task_extra_state {
     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 enqueued tasks
+    es_task_enqueued = 0x10,
     //! Tag for v3 task_proxy.
     es_task_proxy = 0x20,
     //! Set if ref_count might be changed by another thread.  Used for debugging.
@@ -146,6 +148,10 @@ enum task_extra_state {
     es_task_is_stolen = 0x80
 };
 
+inline void reset_extra_state ( task *t ) {
+    t->prefix().extra_state &= ~(es_task_is_stolen | es_task_enqueued);
+}
+
 //! Optimization hint to free_task that enables it omit unnecessary tests and code.
 enum free_task_hint {
     //! No hint
@@ -166,16 +172,10 @@ enum free_task_hint {
 
 #if TBB_USE_ASSERT
 
-static const uintptr_t venom =
-#if __TBB_WORDSIZE == 8
-        0xDDEEAADDDEADBEEF;
-#else
-        0xDEADBEEF;
-#endif
+static const uintptr_t venom = tbb::internal::size_t_select(0xDEADBEEFU,0xDDEEAADDDEADBEEFULL);
 
-/** Crazy conversion is necessary to shut up insane MS compiler. **/
 template <typename T>
-void poison_value ( T& val ) { val = *(T*)(uintptr_t*)&venom; }
+void poison_value ( T& val ) { val = * punned_cast<T*>(&venom); }
 
 /** Expected to be used in assertions only, thus no empty form is defined. **/
 inline bool is_alive( uintptr_t v ) { return v != venom; }
diff --git a/src/tbb/scheduler_utility.h b/src/tbb/scheduler_utility.h
index ff7d616..debba23 100644
--- a/src/tbb/scheduler_utility.h
+++ b/src/tbb/scheduler_utility.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -103,14 +103,14 @@ public:
     /** Can only be used when T is a POD type, as copying does not invoke copy constructors. **/
     void copy_memory ( T* dst ) const
     {
-        size_t size = m_cur_segment_size - m_pos;
-        memcpy( dst, m_cur_segment + m_pos, size * sizeof(T) );
-        dst += size;
-        size = m_cur_segment_size / 2;
+        size_t sz = m_cur_segment_size - m_pos;
+        memcpy( dst, m_cur_segment + m_pos, sz * sizeof(T) );
+        dst += sz;
+        sz = m_cur_segment_size / 2;
         for ( long i = (long)m_num_segments - 2; i >= 0; --i ) {
-            memcpy( dst, m_segments[i], size * sizeof(T) );
-            dst += size;
-            size /= 2;
+            memcpy( dst, m_segments[i], sz * sizeof(T) );
+            dst += sz;
+            sz /= 2;
         }
     }
 
diff --git a/src/tbb/semaphore.cpp b/src/tbb/semaphore.cpp
index f69af7f..ba931af 100644
--- a/src/tbb/semaphore.cpp
+++ b/src/tbb/semaphore.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/semaphore.h b/src/tbb/semaphore.h
index 70d85e5..3148361 100644
--- a/src/tbb/semaphore.h
+++ b/src/tbb/semaphore.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 6e6d38c..ab09c73 100644
--- a/src/tbb/spin_mutex.cpp
+++ b/src/tbb/spin_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 506a7ed..4323487 100644
--- a/src/tbb/spin_rw_mutex.cpp
+++ b/src/tbb/spin_rw_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,7 +39,7 @@ namespace tbb {
 
 template<typename T> // a template can work with private spin_rw_mutex::state_t
 static inline T CAS(volatile T &addr, T newv, T oldv) {
-    // ICC (9.1 and 10.1 tried) unable to do implicit conversion 
+    // ICC (9.1 and 10.1 tried) unable to do implicit conversion
     // from "volatile T*" to "volatile void*", so explicit cast added.
     return T(__TBB_CompareAndSwapW((volatile void *)&addr, (intptr_t)newv, (intptr_t)oldv));
 }
@@ -48,8 +48,7 @@ static inline T CAS(volatile T &addr, T newv, T oldv) {
 bool spin_rw_mutex_v3::internal_acquire_writer()
 {
     ITT_NOTIFY(sync_prepare, this);
-    internal::atomic_backoff backoff;
-    for(;;) {
+    for( internal::atomic_backoff backoff;;backoff.pause() ){
         state_t s = const_cast<volatile state_t&>(state); // ensure reloading
         if( !(s & BUSY) ) { // no readers, no writers
             if( CAS(state, WRITER, s)==s )
@@ -58,25 +57,23 @@ bool spin_rw_mutex_v3::internal_acquire_writer()
         } else if( !(s & WRITER_PENDING) ) { // no pending writers
             __TBB_AtomicOR(&state, WRITER_PENDING);
         }
-        backoff.pause();
     }
     ITT_NOTIFY(sync_acquired, this);
     return false;
 }
 
 //! Release writer lock on the given mutex
-void spin_rw_mutex_v3::internal_release_writer() 
+void spin_rw_mutex_v3::internal_release_writer()
 {
     ITT_NOTIFY(sync_releasing, this);
     __TBB_AtomicAND( &state, READERS );
 }
 
 //! Acquire read lock on given mutex.
-void spin_rw_mutex_v3::internal_acquire_reader() 
+void spin_rw_mutex_v3::internal_acquire_reader()
 {
     ITT_NOTIFY(sync_prepare, this);
-    internal::atomic_backoff backoff;
-    for(;;) {
+    for( internal::atomic_backoff backoff;;backoff.pause() ){
         state_t s = const_cast<volatile state_t&>(state); // ensure reloading
         if( !(s & (WRITER|WRITER_PENDING)) ) { // no writer or write requests
             state_t t = (state_t)__TBB_FetchAndAddW( &state, (intptr_t) ONE_READER );
@@ -85,7 +82,6 @@ void spin_rw_mutex_v3::internal_acquire_reader()
             // writer got there first, undo the increment
             __TBB_FetchAndAddW( &state, -(intptr_t)ONE_READER );
         }
-        backoff.pause();
     }
 
     ITT_NOTIFY(sync_acquired, this);
@@ -93,8 +89,8 @@ void spin_rw_mutex_v3::internal_acquire_reader()
 }
 
 //! Upgrade reader to become a writer.
-/** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
-bool spin_rw_mutex_v3::internal_upgrade() 
+/** Returns whether the upgrade happened without releasing and re-acquiring the lock */
+bool spin_rw_mutex_v3::internal_upgrade()
 {
     state_t s = state;
     __TBB_ASSERT( s & READERS, "invalid state before upgrade: no readers " );
@@ -104,14 +100,11 @@ bool spin_rw_mutex_v3::internal_upgrade()
     while( (s & READERS)==ONE_READER || !(s & WRITER_PENDING) ) {
         state_t old_s = s;
         if( (s=CAS(state, s | WRITER | WRITER_PENDING, s))==old_s ) {
-            internal::atomic_backoff backoff;
             ITT_NOTIFY(sync_prepare, this);
-            // the state should be 0...0111, i.e. 1 reader and waiting writer;
-            // both new readers and writers are blocked
-            while( (state & READERS) != ONE_READER ) // more than 1 reader
-                backoff.pause(); 
+            for( internal::atomic_backoff backoff; (state & READERS) != ONE_READER; )
+                backoff.pause(); // while more than 1 reader
             __TBB_ASSERT((state&(WRITER_PENDING|WRITER))==(WRITER_PENDING|WRITER),"invalid state when upgrading to writer");
-
+            // both new readers and writers are blocked at this time
             __TBB_FetchAndAddW( &state,  - (intptr_t)(ONE_READER+WRITER_PENDING));
             ITT_NOTIFY(sync_acquired, this);
             return true; // successfully upgraded
@@ -167,7 +160,6 @@ bool spin_rw_mutex_v3::internal_try_acquire_reader()
     return false;
 }
 
-
 void spin_rw_mutex_v3::internal_construct() {
     ITT_SYNC_CREATE(this, _T("tbb::spin_rw_mutex"), _T(""));
 }
diff --git a/src/tbb/task.cpp b/src/tbb/task.cpp
index ffe797f..6b0faa4 100644
--- a/src/tbb/task.cpp
+++ b/src/tbb/task.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/task_group_context.cpp b/src/tbb/task_group_context.cpp
index 3b2f3d7..f2c18cb 100644
--- a/src/tbb/task_group_context.cpp
+++ b/src/tbb/task_group_context.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -57,8 +57,8 @@ captured_exception::~captured_exception () throw() {
     clear();
 }
 
-void captured_exception::set ( const char* name, const char* info ) throw() {
-    my_exception_name = duplicate_string( name );
+void captured_exception::set ( const char* a_name, const char* info ) throw() {
+    my_exception_name = duplicate_string( a_name );
     my_exception_info = duplicate_string( info );
 }
 
@@ -87,10 +87,10 @@ void captured_exception::destroy () throw() {
     }
 }
 
-captured_exception* captured_exception::allocate ( const char* name, const char* info ) {
+captured_exception* captured_exception::allocate ( const char* a_name, const char* info ) {
     captured_exception *e = (captured_exception*)allocate_via_handler_v3( sizeof(captured_exception) );
     if ( e ) {
-        ::new (e) captured_exception(name, info);
+        ::new (e) captured_exception(a_name, info);
         e->my_dynamic = true;
     }
     return e;
@@ -153,15 +153,15 @@ task_group_context::~task_group_context () {
         if ( governor::is_set(my_owner) ) {
             // Local update of the context list 
             uintptr_t local_count_snapshot = my_owner->my_context_state_propagation_epoch;
-            my_owner->my_local_ctx_list_update = 1;
+            my_owner->my_local_ctx_list_update.store<relaxed>(1);
             // Prevent load of nonlocal update flag from being hoisted before the
             // store to local update flag.
             atomic_fence();
-            if ( my_owner->my_nonlocal_ctx_list_update ) {
+            if ( my_owner->my_nonlocal_ctx_list_update.load<relaxed>() ) {
                 spin_mutex::scoped_lock lock(my_owner->my_context_list_mutex);
                 my_node.my_prev->my_next = my_node.my_next;
                 my_node.my_next->my_prev = my_node.my_prev;
-                my_owner->my_local_ctx_list_update = 0;
+                my_owner->my_local_ctx_list_update.store<relaxed>(0);
             }
             else {
                 my_node.my_prev->my_next = my_node.my_next;
@@ -169,7 +169,7 @@ task_group_context::~task_group_context () {
                 // Release fence is necessary so that update of our neighbors in 
                 // the context list was committed when possible concurrent destroyer
                 // proceeds after local update flag is reset by the following store.
-                __TBB_store_with_release( my_owner->my_local_ctx_list_update, 0 );
+                my_owner->my_local_ctx_list_update.store<release>(0);
                 if ( local_count_snapshot != the_context_state_propagation_epoch ) {
                     // Another thread was propagating cancellation request when we removed
                     // ourselves from the list. We must ensure that it is not accessing us 
@@ -180,19 +180,23 @@ task_group_context::~task_group_context () {
             }
         }
         else {
-            // Nonlocal update of the context list 
+            // Nonlocal update of the context list
+            // Synchronizes with generic_scheduler::free_scheduler()
             if ( __TBB_FetchAndStoreW(&my_kind, dying) == detached ) {
                 my_node.my_prev->my_next = my_node.my_next;
                 my_node.my_next->my_prev = my_node.my_prev;
             }
             else {
-                __TBB_FetchAndAddW(&my_owner->my_nonlocal_ctx_list_update, 1);
+                //TODO: evaluate and perhaps relax
+                my_owner->my_nonlocal_ctx_list_update.fetch_and_increment<full_fence>();
+                //TODO: evaluate and perhaps remove
                 spin_wait_until_eq( my_owner->my_local_ctx_list_update, 0u );
                 my_owner->my_context_list_mutex.lock();
                 my_node.my_prev->my_next = my_node.my_next;
                 my_node.my_next->my_prev = my_node.my_prev;
                 my_owner->my_context_list_mutex.unlock();
-                __TBB_FetchAndAddW(&my_owner->my_nonlocal_ctx_list_update, -1);
+                //TODO: evaluate and perhaps relax
+                my_owner->my_nonlocal_ctx_list_update.fetch_and_decrement<full_fence>();
             }
         }
     }
@@ -224,24 +228,24 @@ void task_group_context::register_with ( generic_scheduler *local_sched ) {
     my_node.my_prev = &local_sched->my_context_list_head;
     // Notify threads that may be concurrently destroying contexts registered
     // in this scheduler's list that local list update is underway.
-    local_sched->my_local_ctx_list_update = 1;
+    local_sched->my_local_ctx_list_update.store<relaxed>(1);
     // Prevent load of global propagation epoch counter from being hoisted before 
     // speculative stores above, as well as load of nonlocal update flag from
     // being hoisted before the store to local update flag.
     atomic_fence();
     // Finalize local context list update
-    if ( local_sched->my_nonlocal_ctx_list_update ) {
+    if ( local_sched->my_nonlocal_ctx_list_update.load<relaxed>() ) {
         spin_mutex::scoped_lock lock(my_owner->my_context_list_mutex);
         local_sched->my_context_list_head.my_next->my_prev = &my_node;
         my_node.my_next = local_sched->my_context_list_head.my_next;
-        my_owner->my_local_ctx_list_update = 0;
+        my_owner->my_local_ctx_list_update.store<relaxed>(0);
         local_sched->my_context_list_head.my_next = &my_node;
     }
     else {
         local_sched->my_context_list_head.my_next->my_prev = &my_node;
         my_node.my_next = local_sched->my_context_list_head.my_next;
-        __TBB_store_with_release( my_owner->my_local_ctx_list_update, 0 );
-        // Thread local list of contexts allows concurrent traversal by another thread 
+        my_owner->my_local_ctx_list_update.store<release>(0);
+        // Thread-local list of contexts allows concurrent traversal by another thread
         // while propagating state change. To ensure visibility of my_node's members
         // to the concurrently traversing thread, the list's head is updated by means
         // of store-with-release.
diff --git a/src/tbb/task_stream.h b/src/tbb/task_stream.h
index a26bc2d..bba51c9 100644
--- a/src/tbb/task_stream.h
+++ b/src/tbb/task_stream.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -107,7 +107,7 @@ public:
             spin_mutex::scoped_lock lock;
             if( lock.try_acquire(lanes[idx].my_mutex) ) {
                 lanes[idx].my_queue.push_back(source);
-                set_one_bit( population, idx );
+                set_one_bit( population, idx ); //TODO: avoid atomic op if the bit is already set
                 break;
             }
         }
diff --git a/src/tbb/tbb_assert_impl.h b/src/tbb/tbb_assert_impl.h
index 3ef322f..700023d 100644
--- a/src/tbb/tbb_assert_impl.h
+++ b/src/tbb/tbb_assert_impl.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -49,7 +49,11 @@
 
 using namespace std;
 
+#if __TBBMALLOC_BUILD
+namespace rml { namespace internal {
+#else
 namespace tbb {
+#endif
     //! Type for an assertion handler
     typedef void(*assertion_handler_type)( const char* filename, int line, const char* expression, const char * comment );
 
@@ -87,6 +91,7 @@ namespace tbb {
 #   define vsnprintf _vsnprintf
 #endif
 
+#if !__TBBMALLOC_BUILD
     namespace internal {
         //! Report a runtime warning.
         void __TBB_EXPORTED_FUNC runtime_warning( const char* format, ... )
@@ -94,8 +99,14 @@ namespace tbb {
             char str[1024]; memset(str, 0, 1024);
             va_list args; va_start(args, format);
             vsnprintf( str, 1024-1, format, args);
+            va_end(args);
             fprintf( stderr, "TBB Warning: %s\n", str);
         }
     } // namespace internal
+#endif
 
-} /* namespace tbb */
+#if __TBBMALLOC_BUILD
+}} // namespaces rml::internal
+#else
+}  // namespace tbb
+#endif
diff --git a/src/tbb/tbb_main.cpp b/src/tbb/tbb_main.cpp
index f2c2ccf..800ce07 100644
--- a/src/tbb/tbb_main.cpp
+++ b/src/tbb/tbb_main.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -70,7 +70,7 @@ bool __TBB_InitOnce::InitializationDone;
     static bool ITT_InitializationDone;
 #endif
 
-#if !(_WIN32||_WIN64) || !__TBB_DYNAMIC_LOAD_ENABLED
+#if !(_WIN32||_WIN64) || __TBB_SOURCE_DIRECTLY_INCLUDED
     static __TBB_InitOnce __TBB_InitOnceHiddenInstance;
 #endif
 
@@ -176,6 +176,7 @@ void DoOneTimeInitializations() {
         itt_present = ITT_Present;
 #endif /* DO_ITT_NOTIFY */
         initialize_cache_aligned_allocator();
+        governor::initialize_rml_factory();
         Scheduler_OneTimeInitialization( itt_present );
         // Force processor groups support detection
         governor::default_num_threads();
@@ -187,7 +188,7 @@ void DoOneTimeInitializations() {
     __TBB_InitOnce::unlock();
 }
 
-#if (_WIN32||_WIN64) && __TBB_DYNAMIC_LOAD_ENABLED
+#if (_WIN32||_WIN64) && !__TBB_SOURCE_DIRECTLY_INCLUDED
 //! Windows "DllMain" that handles startup and shutdown of dynamic library.
 extern "C" bool WINAPI DllMain( HANDLE /*hinstDLL*/, DWORD reason, LPVOID /*lpvReserved*/ ) {
     switch( reason ) {
@@ -209,7 +210,7 @@ extern "C" bool WINAPI DllMain( HANDLE /*hinstDLL*/, DWORD reason, LPVOID /*lpvR
     }
     return true;
 }
-#endif /* (_WIN32||_WIN64) && __TBB_DYNAMIC_LOAD_ENABLED */
+#endif /* (_WIN32||_WIN64) && !__TBB_SOURCE_DIRECTLY_INCLUDED */
 
 void itt_store_pointer_with_release_v3( void* dst, void* src ) {
     ITT_NOTIFY(sync_releasing, dst);
@@ -242,7 +243,7 @@ void* itt_load_pointer_v3( const void* src ) {
 
 void itt_set_sync_name_v3( void* obj, const tchar* name) {
     ITT_SYNC_RENAME(obj, name);
-    (void)obj, (void)name;  // Prevents compiler warning when ITT support is switched off
+    suppress_unused_warning(obj && name);
 }
 
 
diff --git a/src/tbb/tbb_main.h b/src/tbb/tbb_main.h
index 759ba9a..14afbed 100644
--- a/src/tbb/tbb_main.h
+++ b/src/tbb/tbb_main.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 955d47b..2999f75 100644
--- a/src/tbb/tbb_misc.cpp
+++ b/src/tbb/tbb_misc.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -59,6 +59,7 @@ namespace tbb {
 
 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* user_abort::what() const throw() { return "User-initiated abort has terminated this operation"; }
 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"; }
 
@@ -136,6 +137,7 @@ void throw_exception_v4 ( exception_id eid ) {
     case eid_invalid_swap: DO_THROW( invalid_argument, ("swap() is invalid on non-equal allocators") );
     case eid_reservation_length_error: DO_THROW( length_error, ("reservation size exceeds permitted max size") );
     case eid_invalid_key: DO_THROW( out_of_range, ("invalid key") );
+    case eid_user_abort: DO_THROW( user_abort, () );
     default: break;
     }
 #if !TBB_USE_EXCEPTIONS && __APPLE__
@@ -168,9 +170,15 @@ void PrintVersion() {
     fputs(VersionString+1,stderr);
 }
 
-void PrintExtraVersionInfo( const char* category, const char* description ) {
-    if( PrintVersionFlag ) 
-        fprintf(stderr, "TBB: %s\t%s\n", category, description );
+void PrintExtraVersionInfo( const char* category, const char* format, ... ) {
+    if( PrintVersionFlag ) {
+        char str[1024]; memset(str, 0, 1024);
+        va_list args; va_start(args, format);
+        // Note: correct vsnprintf definition obtained from tbb_assert_impl.h
+        vsnprintf( str, 1024-1, format, args);
+        va_end(args);
+        fprintf(stderr, "TBB: %s\t%s\n", category, str );
+    }
 }
 
 void PrintRMLVersionInfo( void* arg, const char* server_info ) {
diff --git a/src/tbb/tbb_misc.h b/src/tbb/tbb_misc.h
index fa00b5d..9af65f4 100644
--- a/src/tbb/tbb_misc.h
+++ b/src/tbb/tbb_misc.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -43,16 +43,9 @@
 namespace tbb {
 namespace internal {
 
-const size_t MByte = 1<<20;
-
-#if !defined(__TBB_WORDSIZE)
-    const size_t ThreadStackSize = 1*MByte;
-#elif __TBB_WORDSIZE<=4
-    const size_t ThreadStackSize = 2*MByte;
-#else
-    const size_t ThreadStackSize = 4*MByte;
-#endif
+const size_t MByte = 1024*1024;
 
+const size_t ThreadStackSize = (sizeof(uintptr_t) <= 4 ? 2 : 4 )*MByte;
 
 #ifndef __TBB_HardwareConcurrency
 
@@ -92,7 +85,7 @@ bool GetBoolEnvironmentVariable( const char * name );
 void PrintVersion();
 
 //! Prints arbitrary extra TBB version information on stderr
-void PrintExtraVersionInfo( const char* category, const char* description );
+void PrintExtraVersionInfo( const char* category, const char* format, ... );
 
 //! A callback routine to print RML version information on stderr
 void PrintRMLVersionInfo( void* arg, const char* server_info );
@@ -121,6 +114,10 @@ T1 max ( const T1& val1, const T2& val2 ) {
     return val1 < val2 ? val2 : val1;
 }
 
+//! Utility template function to prevent "unused" warnings by various compilers.
+template<typename T>
+void suppress_unused_warning( const T& ) {}
+
 //------------------------------------------------------------------------
 // FastRandom
 //------------------------------------------------------------------------
@@ -156,7 +153,7 @@ public:
 
 //! Atomically replaces value of dst with newValue if they satisfy condition of compare predicate
 /** Return value semantics is the same as for CAS. **/
-template<typename T1, typename T2, class Pred> 
+template<typename T1, typename T2, class Pred>
 T1 atomic_update ( tbb::atomic<T1>& dst, T2 newValue, Pred compare ) {
     T1 oldValue = dst;
     while ( compare(oldValue, newValue) ) {
@@ -178,15 +175,15 @@ enum do_once_state {
 //! One-time initialization function
 /** /param initializer Pointer to function without arguments
            The variant that returns bool is used for cases when initialization can fail
-           and it is OK to continue execution, but the state should be reset so that 
+           and it is OK to continue execution, but the state should be reset so that
            the initialization attempt was repeated the next time.
-    /param state Shared state associated with initializer that specifies its 
+    /param state Shared state associated with initializer that specifies its
             initialization state. Must be initially set to #uninitialized value
             (e.g. by means of default static zero initialization). **/
 template <typename F>
 void atomic_do_once ( const F& initializer, atomic<do_once_state>& state ) {
     // tbb::atomic provides necessary acquire and release fences.
-    // The loop in the implementation is necessary to avoid race when thread T2 
+    // The loop in the implementation is necessary to avoid race when thread T2
     // that arrived in the middle of initialization attempt by another thread T1
     // has just made initialization possible.
     // In such a case T2 has to rely on T1 to initialize, but T1 may already be past
diff --git a/src/tbb/tbb_misc_ex.cpp b/src/tbb/tbb_misc_ex.cpp
index 2abd5db..b328195 100644
--- a/src/tbb/tbb_misc_ex.cpp
+++ b/src/tbb/tbb_misc_ex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -274,7 +274,7 @@ static void initialize_hardware_concurrency_info () {
                 ProcessorGroupInfo  &pgi = theProcessorGroups[i];
                 pgi.numProcs = (int)TBB_GetMaximumProcessorCount(i);
                 __TBB_ASSERT( pgi.numProcs <= (int)sizeof(DWORD_PTR) * CHAR_BIT, NULL );
-                pgi.mask = pgi.numProcs == sizeof(DWORD_PTR) * CHAR_BIT ? ~(DWORD_PTR)0 : (1 << pgi.numProcs) - 1;
+                pgi.mask = pgi.numProcs == sizeof(DWORD_PTR) * CHAR_BIT ? ~(DWORD_PTR)0 : (DWORD_PTR(1) << pgi.numProcs) - 1;
                 pgi.numProcsRunningTotal = nprocs += pgi.numProcs;
             }
             __TBB_ASSERT( nprocs == (int)TBB_GetMaximumProcessorCount( TBB_ALL_PROCESSOR_GROUPS ), NULL );
@@ -283,6 +283,11 @@ static void initialize_hardware_concurrency_info () {
     }
     // Either the process has restricting affinity mask or only a single processor groups is present
     theProcessorGroups[0].numProcs = theProcessorGroups[0].numProcsRunningTotal = nproc;
+
+    PrintExtraVersionInfo("Processor groups", "%d", ProcessorGroupInfo::NumGroups);
+    if (ProcessorGroupInfo::NumGroups>1)
+        for (int i=0; i<ProcessorGroupInfo::NumGroups; ++i)
+            PrintExtraVersionInfo( "----- Group", "%d: size %d", i, theProcessorGroups[i].numProcs);
 }
 
 int AvailableHwConcurrency() {
@@ -309,7 +314,11 @@ int FindProcessorGroupIndex ( int procIdx ) {
     else
         holeIdx = ProcessorGroupInfo::HoleIndex;
     __TBB_ASSERT( hardware_concurrency_info == initialization_complete, "FindProcessorGroupIndex is used before AvailableHwConcurrency" );
+    // Approximate the likely group index assuming all groups are of the same size
     int i = procIdx / theProcessorGroups[0].numProcs;
+    // Make sure the approximation is a valid group index
+    if (i >= ProcessorGroupInfo::NumGroups) i = ProcessorGroupInfo::NumGroups-1;
+    // Now adjust the approximation up or down
     if ( theProcessorGroups[i].numProcsRunningTotal > HoleAdjusted(procIdx, i) ) {
         while ( theProcessorGroups[i].numProcsRunningTotal - theProcessorGroups[i].numProcs > HoleAdjusted(procIdx, i) ) {
             __TBB_ASSERT( i > 0, NULL );
@@ -329,7 +338,7 @@ void MoveThreadIntoProcessorGroup( void* hThread, int groupIndex ) {
     __TBB_ASSERT( hardware_concurrency_info == initialization_complete, "MoveThreadIntoProcessorGroup is used before AvailableHwConcurrency" );
     if ( !TBB_SetThreadGroupAffinity )
         return;
-    TBB_GROUP_AFFINITY ga = { theProcessorGroups[groupIndex].mask, (WORD)groupIndex };
+    TBB_GROUP_AFFINITY ga = { theProcessorGroups[groupIndex].mask, (WORD)groupIndex, {0,0,0} };
     TBB_SetThreadGroupAffinity( hThread, &ga, NULL );
 }
 
diff --git a/src/tbb/tbb_resource.rc b/src/tbb/tbb_resource.rc
index 48bcf4e..3ba56f0 100644
--- a/src/tbb/tbb_resource.rc
+++ b/src/tbb/tbb_resource.rc
@@ -1,4 +1,4 @@
-// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2012 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-2011 Intel Corporation.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright 2005-2012 Intel Corporation.  All Rights Reserved.\0"
             VALUE "LegalTrademarks", "\0"
 #ifndef TBB_USE_DEBUG
             VALUE "OriginalFilename", "tbb.dll\0"
diff --git a/src/tbb/tbb_statistics.cpp b/src/tbb/tbb_statistics.cpp
index 3a1fcd1..be8f9e2 100644
--- a/src/tbb/tbb_statistics.cpp
+++ b/src/tbb/tbb_statistics.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -136,12 +136,15 @@ private:
 
     void dump ( char const* fmt, ... ) {
         va_list args;
-        va_start( args, fmt );
-        if ( my_file )
+        if ( my_file ) {
+            va_start( args, fmt );
             vfprintf( my_file, fmt, args );
-        va_start( args, fmt );
+            va_end( args );
+        }
 #if __TBB_STATISTICS_STDOUT
+        va_start( args, fmt );
         vprintf( fmt, args );
+        va_end( args );
 #endif
     }
 
diff --git a/src/tbb/tbb_statistics.h b/src/tbb/tbb_statistics.h
index 2ea9f82..f5e222d 100644
--- a/src/tbb/tbb_statistics.h
+++ b/src/tbb/tbb_statistics.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tbb_thread.cpp b/src/tbb/tbb_thread.cpp
index b94dd38..b677f15 100644
--- a/src/tbb/tbb_thread.cpp
+++ b/src/tbb/tbb_thread.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tbb_version.h b/src/tbb/tbb_version.h
index 852b2b1..d5edae2 100644
--- a/src/tbb/tbb_version.h
+++ b/src/tbb/tbb_version.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -33,10 +33,10 @@
 #ifndef ENDL
 #define ENDL "\n"
 #endif
-#include "version_string.tmp"
+#include "version_string.ver"
 
 #ifndef __TBB_VERSION_STRINGS
-#pragma message("Warning: version_string.tmp isn't generated properly by version_info.sh script!")
+#pragma message("Warning: version_string.ver isn't generated properly by version_info.sh script!")
 // here is an example of macros value:
 #define __TBB_VERSION_STRINGS \
 "TBB: BUILD_HOST\tUnknown\n" \
@@ -54,47 +54,68 @@
 #endif
 #endif
 
-#define __TBB_VERSION_NUMBER "TBB: VERSION\t\t" __TBB_STRING(TBB_VERSION_MAJOR.TBB_VERSION_MINOR) ENDL
-#define __TBB_INTERFACE_VERSION_NUMBER "TBB: INTERFACE VERSION\t" __TBB_STRING(TBB_INTERFACE_VERSION) ENDL
-#define __TBB_VERSION_DATETIME "TBB: BUILD_DATE\t\t" __TBB_DATETIME ENDL
+#define __TBB_VERSION_NUMBER(N) #N ": VERSION\t\t" __TBB_STRING(TBB_VERSION_MAJOR.TBB_VERSION_MINOR) ENDL
+#define __TBB_INTERFACE_VERSION_NUMBER(N) #N ": INTERFACE VERSION\t" __TBB_STRING(TBB_INTERFACE_VERSION) ENDL
+
+#define __TBB_VERSION_DATETIME(N) #N ": BUILD_DATE\t\t" __TBB_DATETIME ENDL
 #ifndef TBB_USE_DEBUG
-    #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\tundefined" ENDL
+    #define __TBB_VERSION_USE_DEBUG(N) #N ": TBB_USE_DEBUG\tundefined" ENDL
 #elif TBB_USE_DEBUG==0
-    #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\t0" ENDL
+    #define __TBB_VERSION_USE_DEBUG(N) #N ": TBB_USE_DEBUG\t0" ENDL
 #elif TBB_USE_DEBUG==1
-    #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\t1" ENDL
+    #define __TBB_VERSION_USE_DEBUG(N) #N ": TBB_USE_DEBUG\t1" ENDL
 #elif TBB_USE_DEBUG==2
-    #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\t2" ENDL
+    #define __TBB_VERSION_USE_DEBUG(N) #N ": TBB_USE_DEBUG\t2" ENDL
 #else
     #error Unexpected value for TBB_USE_DEBUG
 #endif
+
+/* Make __TBB_VERSION_USE_ASSERT and __TBB_VERSION_DO_NOTIFY empty for rc
+ * because rc from VS2005 crashed with fatal error RC10056 for too complex
+ * macros (for example, when __TBB_CPF_BUILD is enabled).
+ * All information is available in BUILD_COMMAND anyway.
+ */
+
+#ifdef RC_INVOKED
+    #define __TBB_VERSION_USE_ASSERT(N)
+#else // RC_INVOKED
 #ifndef TBB_USE_ASSERT
-    #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\tundefined" ENDL
+    #define __TBB_VERSION_USE_ASSERT(N) #N ": TBB_USE_ASSERT\tundefined" ENDL
 #elif TBB_USE_ASSERT==0
-    #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\t0" ENDL
+    #define __TBB_VERSION_USE_ASSERT(N) #N ": TBB_USE_ASSERT\t0" ENDL
 #elif TBB_USE_ASSERT==1
-    #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\t1" ENDL
+    #define __TBB_VERSION_USE_ASSERT(N) #N ": TBB_USE_ASSERT\t1" ENDL
 #elif TBB_USE_ASSERT==2
-    #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\t2" ENDL
+    #define __TBB_VERSION_USE_ASSERT(N) #N ": TBB_USE_ASSERT\t2" ENDL
 #else
     #error Unexpected value for TBB_USE_ASSERT
 #endif
+#endif // RC_INVOKED
+
 #ifndef __TBB_CPF_BUILD
-    #define __TBB_VERSION_TBB_PREVIEW_BINARY
+    #define __TBB_VERSION_TBB_PREVIEW_BINARY(N)
 #else
-    #define __TBB_VERSION_TBB_PREVIEW_BINARY "TBB: TBB_PREVIEW_BINARY\t1" ENDL
+    #define __TBB_VERSION_TBB_PREVIEW_BINARY(N) #N ": TBB_PREVIEW_BINARY\t1" ENDL
 #endif
+
+#ifdef RC_INVOKED
+    #define __TBB_VERSION_DO_NOTIFY(N)
+#else
 #ifndef DO_ITT_NOTIFY
-    #define __TBB_VERSION_DO_NOTIFY "TBB: DO_ITT_NOTIFY\tundefined" ENDL
+    #define __TBB_VERSION_DO_NOTIFY(N) #N ": DO_ITT_NOTIFY\tundefined" ENDL
 #elif DO_ITT_NOTIFY==1
-    #define __TBB_VERSION_DO_NOTIFY "TBB: DO_ITT_NOTIFY\t1" ENDL
+    #define __TBB_VERSION_DO_NOTIFY(N) #N ": DO_ITT_NOTIFY\t1" ENDL
 #elif DO_ITT_NOTIFY==0
-    #define __TBB_VERSION_DO_NOTIFY
+    #define __TBB_VERSION_DO_NOTIFY(N)
 #else
     #error Unexpected value for DO_ITT_NOTIFY
 #endif
+#endif // RC_INVOKED
+
+#define TBB_VERSION_STRINGS_P(N) __TBB_VERSION_NUMBER(N) __TBB_INTERFACE_VERSION_NUMBER(N) __TBB_VERSION_DATETIME(N) __TBB_VERSION_STRINGS(N) __TBB_VERSION_USE_DEBUG(N) __TBB_VERSION_USE_ASSERT(N) __TBB_VERSION_TBB_PREVIEW_BINARY(N) __TBB_VERSION_DO_NOTIFY(N)
 
-#define TBB_VERSION_STRINGS __TBB_VERSION_NUMBER __TBB_INTERFACE_VERSION_NUMBER __TBB_VERSION_DATETIME __TBB_VERSION_STRINGS __TBB_VERSION_USE_DEBUG __TBB_VERSION_USE_ASSERT __TBB_VERSION_TBB_PREVIEW_BINARY __TBB_VERSION_DO_NOTIFY
+#define TBB_VERSION_STRINGS TBB_VERSION_STRINGS_P(TBB)
+#define TBBMALLOC_VERSION_STRINGS TBB_VERSION_STRINGS_P(TBBmalloc)
 
 // numbers
 #ifndef __TBB_VERSION_YMD
diff --git a/src/tbb/tls.h b/src/tbb/tls.h
index 5bc678a..97294d2 100644
--- a/src/tbb/tls.h
+++ b/src/tbb/tls.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 869ae87..7ce1ff1 100644
--- a/src/tbb/tools_api/disable_warnings.h
+++ b/src/tbb/tools_api/disable_warnings.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/tools_api/internal/ittnotify.h b/src/tbb/tools_api/internal/ittnotify.h
index 7287907..339a98f 100644
--- a/src/tbb/tools_api/internal/ittnotify.h
+++ b/src/tbb/tools_api/internal/ittnotify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 6ec8efd..a3935bf 100644
--- a/src/tbb/tools_api/ittnotify.h
+++ b/src/tbb/tools_api/ittnotify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,31 +28,72 @@
 
 #ifndef _ITTNOTIFY_H_
 #define _ITTNOTIFY_H_
+
 /**
- * @file
- * @brief Public User API functions and types
- * @mainpage
- * Ability to control the collection during runtime. User API can be inserted into the user application.
- * Commands include:
- *   - Collection control
- *   - Marking
- *   - Thread manipulation
- *   - User-defined synchronization primitives
- *
- * The User API provides ability to control the collection, set marks at the execution of specific user code and
- * specify custom synchronization primitives implemented without standard system APIs.
- *
- * Use case: User inserts API calls to the desired places in her code. The code is then compiled and
- * linked with static part of User API library. User can recompile the code with specific macro defined
- * to enable API calls.  If this macro is not defined there is no run-time overhead and no need to  link
- * with static part of User API library. During  runtime the static library loads and initializes the dynamic part.
- * In case of instrumentation-based collection, only a stub library is loaded; otherwise a proxy library is loaded,
- * which calls the collector.
- *  
- * User API set is native (C/C++) only (no MRTE support). As a mitigation can use JNI or C/C++ function
- * call from managed code where needed. If the collector causes significant overhead or data storage, then
- * pausing analysis should reduce the overhead to minimal levels.
- */
+ at file
+ at brief Public User API functions and types
+ at mainpage
+
+The ITT API is used to annotate a user's program with additional information
+that can be used by correctness and performance tools. The user inserts
+calls in their program. Those calls generate information that is collected
+at runtime, and used by tools such as Amplifier and Inspector.
+
+ at section API Concepts
+The following general concepts are used throughout the API.
+
+ at subsection Unicode Support
+Many API functions take character string arguments. On Windows, there
+are two versions of each such function. The function name is suffixed
+by W if Unicode support is enabled, and by A otherwise. Any API function
+that takes a character string argument adheres to this convention.
+
+ at subsection Conditional Compilation
+Many users prefer having an option to modify ITT API code when linking it
+inside their runtimes. ITT API header file provides a mechanism to replace
+ITT API function names inside your code with empty strings. To do this,
+define the macros INTEL_NO_ITTNOTIFY_API during compilation and remove the
+static library from the linker script.
+
+ at subsection Domains
+[see domains]
+Domains provide a way to separate notification for different modules or
+libraries in a program. Domains are specified by dotted character strings,
+e.g. TBB.Internal.Control.
+
+A mechanism (to be specified) is provided to enable and disable
+domains. By default, all domains are enabled.
+ at subsection Named Entities and Instances
+Named entities (frames, regions, tasks, and markers) communicate
+information about the program to the analysis tools. A named entity often
+refers to a section of program code, or to some set of logical concepts
+that the programmer wants to group together.
+
+Named entities relate to the programmer's static view of the program. When
+the program actually executes, many instances of a given named entity
+may be created.
+
+The API annotations denote instances of named entities. The actual
+named entities are displayed using the analysis tools. In other words,
+the named entities come into existence when instances are created.
+
+Instances of named entities may have instance identifiers (IDs). Some
+API calls use instance identifiers to create relationships between
+different instances of named entities. Other API calls associate data
+with instances of named entities.
+
+Some named entities must always have instance IDs. In particular, regions
+and frames always have IDs. Task and markers need IDs only if the ID is
+needed in another API call (such as adding a relation or metadata).
+
+The lifetime of instance IDs is distinct from the lifetime of
+instances. This allows various relationships to be specified separate
+from the actual execution of instances. This flexibility comes at the
+expense of extra API calls.
+
+The same ID may not be reused for different instances, unless a previous
+[ref] __itt_id_destroy call for that ID has been issued.
+*/
 
 /** @cond exclude_from_documentation */
 #ifndef ITT_OS_WIN
@@ -93,17 +134,29 @@
 #  endif /* _WIN32 */
 #endif /* ITT_PLATFORM */
 
+#if defined(_UNICODE) && !defined(UNICODE)
+#define UNICODE
+#endif
+
 #include <stddef.h>
-#include <stdarg.h>
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #include <tchar.h>
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#include <stdint.h>
+#if defined(UNICODE) || defined(_UNICODE)
+#include <wchar.h>
+#endif /* UNICODE || _UNICODE */
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 
 #ifndef CDECL
 #  if ITT_PLATFORM==ITT_PLATFORM_WIN
 #    define CDECL __cdecl
 #  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#    define CDECL /* nothing */
+#    if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
+#      define CDECL /* not actual on x86_64 platform */
+#    else  /* _M_X64 || _M_AMD64 || __x86_64__ */
+#      define CDECL __attribute__ ((cdecl))
+#    endif /* _M_X64 || _M_AMD64 || __x86_64__ */
 #  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #endif /* CDECL */
 
@@ -111,12 +164,39 @@
 #  if ITT_PLATFORM==ITT_PLATFORM_WIN
 #    define STDCALL __stdcall
 #  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#    define STDCALL /* nothing */
+#    if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
+#      define STDCALL /* not supported on x86_64 platform */
+#    else  /* _M_X64 || _M_AMD64 || __x86_64__ */
+#      define STDCALL __attribute__ ((stdcall))
+#    endif /* _M_X64 || _M_AMD64 || __x86_64__ */
 #  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #endif /* STDCALL */
 
 #define ITTAPI    CDECL
-#define LIBITTAPI /* nothing */
+#define LIBITTAPI CDECL
+
+/* TODO: Temporary for compatibility! */
+#define ITTAPI_CALL    CDECL
+#define LIBITTAPI_CALL CDECL
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+/* use __forceinline (VC++ specific) */
+#define INLINE           __forceinline
+#define INLINE_ATTRIBUTE /* nothing */
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/*
+ * Generally, functions are not inlined unless optimization is specified.
+ * For functions declared inline, this attribute inlines the function even
+ * if no optimization level was specified.
+ */
+#ifdef __STRICT_ANSI__
+#define INLINE           static
+#else  /* __STRICT_ANSI__ */
+#define INLINE           static inline
+#endif /* __STRICT_ANSI__ */
+#define INLINE_ATTRIBUTE __attribute__ ((always_inline))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @endcond */
 
 #ifdef INTEL_ITTNOTIFY_ENABLE_LEGACY
 #  if ITT_PLATFORM==ITT_PLATFORM_WIN
@@ -128,9 +208,27 @@
 #  include "legacy/ittnotify.h"
 #endif /* INTEL_ITTNOTIFY_ENABLE_LEGACY */
 
+/** @cond exclude_from_documentation */
+/* Helper macro for joining tokens */
 #define ITT_JOIN_AUX(p,n) p##n
 #define ITT_JOIN(p,n)     ITT_JOIN_AUX(p,n)
 
+#ifdef ITT_MAJOR
+#undef ITT_MAJOR
+#endif
+#ifdef ITT_MINOR
+#undef ITT_MINOR
+#endif
+#define ITT_MAJOR     3
+#define ITT_MINOR     0
+
+/* Standard versioning of a token with major and minor version numbers */
+#define ITT_VERSIONIZE(x)    \
+    ITT_JOIN(x,              \
+    ITT_JOIN(_,              \
+    ITT_JOIN(ITT_MAJOR,      \
+    ITT_JOIN(_, ITT_MINOR))))
+
 #ifndef INTEL_ITTNOTIFY_PREFIX
 #  define INTEL_ITTNOTIFY_PREFIX __itt_
 #endif /* INTEL_ITTNOTIFY_PREFIX */
@@ -139,27 +237,43 @@
 #endif /* INTEL_ITTNOTIFY_POSTFIX */
 
 #define ITTNOTIFY_NAME_AUX(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)
-#define ITTNOTIFY_NAME(n)     ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX))
+#define ITTNOTIFY_NAME(n)     ITT_VERSIONIZE(ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX)))
 
 #define ITTNOTIFY_VOID(n) (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)
 #define ITTNOTIFY_DATA(n) (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)
 
+#define ITTNOTIFY_VOID_D0(n,d)       (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d)
+#define ITTNOTIFY_VOID_D1(n,d,x)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x)
+#define ITTNOTIFY_VOID_D2(n,d,x,y)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y)
+#define ITTNOTIFY_VOID_D3(n,d,x,y,z) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z)
+#define ITTNOTIFY_VOID_D4(n,d,x,y,z,a)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
+#define ITTNOTIFY_VOID_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
+#define ITTNOTIFY_VOID_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
+#define ITTNOTIFY_DATA_D0(n,d)       (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d)
+#define ITTNOTIFY_DATA_D1(n,d,x)     (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x)
+#define ITTNOTIFY_DATA_D2(n,d,x,y)   (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y)
+#define ITTNOTIFY_DATA_D3(n,d,x,y,z) (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z)
+#define ITTNOTIFY_DATA_D4(n,d,x,y,z,a)     (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
+#define ITTNOTIFY_DATA_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
+#define ITTNOTIFY_DATA_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
+
 #ifdef ITT_STUB
 #undef ITT_STUB
 #endif
 #ifdef ITT_STUBV
 #undef ITT_STUBV
 #endif
-#define ITT_STUBV(api,type,name,args,params)                      \
+#define ITT_STUBV(api,type,name,args)                             \
     typedef type (api* ITT_JOIN(ITTNOTIFY_NAME(name),_t)) args;   \
     extern ITT_JOIN(ITTNOTIFY_NAME(name),_t) ITTNOTIFY_NAME(name);
 #define ITT_STUB ITT_STUBV
+/** @endcond */
 
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
-/** @endcond */
 
+/** @cond exclude_from_gpa_documentation */
 /**
  * @defgroup public Public API
  * @{
@@ -172,13 +286,14 @@ extern "C" {
  * General behavior: application continues to run, but no profiling information is being collected
  *
  * Pausing occurs not only for the current thread but for all process as well as spawned processes
- * - Intel(R) Parallel Inspector:
+ * - Intel(R) Parallel Inspector and Intel(R) Inspector XE:
  *   - Does not analyze or report errors that involve memory access.
  *   - Other errors are reported as usual. Pausing data collection in
- *     Intel(R) Parallel Inspector only pauses tracing and analyzing
- *     memory access. It does not pause tracing or analyzing threading APIs.
+ *     Intel(R) Parallel Inspector and Intel(R) Inspector XE
+ *     only pauses tracing and analyzing memory access.
+ *     It does not pause tracing or analyzing threading APIs.
  *   .
- * - Intel(R) Parallel Amplifier:
+ * - Intel(R) Parallel Amplifier and Intel(R) VTune(TM) Amplifier XE:
  *   - Does continue to record when new threads are started.
  *   .
  * - Other effects:
@@ -194,8 +309,8 @@ void ITTAPI __itt_resume(void);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, pause,  (void), ())
-ITT_STUBV(ITTAPI, void, resume, (void), ())
+ITT_STUBV(ITTAPI, void, pause,  (void))
+ITT_STUBV(ITTAPI, void, resume, (void))
 #define __itt_pause      ITTNOTIFY_VOID(pause)
 #define __itt_pause_ptr  ITTNOTIFY_NAME(pause)
 #define __itt_resume     ITTNOTIFY_VOID(resume)
@@ -212,21 +327,22 @@ ITT_STUBV(ITTAPI, void, resume, (void), ())
 #endif /* INTEL_NO_MACRO_BODY */
 /** @endcond */
 /** @} control group */
+/** @endcond */
 
 /**
  * @defgroup threads Threads
  * @ingroup public
- * Threads name group
+ * Give names to threads
  * @{
  */
 /**
- * @brief Sets thread name using char or Unicode string
+ * @brief Sets thread name of calling thread
  * @param[in] name - name of thread
  */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 void ITTAPI __itt_thread_set_nameA(const char    *name);
 void ITTAPI __itt_thread_set_nameW(const wchar_t *name);
-#ifdef UNICODE
+#if defined(UNICODE) || defined(_UNICODE)
 #  define __itt_thread_set_name     __itt_thread_set_nameW
 #  define __itt_thread_set_name_ptr __itt_thread_set_nameW_ptr
 #else /* UNICODE */
@@ -241,10 +357,10 @@ void ITTAPI __itt_thread_set_name(const char *name);
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUBV(ITTAPI, void, thread_set_nameA, (const char    *name), (name))
-ITT_STUBV(ITTAPI, void, thread_set_nameW, (const wchar_t *name), (name))
+ITT_STUBV(ITTAPI, void, thread_set_nameA, (const char    *name))
+ITT_STUBV(ITTAPI, void, thread_set_nameW, (const wchar_t *name))
 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUBV(ITTAPI, void, thread_set_name,  (const char    *name), (name))
+ITT_STUBV(ITTAPI, void, thread_set_name,  (const char    *name))
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #define __itt_thread_set_nameA     ITTNOTIFY_VOID(thread_set_nameA)
@@ -276,6 +392,8 @@ ITT_STUBV(ITTAPI, void, thread_set_name,  (const char    *name), (name))
 #endif /* INTEL_NO_MACRO_BODY */
 /** @endcond */
 
+/** @cond exclude_from_gpa_documentation */
+
 /**
  * @brief Mark current thread as ignored from this point on, for the duration of its existence.
  */
@@ -284,7 +402,7 @@ void ITTAPI __itt_thread_ignore(void);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, thread_ignore, (void), ())
+ITT_STUBV(ITTAPI, void, thread_ignore, (void))
 #define __itt_thread_ignore     ITTNOTIFY_VOID(thread_ignore)
 #define __itt_thread_ignore_ptr ITTNOTIFY_NAME(thread_ignore)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -300,7 +418,7 @@ ITT_STUBV(ITTAPI, void, thread_ignore, (void), ())
 /**
  * @defgroup sync Synchronization
  * @ingroup public
- * Synchronization group
+ * Indicate user-written synchronization code
  * @{
  */
 /**
@@ -316,21 +434,20 @@ ITT_STUBV(ITTAPI, void, thread_ignore, (void), ())
 #define __itt_attr_mutex   2
 
 /**
- * @brief Register the creation of a sync object using char or Unicode string
- * @param[in] addr      - pointer to the sync object. You should use a real pointer to your object
- *                        to make sure that the values don't clash with other object addresses
- * @param[in] objtype   - null-terminated object type string. If NULL is passed, the object will
- *                        be assumed to be of generic "User Synchronization" type
- * @param[in] objname   - null-terminated object name string. If NULL, no name will be assigned
- *                        to the object -- you can use the __itt_sync_rename call later to assign
- *                        the name
- * @param[in] attribute - one of [#__itt_attr_barrier, #__itt_attr_mutex] values which defines the
- *                        exact semantics of how prepare/acquired/releasing calls work.
+ at brief Name a synchronization object
+ at param[in] addr       Handle for the synchronization object. You should
+use a real address to uniquely identify the synchronization object.
+ at param[in] objtype    null-terminated object type string. If NULL is
+passed, the name will be "User Synchronization".
+ at param[in] objname    null-terminated object name string. If NULL,
+no name will be assigned to the object.
+ at param[in] attribute  one of [#__itt_attr_barrier, #__itt_attr_mutex]
  */
+
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 void ITTAPI __itt_sync_createA(void *addr, const char    *objtype, const char    *objname, int attribute);
 void ITTAPI __itt_sync_createW(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute);
-#ifdef UNICODE
+#if defined(UNICODE) || defined(_UNICODE)
 #  define __itt_sync_create     __itt_sync_createW
 #  define __itt_sync_create_ptr __itt_sync_createW_ptr
 #else /* UNICODE */
@@ -345,10 +462,10 @@ void ITTAPI __itt_sync_create (void *addr, const char *objtype, const char *objn
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUBV(ITTAPI, void, sync_createA, (void *addr, const char    *objtype, const char    *objname, int attribute), (addr, objtype, objname, attribute))
-ITT_STUBV(ITTAPI, void, sync_createW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (addr, objtype, objname, attribute))
+ITT_STUBV(ITTAPI, void, sync_createA, (void *addr, const char    *objtype, const char    *objname, int attribute))
+ITT_STUBV(ITTAPI, void, sync_createW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute))
 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUBV(ITTAPI, void, sync_create,  (void *addr, const char* objtype, const char* objname, int attribute), (addr, objtype, objname, attribute))
+ITT_STUBV(ITTAPI, void, sync_create,  (void *addr, const char*    objtype, const char*    objname, int attribute))
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #define __itt_sync_createA     ITTNOTIFY_VOID(sync_createA)
@@ -381,19 +498,17 @@ ITT_STUBV(ITTAPI, void, sync_create,  (void *addr, const char* objtype, const ch
 /** @endcond */
 
 /**
- * @brief Assign a name to a sync object using char or Unicode string.
- *
- * Sometimes you cannot assign the name to a sync object in the __itt_sync_set_name() call because it
- * is not yet known there. In this case you should use the rename call which allows to assign the
- * name after the creation has been registered. The renaming can be done multiple times. All waits
- * after a new name has been assigned will be attributed to the sync object with this name.
- * @param[in] addr - pointer to the sync object
- * @param[in] name - null-terminated object name string
- */
+ at brief Rename a synchronization object
+
+You can use the rename call to assign or reassign a name to a given
+synchronization object.
+ at param[in] addr  handle for the synchronization object.
+ at param[in] name  null-terminated object name string.
+*/
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 void ITTAPI __itt_sync_renameA(void *addr, const char    *name);
 void ITTAPI __itt_sync_renameW(void *addr, const wchar_t *name);
-#ifdef UNICODE
+#if defined(UNICODE) || defined(_UNICODE)
 #  define __itt_sync_rename     __itt_sync_renameW
 #  define __itt_sync_rename_ptr __itt_sync_renameW_ptr
 #else /* UNICODE */
@@ -408,10 +523,10 @@ void ITTAPI __itt_sync_rename(void *addr, const char *name);
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUBV(ITTAPI, void, sync_renameA, (void *addr, const char    *name), (addr, name))
-ITT_STUBV(ITTAPI, void, sync_renameW, (void *addr, const wchar_t *name), (addr, name))
+ITT_STUBV(ITTAPI, void, sync_renameA, (void *addr, const char    *name))
+ITT_STUBV(ITTAPI, void, sync_renameW, (void *addr, const wchar_t *name))
 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUBV(ITTAPI, void, sync_rename,  (void *addr, const char    *name), (addr, name))
+ITT_STUBV(ITTAPI, void, sync_rename,  (void *addr, const char    *name))
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #define __itt_sync_renameA     ITTNOTIFY_VOID(sync_renameA)
@@ -444,14 +559,15 @@ ITT_STUBV(ITTAPI, void, sync_rename,  (void *addr, const char    *name), (addr,
 /** @endcond */
 
 /**
- * @brief Is called when sync object is destroyed (needed to track lifetime of objects)
+ @brief Destroy a synchronization object.
+ @param addr Handle for the synchronization object.
  */
 void ITTAPI __itt_sync_destroy(void *addr);
 
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, sync_destroy, (void *addr), (addr))
+ITT_STUBV(ITTAPI, void, sync_destroy, (void *addr))
 #define __itt_sync_destroy     ITTNOTIFY_VOID(sync_destroy)
 #define __itt_sync_destroy_ptr ITTNOTIFY_NAME(sync_destroy)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -475,7 +591,7 @@ void ITTAPI __itt_sync_prepare(void* addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, sync_prepare, (void *addr), (addr))
+ITT_STUBV(ITTAPI, void, sync_prepare, (void *addr))
 #define __itt_sync_prepare     ITTNOTIFY_VOID(sync_prepare)
 #define __itt_sync_prepare_ptr ITTNOTIFY_NAME(sync_prepare)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -495,7 +611,7 @@ void ITTAPI __itt_sync_cancel(void *addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, sync_cancel, (void *addr), (addr))
+ITT_STUBV(ITTAPI, void, sync_cancel, (void *addr))
 #define __itt_sync_cancel     ITTNOTIFY_VOID(sync_cancel)
 #define __itt_sync_cancel_ptr ITTNOTIFY_NAME(sync_cancel)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -515,7 +631,7 @@ void ITTAPI __itt_sync_acquired(void *addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, sync_acquired, (void *addr), (addr))
+ITT_STUBV(ITTAPI, void, sync_acquired, (void *addr))
 #define __itt_sync_acquired     ITTNOTIFY_VOID(sync_acquired)
 #define __itt_sync_acquired_ptr ITTNOTIFY_NAME(sync_acquired)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -535,7 +651,7 @@ void ITTAPI __itt_sync_releasing(void* addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, sync_releasing, (void *addr), (addr))
+ITT_STUBV(ITTAPI, void, sync_releasing, (void *addr))
 #define __itt_sync_releasing     ITTNOTIFY_VOID(sync_releasing)
 #define __itt_sync_releasing_ptr ITTNOTIFY_NAME(sync_releasing)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -548,11 +664,15 @@ ITT_STUBV(ITTAPI, void, sync_releasing, (void *addr), (addr))
 /** @endcond */
 /** @} */
 
+/** @} sync group */
+
 /**************************************************************//**
  * @name group of functions is used for correctness checking tools
  ******************************************************************/
 /** @{ */
 /**
+ * @ingroup legacy
+ * @deprecated Legacy API
  * @brief Fast synchronization which does no require spinning.
  * - This special function is to be used by TBB and OpenMP libraries only when they know
  *   there is no spin but they need to suppress TC warnings about shared variable modifications.
@@ -565,7 +685,7 @@ void ITTAPI __itt_fsync_prepare(void* addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, fsync_prepare, (void *addr), (addr))
+ITT_STUBV(ITTAPI, void, fsync_prepare, (void *addr))
 #define __itt_fsync_prepare     ITTNOTIFY_VOID(fsync_prepare)
 #define __itt_fsync_prepare_ptr ITTNOTIFY_NAME(fsync_prepare)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -578,6 +698,8 @@ ITT_STUBV(ITTAPI, void, fsync_prepare, (void *addr), (addr))
 /** @endcond */
 
 /**
+ * @ingroup legacy
+ * @deprecated Legacy API
  * @brief Fast synchronization which does no require spinning.
  * - This special function is to be used by TBB and OpenMP libraries only when they know
  *   there is no spin but they need to suppress TC warnings about shared variable modifications.
@@ -590,7 +712,7 @@ void ITTAPI __itt_fsync_cancel(void *addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, fsync_cancel, (void *addr), (addr))
+ITT_STUBV(ITTAPI, void, fsync_cancel, (void *addr))
 #define __itt_fsync_cancel     ITTNOTIFY_VOID(fsync_cancel)
 #define __itt_fsync_cancel_ptr ITTNOTIFY_NAME(fsync_cancel)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -603,6 +725,8 @@ ITT_STUBV(ITTAPI, void, fsync_cancel, (void *addr), (addr))
 /** @endcond */
 
 /**
+ * @ingroup legacy
+ * @deprecated Legacy API
  * @brief Fast synchronization which does no require spinning.
  * - This special function is to be used by TBB and OpenMP libraries only when they know
  *   there is no spin but they need to suppress TC warnings about shared variable modifications.
@@ -615,7 +739,7 @@ void ITTAPI __itt_fsync_acquired(void *addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, fsync_acquired, (void *addr), (addr))
+ITT_STUBV(ITTAPI, void, fsync_acquired, (void *addr))
 #define __itt_fsync_acquired     ITTNOTIFY_VOID(fsync_acquired)
 #define __itt_fsync_acquired_ptr ITTNOTIFY_NAME(fsync_acquired)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -628,6 +752,8 @@ ITT_STUBV(ITTAPI, void, fsync_acquired, (void *addr), (addr))
 /** @endcond */
 
 /**
+ * @ingroup legacy
+ * @deprecated Legacy API
  * @brief Fast synchronization which does no require spinning.
  * - This special function is to be used by TBB and OpenMP libraries only when they know
  *   there is no spin but they need to suppress TC warnings about shared variable modifications.
@@ -640,7 +766,7 @@ void ITTAPI __itt_fsync_releasing(void* addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, fsync_releasing, (void *addr), (addr))
+ITT_STUBV(ITTAPI, void, fsync_releasing, (void *addr))
 #define __itt_fsync_releasing     ITTNOTIFY_VOID(fsync_releasing)
 #define __itt_fsync_releasing_ptr ITTNOTIFY_NAME(fsync_releasing)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -652,19 +778,14 @@ ITT_STUBV(ITTAPI, void, fsync_releasing, (void *addr), (addr))
 #endif /* INTEL_NO_MACRO_BODY */
 /** @endcond */
 /** @} */
-/** @} sync group */
 
 /**
- * @defgroup model Modeling by Advisor
+ * @defgroup model Modeling by Intel(R) Parallel Advisor
  * @ingroup public
- * This is the subset of itt used for modeling by Advisor.
+ * This is the subset of itt used for modeling by Intel(R) Parallel Advisor.
  * This API is called ONLY using annotate.h, by "Annotation" macros
  * the user places in their sources during the parallelism modeling steps.
  *
- * The requirements, constraints, design and implementation
- * for this interface are covered in:
- * Shared%20Documents/Design%20Documents/AdvisorAnnotations.doc
- *
  * site_begin/end and task_begin/end take the address of handle variables,
  * which are writeable by the API.  Handles must be 0 initialized prior
  * to the first call to begin, or may cause a run-time failure.
@@ -677,12 +798,14 @@ ITT_STUBV(ITTAPI, void, fsync_releasing, (void *addr), (addr))
  * the lexical instance, these must be 0 initialized.  Unlike the lexical
  * instance, this is used to track a single dynamic instance.
  *
- * API used by the Intel Parallel Advisor to describe potential concurrency
+ * API used by the Intel(R) Parallel Advisor to describe potential concurrency
  * and related activities. User-added source annotations expand to calls
  * to these procedures to enable modeling of a hypothetical concurrent
  * execution serially.
  * @{
  */
+#if !defined(_ADVISOR_ANNOTATE_H_) || defined(ANNOTATE_EXPAND_NULL)
+
 typedef void* __itt_model_site;             /*!< @brief handle for lexical site     */
 typedef void* __itt_model_site_instance;    /*!< @brief handle for dynamic instance */
 typedef void* __itt_model_task;             /*!< @brief handle for lexical site     */
@@ -697,6 +820,8 @@ typedef enum {
     __itt_model_disable_collection
 } __itt_model_disable;
 
+#endif /* !_ADVISOR_ANNOTATE_H_ || ANNOTATE_EXPAND_NULL */
+
 /**
  * @brief ANNOTATE_SITE_BEGIN/ANNOTATE_SITE_END support.
  *
@@ -710,25 +835,49 @@ typedef enum {
  * same or different for data presentation.
  */
 void ITTAPI __itt_model_site_begin(__itt_model_site *site, __itt_model_site_instance *instance, const char *name);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_model_site_beginW(const wchar_t *name);
+#endif
+void ITTAPI __itt_model_site_beginAL(const char *name, size_t siteNameLen);
 void ITTAPI __itt_model_site_end  (__itt_model_site *site, __itt_model_site_instance *instance);
 
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, model_site_begin,  (__itt_model_site *site, __itt_model_site_instance *instance, const char *name), (site, instance, name))
-ITT_STUBV(ITTAPI, void, model_site_end,    (__itt_model_site *site, __itt_model_site_instance *instance), (site, instance))
+ITT_STUBV(ITTAPI, void, model_site_begin,  (__itt_model_site *site, __itt_model_site_instance *instance, const char *name))
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, model_site_beginW,  (const wchar_t *name))
+#endif
+ITT_STUBV(ITTAPI, void, model_site_beginAL,  (const char *name, size_t siteNameLen))
+ITT_STUBV(ITTAPI, void, model_site_end,    (__itt_model_site *site, __itt_model_site_instance *instance))
 #define __itt_model_site_begin      ITTNOTIFY_VOID(model_site_begin)
 #define __itt_model_site_begin_ptr  ITTNOTIFY_NAME(model_site_begin)
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_site_beginW      ITTNOTIFY_VOID(model_site_beginW)
+#define __itt_model_site_beginW_ptr  ITTNOTIFY_NAME(model_site_beginW)
+#endif
+#define __itt_model_site_beginAL      ITTNOTIFY_VOID(model_site_beginAL)
+#define __itt_model_site_beginAL_ptr  ITTNOTIFY_NAME(model_site_beginAL)
 #define __itt_model_site_end        ITTNOTIFY_VOID(model_site_end)
 #define __itt_model_site_end_ptr    ITTNOTIFY_NAME(model_site_end)
 #else  /* INTEL_NO_ITTNOTIFY_API */
 #define __itt_model_site_begin(site, instance, name)
 #define __itt_model_site_begin_ptr  0
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_site_beginW(name)
+#define __itt_model_site_beginW_ptr  0
+#endif
+#define __itt_model_site_beginAL(name, siteNameLen)
+#define __itt_model_site_beginAL_ptr  0
 #define __itt_model_site_end(site, instance)
 #define __itt_model_site_end_ptr    0
 #endif /* INTEL_NO_ITTNOTIFY_API */
 #else  /* INTEL_NO_MACRO_BODY */
 #define __itt_model_site_begin_ptr  0
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_site_beginW_ptr  0
+#endif
+#define __itt_model_site_beginAL_ptr  0
 #define __itt_model_site_end_ptr    0
 #endif /* INTEL_NO_MACRO_BODY */
 /** @endcond */
@@ -745,25 +894,49 @@ ITT_STUBV(ITTAPI, void, model_site_end,    (__itt_model_site *site, __itt_model_
  * indicate the problem.
  */
 void ITTAPI __itt_model_task_begin(__itt_model_task *task, __itt_model_task_instance *instance, const char *name);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_model_task_beginW(const wchar_t *name);
+#endif
+void ITTAPI __itt_model_task_beginAL(const char *name, size_t taskNameLen);
 void ITTAPI __itt_model_task_end  (__itt_model_task *task, __itt_model_task_instance *instance);
 
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, model_task_begin,  (__itt_model_task *task, __itt_model_task_instance *instance, const char *name), (task, instance, name))
-ITT_STUBV(ITTAPI, void, model_task_end,    (__itt_model_task *task, __itt_model_task_instance *instance), (task, instance))
+ITT_STUBV(ITTAPI, void, model_task_begin,  (__itt_model_task *task, __itt_model_task_instance *instance, const char *name))
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, model_task_beginW,  (const wchar_t *name))
+#endif
+ITT_STUBV(ITTAPI, void, model_task_beginAL,  (const char *name, size_t taskNameLen))
+ITT_STUBV(ITTAPI, void, model_task_end,    (__itt_model_task *task, __itt_model_task_instance *instance))
 #define __itt_model_task_begin      ITTNOTIFY_VOID(model_task_begin)
 #define __itt_model_task_begin_ptr  ITTNOTIFY_NAME(model_task_begin)
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_task_beginW     ITTNOTIFY_VOID(model_task_beginW)
+#define __itt_model_task_beginW_ptr ITTNOTIFY_NAME(model_task_beginW)
+#endif
+#define __itt_model_task_beginAL    ITTNOTIFY_VOID(model_task_beginAL)
+#define __itt_model_task_beginAL_ptr ITTNOTIFY_NAME(model_task_beginAL)
 #define __itt_model_task_end        ITTNOTIFY_VOID(model_task_end)
 #define __itt_model_task_end_ptr    ITTNOTIFY_NAME(model_task_end)
 #else  /* INTEL_NO_ITTNOTIFY_API */
 #define __itt_model_task_begin(task, instance, name)
 #define __itt_model_task_begin_ptr  0
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_task_beginW(name)
+#define __itt_model_task_beginW_ptr  0
+#endif
+#define __itt_model_task_beginAL(name, siteNameLen)
+#define __itt_model_task_beginAL_ptr  0
 #define __itt_model_task_end(task, instance)
 #define __itt_model_task_end_ptr    0
 #endif /* INTEL_NO_ITTNOTIFY_API */
 #else  /* INTEL_NO_MACRO_BODY */
 #define __itt_model_task_begin_ptr  0
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_model_task_beginW_ptr 0
+#endif
+#define __itt_model_task_beginAL_ptr  0
 #define __itt_model_task_end_ptr    0
 #endif /* INTEL_NO_MACRO_BODY */
 /** @endcond */
@@ -786,8 +959,8 @@ void ITTAPI __itt_model_lock_release(void *lock);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, model_lock_acquire, (void *lock), (lock))
-ITT_STUBV(ITTAPI, void, model_lock_release, (void *lock), (lock))
+ITT_STUBV(ITTAPI, void, model_lock_acquire, (void *lock))
+ITT_STUBV(ITTAPI, void, model_lock_release, (void *lock))
 #define __itt_model_lock_acquire     ITTNOTIFY_VOID(model_lock_acquire)
 #define __itt_model_lock_acquire_ptr ITTNOTIFY_NAME(model_lock_acquire)
 #define __itt_model_lock_release     ITTNOTIFY_VOID(model_lock_release)
@@ -817,8 +990,8 @@ void ITTAPI __itt_model_record_deallocation(void *addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, model_record_allocation,   (void *addr, size_t size), (addr, size))
-ITT_STUBV(ITTAPI, void, model_record_deallocation, (void *addr),              (addr))
+ITT_STUBV(ITTAPI, void, model_record_allocation,   (void *addr, size_t size))
+ITT_STUBV(ITTAPI, void, model_record_deallocation, (void *addr))
 #define __itt_model_record_allocation       ITTNOTIFY_VOID(model_record_allocation)
 #define __itt_model_record_allocation_ptr   ITTNOTIFY_NAME(model_record_allocation)
 #define __itt_model_record_deallocation     ITTNOTIFY_VOID(model_record_deallocation)
@@ -845,7 +1018,7 @@ void ITTAPI __itt_model_induction_uses(void* addr, size_t size);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, model_induction_uses, (void *addr, size_t size), (addr, size))
+ITT_STUBV(ITTAPI, void, model_induction_uses, (void *addr, size_t size))
 #define __itt_model_induction_uses     ITTNOTIFY_VOID(model_induction_uses)
 #define __itt_model_induction_uses_ptr ITTNOTIFY_NAME(model_induction_uses)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -868,7 +1041,7 @@ void ITTAPI __itt_model_reduction_uses(void* addr, size_t size);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, model_reduction_uses, (void *addr, size_t size), (addr, size))
+ITT_STUBV(ITTAPI, void, model_reduction_uses, (void *addr, size_t size))
 #define __itt_model_reduction_uses     ITTNOTIFY_VOID(model_reduction_uses)
 #define __itt_model_reduction_uses_ptr ITTNOTIFY_NAME(model_reduction_uses)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -891,7 +1064,7 @@ void ITTAPI __itt_model_observe_uses(void* addr, size_t size);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, model_observe_uses, (void *addr, size_t size), (addr, size))
+ITT_STUBV(ITTAPI, void, model_observe_uses, (void *addr, size_t size))
 #define __itt_model_observe_uses     ITTNOTIFY_VOID(model_observe_uses)
 #define __itt_model_observe_uses_ptr ITTNOTIFY_NAME(model_observe_uses)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -914,7 +1087,7 @@ void ITTAPI __itt_model_clear_uses(void* addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, model_clear_uses, (void *addr), (addr))
+ITT_STUBV(ITTAPI, void, model_clear_uses, (void *addr))
 #define __itt_model_clear_uses     ITTNOTIFY_VOID(model_clear_uses)
 #define __itt_model_clear_uses_ptr ITTNOTIFY_NAME(model_clear_uses)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -953,8 +1126,8 @@ void ITTAPI __itt_model_disable_pop(void);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, model_disable_push, (__itt_model_disable x), (x))
-ITT_STUBV(ITTAPI, void, model_disable_pop,  (void),                  ())
+ITT_STUBV(ITTAPI, void, model_disable_push, (__itt_model_disable x))
+ITT_STUBV(ITTAPI, void, model_disable_pop,  (void))
 #define __itt_model_disable_push     ITTNOTIFY_VOID(model_disable_push)
 #define __itt_model_disable_push_ptr ITTNOTIFY_NAME(model_disable_push)
 #define __itt_model_disable_pop      ITTNOTIFY_VOID(model_disable_pop)
@@ -973,211 +1146,6 @@ ITT_STUBV(ITTAPI, void, model_disable_pop,  (void),                  ())
 /** @} model group */
 
 /**
- * @defgroup frames Frames
- * @ingroup public
- * Frames group
- * @{
- */
-/**
- * @brief opaque structure for frame identification
- */
-typedef struct __itt_frame_t *__itt_frame;
-
-/**
- * @brief Create a global frame with given domain
- */
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-__itt_frame ITTAPI __itt_frame_createA(const char    *domain);
-__itt_frame ITTAPI __itt_frame_createW(const wchar_t *domain);
-#ifdef UNICODE
-#  define __itt_frame_create     __itt_frame_createW
-#  define __itt_frame_create_ptr __itt_frame_createW_ptr
-#else /* UNICODE */
-#  define __itt_frame_create     __itt_frame_createA
-#  define __itt_frame_create_ptr __itt_frame_createA_ptr
-#endif /* UNICODE */
-#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-__itt_frame ITTAPI __itt_frame_create(const char *domain);
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-
-/** @cond exclude_from_documentation */
-#ifndef INTEL_NO_MACRO_BODY
-#ifndef INTEL_NO_ITTNOTIFY_API
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUB(ITTAPI, __itt_frame, frame_createA, (const char    *domain), (domain))
-ITT_STUB(ITTAPI, __itt_frame, frame_createW, (const wchar_t *domain), (domain))
-#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUB(ITTAPI, __itt_frame, frame_create,  (const char *domain), (domain))
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-#define __itt_frame_createA     ITTNOTIFY_DATA(frame_createA)
-#define __itt_frame_createA_ptr ITTNOTIFY_NAME(frame_createA)
-#define __itt_frame_createW     ITTNOTIFY_DATA(frame_createW)
-#define __itt_frame_createW_ptr ITTNOTIFY_NAME(frame_createW)
-#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#define __itt_frame_create     ITTNOTIFY_DATA(frame_create)
-#define __itt_frame_create_ptr ITTNOTIFY_NAME(frame_create)
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#else  /* INTEL_NO_ITTNOTIFY_API */
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-#define __itt_frame_createA(domain)
-#define __itt_frame_createA_ptr 0
-#define __itt_frame_createW(domain)
-#define __itt_frame_createW_ptr 0
-#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#define __itt_frame_create(domain)
-#define __itt_frame_create_ptr  0
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* INTEL_NO_ITTNOTIFY_API */
-#else  /* INTEL_NO_MACRO_BODY */
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-#define __itt_frame_createA_ptr 0
-#define __itt_frame_createW_ptr 0
-#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#define __itt_frame_create_ptr  0
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* INTEL_NO_MACRO_BODY */
-/** @endcond */
-
-/** @brief Record an frame begin occurrence. */
-void ITTAPI __itt_frame_begin(__itt_frame frame);
-/** @brief Record an frame end occurrence. */
-void ITTAPI __itt_frame_end  (__itt_frame frame);
-
-/** @cond exclude_from_documentation */
-#ifndef INTEL_NO_MACRO_BODY
-#ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, frame_begin, (__itt_frame frame), (frame))
-ITT_STUBV(ITTAPI, void, frame_end,   (__itt_frame frame), (frame))
-#define __itt_frame_begin     ITTNOTIFY_VOID(frame_begin)
-#define __itt_frame_begin_ptr ITTNOTIFY_NAME(frame_begin)
-#define __itt_frame_end       ITTNOTIFY_VOID(frame_end)
-#define __itt_frame_end_ptr   ITTNOTIFY_NAME(frame_end)
-#else  /* INTEL_NO_ITTNOTIFY_API */
-#define __itt_frame_begin(frame)
-#define __itt_frame_begin_ptr 0
-#define __itt_frame_end(frame)
-#define __itt_frame_end_ptr   0
-#endif /* INTEL_NO_ITTNOTIFY_API */
-#else  /* INTEL_NO_MACRO_BODY */
-#define __itt_frame_begin_ptr 0
-#define __itt_frame_end_ptr   0
-#endif /* INTEL_NO_MACRO_BODY */
-/** @endcond */
-/** @} frames group */
-
-/**
- * @defgroup events Events
- * @ingroup public
- * Events group
- * @{
- */
-/** @brief user event type */
-typedef int __itt_event;
-
-/**
- * @brief Create an event notification
- * @note name or namelen being null/name and namelen not matching, user event feature not enabled
- * @return non-zero event identifier upon success and __itt_err otherwise
- */
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-__itt_event LIBITTAPI __itt_event_createA(const char    *name, int namelen);
-__itt_event LIBITTAPI __itt_event_createW(const wchar_t *name, int namelen);
-#ifdef UNICODE
-#  define __itt_event_create     __itt_event_createW
-#  define __itt_event_create_ptr __itt_event_createW_ptr
-#else
-#  define __itt_event_create     __itt_event_createA
-#  define __itt_event_create_ptr __itt_event_createA_ptr
-#endif /* UNICODE */
-#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-__itt_event LIBITTAPI __itt_event_create(const char *name, int namelen);
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-
-/** @cond exclude_from_documentation */
-#ifndef INTEL_NO_MACRO_BODY
-#ifndef INTEL_NO_ITTNOTIFY_API
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char    *name, int namelen), (name, namelen))
-ITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen), (name, namelen))
-#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUB(LIBITTAPI, __itt_event, event_create,  (const char *name, int namelen), (name, namelen))
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-#define __itt_event_createA     ITTNOTIFY_DATA(event_createA)
-#define __itt_event_createA_ptr ITTNOTIFY_NAME(event_createA)
-#define __itt_event_createW     ITTNOTIFY_DATA(event_createW)
-#define __itt_event_createW_ptr ITTNOTIFY_NAME(event_createW)
-#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#define __itt_event_create      ITTNOTIFY_DATA(event_create)
-#define __itt_event_create_ptr  ITTNOTIFY_NAME(event_create)
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#else  /* INTEL_NO_ITTNOTIFY_API */
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-#define __itt_event_createA(name, namelen) (__itt_event)0
-#define __itt_event_createA_ptr 0
-#define __itt_event_createW(name, namelen) (__itt_event)0
-#define __itt_event_createW_ptr 0
-#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#define __itt_event_create(name, namelen)  (__itt_event)0
-#define __itt_event_create_ptr  0
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* INTEL_NO_ITTNOTIFY_API */
-#else  /* INTEL_NO_MACRO_BODY */
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-#define __itt_event_createA_ptr 0
-#define __itt_event_createW_ptr 0
-#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#define __itt_event_create_ptr  0
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* INTEL_NO_MACRO_BODY */
-/** @endcond */
-
-/**
- * @brief Record an event occurrence.
- * @return __itt_err upon failure (invalid event id/user event feature not enabled)
- */
-int LIBITTAPI __itt_event_start(__itt_event event);
-
-/** @cond exclude_from_documentation */
-#ifndef INTEL_NO_MACRO_BODY
-#ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUB(LIBITTAPI, int, event_start, (__itt_event event), (event))
-#define __itt_event_start     ITTNOTIFY_DATA(event_start)
-#define __itt_event_start_ptr ITTNOTIFY_NAME(event_start)
-#else  /* INTEL_NO_ITTNOTIFY_API */
-#define __itt_event_start(event) (int)0
-#define __itt_event_start_ptr 0
-#endif /* INTEL_NO_ITTNOTIFY_API */
-#else  /* INTEL_NO_MACRO_BODY */
-#define __itt_event_start_ptr 0
-#endif /* INTEL_NO_MACRO_BODY */
-/** @endcond */
-
-/**
- * @brief Record an event end occurrence.
- * @note It is optional if events do not have durations.
- * @return __itt_err upon failure (invalid event id/user event feature not enabled)
- */
-int LIBITTAPI __itt_event_end(__itt_event event);
-
-/** @cond exclude_from_documentation */
-#ifndef INTEL_NO_MACRO_BODY
-#ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event), (event))
-#define __itt_event_end     ITTNOTIFY_DATA(event_end)
-#define __itt_event_end_ptr ITTNOTIFY_NAME(event_end)
-#else  /* INTEL_NO_ITTNOTIFY_API */
-#define __itt_event_end(event) (int)0
-#define __itt_event_end_ptr 0
-#endif /* INTEL_NO_ITTNOTIFY_API */
-#else  /* INTEL_NO_MACRO_BODY */
-#define __itt_event_end_ptr 0
-#endif /* INTEL_NO_MACRO_BODY */
-/** @endcond */
-/** @} events group */
-
-/**
  * @defgroup heap Heap
  * @ingroup public
  * Heap group
@@ -1193,7 +1161,7 @@ typedef void* __itt_heap_function;
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 __itt_heap_function ITTAPI __itt_heap_function_createA(const char*    name, const char*    domain);
 __itt_heap_function ITTAPI __itt_heap_function_createW(const wchar_t* name, const wchar_t* domain);
-#ifdef UNICODE
+#if defined(UNICODE) || defined(_UNICODE)
 #  define __itt_heap_function_create     __itt_heap_function_createW
 #  define __itt_heap_function_create_ptr __itt_heap_function_createW_ptr
 #else
@@ -1208,10 +1176,10 @@ __itt_heap_function ITTAPI __itt_heap_function_create(const char* name, const ch
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createA, (const char*    name, const char*    domain), (name, domain))
-ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createW, (const wchar_t* name, const wchar_t* domain), (name, domain))
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createA, (const char*    name, const char*    domain))
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createW, (const wchar_t* name, const wchar_t* domain))
 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUB(ITTAPI, __itt_heap_function, heap_function_create,  (const char*    name, const char*    domain), (name, domain))
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_create,  (const char*    name, const char*    domain))
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #define __itt_heap_function_createA     ITTNOTIFY_DATA(heap_function_createA)
@@ -1251,7 +1219,7 @@ void ITTAPI __itt_heap_allocate_begin(__itt_heap_function h, size_t size, int in
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, heap_allocate_begin, (__itt_heap_function h, size_t size, int initialized), (h, size, initialized))
+ITT_STUBV(ITTAPI, void, heap_allocate_begin, (__itt_heap_function h, size_t size, int initialized))
 #define __itt_heap_allocate_begin     ITTNOTIFY_VOID(heap_allocate_begin)
 #define __itt_heap_allocate_begin_ptr ITTNOTIFY_NAME(heap_allocate_begin)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -1266,12 +1234,12 @@ ITT_STUBV(ITTAPI, void, heap_allocate_begin, (__itt_heap_function h, size_t size
 /**
  * @brief Record an allocation end occurrence.
  */
-void ITTAPI __itt_heap_allocate_end(__itt_heap_function h, void* addr, size_t size, int initialized);
+void ITTAPI __itt_heap_allocate_end(__itt_heap_function h, void** addr, size_t size, int initialized);
 
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, heap_allocate_end, (__itt_heap_function h, void* addr, size_t size, int initialized), (h, addr, size, initialized))
+ITT_STUBV(ITTAPI, void, heap_allocate_end, (__itt_heap_function h, void** addr, size_t size, int initialized))
 #define __itt_heap_allocate_end     ITTNOTIFY_VOID(heap_allocate_end)
 #define __itt_heap_allocate_end_ptr ITTNOTIFY_NAME(heap_allocate_end)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -1291,7 +1259,7 @@ void ITTAPI __itt_heap_free_begin(__itt_heap_function h, void* addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, heap_free_begin, (__itt_heap_function h, void* addr), (h, addr))
+ITT_STUBV(ITTAPI, void, heap_free_begin, (__itt_heap_function h, void* addr))
 #define __itt_heap_free_begin     ITTNOTIFY_VOID(heap_free_begin)
 #define __itt_heap_free_begin_ptr ITTNOTIFY_NAME(heap_free_begin)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -1311,7 +1279,7 @@ void ITTAPI __itt_heap_free_end(__itt_heap_function h, void* addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, heap_free_end, (__itt_heap_function h, void* addr), (h, addr))
+ITT_STUBV(ITTAPI, void, heap_free_end, (__itt_heap_function h, void* addr))
 #define __itt_heap_free_end     ITTNOTIFY_VOID(heap_free_end)
 #define __itt_heap_free_end_ptr ITTNOTIFY_NAME(heap_free_end)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -1331,7 +1299,7 @@ void ITTAPI __itt_heap_reallocate_begin(__itt_heap_function h, void* addr, size_
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, heap_reallocate_begin, (__itt_heap_function h, void* addr, size_t new_size, int initialized), (h, addr, new_size, initialized))
+ITT_STUBV(ITTAPI, void, heap_reallocate_begin, (__itt_heap_function h, void* addr, size_t new_size, int initialized))
 #define __itt_heap_reallocate_begin     ITTNOTIFY_VOID(heap_reallocate_begin)
 #define __itt_heap_reallocate_begin_ptr ITTNOTIFY_NAME(heap_reallocate_begin)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -1346,12 +1314,12 @@ ITT_STUBV(ITTAPI, void, heap_reallocate_begin, (__itt_heap_function h, void* add
 /**
  * @brief Record an reallocation end occurrence.
  */
-void ITTAPI __itt_heap_reallocate_end(__itt_heap_function h, void* addr, void* new_addr, size_t new_size, int initialized);
+void ITTAPI __itt_heap_reallocate_end(__itt_heap_function h, void* addr, void** new_addr, size_t new_size, int initialized);
 
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, heap_reallocate_end, (__itt_heap_function h, void* addr, void* new_addr, size_t new_size, int initialized), (h, addr, new_addr, new_size, initialized))
+ITT_STUBV(ITTAPI, void, heap_reallocate_end, (__itt_heap_function h, void* addr, void** new_addr, size_t new_size, int initialized))
 #define __itt_heap_reallocate_end     ITTNOTIFY_VOID(heap_reallocate_end)
 #define __itt_heap_reallocate_end_ptr ITTNOTIFY_NAME(heap_reallocate_end)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -1369,7 +1337,7 @@ void ITTAPI __itt_heap_internal_access_begin(void);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, heap_internal_access_begin,  (void), ())
+ITT_STUBV(ITTAPI, void, heap_internal_access_begin,  (void))
 #define __itt_heap_internal_access_begin      ITTNOTIFY_VOID(heap_internal_access_begin)
 #define __itt_heap_internal_access_begin_ptr  ITTNOTIFY_NAME(heap_internal_access_begin)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -1387,7 +1355,7 @@ void ITTAPI __itt_heap_internal_access_end(void);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, heap_internal_access_end, (void), ())
+ITT_STUBV(ITTAPI, void, heap_internal_access_end, (void))
 #define __itt_heap_internal_access_end     ITTNOTIFY_VOID(heap_internal_access_end)
 #define __itt_heap_internal_access_end_ptr ITTNOTIFY_NAME(heap_internal_access_end)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -1399,11 +1367,2001 @@ ITT_STUBV(ITTAPI, void, heap_internal_access_end, (void), ())
 #endif /* INTEL_NO_MACRO_BODY */
 /** @endcond */
 /** @} heap group */
+/** @endcond */
+
+/* ========================================================================== */
+
+/**
+ * @defgroup domains Domains
+ * @ingroup public
+ * Domains group
+ * @{
+ */
 
 /** @cond exclude_from_documentation */
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+#pragma pack(push, 8)
+
+typedef struct ___itt_domain
+{
+    volatile int flags; /*!< Zero if disabled, non-zero if enabled. The meaning of different non-zero values is reserved to the runtime */
+    const char* nameA;  /*!< Copy of original name in ASCII. */
+#if defined(UNICODE) || defined(_UNICODE)
+    const wchar_t* nameW; /*!< Copy of original name in UNICODE. */
+#else  /* UNICODE || _UNICODE */
+    void* nameW;
+#endif /* UNICODE || _UNICODE */
+    int   extra1; /*!< Reserved to the runtime */
+    void* extra2; /*!< Reserved to the runtime */
+    struct ___itt_domain* next;
+} __itt_domain;
+
+#pragma pack(pop)
 /** @endcond */
 
-#endif /* _ITTNOTIFY_H_ */
+/**
+ * @ingroup domains
+ * @brief Create a domain.
+ * Create domain using some domain name: the URI naming style is recommended.
+ * Because the set of domains is expected to be static over the application's
+ * execution time, there is no mechanism to destroy a domain.
+ * Any domain can be accessed by any thread in the process, regardless of
+ * which thread created the domain. This call is thread-safe.
+ * @param[in] name name of domain
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_domain* ITTAPI __itt_domain_createA(const char    *name);
+__itt_domain* ITTAPI __itt_domain_createW(const wchar_t *name);
+#if defined(UNICODE) || defined(_UNICODE)
+#  define __itt_domain_create     __itt_domain_createW
+#  define __itt_domain_create_ptr __itt_domain_createW_ptr
+#else /* UNICODE */
+#  define __itt_domain_create     __itt_domain_createA
+#  define __itt_domain_create_ptr __itt_domain_createA_ptr
+#endif /* UNICODE */
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_domain* ITTAPI __itt_domain_create(const char *name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_domain*, domain_createA, (const char    *name))
+ITT_STUB(ITTAPI, __itt_domain*, domain_createW, (const wchar_t *name))
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_domain*, domain_create,  (const char    *name))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_domain_createA     ITTNOTIFY_DATA(domain_createA)
+#define __itt_domain_createA_ptr ITTNOTIFY_NAME(domain_createA)
+#define __itt_domain_createW     ITTNOTIFY_DATA(domain_createW)
+#define __itt_domain_createW_ptr ITTNOTIFY_NAME(domain_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_domain_create     ITTNOTIFY_DATA(domain_create)
+#define __itt_domain_create_ptr ITTNOTIFY_NAME(domain_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_domain_createA(name) (__itt_domain*)0
+#define __itt_domain_createA_ptr 0
+#define __itt_domain_createW(name) (__itt_domain*)0
+#define __itt_domain_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_domain_create(name)  (__itt_domain*)0
+#define __itt_domain_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_domain_createA_ptr 0
+#define __itt_domain_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_domain_create_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} domains group */
+
+/**
+ * @defgroup ids IDs
+ * @ingroup public
+ * IDs group
+ * @{
+ */
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_id
+{
+    unsigned long long d1, d2, d3;
+} __itt_id;
+
+#pragma pack(pop)
+/** @endcond */
+
+static const __itt_id __itt_null = { 0, 0, 0 };
+
+/**
+ * @ingroup ids
+ * @brief A convenience function is provided to create an ID without domain control.
+ * @brief This is a convenience function to initialize an __itt_id structure. This function
+ * does not affect the trace collector runtime in any way. After you make the ID with this
+ * function, you still must create it with the __itt_id_create function before using the ID
+ * to identify a named entity.
+ * @param[in] addr The address of object; high QWORD of the ID value.
+ * @param[in] extra The extra data to unique identify object; low QWORD of the ID value.
+ */
+
+INLINE __itt_id ITTAPI __itt_id_make(void* addr, unsigned long long extra) INLINE_ATTRIBUTE;
+INLINE __itt_id ITTAPI __itt_id_make(void* addr, unsigned long long extra)
+{
+    __itt_id id = __itt_null;
+    id.d1 = (unsigned long long)((uintptr_t)addr);
+    id.d2 = (unsigned long long)extra;
+    id.d3 = (unsigned long long)0; /* Reserved. Must be zero */
+    return id;
+}
+
+/**
+ * @ingroup ids
+ * @brief Create an instance of identifier.
+ * This establishes the beginning of the lifetime of an instance of
+ * the given ID in the trace. Once this lifetime starts, the ID
+ * can be used to tag named entity instances in calls such as
+ * __itt_task_begin, and to specify relationships among
+ * identified named entity instances, using the \ref relations APIs.
+ * Instance IDs are not domain specific!
+ * @param[in] domain The domain controlling the execution of this call.
+ * @param[in] id The ID to create.
+ */
+void ITTAPI __itt_id_create(const __itt_domain *domain, __itt_id id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, id_create, (const __itt_domain *domain, __itt_id id))
+#define __itt_id_create(d,x) ITTNOTIFY_VOID_D1(id_create,d,x)
+#define __itt_id_create_ptr  ITTNOTIFY_NAME(id_create)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_id_create(domain,id)
+#define __itt_id_create_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_id_create_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup ids
+ * @brief Destroy an instance of identifier.
+ * This ends the lifetime of the current instance of the given ID value in the trace.
+ * Any relationships that are established after this lifetime ends are invalid.
+ * This call must be performed before the given ID value can be reused for a different
+ * named entity instance.
+ * @param[in] domain The domain controlling the execution of this call.
+ * @param[in] id The ID to destroy.
+ */
+void ITTAPI __itt_id_destroy(const __itt_domain *domain, __itt_id id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, id_destroy, (const __itt_domain *domain, __itt_id id))
+#define __itt_id_destroy(d,x) ITTNOTIFY_VOID_D1(id_destroy,d,x)
+#define __itt_id_destroy_ptr  ITTNOTIFY_NAME(id_destroy)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_id_destroy(domain,id)
+#define __itt_id_destroy_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_id_destroy_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} ids group */
+
+/**
+ * @defgroup handless String Handles
+ * @ingroup public
+ * String Handles group
+ * @{
+ */
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_string_handle
+{
+    const char* strA; /*!< Copy of original string in ASCII. */
+#if defined(UNICODE) || defined(_UNICODE)
+    const wchar_t* strW; /*!< Copy of original string in UNICODE. */
+#else  /* UNICODE || _UNICODE */
+    void* strW;
+#endif /* UNICODE || _UNICODE */
+    int   extra1; /*!< Reserved. Must be zero   */
+    void* extra2; /*!< Reserved. Must be zero   */
+    struct ___itt_string_handle* next;
+} __itt_string_handle;
+
+#pragma pack(pop)
+/** @endcond */
+
+/**
+ * @ingroup handles
+ * @brief Create a string handle.
+ * Create and return handle value that can be associated with a string.
+ * Consecutive calls to __itt_string_handle_create with the same name
+ * return the same value. Because the set of string handles is expected to remain
+ * static during the application's execution time, there is no mechanism to destroy a string handle.
+ * Any string handle can be accessed by any thread in the process, regardless of which thread created
+ * the string handle. This call is thread-safe.
+ * @param[in] name The input string
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_string_handle* ITTAPI __itt_string_handle_createA(const char    *name);
+__itt_string_handle* ITTAPI __itt_string_handle_createW(const wchar_t *name);
+#if defined(UNICODE) || defined(_UNICODE)
+#  define __itt_string_handle_create     __itt_string_handle_createW
+#  define __itt_string_handle_create_ptr __itt_string_handle_createW_ptr
+#else /* UNICODE */
+#  define __itt_string_handle_create     __itt_string_handle_createA
+#  define __itt_string_handle_create_ptr __itt_string_handle_createA_ptr
+#endif /* UNICODE */
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_string_handle* ITTAPI __itt_string_handle_create(const char *name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createA, (const char    *name))
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createW, (const wchar_t *name))
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_create,  (const char    *name))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_string_handle_createA     ITTNOTIFY_DATA(string_handle_createA)
+#define __itt_string_handle_createA_ptr ITTNOTIFY_NAME(string_handle_createA)
+#define __itt_string_handle_createW     ITTNOTIFY_DATA(string_handle_createW)
+#define __itt_string_handle_createW_ptr ITTNOTIFY_NAME(string_handle_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_string_handle_create     ITTNOTIFY_DATA(string_handle_create)
+#define __itt_string_handle_create_ptr ITTNOTIFY_NAME(string_handle_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_string_handle_createA(name) (__itt_string_handle*)0
+#define __itt_string_handle_createA_ptr 0
+#define __itt_string_handle_createW(name) (__itt_string_handle*)0
+#define __itt_string_handle_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_string_handle_create(name)  (__itt_string_handle*)0
+#define __itt_string_handle_create_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_string_handle_createA_ptr 0
+#define __itt_string_handle_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_string_handle_create_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} handles group */
+
+/** @cond exclude_from_gpa_documentation */
+
+/**
+ * @defgroup regions Regions
+ * @ingroup public
+ * Regions group
+ * @{
+ */
+/**
+ * @ingroup regions
+ * @brief Begin of region instance.
+ * Successive calls to __itt_region_begin with the same ID are ignored
+ * until a call to __itt_region_end with the same ID
+ * @param[in] domain The domain for this region instance
+ * @param[in] id The instance ID for this region instance. Must not be __itt_null
+ * @param[in] parentid The instance ID for the parent of this region instance, or __itt_null
+ * @param[in] name The name of this region
+ */
+void ITTAPI __itt_region_begin(const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name);
+
+/**
+ * @ingroup regions
+ * @brief End of region instance.
+ * The first call to __itt_region_end with a given ID ends the
+ * region. Successive calls with the same ID are ignored, as are
+ * calls that do not have a matching __itt_region_begin call.
+ * @param[in] domain The domain for this region instance
+ * @param[in] id The instance ID for this region instance
+ */
+void ITTAPI __itt_region_end(const __itt_domain *domain, __itt_id id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, region_begin, (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name))
+ITT_STUBV(ITTAPI, void, region_end,   (const __itt_domain *domain, __itt_id id))
+#define __itt_region_begin(d,x,y,z) ITTNOTIFY_VOID_D3(region_begin,d,x,y,z)
+#define __itt_region_begin_ptr      ITTNOTIFY_NAME(region_begin)
+#define __itt_region_end(d,x)       ITTNOTIFY_VOID_D1(region_end,d,x)
+#define __itt_region_end_ptr        ITTNOTIFY_NAME(region_end)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_region_begin(d,x,y,z)
+#define __itt_region_begin_ptr 0
+#define __itt_region_end(d,x)
+#define __itt_region_end_ptr   0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_region_begin_ptr 0
+#define __itt_region_end_ptr   0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} regions group */
+
+/**
+ * @defgroup frames Frames
+ * @ingroup public
+ * Frames are similar to regions, but are intended to be easier to use and to implement.
+ * In particular:
+ * - Frames always represent periods of elapsed time
+ * - By default, frames have no nesting relationships
+ * @{
+ */
+
+/**
+ * @ingroup frames
+ * @brief Begin a frame instance.
+ * Successive calls to __itt_frame_begin with the
+ * same ID are ignored until a call to __itt_frame_end with the same ID.
+ * @param[in] domain The domain for this frame instance
+ * @param[in] id The instance ID for this frame instance or NULL
+ */
+void ITTAPI __itt_frame_begin_v3(const __itt_domain *domain, __itt_id *id);
+
+/**
+ * @ingroup frames
+ * @brief End a frame instance.
+ * The first call to __itt_frame_end with a given ID
+ * ends the frame. Successive calls with the same ID are ignored, as are
+ * calls that do not have a matching __itt_frame_begin call.
+ * @param[in] domain The domain for this frame instance
+ * @param[in] id The instance ID for this frame instance or NULL for current
+ */
+void ITTAPI __itt_frame_end_v3(const __itt_domain *domain, __itt_id *id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, frame_begin_v3, (const __itt_domain *domain, __itt_id *id))
+ITT_STUBV(ITTAPI, void, frame_end_v3,   (const __itt_domain *domain, __itt_id *id))
+#define __itt_frame_begin_v3(d,x)   ITTNOTIFY_VOID_D1(frame_begin_v3,d,x)
+#define __itt_frame_begin_v3_ptr    ITTNOTIFY_NAME(frame_begin_v3)
+#define __itt_frame_end_v3(d,x)     ITTNOTIFY_VOID_D1(frame_end_v3,d,x)
+#define __itt_frame_end_v3_ptr      ITTNOTIFY_NAME(frame_end_v3)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_frame_begin_v3(domain,id)
+#define __itt_frame_begin_v3_ptr 0
+#define __itt_frame_end_v3(domain,id)
+#define __itt_frame_end_v3_ptr   0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_frame_begin_v3_ptr 0
+#define __itt_frame_end_v3_ptr   0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} frames group */
+/** @endcond */
+
+/**
+ * @defgroup taskgroup Task Group
+ * @ingroup public
+ * Task Group
+ * @{
+ */
+/**
+ * @ingroup task_groups
+ * @brief Denotes a task_group instance.
+ * Successive calls to __itt_task_group with the same ID are ignored.
+ * @param[in] domain The domain for this task_group instance
+ * @param[in] id The instance ID for this task_group instance. Must not be __itt_null.
+ * @param[in] parentid The instance ID for the parent of this task_group instance, or __itt_null.
+ * @param[in] name The name of this task_group
+ */
+void ITTAPI __itt_task_group(const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, task_group, (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name))
+#define __itt_task_group(d,x,y,z) ITTNOTIFY_VOID_D3(task_group,d,x,y,z)
+#define __itt_task_group_ptr      ITTNOTIFY_NAME(task_group)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_task_group(d,x,y,z)
+#define __itt_task_group_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_task_group_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} taskgroup group */
+
+/**
+ * @defgroup tasks Tasks
+ * @ingroup public
+ * A task instance represents a piece of work performed by a particular
+ * thread for a period of time. A call to __itt_task_begin creates a
+ * task instance. This becomes the current instance for that task on that
+ * thread. A following call to __itt_task_end on the same thread ends the
+ * instance. There may be multiple simultaneous instances of tasks with the
+ * same name on different threads. If an ID is specified, the task instance
+ * receives that ID. Nested tasks are allowed.
+ *
+ * Note: The task is defined by the bracketing of __itt_task_begin and
+ * __itt_task_end on the same thread. If some scheduling mechanism causes
+ * task switching (the thread executes a different user task) or task
+ * switching (the user task switches to a different thread) then this breaks
+ * the notion of  current instance. Additional API calls are required to
+ * deal with that possibility.
+ * @{
+ */
+
+/**
+ * @ingroup tasks
+ * @brief Begin a task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] taskid The instance ID for this task instance, or __itt_null
+ * @param[in] parentid The parent instance to which this task instance belongs, or __itt_null
+ * @param[in] name The name of this task
+ */
+void ITTAPI __itt_task_begin(const __itt_domain *domain, __itt_id taskid, __itt_id parentid, __itt_string_handle *name);
+
+/**
+ * @ingroup tasks
+ * @brief Begin a task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] taskid The identifier for this task instance (may be 0)
+ * @param[in] parentid The parent of this task (may be 0)
+ * @param[in] fn The pointer to the function you are tracing
+ */
+void ITTAPI __itt_task_begin_fn(const __itt_domain *domain, __itt_id taskid, __itt_id parentid, void* fn);
+
+/**
+ * @ingroup tasks
+ * @brief End the current task instance.
+ * @param[in] domain The domain for this task
+ */
+void ITTAPI __itt_task_end(const __itt_domain *domain);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, task_begin,    (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name))
+ITT_STUBV(ITTAPI, void, task_begin_fn, (const __itt_domain *domain, __itt_id id, __itt_id parentid, void* fn))
+ITT_STUBV(ITTAPI, void, task_end,      (const __itt_domain *domain))
+#define __itt_task_begin(d,x,y,z)    ITTNOTIFY_VOID_D3(task_begin,d,x,y,z)
+#define __itt_task_begin_ptr         ITTNOTIFY_NAME(task_begin)
+#define __itt_task_begin_fn(d,x,y,z) ITTNOTIFY_VOID_D3(task_begin_fn,d,x,y,z)
+#define __itt_task_begin_fn_ptr      ITTNOTIFY_NAME(task_begin_fn)
+#define __itt_task_end(d)            ITTNOTIFY_VOID_D0(task_end,d)
+#define __itt_task_end_ptr           ITTNOTIFY_NAME(task_end)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_task_begin(domain,id,parentid,name)
+#define __itt_task_begin_ptr    0
+#define __itt_task_begin_fn(domain,id,parentid,fn)
+#define __itt_task_begin_fn_ptr 0
+#define __itt_task_end(domain)
+#define __itt_task_end_ptr      0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_task_begin_ptr    0
+#define __itt_task_begin_fn_ptr 0
+#define __itt_task_end_ptr      0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} tasks group */
+
+/**
+ * @defgroup counters Counters
+ * @ingroup public
+ * Counters are user-defined objects with a monotonically increasing
+ * value. Counter values are 64-bit unsigned integers. Counter values
+ * are tracked per-thread. Counters have names that can be displayed in
+ * the tools.
+ * @{
+ */
+
+/**
+ * @ingroup counters
+ * @brief Increment a counter by one.
+ * The first call with a given name creates a counter by that name and sets its
+ * value to zero on every thread. Successive calls increment the counter value
+ * on the thread on which the call is issued.
+ * @param[in] domain The domain controlling the call. Counter names are not domain specific.
+ *            The domain argument is used only to enable or disable the API calls.
+ * @param[in] name The name of the counter
+ */
+void ITTAPI __itt_counter_inc_v3(const __itt_domain *domain, __itt_string_handle *name);
+
+/**
+ * @ingroup counters
+ * @brief Increment a counter by the value specified in delta.
+ * @param[in] domain The domain controlling the call. Counter names are not domain specific.
+ *            The domain argument is used only to enable or disable the API calls.
+ * @param[in] name The name of the counter
+ * @param[in] delta The amount by which to increment the counter
+ */
+void ITTAPI __itt_counter_inc_delta_v3(const __itt_domain *domain, __itt_string_handle *name, unsigned long long delta);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, counter_inc_v3,       (const __itt_domain *domain, __itt_string_handle *name))
+ITT_STUBV(ITTAPI, void, counter_inc_delta_v3, (const __itt_domain *domain, __itt_string_handle *name, unsigned long long delta))
+#define __itt_counter_inc_v3(d,x)         ITTNOTIFY_VOID_D1(counter_inc_v3,d,x)
+#define __itt_counter_inc_v3_ptr          ITTNOTIFY_NAME(counter_inc_v3)
+#define __itt_counter_inc_delta_v3(d,x,y) ITTNOTIFY_VOID_D2(counter_inc_delta_v3,d,x,y)
+#define __itt_counter_inc_delta_v3_ptr    ITTNOTIFY_NAME(counter_inc_delta_v3)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_counter_inc_v3(domain,name)
+#define __itt_counter_inc_v3_ptr       0
+#define __itt_counter_inc_delta_v3(domain,name,delta)
+#define __itt_counter_inc_delta_v3_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_counter_inc_v3_ptr       0
+#define __itt_counter_inc_delta_v3_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} counters group */
+
+/**
+ * @defgroup markers Markers
+ * Markers represent a single discreet event in time. Markers have a scope,
+ * described by an enumerated type __itt_scope. Markers are created by
+ * the API call __itt_marker. A marker instance can be given an ID for use in
+ * adding metadata.
+ * @{
+ */
+
+/**
+ * @brief Describes the scope of an event object in the trace.
+ */
+typedef enum
+{
+    __itt_scope_unknown = 0,
+    __itt_scope_global,
+    __itt_scope_track_group,
+    __itt_scope_track,
+    __itt_scope_task,
+    __itt_scope_marker
+} __itt_scope;
+
+/** @cond exclude_from_documentation */
+#define __itt_marker_scope_unknown  __itt_scope_unknown
+#define __itt_marker_scope_global   __itt_scope_global
+#define __itt_marker_scope_process  __itt_scope_track_group
+#define __itt_marker_scope_thread   __itt_scope_track
+#define __itt_marker_scope_task     __itt_scope_task
+/** @endcond */
+
+/**
+ * @ingroup markers
+ * @brief Create a marker instance
+ * @param[in] domain The domain for this marker
+ * @param[in] id The instance ID for this marker or __itt_null
+ * @param[in] name The name for this marker
+ * @param[in] scope The scope for this marker
+ */
+void ITTAPI __itt_marker(const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, marker, (const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope))
+#define __itt_marker(d,x,y,z) ITTNOTIFY_VOID_D3(marker,d,x,y,z)
+#define __itt_marker_ptr      ITTNOTIFY_NAME(marker)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_marker(domain,id,name,scope)
+#define __itt_marker_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_marker_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} markers group */
+
+/**
+ * @defgroup metadata Metadata
+ * The metadata API is used to attach extra information to named
+ * entities. Metadata can be attached to an identified named entity by ID,
+ * or to the current entity (which is always a task).
+ *
+ * Conceptually metadata has a type (what kind of metadata), a key (the
+ * name of the metadata), and a value (the actual data). The encoding of
+ * the value depends on the type of the metadata.
+ *
+ * The type of metadata is specified by an enumerated type __itt_metdata_type.
+ * @{
+ */
+
+/**
+ * @ingroup parameters
+ * @brief describes the type of metadata
+ */
+typedef enum {
+    __itt_metadata_unknown = 0,
+    __itt_metadata_u64,     /**< Unsigned 64-bit integer */
+    __itt_metadata_s64,     /**< Signed 64-bit integer */
+    __itt_metadata_u32,     /**< Unsigned 32-bit integer */
+    __itt_metadata_s32,     /**< Signed 32-bit integer */
+    __itt_metadata_u16,     /**< Unsigned 16-bit integer */
+    __itt_metadata_s16,     /**< Signed 16-bit integer */
+    __itt_metadata_float,   /**< Signed 32-bit floating-point */
+    __itt_metadata_double   /**< SIgned 64-bit floating-point */
+} __itt_metadata_type;
+
+/**
+ * @ingroup parameters
+ * @brief Add metadata to an instance of a named entity.
+ * @param[in] domain The domain controlling the call
+ * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task
+ * @param[in] key The name of the metadata
+ * @param[in] type The type of the metadata
+ * @param[in] count The number of elements of the given type. If count == 0, no metadata will be added.
+ * @param[in] data The metadata itself
+*/
+void ITTAPI __itt_metadata_add(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, metadata_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data))
+#define __itt_metadata_add(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(metadata_add,d,x,y,z,a,b)
+#define __itt_metadata_add_ptr          ITTNOTIFY_NAME(metadata_add)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_metadata_add(d,x,y,z,a,b)
+#define __itt_metadata_add_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_metadata_add_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup parameters
+ * @brief Add string metadata to an instance of a named entity.
+ * @param[in] domain The domain controlling the call
+ * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task
+ * @param[in] key The name of the metadata
+ * @param[in] data The metadata itself
+ * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated
+*/
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_metadata_str_addA(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length);
+void ITTAPI __itt_metadata_str_addW(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t *data, size_t length);
+#if defined(UNICODE) || defined(_UNICODE)
+#  define __itt_metadata_str_add     __itt_metadata_str_addW
+#  define __itt_metadata_str_add_ptr __itt_metadata_str_addW_ptr
+#else /* UNICODE */
+#  define __itt_metadata_str_add     __itt_metadata_str_addA
+#  define __itt_metadata_str_add_ptr __itt_metadata_str_addA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+void ITTAPI __itt_metadata_str_add(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length);
+#endif
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, metadata_str_addA, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length))
+ITT_STUBV(ITTAPI, void, metadata_str_addW, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t *data, size_t length))
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, metadata_str_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_addA(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_addA,d,x,y,z,a)
+#define __itt_metadata_str_addA_ptr        ITTNOTIFY_NAME(metadata_str_addA)
+#define __itt_metadata_str_addW(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_addW,d,x,y,z,a)
+#define __itt_metadata_str_addW_ptr        ITTNOTIFY_NAME(metadata_str_addW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add(d,x,y,z,a)  ITTNOTIFY_VOID_D4(metadata_str_add,d,x,y,z,a)
+#define __itt_metadata_str_add_ptr         ITTNOTIFY_NAME(metadata_str_add)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_addA(d,x,y,z,a)
+#define __itt_metadata_str_addA_ptr 0
+#define __itt_metadata_str_addW(d,x,y,z,a)
+#define __itt_metadata_str_addW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add(d,x,y,z,a)
+#define __itt_metadata_str_add_ptr 0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_addA_ptr 0
+#define __itt_metadata_str_addW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup parameters
+ * @brief Add metadata to an instance of a named entity.
+ * @param[in] domain The domain controlling the call
+ * @param[in] scope The scope of the instance to which the metadata is to be added
+
+ * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task
+
+ * @param[in] key The name of the metadata
+ * @param[in] type The type of the metadata
+ * @param[in] count The number of elements of the given type. If count == 0, no metadata will be added.
+ * @param[in] data The metadata itself
+*/
+void ITTAPI __itt_metadata_add_with_scope(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, metadata_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data))
+#define __itt_metadata_add_with_scope(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(metadata_add_with_scope,d,x,y,z,a,b)
+#define __itt_metadata_add_with_scope_ptr          ITTNOTIFY_NAME(metadata_add_with_scope)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_metadata_add_with_scope(d,x,y,z,a,b)
+#define __itt_metadata_add_with_scope_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_metadata_add_with_scope_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup parameters
+ * @brief Add string metadata to an instance of a named entity.
+ * @param[in] domain The domain controlling the call
+ * @param[in] scope The scope of the instance to which the metadata is to be added
+
+ * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task
+
+ * @param[in] key The name of the metadata
+ * @param[in] data The metadata itself
+ * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated
+*/
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+void ITTAPI __itt_metadata_str_add_with_scopeA(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length);
+void ITTAPI __itt_metadata_str_add_with_scopeW(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length);
+#if defined(UNICODE) || defined(_UNICODE)
+#  define __itt_metadata_str_add_with_scope     __itt_metadata_str_add_with_scopeW
+#  define __itt_metadata_str_add_with_scope_ptr __itt_metadata_str_add_with_scopeW_ptr
+#else /* UNICODE */
+#  define __itt_metadata_str_add_with_scope     __itt_metadata_str_add_with_scopeA
+#  define __itt_metadata_str_add_with_scope_ptr __itt_metadata_str_add_with_scopeA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+void ITTAPI __itt_metadata_str_add_with_scope(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length);
+#endif
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeA, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length))
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeW, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length))
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_add_with_scopeA(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add_with_scopeA,d,x,y,z,a)
+#define __itt_metadata_str_add_with_scopeA_ptr        ITTNOTIFY_NAME(metadata_str_add_with_scopeA)
+#define __itt_metadata_str_add_with_scopeW(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add_with_scopeW,d,x,y,z,a)
+#define __itt_metadata_str_add_with_scopeW_ptr        ITTNOTIFY_NAME(metadata_str_add_with_scopeW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add_with_scope(d,x,y,z,a)  ITTNOTIFY_VOID_D4(metadata_str_add_with_scope,d,x,y,z,a)
+#define __itt_metadata_str_add_with_scope_ptr         ITTNOTIFY_NAME(metadata_str_add_with_scope)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_add_with_scopeA(d,x,y,z,a)
+#define __itt_metadata_str_add_with_scopeA_ptr  0
+#define __itt_metadata_str_add_with_scopeW(d,x,y,z,a)
+#define __itt_metadata_str_add_with_scopeW_ptr  0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add_with_scope(d,x,y,z,a)
+#define __itt_metadata_str_add_with_scope_ptr   0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_metadata_str_add_with_scopeA_ptr  0
+#define __itt_metadata_str_add_with_scopeW_ptr  0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_metadata_str_add_with_scope_ptr   0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @} metadata group */
+
+/**
+ * @defgroup relations Relations
+ * Instances of named entities can be explicitly associated with other
+ * instances using instance IDs and the relationship API calls.
+ *
+ * @{
+ */
+
+/**
+ * @ingroup relations
+ * @brief The kind of relation between two instances is specified by the enumerated type __itt_relation.
+ * Relations between instances can be added with an API call. The relation
+ * API uses instance IDs. Relations can be added before or after the actual
+ * instances are created and persist independently of the instances. This
+ * is the motivation for having different lifetimes for instance IDs and
+ * the actual instances.
+ */
+typedef enum
+{
+    __itt_relation_is_unknown = 0,
+    __itt_relation_is_dependent_on,         /**< "A is dependent on B" means that A cannot start until B completes */
+    __itt_relation_is_sibling_of,           /**< "A is sibling of B" means that A and B were created as a group */
+    __itt_relation_is_parent_of,            /**< "A is parent of B" means that A created B */
+    __itt_relation_is_continuation_of,      /**< "A is continuation of B" means that A assumes the dependencies of B */
+    __itt_relation_is_child_of,             /**< "A is child of B" means that A was created by B (inverse of is_parent_of) */
+    __itt_relation_is_continued_by,         /**< "A is continued by B" means that B assumes the dependencies of A (inverse of is_continuation_of) */
+    __itt_relation_is_predecessor_to        /**< "A is predecessor to B" means that B cannot start until A completes (inverse of is_dependent_on) */
+} __itt_relation;
+
+/**
+ * @ingroup relations
+ * @brief Add a relation to the current task instance.
+ * The current task instance is the head of the relation.
+ * @param[in] domain The domain controlling this call
+ * @param[in] relation The kind of relation
+ * @param[in] tail The ID for the tail of the relation
+ */
+void ITTAPI __itt_relation_add_to_current(const __itt_domain *domain, __itt_relation relation, __itt_id tail);
+
+/**
+ * @ingroup relations
+ * @brief Add a relation between two instance identifiers.
+ * @param[in] domain The domain controlling this call
+ * @param[in] head The ID for the head of the relation
+ * @param[in] relation The kind of relation
+ * @param[in] tail The ID for the tail of the relation
+ */
+void ITTAPI __itt_relation_add(const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, relation_add_to_current, (const __itt_domain *domain, __itt_relation relation, __itt_id tail))
+ITT_STUBV(ITTAPI, void, relation_add,            (const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail))
+#define __itt_relation_add_to_current(d,x,y) ITTNOTIFY_VOID_D2(relation_add_to_current,d,x,y)
+#define __itt_relation_add_to_current_ptr    ITTNOTIFY_NAME(relation_add_to_current)
+#define __itt_relation_add(d,x,y,z)          ITTNOTIFY_VOID_D3(relation_add,d,x,y,z)
+#define __itt_relation_add_ptr               ITTNOTIFY_NAME(relation_add)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_relation_add_to_current(d,x,y)
+#define __itt_relation_add_to_current_ptr 0
+#define __itt_relation_add(d,x,y,z)
+#define __itt_relation_add_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_relation_add_to_current_ptr 0
+#define __itt_relation_add_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} relations group */
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_clock_info
+{
+    unsigned long long clock_freq; /*!< Clock domain frequency */
+    unsigned long long clock_base; /*!< Clock domain base timestamp */
+} __itt_clock_info;
+
+#pragma pack(pop)
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+typedef void (ITTAPI *__itt_get_clock_info_fn)(__itt_clock_info* clock_info, void* data);
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_clock_domain
+{
+    __itt_clock_info info;      /*!< Most recent clock domain info */
+    __itt_get_clock_info_fn fn; /*!< Callback function pointer */
+    void* fn_data;              /*!< Input argument for the callback function */
+    int   extra1;               /*!< Reserved. Must be zero */
+    void* extra2;               /*!< Reserved. Must be zero */
+    struct ___itt_clock_domain* next;
+} __itt_clock_domain;
+
+#pragma pack(pop)
+/** @endcond */
+
+/**
+ * @ingroup clockdomains
+ * @brief Create a clock domain.
+ * Certain applications require the capability to trace their application using
+ * a clock domain different than the CPU, for instance the instrumentation of events
+ * that occur on a GPU.
+ * Because the set of domains is expected to be static over the application's execution time,
+ * there is no mechanism to destroy a domain.
+ * Any domain can be accessed by any thread in the process, regardless of which thread created
+ * the domain. This call is thread-safe.
+ * @param[in] fn A pointer to a callback function which retrieves alternative CPU timestamps
+ * @param[in] fn_data Argument for a callback function; may be NULL
+ */
+__itt_clock_domain* ITTAPI __itt_clock_domain_create(__itt_get_clock_info_fn fn, void* fn_data);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_clock_domain*, clock_domain_create, (__itt_get_clock_info_fn fn, void* fn_data))
+#define __itt_clock_domain_create     ITTNOTIFY_DATA(clock_domain_create)
+#define __itt_clock_domain_create_ptr ITTNOTIFY_NAME(clock_domain_create)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_clock_domain_create(fn,fn_data) (__itt_clock_domain*)0
+#define __itt_clock_domain_create_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_clock_domain_create_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup clockdomains
+ * @brief Recalculate clock domains frequences and clock base timestamps.
+ */
+void ITTAPI __itt_clock_domain_reset(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, clock_domain_reset, (void))
+#define __itt_clock_domain_reset     ITTNOTIFY_VOID(clock_domain_reset)
+#define __itt_clock_domain_reset_ptr ITTNOTIFY_NAME(clock_domain_reset)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_clock_domain_reset()
+#define __itt_clock_domain_reset_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_clock_domain_reset_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup clockdomain
+ * @brief Create an instance of identifier. This establishes the beginning of the lifetime of
+ * an instance of the given ID in the trace. Once this lifetime starts, the ID can be used to
+ * tag named entity instances in calls such as __itt_task_begin, and to specify relationships among
+ * identified named entity instances, using the \ref relations APIs.
+ * @param[in] domain The domain controlling the execution of this call.
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] id The ID to create.
+ */
+void ITTAPI __itt_id_create_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id);
+
+/**
+ * @ingroup clockdomain
+ * @brief Destroy an instance of identifier. This ends the lifetime of the current instance of the
+ * given ID value in the trace. Any relationships that are established after this lifetime ends are
+ * invalid. This call must be performed before the given ID value can be reused for a different
+ * named entity instance.
+ * @param[in] domain The domain controlling the execution of this call.
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] id The ID to destroy.
+ */
+void ITTAPI __itt_id_destroy_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, id_create_ex,  (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id))
+ITT_STUBV(ITTAPI, void, id_destroy_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id))
+#define __itt_id_create_ex(d,x,y,z)  ITTNOTIFY_VOID_D3(id_create_ex,d,x,y,z)
+#define __itt_id_create_ex_ptr       ITTNOTIFY_NAME(id_create_ex)
+#define __itt_id_destroy_ex(d,x,y,z) ITTNOTIFY_VOID_D3(id_destroy_ex,d,x,y,z)
+#define __itt_id_destroy_ex_ptr      ITTNOTIFY_NAME(id_destroy_ex)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_id_create_ex(domain,clock_domain,timestamp,id)
+#define __itt_id_create_ex_ptr    0
+#define __itt_id_destroy_ex(domain,clock_domain,timestamp,id)
+#define __itt_id_destroy_ex_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_id_create_ex_ptr    0
+#define __itt_id_destroy_ex_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup clockdomain
+ * @brief Begin a task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] taskid The instance ID for this task instance, or __itt_null
+ * @param[in] parentid The parent instance to which this task instance belongs, or __itt_null
+ * @param[in] name The name of this task
+ */
+void ITTAPI __itt_task_begin_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);
+
+/**
+ * @ingroup clockdomain
+ * @brief Begin a task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] taskid The identifier for this task instance, or __itt_null
+ * @param[in] parentid The parent of this task, or __itt_null
+ * @param[in] fn The pointer to the function you are tracing
+ */
+void ITTAPI __itt_task_begin_fn_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, void* fn);
+
+/**
+ * @ingroup clockdomain
+ * @brief End the current task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ */
+void ITTAPI __itt_task_end_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, task_begin_ex,        (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name))
+ITT_STUBV(ITTAPI, void, task_begin_fn_ex,     (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, void* fn))
+ITT_STUBV(ITTAPI, void, task_end_ex,          (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp))
+#define __itt_task_begin_ex(d,x,y,z,a,b)      ITTNOTIFY_VOID_D5(task_begin_ex,d,x,y,z,a,b)
+#define __itt_task_begin_ex_ptr               ITTNOTIFY_NAME(task_begin_ex)
+#define __itt_task_begin_fn_ex(d,x,y,z,a,b)   ITTNOTIFY_VOID_D5(task_begin_fn_ex,d,x,y,z,a,b)
+#define __itt_task_begin_fn_ex_ptr            ITTNOTIFY_NAME(task_begin_fn_ex)
+#define __itt_task_end_ex(d,x,y)              ITTNOTIFY_VOID_D2(task_end_ex,d,x,y)
+#define __itt_task_end_ex_ptr                 ITTNOTIFY_NAME(task_end_ex)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_task_begin_ex(domain,clock_domain,timestamp,id,parentid,name)
+#define __itt_task_begin_ex_ptr          0
+#define __itt_task_begin_fn_ex(domain,clock_domain,timestamp,id,parentid,fn)
+#define __itt_task_begin_fn_ex_ptr       0
+#define __itt_task_end_ex(domain,clock_domain,timestamp)
+#define __itt_task_end_ex_ptr            0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_task_begin_ex_ptr          0
+#define __itt_task_begin_fn_ex_ptr       0
+#define __itt_task_end_ex_ptr            0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup markers
+ * @brief Create a marker instance.
+ * @param[in] domain The domain for this marker
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] id The instance ID for this marker, or __itt_null
+ * @param[in] name The name for this marker
+ * @param[in] scope The scope for this marker
+ */
+void ITTAPI __itt_marker_ex(const __itt_domain *domain,  __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, marker_ex,    (const __itt_domain *domain,  __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope))
+#define __itt_marker_ex(d,x,y,z,a,b)    ITTNOTIFY_VOID_D5(marker_ex,d,x,y,z,a,b)
+#define __itt_marker_ex_ptr             ITTNOTIFY_NAME(marker_ex)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_marker_ex(domain,clock_domain,timestamp,id,name,scope)
+#define __itt_marker_ex_ptr    0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_marker_ex_ptr    0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @ingroup clockdomain
+ * @brief Add a relation to the current task instance.
+ * The current task instance is the head of the relation.
+ * @param[in] domain The domain controlling this call
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] relation The kind of relation
+ * @param[in] tail The ID for the tail of the relation
+ */
+void ITTAPI __itt_relation_add_to_current_ex(const __itt_domain *domain,  __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail);
+
+/**
+ * @ingroup clockdomain
+ * @brief Add a relation between two instance identifiers.
+ * @param[in] domain The domain controlling this call
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] head The ID for the head of the relation
+ * @param[in] relation The kind of relation
+ * @param[in] tail The ID for the tail of the relation
+ */
+void ITTAPI __itt_relation_add_ex(const __itt_domain *domain,  __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, relation_add_to_current_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail))
+ITT_STUBV(ITTAPI, void, relation_add_ex,            (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail))
+#define __itt_relation_add_to_current_ex(d,x,y,z,a) ITTNOTIFY_VOID_D4(relation_add_to_current_ex,d,x,y,z,a)
+#define __itt_relation_add_to_current_ex_ptr        ITTNOTIFY_NAME(relation_add_to_current_ex)
+#define __itt_relation_add_ex(d,x,y,z,a,b)          ITTNOTIFY_VOID_D5(relation_add_ex,d,x,y,z,a,b)
+#define __itt_relation_add_ex_ptr                   ITTNOTIFY_NAME(relation_add_ex)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_relation_add_to_current_ex(domain,clock_domain,timestame,relation,tail)
+#define __itt_relation_add_to_current_ex_ptr 0
+#define __itt_relation_add_ex(domain,clock_domain,timestamp,head,relation,tail)
+#define __itt_relation_add_ex_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_relation_add_to_current_ex_ptr 0
+#define __itt_relation_add_ex_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+typedef enum ___itt_track_group_type
+{
+    __itt_track_group_type_normal = 0
+} __itt_track_group_type;
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_track_group
+{
+    __itt_string_handle* name;     /*!< Name of the track group */
+    struct ___itt_track* track;    /*!< List of child tracks    */
+    __itt_track_group_type tgtype; /*!< Type of the track group */
+    int   extra1;                  /*!< Reserved. Must be zero  */
+    void* extra2;                  /*!< Reserved. Must be zero  */
+    struct ___itt_track_group* next;
+} __itt_track_group;
+
+#pragma pack(pop)
+/** @endcond */
+
+/**
+ * @brief Placeholder for custom track types. Currently, "normal" custom track
+ * is the only available track type.
+ */
+typedef enum ___itt_track_type
+{
+    __itt_track_type_normal = 0
+#ifdef INTEL_ITTNOTIFY_API_PRIVATE
+    , __itt_track_type_queue
+#endif /* INTEL_ITTNOTIFY_API_PRIVATE */
+} __itt_track_type;
+
+/** @cond exclude_from_documentation */
+#pragma pack(push, 8)
+
+typedef struct ___itt_track
+{
+    __itt_string_handle* name; /*!< Name of the track group */
+    __itt_track_group* group;  /*!< Parent group to a track */
+    __itt_track_type ttype;    /*!< Type of the track       */
+    int   extra1;              /*!< Reserved. Must be zero  */
+    void* extra2;              /*!< Reserved. Must be zero  */
+    struct ___itt_track* next;
+} __itt_track;
+
+#pragma pack(pop)
+/** @endcond */
+
+/**
+ * @brief Create logical track group.
+ */
+__itt_track_group* ITTAPI __itt_track_group_create(__itt_string_handle* name, __itt_track_group_type track_group_type);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_track_group*, track_group_create, (__itt_string_handle* name, __itt_track_group_type track_group_type))
+#define __itt_track_group_create     ITTNOTIFY_DATA(track_group_create)
+#define __itt_track_group_create_ptr ITTNOTIFY_NAME(track_group_create)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_track_group_create(name)  (__itt_track_group*)0
+#define __itt_track_group_create_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_track_group_create_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Create logical track.
+ */
+__itt_track* ITTAPI __itt_track_create(__itt_track_group* track_group, __itt_string_handle* name, __itt_track_type track_type);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_track*, track_create, (__itt_track_group* track_group,__itt_string_handle* name, __itt_track_type track_type))
+#define __itt_track_create     ITTNOTIFY_DATA(track_create)
+#define __itt_track_create_ptr ITTNOTIFY_NAME(track_create)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_track_create(track_group,name,track_type)  (__itt_track*)0
+#define __itt_track_create_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_track_create_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Set the logical track.
+ */
+void ITTAPI __itt_set_track(__itt_track* track);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, set_track, (__itt_track *track))
+#define __itt_set_track     ITTNOTIFY_VOID(set_track)
+#define __itt_set_track_ptr ITTNOTIFY_NAME(set_track)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_set_track(track)
+#define __itt_set_track_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_set_track_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/* ========================================================================== */
+/** @cond exclude_from_gpa_documentation */
+/**
+ * @defgroup events Events
+ * @ingroup public
+ * Events group
+ * @{
+ */
+/** @brief user event type */
+typedef int __itt_event;
+
+/**
+ * @brief Create an event notification
+ * @note name or namelen being null/name and namelen not matching, user event feature not enabled
+ * @return non-zero event identifier upon success and __itt_err otherwise
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_event LIBITTAPI __itt_event_createA(const char    *name, int namelen);
+__itt_event LIBITTAPI __itt_event_createW(const wchar_t *name, int namelen);
+#if defined(UNICODE) || defined(_UNICODE)
+#  define __itt_event_create     __itt_event_createW
+#  define __itt_event_create_ptr __itt_event_createW_ptr
+#else
+#  define __itt_event_create     __itt_event_createA
+#  define __itt_event_create_ptr __itt_event_createA_ptr
+#endif /* UNICODE */
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_event LIBITTAPI __itt_event_create(const char *name, int namelen);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char    *name, int namelen))
+ITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen))
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(LIBITTAPI, __itt_event, event_create,  (const char    *name, int namelen))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_event_createA     ITTNOTIFY_DATA(event_createA)
+#define __itt_event_createA_ptr ITTNOTIFY_NAME(event_createA)
+#define __itt_event_createW     ITTNOTIFY_DATA(event_createW)
+#define __itt_event_createW_ptr ITTNOTIFY_NAME(event_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_event_create      ITTNOTIFY_DATA(event_create)
+#define __itt_event_create_ptr  ITTNOTIFY_NAME(event_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_event_createA(name, namelen) (__itt_event)0
+#define __itt_event_createA_ptr 0
+#define __itt_event_createW(name, namelen) (__itt_event)0
+#define __itt_event_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_event_create(name, namelen)  (__itt_event)0
+#define __itt_event_create_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_event_createA_ptr 0
+#define __itt_event_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_event_create_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an event occurrence.
+ * @return __itt_err upon failure (invalid event id/user event feature not enabled)
+ */
+int LIBITTAPI __itt_event_start(__itt_event event);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(LIBITTAPI, int, event_start, (__itt_event event))
+#define __itt_event_start     ITTNOTIFY_DATA(event_start)
+#define __itt_event_start_ptr ITTNOTIFY_NAME(event_start)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_event_start(event) (int)0
+#define __itt_event_start_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_event_start_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Record an event end occurrence.
+ * @note It is optional if events do not have durations.
+ * @return __itt_err upon failure (invalid event id/user event feature not enabled)
+ */
+int LIBITTAPI __itt_event_end(__itt_event event);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event))
+#define __itt_event_end     ITTNOTIFY_DATA(event_end)
+#define __itt_event_end_ptr ITTNOTIFY_NAME(event_end)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_event_end(event) (int)0
+#define __itt_event_end_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_event_end_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} events group */
+/** @endcond */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _ITTNOTIFY_H_ */
+
+#ifdef INTEL_ITTNOTIFY_API_PRIVATE
+
+#ifndef _ITTNOTIFY_PRIVATE_
+#define _ITTNOTIFY_PRIVATE_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @ingroup tasks
+ * @brief Begin an overlapped task instance.
+ * @param[in] domain The domain for this task.
+ * @param[in] taskid The identifier for this task instance, *cannot* be __itt_null.
+ * @param[in] parentid The parent of this task, or __itt_null.
+ * @param[in] name The name of this task.
+ */
+void ITTAPI __itt_task_begin_overlapped(const __itt_domain* domain, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);
+
+/**
+ * @ingroup clockdomain
+ * @brief Begin an overlapped task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] taskid The identifier for this task instance, *cannot* be __itt_null.
+ * @param[in] parentid The parent of this task, or __itt_null.
+ * @param[in] name The name of this task.
+ */
+void ITTAPI __itt_task_begin_overlapped_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name);
+
+/**
+ * @ingroup tasks
+ * @brief End an overlapped task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] taskid Explicit ID of finished task
+ */
+void ITTAPI __itt_task_end_overlapped(const __itt_domain *domain, __itt_id taskid);
+
+/**
+ * @ingroup clockdomain
+ * @brief End an overlapped task instance.
+ * @param[in] domain The domain for this task
+ * @param[in] clock_domain The clock domain controlling the execution of this call.
+ * @param[in] timestamp The user defined timestamp.
+ * @param[in] taskid Explicit ID of finished task
+ */
+void ITTAPI __itt_task_end_overlapped_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, task_begin_overlapped,          (const __itt_domain *domain, __itt_id taskid, __itt_id parentid, __itt_string_handle *name))
+ITT_STUBV(ITTAPI, void, task_begin_overlapped_ex,       (const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name))
+ITT_STUBV(ITTAPI, void, task_end_overlapped,            (const __itt_domain *domain, __itt_id taskid))
+ITT_STUBV(ITTAPI, void, task_end_overlapped_ex,         (const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid))
+#define __itt_task_begin_overlapped(d,x,y,z)            ITTNOTIFY_VOID_D3(task_begin_overlapped,d,x,y,z)
+#define __itt_task_begin_overlapped_ptr                 ITTNOTIFY_NAME(task_begin_overlapped)
+#define __itt_task_begin_overlapped_ex(d,x,y,z,a,b)     ITTNOTIFY_VOID_D5(task_begin_overlapped_ex,d,x,y,z,a,b)
+#define __itt_task_begin_overlapped_ex_ptr              ITTNOTIFY_NAME(task_begin_overlapped_ex)
+#define __itt_task_end_overlapped(d,x)                  ITTNOTIFY_VOID_D1(task_end_overlapped,d,x)
+#define __itt_task_end_overlapped_ptr                   ITTNOTIFY_NAME(task_end_overlapped)
+#define __itt_task_end_overlapped_ex(d,x,y,z)           ITTNOTIFY_VOID_D3(task_end_overlapped_ex,d,x,y,z)
+#define __itt_task_end_overlapped_ex_ptr                ITTNOTIFY_NAME(task_end_overlapped_ex)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_task_begin_overlapped(domain,taskid,parentid,name)
+#define __itt_task_begin_overlapped_ptr         0
+#define __itt_task_begin_overlapped_ex(domain,clock_domain,timestamp,taskid,parentid,name)
+#define __itt_task_begin_overlapped_ex_ptr      0
+#define __itt_task_end_overlapped(domain,taskid)
+#define __itt_task_end_overlapped_ptr           0
+#define __itt_task_end_overlapped_ex(domain,clock_domain,timestamp,taskid)
+#define __itt_task_end_overlapped_ex_ptr        0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_task_begin_overlapped_ptr         0
+#define __itt_task_begin_overlapped_ex_ptr      0
+#define __itt_task_end_overlapped_ptr           0
+#define __itt_task_end_overlapped_ex_ptr        0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @defgroup makrs_internal Marks
+ * @ingroup internal
+ * Marks group
+ * @warning Internal API:
+ *   - It is not shipped to outside of Intel
+ *   - It is delivered to internal Intel teams using e-mail or SVN access only
+ * @{
+ */
+/** @brief user mark type */
+typedef int __itt_mark_type;
+
+/**
+ * @brief Creates a user mark type with the specified name using char or Unicode string.
+ * @param[in] name - name of mark to create
+ * @return Returns a handle to the mark type
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_mark_type ITTAPI __itt_mark_createA(const char    *name);
+__itt_mark_type ITTAPI __itt_mark_createW(const wchar_t *name);
+#if defined(UNICODE) || defined(_UNICODE)
+#  define __itt_mark_create     __itt_mark_createW
+#  define __itt_mark_create_ptr __itt_mark_createW_ptr
+#else /* UNICODE */
+#  define __itt_mark_create     __itt_mark_createA
+#  define __itt_mark_create_ptr __itt_mark_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_mark_type ITTAPI __itt_mark_create(const char *name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_mark_type, mark_createA, (const char    *name))
+ITT_STUB(ITTAPI, __itt_mark_type, mark_createW, (const wchar_t *name))
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_mark_type, mark_create,  (const char *name))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_createA     ITTNOTIFY_DATA(mark_createA)
+#define __itt_mark_createA_ptr ITTNOTIFY_NAME(mark_createA)
+#define __itt_mark_createW     ITTNOTIFY_DATA(mark_createW)
+#define __itt_mark_createW_ptr ITTNOTIFY_NAME(mark_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_create      ITTNOTIFY_DATA(mark_create)
+#define __itt_mark_create_ptr  ITTNOTIFY_NAME(mark_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_createA(name) (__itt_mark_type)0
+#define __itt_mark_createA_ptr 0
+#define __itt_mark_createW(name) (__itt_mark_type)0
+#define __itt_mark_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_create(name)  (__itt_mark_type)0
+#define __itt_mark_create_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_createA_ptr 0
+#define __itt_mark_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_create_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Creates a "discrete" user mark type of the specified type and an optional parameter using char or Unicode string.
+ *
+ * - The mark of "discrete" type is placed to collection results in case of success. It appears in overtime view(s) as a special tick sign.
+ * - The call is "synchronous" - function returns after mark is actually added to results.
+ * - This function is useful, for example, to mark different phases of application
+ *   (beginning of the next mark automatically meand end of current region).
+ * - Can be used together with "continuous" marks (see below) at the same collection session
+ * @param[in] mt - mark, created by __itt_mark_create(const char* name) function
+ * @param[in] parameter - string parameter of mark
+ * @return Returns zero value in case of success, non-zero value otherwise.
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+int ITTAPI __itt_markA(__itt_mark_type mt, const char    *parameter);
+int ITTAPI __itt_markW(__itt_mark_type mt, const wchar_t *parameter);
+#if defined(UNICODE) || defined(_UNICODE)
+#  define __itt_mark     __itt_markW
+#  define __itt_mark_ptr __itt_markW_ptr
+#else /* UNICODE  */
+#  define __itt_mark     __itt_markA
+#  define __itt_mark_ptr __itt_markA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+int ITTAPI __itt_mark(__itt_mark_type mt, const char *parameter);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, int, markA, (__itt_mark_type mt, const char    *parameter))
+ITT_STUB(ITTAPI, int, markW, (__itt_mark_type mt, const wchar_t *parameter))
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, int, mark,  (__itt_mark_type mt, const char *parameter))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_markA     ITTNOTIFY_DATA(markA)
+#define __itt_markA_ptr ITTNOTIFY_NAME(markA)
+#define __itt_markW     ITTNOTIFY_DATA(markW)
+#define __itt_markW_ptr ITTNOTIFY_NAME(markW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark      ITTNOTIFY_DATA(mark)
+#define __itt_mark_ptr  ITTNOTIFY_NAME(mark)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_markA(mt, parameter) (int)0
+#define __itt_markA_ptr 0
+#define __itt_markW(mt, parameter) (int)0
+#define __itt_markW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark(mt, parameter)  (int)0
+#define __itt_mark_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_markA_ptr 0
+#define __itt_markW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Use this if necessary to create a "discrete" user event type (mark) for process
+ * rather then for one thread
+ * @see int __itt_mark(__itt_mark_type mt, const char* parameter);
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+int ITTAPI __itt_mark_globalA(__itt_mark_type mt, const char    *parameter);
+int ITTAPI __itt_mark_globalW(__itt_mark_type mt, const wchar_t *parameter);
+#if defined(UNICODE) || defined(_UNICODE)
+#  define __itt_mark_global     __itt_mark_globalW
+#  define __itt_mark_global_ptr __itt_mark_globalW_ptr
+#else /* UNICODE  */
+#  define __itt_mark_global     __itt_mark_globalA
+#  define __itt_mark_global_ptr __itt_mark_globalA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+int ITTAPI __itt_mark_global(__itt_mark_type mt, const char *parameter);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, int, mark_globalA, (__itt_mark_type mt, const char    *parameter))
+ITT_STUB(ITTAPI, int, mark_globalW, (__itt_mark_type mt, const wchar_t *parameter))
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, int, mark_global,  (__itt_mark_type mt, const char *parameter))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_globalA     ITTNOTIFY_DATA(mark_globalA)
+#define __itt_mark_globalA_ptr ITTNOTIFY_NAME(mark_globalA)
+#define __itt_mark_globalW     ITTNOTIFY_DATA(mark_globalW)
+#define __itt_mark_globalW_ptr ITTNOTIFY_NAME(mark_globalW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_global      ITTNOTIFY_DATA(mark_global)
+#define __itt_mark_global_ptr  ITTNOTIFY_NAME(mark_global)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_globalA(mt, parameter) (int)0
+#define __itt_mark_globalA_ptr 0
+#define __itt_mark_globalW(mt, parameter) (int)0
+#define __itt_mark_globalW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_global(mt, parameter)  (int)0
+#define __itt_mark_global_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_mark_globalA_ptr 0
+#define __itt_mark_globalW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_mark_global_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Creates an "end" point for "continuous" mark with specified name.
+ *
+ * - Returns zero value in case of success, non-zero value otherwise.
+ *   Also returns non-zero value when preceding "begin" point for the
+ *   mark with the same name failed to be created or not created.
+ * - The mark of "continuous" type is placed to collection results in
+ *   case of success. It appears in overtime view(s) as a special tick
+ *   sign (different from "discrete" mark) together with line from
+ *   corresponding "begin" mark to "end" mark.
+ * @note Continuous marks can overlap and be nested inside each other.
+ * Discrete mark can be nested inside marked region
+ * @param[in] mt - mark, created by __itt_mark_create(const char* name) function
+ * @return Returns zero value in case of success, non-zero value otherwise.
+ */
+int ITTAPI __itt_mark_off(__itt_mark_type mt);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, int, mark_off, (__itt_mark_type mt))
+#define __itt_mark_off     ITTNOTIFY_DATA(mark_off)
+#define __itt_mark_off_ptr ITTNOTIFY_NAME(mark_off)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_mark_off(mt) (int)0
+#define __itt_mark_off_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_mark_off_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Use this if necessary to create an "end" point for mark of process
+ * @see int __itt_mark_off(__itt_mark_type mt);
+ */
+int ITTAPI __itt_mark_global_off(__itt_mark_type mt);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, int, mark_global_off, (__itt_mark_type mt))
+#define __itt_mark_global_off     ITTNOTIFY_DATA(mark_global_off)
+#define __itt_mark_global_off_ptr ITTNOTIFY_NAME(mark_global_off)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_mark_global_off(mt) (int)0
+#define __itt_mark_global_off_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_mark_global_off_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} marks group */
+
+/**
+ * @defgroup counters_internal Counters
+ * @ingroup internal
+ * Counters group
+ * @{
+ */
+/**
+ * @brief opaque structure for counter identification
+ */
+typedef struct ___itt_counter *__itt_counter;
+
+/**
+ * @brief Create a counter with given name/domain for the calling thread
+ *
+ * After __itt_counter_create() is called, __itt_counter_inc() / __itt_counter_inc_delta() can be used
+ * to increment the counter on any thread
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_counter ITTAPI __itt_counter_createA(const char    *name, const char    *domain);
+__itt_counter ITTAPI __itt_counter_createW(const wchar_t *name, const wchar_t *domain);
+#if defined(UNICODE) || defined(_UNICODE)
+#  define __itt_counter_create     __itt_counter_createW
+#  define __itt_counter_create_ptr __itt_counter_createW_ptr
+#else /* UNICODE */
+#  define __itt_counter_create     __itt_counter_createA
+#  define __itt_counter_create_ptr __itt_counter_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_counter ITTAPI __itt_counter_create(const char *name, const char *domain);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_counter, counter_createA, (const char    *name, const char    *domain))
+ITT_STUB(ITTAPI, __itt_counter, counter_createW, (const wchar_t *name, const wchar_t *domain))
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_counter, counter_create,  (const char *name, const char *domain))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_counter_createA     ITTNOTIFY_DATA(counter_createA)
+#define __itt_counter_createA_ptr ITTNOTIFY_NAME(counter_createA)
+#define __itt_counter_createW     ITTNOTIFY_DATA(counter_createW)
+#define __itt_counter_createW_ptr ITTNOTIFY_NAME(counter_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_counter_create     ITTNOTIFY_DATA(counter_create)
+#define __itt_counter_create_ptr ITTNOTIFY_NAME(counter_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_counter_createA(name, domain)
+#define __itt_counter_createA_ptr 0
+#define __itt_counter_createW(name, domain)
+#define __itt_counter_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_counter_create(name, domain)
+#define __itt_counter_create_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_counter_createA_ptr 0
+#define __itt_counter_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_counter_create_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Destroy the counter identified by the pointer previously returned by __itt_counter_create()
+ */
+void ITTAPI __itt_counter_destroy(__itt_counter id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, counter_destroy, (__itt_counter id))
+#define __itt_counter_destroy     ITTNOTIFY_VOID(counter_destroy)
+#define __itt_counter_destroy_ptr ITTNOTIFY_NAME(counter_destroy)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_counter_destroy(id)
+#define __itt_counter_destroy_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_counter_destroy_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Increment the counter value
+ */
+void ITTAPI __itt_counter_inc(__itt_counter id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, counter_inc, (__itt_counter id))
+#define __itt_counter_inc     ITTNOTIFY_VOID(counter_inc)
+#define __itt_counter_inc_ptr ITTNOTIFY_NAME(counter_inc)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_counter_inc(id)
+#define __itt_counter_inc_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_counter_inc_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Increment the counter value with x
+ */
+void ITTAPI __itt_counter_inc_delta(__itt_counter id, unsigned long long value);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, counter_inc_delta, (__itt_counter id, unsigned long long value))
+#define __itt_counter_inc_delta     ITTNOTIFY_VOID(counter_inc_delta)
+#define __itt_counter_inc_delta_ptr ITTNOTIFY_NAME(counter_inc_delta)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_counter_inc_delta(id, value)
+#define __itt_counter_inc_delta_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_counter_inc_delta_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} counters group */
+
+/**
+ * @defgroup stitch Stack Stitching
+ * @ingroup internal
+ * Stack Stitching group
+ * @{
+ */
+/**
+ * @brief opaque structure for counter identification
+ */
+typedef struct ___itt_caller *__itt_caller;
+
+/**
+ * @brief Create the stitch point e.g. a point in call stack where other stacks should be stitched to.
+ * The function returns a unique identifier which is used to match the cut points with corresponding stitch points.
+ */
+__itt_caller ITTAPI __itt_stack_caller_create(void);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUB(ITTAPI, __itt_caller, stack_caller_create, (void))
+#define __itt_stack_caller_create     ITTNOTIFY_DATA(stack_caller_create)
+#define __itt_stack_caller_create_ptr ITTNOTIFY_NAME(stack_caller_create)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_stack_caller_create() (__itt_caller)0
+#define __itt_stack_caller_create_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_stack_caller_create_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Destroy the inforamtion about stitch point identified by the pointer previously returned by __itt_stack_caller_create()
+ */
+void ITTAPI __itt_stack_caller_destroy(__itt_caller id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, stack_caller_destroy, (__itt_caller id))
+#define __itt_stack_caller_destroy     ITTNOTIFY_VOID(stack_caller_destroy)
+#define __itt_stack_caller_destroy_ptr ITTNOTIFY_NAME(stack_caller_destroy)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_stack_caller_destroy(id)
+#define __itt_stack_caller_destroy_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_stack_caller_destroy_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief Sets the cut point. Stack from each event which occurs after this call will be cut
+ * at the same stack level the function was called and stitched to the corresponding stitch point.
+ */
+void ITTAPI __itt_stack_callee_enter(__itt_caller id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, stack_callee_enter, (__itt_caller id))
+#define __itt_stack_callee_enter     ITTNOTIFY_VOID(stack_callee_enter)
+#define __itt_stack_callee_enter_ptr ITTNOTIFY_NAME(stack_callee_enter)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_stack_callee_enter(id)
+#define __itt_stack_callee_enter_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_stack_callee_enter_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/**
+ * @brief This function eliminates the cut point which was set by latest __itt_stack_callee_enter().
+ */
+void ITTAPI __itt_stack_callee_leave(__itt_caller id);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, stack_callee_leave, (__itt_caller id))
+#define __itt_stack_callee_leave     ITTNOTIFY_VOID(stack_callee_leave)
+#define __itt_stack_callee_leave_ptr ITTNOTIFY_NAME(stack_callee_leave)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_stack_callee_leave(id)
+#define __itt_stack_callee_leave_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_stack_callee_leave_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @} stitch group */
+
+/* ***************************************************************************************************************************** */
+
+#include <stdarg.h>
+
+/** @cond exclude_from_documentation */
+typedef enum __itt_error_code
+{
+    __itt_error_success       = 0, /*!< no error */
+    __itt_error_no_module     = 1, /*!< module can't be loaded */
+    /* %1$s -- library name; win: %2$d -- system error code; unx: %2$s -- system error message. */
+    __itt_error_no_symbol     = 2, /*!< symbol not found */
+    /* %1$s -- library name, %2$s -- symbol name. */
+    __itt_error_unknown_group = 3, /*!< unknown group specified */
+    /* %1$s -- env var name, %2$s -- group name. */
+    __itt_error_cant_read_env = 4, /*!< GetEnvironmentVariable() failed */
+    /* %1$s -- env var name, %2$d -- system error. */
+    __itt_error_env_too_long  = 5, /*!< variable value too long */
+    /* %1$s -- env var name, %2$d -- actual length of the var, %3$d -- max allowed length. */
+    __itt_error_system        = 6  /*!< pthread_mutexattr_init or pthread_mutex_init failed */
+    /* %1$s -- function name, %2$d -- errno. */
+} __itt_error_code;
+
+typedef void (__itt_error_handler_t)(__itt_error_code code, va_list);
+__itt_error_handler_t* __itt_set_error_handler(__itt_error_handler_t*);
+
+const char* ITTAPI __itt_api_version(void);
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#define __itt_error_handler ITT_JOIN(INTEL_ITTNOTIFY_PREFIX, error_handler)
+void __itt_error_handler(__itt_error_code code, va_list args);
+extern const int ITTNOTIFY_NAME(err);
+#define __itt_err ITTNOTIFY_NAME(err)
+ITT_STUB(ITTAPI, const char*, api_version, (void))
+#define __itt_api_version     ITTNOTIFY_DATA(api_version)
+#define __itt_api_version_ptr ITTNOTIFY_NAME(api_version)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_api_version()   (const char*)0
+#define __itt_api_version_ptr 0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_api_version_ptr 0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _ITTNOTIFY_PRIVATE_ */
+
+#endif /* INTEL_ITTNOTIFY_API_PRIVATE */
diff --git a/src/tbb/tools_api/ittnotify_config.h b/src/tbb/tools_api/ittnotify_config.h
index ec06355..fe1c1c6 100644
--- a/src/tbb/tools_api/ittnotify_config.h
+++ b/src/tbb/tools_api/ittnotify_config.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,6 +29,7 @@
 #ifndef _ITTNOTIFY_CONFIG_H_
 #define _ITTNOTIFY_CONFIG_H_
 
+/** @cond exclude_from_documentation */
 #ifndef ITT_OS_WIN
 #  define ITT_OS_WIN   1
 #endif /* ITT_OS_WIN */
@@ -51,6 +52,86 @@
 #  endif
 #endif /* ITT_OS */
 
+#ifndef ITT_PLATFORM_WIN
+#  define ITT_PLATFORM_WIN 1
+#endif /* ITT_PLATFORM_WIN */
+
+#ifndef ITT_PLATFORM_POSIX
+#  define ITT_PLATFORM_POSIX 2
+#endif /* ITT_PLATFORM_POSIX */
+
+#ifndef ITT_PLATFORM
+#  if ITT_OS==ITT_OS_WIN
+#    define ITT_PLATFORM ITT_PLATFORM_WIN
+#  else
+#    define ITT_PLATFORM ITT_PLATFORM_POSIX
+#  endif /* _WIN32 */
+#endif /* ITT_PLATFORM */
+
+#if defined(_UNICODE) && !defined(UNICODE)
+#define UNICODE
+#endif
+
+#include <stddef.h>
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#include <tchar.h>
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#include <stdint.h>
+#if defined(UNICODE) || defined(_UNICODE)
+#include <wchar.h>
+#endif /* UNICODE || _UNICODE */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#ifndef CDECL
+#  if ITT_PLATFORM==ITT_PLATFORM_WIN
+#    define CDECL __cdecl
+#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#    if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
+#      define CDECL /* not actual on x86_64 platform */
+#    else  /* _M_X64 || _M_AMD64 || __x86_64__ */
+#      define CDECL __attribute__ ((cdecl))
+#    endif /* _M_X64 || _M_AMD64 || __x86_64__ */
+#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* CDECL */
+
+#ifndef STDCALL
+#  if ITT_PLATFORM==ITT_PLATFORM_WIN
+#    define STDCALL __stdcall
+#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#    if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
+#      define STDCALL /* not supported on x86_64 platform */
+#    else  /* _M_X64 || _M_AMD64 || __x86_64__ */
+#      define STDCALL __attribute__ ((stdcall))
+#    endif /* _M_X64 || _M_AMD64 || __x86_64__ */
+#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* STDCALL */
+
+#define ITTAPI    CDECL
+#define LIBITTAPI CDECL
+
+/* TODO: Temporary for compatibility! */
+#define ITTAPI_CALL    CDECL
+#define LIBITTAPI_CALL CDECL
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+/* use __forceinline (VC++ specific) */
+#define INLINE           __forceinline
+#define INLINE_ATTRIBUTE /* nothing */
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/*
+ * Generally, functions are not inlined unless optimization is specified.
+ * For functions declared inline, this attribute inlines the function even
+ * if no optimization level was specified.
+ */
+#ifdef __STRICT_ANSI__
+#define INLINE           static
+#else  /* __STRICT_ANSI__ */
+#define INLINE           static inline
+#endif /* __STRICT_ANSI__ */
+#define INLINE_ATTRIBUTE __attribute__ ((always_inline))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @endcond */
+
 #ifndef ITT_ARCH_IA32
 #  define ITT_ARCH_IA32  1
 #endif /* ITT_ARCH_IA32 */
@@ -73,22 +154,6 @@
 #  endif
 #endif
 
-#ifndef ITT_PLATFORM_WIN
-#  define ITT_PLATFORM_WIN 1
-#endif /* ITT_PLATFORM_WIN */ 
-
-#ifndef ITT_PLATFORM_POSIX
-#  define ITT_PLATFORM_POSIX 2
-#endif /* ITT_PLATFORM_POSIX */
-
-#ifndef ITT_PLATFORM
-#  if ITT_OS==ITT_OS_WIN
-#    define ITT_PLATFORM ITT_PLATFORM_WIN
-#  else
-#    define ITT_PLATFORM ITT_PLATFORM_POSIX
-#  endif /* _WIN32 */
-#endif /* ITT_PLATFORM */
-
 #ifdef __cplusplus
 #  define ITT_EXTERN_C extern "C"
 #else
@@ -102,4 +167,284 @@
 #define _ITT_BUILD_ASSERT(expr, suffix)  __ITT_BUILD_ASSERT((expr), suffix)
 #define ITT_BUILD_ASSERT(expr)           _ITT_BUILD_ASSERT((expr), __LINE__)
 
+#define ITT_MAGIC { 0xED, 0xAB, 0xAB, 0xEC, 0x0D, 0xEE, 0xDA, 0x30 }
+
+/* Replace with snapshot date YYYYMMDD for promotion build. */
+#define API_VERSION_BUILD    20111111
+
+#ifndef API_VERSION_NUM
+#define API_VERSION_NUM 0.0.0
+#endif /* API_VERSION_NUM */
+
+#define API_VERSION "ITT-API-Version " ITT_TO_STR(API_VERSION_NUM) " (" ITT_TO_STR(API_VERSION_BUILD) ")"
+
+/* OS communication functions */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#include <windows.h>
+typedef HMODULE           lib_t;
+typedef DWORD             TIDT;
+typedef CRITICAL_SECTION  mutex_t;
+#define MUTEX_INITIALIZER { 0 }
+#define strong_alias(name, aliasname) /* empty for Windows */
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#include <dlfcn.h>
+#if defined(UNICODE) || defined(_UNICODE)
+#include <wchar.h>
+#endif /* UNICODE */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE 1 /* need for PTHREAD_MUTEX_RECURSIVE */
+#endif /* _GNU_SOURCE */
+#include <pthread.h>
+typedef void*             lib_t;
+typedef pthread_t         TIDT;
+typedef pthread_mutex_t   mutex_t;
+#define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
+#define _strong_alias(name, aliasname) extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+#define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_get_proc(lib, name) GetProcAddress(lib, name)
+#define __itt_mutex_init(mutex)   InitializeCriticalSection(mutex)
+#define __itt_mutex_lock(mutex)   EnterCriticalSection(mutex)
+#define __itt_mutex_unlock(mutex) LeaveCriticalSection(mutex)
+#define __itt_load_lib(name)      LoadLibraryA(name)
+#define __itt_unload_lib(handle)  FreeLibrary(handle)
+#define __itt_system_error()      (int)GetLastError()
+#define __itt_fstrcmp(s1, s2)     lstrcmpA(s1, s2)
+#define __itt_fstrlen(s)          lstrlenA(s)
+#define __itt_fstrcpyn(s1, s2, l) lstrcpynA(s1, s2, l)
+#define __itt_fstrdup(s)          _strdup(s)
+#define __itt_thread_id()         GetCurrentThreadId()
+#define __itt_thread_yield()      SwitchToThread()
+#ifndef ITT_SIMPLE_INIT
+INLINE int __itt_interlocked_increment(volatile long* ptr)
+{
+    return InterlockedIncrement(ptr);
+}
+#endif /* ITT_SIMPLE_INIT */
+#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+#define __itt_get_proc(lib, name) dlsym(lib, name)
+#define __itt_mutex_init(mutex)   \
+    {                                                                                        \
+        pthread_mutexattr_t mutex_attr;                                                      \
+        int error_code = pthread_mutexattr_init(&mutex_attr);                                \
+        if (error_code)                                                                      \
+            __itt_report_error(__itt_error_system, "pthread_mutexattr_init", error_code);    \
+        error_code = pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE);        \
+        if (error_code)                                                                      \
+            __itt_report_error(__itt_error_system, "pthread_mutexattr_settype", error_code); \
+        error_code = pthread_mutex_init(mutex, &mutex_attr);                                 \
+        if (error_code)                                                                      \
+            __itt_report_error(__itt_error_system, "pthread_mutex_init", error_code);        \
+        error_code = pthread_mutexattr_destroy(&mutex_attr);                                 \
+        if (error_code)                                                                      \
+            __itt_report_error(__itt_error_system, "pthread_mutexattr_destroy", error_code); \
+    }
+#define __itt_mutex_lock(mutex)   pthread_mutex_lock(mutex)
+#define __itt_mutex_unlock(mutex) pthread_mutex_unlock(mutex)
+#define __itt_load_lib(name)      dlopen(name, RTLD_LAZY)
+#define __itt_unload_lib(handle)  dlclose(handle)
+#define __itt_system_error()      errno
+#define __itt_fstrcmp(s1, s2)     strcmp(s1, s2)
+#define __itt_fstrlen(s)          strlen(s)
+#define __itt_fstrcpyn(s1, s2, l) strncpy(s1, s2, l)
+#define __itt_fstrdup(s)          strdup(s)
+#define __itt_thread_id()         pthread_self()
+#define __itt_thread_yield()      sched_yield()
+#if ITT_ARCH==ITT_ARCH_IA64
+#ifdef __INTEL_COMPILER
+#define __TBB_machine_fetchadd4(addr, val) __fetchadd4_acq((void *)addr, val)
+#else  /* __INTEL_COMPILER */
+/* TODO: Add Support for not Intel compilers for IA64 */
+#endif /* __INTEL_COMPILER */
+#else /* ITT_ARCH!=ITT_ARCH_IA64 */
+INLINE int __TBB_machine_fetchadd4(volatile void* ptr, long addend)
+{
+    int result;
+    __asm__ __volatile__("lock\nxaddl %0,%1"
+                          : "=r"(result),"=m"(*(long*)ptr)
+                          : "0"(addend), "m"(*(long*)ptr)
+                          : "memory");
+    return result;
+}
+#endif /* ITT_ARCH==ITT_ARCH_IA64 */
+
+#ifndef ITT_SIMPLE_INIT
+INLINE int __itt_interlocked_increment(volatile long* ptr)
+{
+    return __TBB_machine_fetchadd4(ptr, 1) + 1;
+}
+#endif /* ITT_SIMPLE_INIT */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+typedef enum {
+    __itt_collection_normal = 0,
+    __itt_collection_paused = 1
+} __itt_collection_state;
+
+typedef enum {
+    __itt_thread_normal  = 0,
+    __itt_thread_ignored = 1
+} __itt_thread_state;
+
+#pragma pack(push, 8)
+
+typedef struct ___itt_thread_info
+{
+    const char* nameA; /*!< Copy of original name in ASCII. */
+#if defined(UNICODE) || defined(_UNICODE)
+    const wchar_t* nameW; /*!< Copy of original name in UNICODE. */
+#else  /* UNICODE || _UNICODE */
+    void* nameW;
+#endif /* UNICODE || _UNICODE */
+    TIDT               tid;
+    __itt_thread_state state;   /*!< Thread state (paused or normal) */
+    int                extra1;  /*!< Reserved to the runtime */
+    void*              extra2;  /*!< Reserved to the runtime */
+    struct ___itt_thread_info* next;
+} __itt_thread_info;
+
+#include "ittnotify_types.h" /* For __itt_group_id definition */
+
+typedef struct ___itt_api_info_20101001
+{
+    const char*    name;
+    void**         func_ptr;
+    void*          init_func;
+    __itt_group_id group;
+}  __itt_api_info_20101001;
+
+typedef struct ___itt_api_info
+{
+    const char*    name;
+    void**         func_ptr;
+    void*          init_func;
+    void*          null_func;
+    __itt_group_id group;
+}  __itt_api_info;
+
+struct ___itt_domain;
+struct ___itt_string_handle;
+
+typedef struct ___itt_global
+{
+    unsigned char          magic[8];
+    unsigned long          version_major;
+    unsigned long          version_minor;
+    unsigned long          version_build;
+    volatile long          api_initialized;
+    volatile long          mutex_initialized;
+    volatile long          atomic_counter;
+    mutex_t                mutex;
+    lib_t                  lib;
+    void*                  error_handler;
+    const char**           dll_path_ptr;
+    __itt_api_info*        api_list_ptr;
+    struct ___itt_global*  next;
+    /* Joinable structures below */
+    __itt_thread_info*     thread_list;
+    struct ___itt_domain*  domain_list;
+    struct ___itt_string_handle* string_list;
+    __itt_collection_state state;
+} __itt_global;
+
+#pragma pack(pop)
+
+#define NEW_THREAD_INFO_W(gptr,h,h_tail,t,s,n) { \
+    h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
+    if (h != NULL) { \
+        h->tid    = t; \
+        h->nameA  = NULL; \
+        h->nameW  = n ? _wcsdup(n) : NULL; \
+        h->state  = s; \
+        h->extra1 = 0;    /* reserved */ \
+        h->extra2 = NULL; /* reserved */ \
+        h->next   = NULL; \
+        if (h_tail == NULL) \
+            (gptr)->thread_list = h; \
+        else \
+            h_tail->next = h; \
+    } \
+}
+
+#define NEW_THREAD_INFO_A(gptr,h,h_tail,t,s,n) { \
+    h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
+    if (h != NULL) { \
+        h->tid    = t; \
+        h->nameA  = n ? __itt_fstrdup(n) : NULL; \
+        h->nameW  = NULL; \
+        h->state  = s; \
+        h->extra1 = 0;    /* reserved */ \
+        h->extra2 = NULL; /* reserved */ \
+        h->next   = NULL; \
+        if (h_tail == NULL) \
+            (gptr)->thread_list = h; \
+        else \
+            h_tail->next = h; \
+    } \
+}
+
+#define NEW_DOMAIN_W(gptr,h,h_tail,name) { \
+    h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
+    if (h != NULL) { \
+        h->flags  = 0;    /* domain is disabled by default */ \
+        h->nameA  = NULL; \
+        h->nameW  = name ? _wcsdup(name) : NULL; \
+        h->extra1 = 0;    /* reserved */ \
+        h->extra2 = NULL; /* reserved */ \
+        h->next   = NULL; \
+        if (h_tail == NULL) \
+            (gptr)->domain_list = h; \
+        else \
+            h_tail->next = h; \
+    } \
+}
+
+#define NEW_DOMAIN_A(gptr,h,h_tail,name) { \
+    h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
+    if (h != NULL) { \
+        h->flags  = 0;    /* domain is disabled by default */ \
+        h->nameA  = name ? __itt_fstrdup(name) : NULL; \
+        h->nameW  = NULL; \
+        h->extra1 = 0;    /* reserved */ \
+        h->extra2 = NULL; /* reserved */ \
+        h->next   = NULL; \
+        if (h_tail == NULL) \
+            (gptr)->domain_list = h; \
+        else \
+            h_tail->next = h; \
+    } \
+}
+
+#define NEW_STRING_HANDLE_W(gptr,h,h_tail,name) { \
+    h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
+    if (h != NULL) { \
+        h->strA   = NULL; \
+        h->strW   = name ? _wcsdup(name) : NULL; \
+        h->extra1 = 0;    /* reserved */ \
+        h->extra2 = NULL; /* reserved */ \
+        h->next   = NULL; \
+        if (h_tail == NULL) \
+            (gptr)->string_list = h; \
+        else \
+            h_tail->next = h; \
+    } \
+}
+
+#define NEW_STRING_HANDLE_A(gptr,h,h_tail,name) { \
+    h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
+    if (h != NULL) { \
+        h->strA   = name ? __itt_fstrdup(name) : NULL; \
+        h->strW   = NULL; \
+        h->extra1 = 0;    /* reserved */ \
+        h->extra2 = NULL; /* reserved */ \
+        h->next   = NULL; \
+        if (h_tail == NULL) \
+            (gptr)->string_list = h; \
+        else \
+            h_tail->next = h; \
+    } \
+}
+
 #endif /* _ITTNOTIFY_CONFIG_H_ */
diff --git a/src/tbb/tools_api/ittnotify_static.c b/src/tbb/tools_api/ittnotify_static.c
index 71765b3..be55706 100644
--- a/src/tbb/tools_api/ittnotify_static.c
+++ b/src/tbb/tools_api/ittnotify_static.c
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,72 +29,28 @@
 #include "ittnotify_config.h"
 
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-#include <windows.h>
+#define PATH_MAX 512
 #else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
-#include <pthread.h>
+#include <limits.h>
 #include <dlfcn.h>
 #include <errno.h>
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#include <stdlib.h>
 #include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
 #include <string.h>
 
-#include "disable_warnings.h"
-
-#define INTEL_NO_MACRO_BODY 
+#define INTEL_NO_MACRO_BODY
+#define INTEL_ITTNOTIFY_API_PRIVATE
 #include "ittnotify.h"
 #include "legacy/ittnotify.h"
-#include "internal/ittnotify.h"
-#include "prototype/ittnotify.h"
 
-#include "ittnotify_types.h"
+#include "disable_warnings.h"
 
-#ifndef INTEL_ITTNOTIFY_PREFIX
-#define INTEL_ITTNOTIFY_PREFIX __itt_
-#endif /* INTEL_ITTNOTIFY_PREFIX */
-#ifndef INTEL_ITTNOTIFY_POSTFIX
-#define INTEL_ITTNOTIFY_POSTFIX _ptr_
-#endif /* INTEL_ITTNOTIFY_POSTFIX */
+static const char api_version[] = API_VERSION "\0\n@(#) 201495 2011-12-01 14:14:56Z\n";
 
 #define _N_(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)
 
-#ifndef CDECL
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-#define CDECL __cdecl
-#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#define CDECL
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* CDECL */
-
-#ifndef STDCALL
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-#define STDCALL __stdcall
-#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
-#define STDCALL
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* STDCALL */
-
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-typedef FARPROC   FPTR;
-typedef DWORD     TIDT;
-#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
-typedef void*     FPTR;
-typedef pthread_t TIDT;
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-
-/* OS communication functions */
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-typedef HMODULE lib_t;
-typedef CRITICAL_SECTION mutex_t;
-#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
-typedef void* lib_t;
-typedef pthread_mutex_t mutex_t;
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-
-static volatile long ittnotify_init = 0;
-static lib_t ittnotify_lib = NULL;
-static __itt_error_notification_t* error_handler = NULL;
-
 #if ITT_OS==ITT_OS_WIN
 static const char* ittnotify_lib_name = "libittnotify.dll";
 #elif ITT_OS==ITT_OS_LINUX
@@ -113,80 +69,20 @@ static const char* ittnotify_lib_name = "libittnotify.dylib";
 #endif
 #endif /* LIB_VAR_NAME */
 
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-#define __itt_get_proc(lib, name) GetProcAddress(lib, name)
-#define __itt_mutex_init(mutex)   InitializeCriticalSection(mutex)
-#define __itt_mutex_lock(mutex)   EnterCriticalSection(mutex)
-#define __itt_mutex_unlock(mutex) LeaveCriticalSection(mutex)
-#define __itt_load_lib(name)      LoadLibraryA(name)
-#define __itt_unload_lib(handle)  FreeLibrary(handle)
-#define __itt_system_error()      (int)GetLastError()
-#define __itt_fstrcmp(s1, s2)     lstrcmpA(s1, s2)
-#define __itt_fstrlen(s)          lstrlenA(s)
-#define __itt_fstrcpyn(s1, s2, l) lstrcpynA(s1, s2, l)
-#define __itt_thread_id()         GetCurrentThreadId()
-#define __itt_thread_yield()      SwitchToThread()
-#ifndef ITT_SIMPLE_INIT
-static int __itt_interlocked_increment(volatile int* ptr)
-{
-    ITT_BUILD_ASSERT(sizeof(int) == sizeof(long));
-    return InterlockedIncrement((volatile long *)ptr);
-}
-#endif /* ITT_SIMPLE_INIT */
-#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
-#define __itt_get_proc(lib, name) dlsym(lib, name)
-#define __itt_mutex_init(mutex)   \
-    {                                                                                        \
-        pthread_mutexattr_t mutex_attr;                                                      \
-        int error_code = pthread_mutexattr_init(&mutex_attr);                                \
-        if (error_code)                                                                      \
-            __itt_report_error(__itt_error_system, "pthread_mutexattr_init", error_code);    \
-        error_code = pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE);        \
-        if (error_code)                                                                      \
-            __itt_report_error(__itt_error_system, "pthread_mutexattr_settype", error_code); \
-        error_code = pthread_mutex_init(mutex, &mutex_attr);                                 \
-        if (error_code)                                                                      \
-            __itt_report_error(__itt_error_system, "pthread_mutex_init", error_code);        \
-        error_code = pthread_mutexattr_destroy(&mutex_attr);                                 \
-        if (error_code)                                                                      \
-            __itt_report_error(__itt_error_system, "pthread_mutexattr_destroy", error_code); \
-    }
-#define __itt_mutex_lock(mutex)   pthread_mutex_lock(mutex)
-#define __itt_mutex_unlock(mutex) pthread_mutex_unlock(mutex)
-#define __itt_load_lib(name)      dlopen(name, RTLD_LAZY)
-#define __itt_unload_lib(handle)  dlclose(handle)
-#define __itt_system_error()      errno
-#define __itt_fstrcmp(s1, s2)     strcmp(s1, s2)
-#define __itt_fstrlen(s)          strlen(s)
-#define __itt_fstrcpyn(s1, s2, l) strncpy(s1, s2, l)
-#define __itt_thread_id()         pthread_self()
-#define __itt_thread_yield()      sched_yield()
-#if ITT_ARCH==ITT_ARCH_IA64
-#ifdef __INTEL_COMPILER
-#define __TBB_machine_fetchadd4(addr, val) __fetchadd4_acq((void *)addr, val)
-#else  /* __INTEL_COMPILER */
-// TODO: Add Support for not Intel compilers for IA64
-#endif /* __INTEL_COMPILER */
-#else /* ITT_ARCH!=ITT_ARCH_IA64 */
-#ifndef ITT_SIMPLE_INIT
-static int __TBB_machine_fetchadd4(volatile void* ptr, int addend)
-{
-    int result;
-    __asm__ __volatile__("lock\nxaddl %0,%1"
-                          : "=r"(result),"=m"(*(int *)ptr)
-                          : "0"(addend), "m"(*(int *)ptr)
-                          : "memory");
-    return result;
-}
-#endif // ITT_SIMPLE_INIT
-#endif /* ITT_ARCH==ITT_ARCH_IA64 */
-#ifndef ITT_SIMPLE_INIT
-static int __itt_interlocked_increment(volatile int* ptr)
-{
-    return __TBB_machine_fetchadd4(ptr, 1) + 1;
+#define ITT_MUTEX_INIT_AND_LOCK(p) {                                 \
+        if (!p.mutex_initialized)                                    \
+        {                                                            \
+            if (__itt_interlocked_increment(&p.atomic_counter) == 1) \
+            {                                                        \
+                __itt_mutex_init(&p.mutex);                          \
+                p.mutex_initialized = 1;                             \
+            }                                                        \
+            else                                                     \
+                while (!p.mutex_initialized)                         \
+                    __itt_thread_yield();                            \
+        }                                                            \
+        __itt_mutex_lock(&p.mutex);                                  \
 }
-#endif /* ITT_SIMPLE_INIT */
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 
 const int _N_(err) = 0;
 
@@ -194,50 +90,75 @@ typedef int (__itt_init_ittlib_t)(const char*, __itt_group_id);
 
 /* this define used to control initialization function name. */
 #ifndef __itt_init_ittlib_name
-static int _N_(init_ittlib)(const char*, __itt_group_id);
+ITT_EXTERN_C int _N_(init_ittlib)(const char*, __itt_group_id);
 static __itt_init_ittlib_t* __itt_init_ittlib_ptr = _N_(init_ittlib);
 #define __itt_init_ittlib_name __itt_init_ittlib_ptr
 #endif /* __itt_init_ittlib_name */
 
+typedef void (__itt_fini_ittlib_t)(void);
+
+/* this define used to control finalization function name. */
+#ifndef __itt_fini_ittlib_name
+ITT_EXTERN_C void _N_(fini_ittlib)(void);
+static __itt_fini_ittlib_t* __itt_fini_ittlib_ptr = _N_(fini_ittlib);
+#define __itt_fini_ittlib_name __itt_fini_ittlib_ptr
+#endif /* __itt_fini_ittlib_name */
+
 /* building pointers to imported funcs */
 #undef ITT_STUBV
 #undef ITT_STUB
-#define ITT_STUB(api,type,name,args,params,ptr,group,format)      \
-    static type api ITT_JOIN(_N_(name),_init) args;               \
-    typedef type api name##_t args;                               \
-    extern "C" name##_t* ITTNOTIFY_NAME(name);                    \
-    name##_t* ITTNOTIFY_NAME(name) = ITT_JOIN(_N_(name),_init);   \
-    static type api ITT_JOIN(_N_(name),_init) args                \
-    {                                                             \
-        if (__itt_init_ittlib_name(NULL, __itt_group_none)        \
-            && ITTNOTIFY_NAME(name)                               \
-            && ITTNOTIFY_NAME(name) != ITT_JOIN(_N_(name),_init)) \
-            return ITTNOTIFY_NAME(name) params;                   \
-        else                                                      \
-            return (type)0;                                       \
-    }
-
-#define ITT_STUBV(api,type,name,args,params,ptr,group,format)     \
-    static type api ITT_JOIN(_N_(name),_init) args;               \
-    typedef type api name##_t args;                               \
-    extern "C" name##_t* ITTNOTIFY_NAME(name);                    \
-    name##_t* ITTNOTIFY_NAME(name) = ITT_JOIN(_N_(name),_init);   \
-    static type api ITT_JOIN(_N_(name),_init) args                \
-    {                                                             \
-        if (__itt_init_ittlib_name(NULL, __itt_group_none)        \
-            && ITTNOTIFY_NAME(name)                               \
-            && ITTNOTIFY_NAME(name) != ITT_JOIN(_N_(name),_init)) \
-            ITTNOTIFY_NAME(name) params;                          \
-        else                                                      \
-            return;                                               \
-    }
-
-/* Define types and *_init functions. */
+#define ITT_STUB(api,type,name,args,params,ptr,group,format)   \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
+typedef type api ITT_JOIN(_N_(name),_t) args;                  \
+ITT_EXTERN_C { ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); } \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \
+{                                                              \
+    __itt_init_ittlib_name(NULL, __itt_group_all);             \
+    if (ITTNOTIFY_NAME(name) && ITTNOTIFY_NAME(name) != ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init))) \
+        return ITTNOTIFY_NAME(name) params;                    \
+    else                                                       \
+        return (type)0;                                        \
+}
+
+#define ITT_STUBV(api,type,name,args,params,ptr,group,format)  \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
+typedef type api ITT_JOIN(_N_(name),_t) args;                  \
+ITT_EXTERN_C {                                                 \
+ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); } \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \
+{                                                              \
+    __itt_init_ittlib_name(NULL, __itt_group_all);             \
+    if (ITTNOTIFY_NAME(name) && ITTNOTIFY_NAME(name) != ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init))) \
+        ITTNOTIFY_NAME(name) params;                           \
+    else                                                       \
+        return;                                                \
+}
+
+#undef __ITT_INTERNAL_INIT
 #include "ittnotify_static.h"
 
+#undef ITT_STUB
+#undef ITT_STUBV
+#define ITT_STUB(api,type,name,args,params,ptr,group,format)   \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
+typedef type api ITT_JOIN(_N_(name),_t) args;                  \
+ITT_EXTERN_C {                                                 \
+ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); }
+
+#define ITT_STUBV(api,type,name,args,params,ptr,group,format)  \
+static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\
+typedef type api ITT_JOIN(_N_(name),_t) args;                  \
+ITT_EXTERN_C { ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); }
+
+#define __ITT_INTERNAL_INIT
+#include "ittnotify_static.h"
+#undef __ITT_INTERNAL_INIT
+
 ITT_GROUP_LIST(group_list);
 
-typedef struct __itt_group_alias_
+#pragma pack(push, 8)
+
+typedef struct ___itt_group_alias
 {
     const char*    env_var;
     __itt_group_id groups;
@@ -245,54 +166,413 @@ typedef struct __itt_group_alias_
 
 static __itt_group_alias group_alias[] = {
     { "KMP_FOR_TPROFILE", (__itt_group_id)(__itt_group_control | __itt_group_thread | __itt_group_sync  | __itt_group_mark) },
-    { "KMP_FOR_TCHECK",   (__itt_group_id)(__itt_group_control | __itt_group_thread | __itt_group_fsync | __itt_group_mark) },
-    { NULL,               (__itt_group_none) }
+    { "KMP_FOR_TCHECK",   (__itt_group_id)(__itt_group_control | __itt_group_thread | __itt_group_sync  | __itt_group_fsync | __itt_group_mark) },
+    { NULL,               (__itt_group_none) },
+    { api_version,        (__itt_group_none) } /* !!! Just to avoid unused code elimination !!! */
 };
 
-typedef struct __itt_func_map_
-{
-    const char*    name;
-    void**         func_ptr;
-    __itt_group_id group;
-} __itt_func_map;
+#pragma pack(pop)
 
-#define __ptr_(pname,name,group) {ITT_TO_STR(ITT_JOIN(__itt_,pname)), (void**)(void*)&ITTNOTIFY_NAME(name), (__itt_group_id)(group)},
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(push)
+#pragma warning(disable: 4054) /* warning C4054: 'type cast' : from function pointer 'XXX' to data pointer 'void *' */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+static __itt_api_info api_list[] = {
+/* Define functions with static implementation */
 #undef ITT_STUB
 #undef ITT_STUBV
-#define ITT_STUB(api,type,name,args,params,nameindll,group,format) __ptr_(nameindll,name,group)
+#define ITT_STUB(api,type,name,args,params,nameindll,group,format) {ITT_TO_STR(ITT_JOIN(__itt_,nameindll)), (void**)(void*)&ITTNOTIFY_NAME(name), (void*)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), (void*)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), (__itt_group_id)(group)},
 #define ITT_STUBV ITT_STUB
-
-static __itt_func_map func_map[] = {
+#define __ITT_INTERNAL_INIT
 #include "ittnotify_static.h"
-    {NULL, NULL, __itt_group_none}
+#undef __ITT_INTERNAL_INIT
+/* Define functions without static implementation */
+#undef ITT_STUB
+#undef ITT_STUBV
+#define ITT_STUB(api,type,name,args,params,nameindll,group,format) {ITT_TO_STR(ITT_JOIN(__itt_,nameindll)), (void**)(void*)&ITTNOTIFY_NAME(name), (void*)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), NULL, (__itt_group_id)(group)},
+#define ITT_STUBV ITT_STUB
+#include "ittnotify_static.h"
+    {NULL, NULL, NULL, NULL, __itt_group_none}
 };
 
-#ifndef ITT_SIMPLE_INIT
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(pop)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 
-#undef ITT_STUBV
-#undef ITT_STUB
-#define ITT_STUBV(api,type,name,args,params,ptr,group,format) \
-ITT_EXTERN_C type api _N_(name) args                          \
-{                                                             \
-    if (ITTNOTIFY_NAME(name))                                 \
-        ITTNOTIFY_NAME(name) params;                          \
-    else                                                      \
-        return;                                               \
+/* private, init thread info item. used for internal purposes */
+static __itt_thread_info init_thread_info = {
+    (const char*)NULL,                        /* nameA */
+#if defined(UNICODE) || defined(_UNICODE)
+    (const wchar_t*)NULL,                     /* nameW */
+#else
+    (void*)NULL,                              /* nameW */
+#endif
+    0,                                        /* tid */
+    __itt_thread_normal,                      /* state */
+    0,                                        /* extra1 */
+    (void*)NULL,                              /* extra2 */
+    (__itt_thread_info*)NULL                  /* next */
+};
+
+/* private, NULL domain item. used for internal purposes */
+static __itt_domain null_domain = {
+    0,                                        /* flags:  disabled by default */
+    (const char*)NULL,                        /* nameA */
+#if defined(UNICODE) || defined(_UNICODE)
+    (const wchar_t*)NULL,                     /* nameW */
+#else
+    (void*)NULL,                              /* nameW */
+#endif
+    0,                                        /* extra1 */
+    (void*)NULL,                              /* extra2 */
+    (__itt_domain*)NULL                       /* next */
+};
+
+/* private, NULL string handle item. used for internal purposes */
+static __itt_string_handle null_string_handle = {
+    (const char*)NULL,                        /* strA */
+#if defined(UNICODE) || defined(_UNICODE)
+    (const wchar_t*)NULL,                     /* strW */
+#else
+    (void*)NULL,                              /* strW */
+#endif
+    0,                                        /* extra1 */
+    (void*)NULL,                              /* extra2 */
+    (__itt_string_handle*)NULL                /* next */
+};
+
+static const char dll_path[PATH_MAX] = { 0 };
+
+/* static part descriptor which handles. all notification api attributes. */
+__itt_global __itt_ittapi_global = {
+    ITT_MAGIC,                                     /* identification info */
+    ITT_MAJOR, ITT_MINOR, API_VERSION_BUILD,       /* version info */
+    0,                                             /* api_initialized */
+    0,                                             /* mutex_initialized */
+    0,                                             /* atomic_counter */
+    MUTEX_INITIALIZER,                             /* mutex */
+    NULL,                                          /* dynamic library handle */
+    NULL,                                          /* error_handler */
+    (const char**)&dll_path,                       /* dll_path_ptr */
+    (__itt_api_info*)&api_list,                    /* api_list_ptr */
+    NULL,                                          /* next __itt_global */
+    (__itt_thread_info*)&init_thread_info,         /* thread_list */
+    (__itt_domain*)&null_domain,                   /* domain_list */
+    (__itt_string_handle*)&null_string_handle,     /* string_list */
+    __itt_collection_normal                        /* collection state */
+};
+
+typedef void (__itt_api_init_t)(__itt_global*, __itt_group_id);
+typedef void (__itt_api_fini_t)(__itt_global*);
+
+/* ========================================================================= */
+
+#ifdef ITT_NOTIFY_EXT_REPORT
+ITT_EXTERN_C void _N_(error_handler)(__itt_error_code, va_list args);
+#endif /* ITT_NOTIFY_EXT_REPORT */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(push)
+#pragma warning(disable: 4055) /* warning C4055: 'type cast' : from data pointer 'void *' to function pointer 'XXX' */
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+static void __itt_report_error(__itt_error_code code, ...)
+{
+    va_list args;
+    va_start(args, code);
+    if (__itt_ittapi_global.error_handler != NULL)
+    {
+        __itt_error_handler_t* handler = (__itt_error_handler_t*)__itt_ittapi_global.error_handler;
+        handler(code, args);
+    }
+#ifdef ITT_NOTIFY_EXT_REPORT
+    _N_(error_handler)(code, args);
+#endif /* ITT_NOTIFY_EXT_REPORT */
+    va_end(args);
 }
 
-#define ITT_STUB(api,type,name,args,params,ptr,group,format) \
-ITT_EXTERN_C type api _N_(name) args                         \
-{                                                            \
-    if (ITTNOTIFY_NAME(name))                                \
-        return ITTNOTIFY_NAME(name) params;                  \
-    else                                                     \
-        return (type)0;                                      \
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#pragma warning(pop)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createW),_init))(const wchar_t* name)
+{
+    __itt_domain *h_tail, *h;
+
+    if (!__itt_ittapi_global.api_initialized && __itt_ittapi_global.thread_list->tid == 0)
+    {
+        __itt_init_ittlib_name(NULL, __itt_group_all);
+        if (ITTNOTIFY_NAME(domain_createW) && ITTNOTIFY_NAME(domain_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createW),_init)))
+            return ITTNOTIFY_NAME(domain_createW)(name);
+    }
+
+    if (name == NULL)
+        return __itt_ittapi_global.domain_list;
+
+    ITT_MUTEX_INIT_AND_LOCK(__itt_ittapi_global);
+    for (h_tail = NULL, h = __itt_ittapi_global.domain_list; h != NULL; h_tail = h, h = h->next)
+        if (h->nameW != NULL && !wcscmp(h->nameW, name))
+            break;
+    if (h == NULL) {
+        NEW_DOMAIN_W(&__itt_ittapi_global,h,h_tail,name);
+    }
+    __itt_mutex_unlock(&__itt_ittapi_global.mutex);
+    return h;
 }
 
-/* Define ITT functions. */
-#include "ittnotify_static.h"
+static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createA),_init))(const char* name)
+#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_create),_init))(const char* name)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+{
+    __itt_domain *h_tail, *h;
 
-#endif /* ITT_SIMPLE_INIT */
+    if (!__itt_ittapi_global.api_initialized && __itt_ittapi_global.thread_list->tid == 0)
+    {
+        __itt_init_ittlib_name(NULL, __itt_group_all);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+        if (ITTNOTIFY_NAME(domain_createA) && ITTNOTIFY_NAME(domain_createA) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createA),_init)))
+            return ITTNOTIFY_NAME(domain_createA)(name);
+#else
+        if (ITTNOTIFY_NAME(domain_create) && ITTNOTIFY_NAME(domain_create) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_create),_init)))
+            return ITTNOTIFY_NAME(domain_create)(name);
+#endif
+    }
+
+    if (name == NULL)
+        return __itt_ittapi_global.domain_list;
+
+    ITT_MUTEX_INIT_AND_LOCK(__itt_ittapi_global);
+    for (h_tail = NULL, h = __itt_ittapi_global.domain_list; h != NULL; h_tail = h, h = h->next)
+        if (h->nameA != NULL && !__itt_fstrcmp(h->nameA, name))
+            break;
+    if (h == NULL) {
+        NEW_DOMAIN_A(&__itt_ittapi_global,h,h_tail,name);
+    }
+    __itt_mutex_unlock(&__itt_ittapi_global.mutex);
+    return h;
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createW),_init))(const wchar_t* name)
+{
+    __itt_string_handle *h_tail, *h;
+
+    if (!__itt_ittapi_global.api_initialized && __itt_ittapi_global.thread_list->tid == 0)
+    {
+        __itt_init_ittlib_name(NULL, __itt_group_all);
+        if (ITTNOTIFY_NAME(string_handle_createW) && ITTNOTIFY_NAME(string_handle_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createW),_init)))
+            return ITTNOTIFY_NAME(string_handle_createW)(name);
+    }
+
+    if (name == NULL)
+        return __itt_ittapi_global.string_list;
+
+    ITT_MUTEX_INIT_AND_LOCK(__itt_ittapi_global);
+    for (h_tail = NULL, h = __itt_ittapi_global.string_list; h != NULL; h_tail = h, h = h->next)
+        if (h->strW != NULL && !wcscmp(h->strW, name))
+            break;
+    if (h == NULL) {
+        NEW_STRING_HANDLE_W(&__itt_ittapi_global,h,h_tail,name);
+    }
+    __itt_mutex_unlock(&__itt_ittapi_global.mutex);
+    return h;
+}
+
+static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createA),_init))(const char* name)
+#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_create),_init))(const char* name)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+{
+    __itt_string_handle *h_tail, *h;
+
+    if (!__itt_ittapi_global.api_initialized && __itt_ittapi_global.thread_list->tid == 0)
+    {
+        __itt_init_ittlib_name(NULL, __itt_group_all);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+        if (ITTNOTIFY_NAME(string_handle_createA) && ITTNOTIFY_NAME(string_handle_createA) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createA),_init)))
+            return ITTNOTIFY_NAME(string_handle_createA)(name);
+#else
+        if (ITTNOTIFY_NAME(string_handle_create) && ITTNOTIFY_NAME(string_handle_create) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_create),_init)))
+            return ITTNOTIFY_NAME(string_handle_create)(name);
+#endif
+    }
+
+    if (name == NULL)
+        return __itt_ittapi_global.string_list;
+
+    ITT_MUTEX_INIT_AND_LOCK(__itt_ittapi_global);
+    for (h_tail = NULL, h = __itt_ittapi_global.string_list; h != NULL; h_tail = h, h = h->next)
+        if (h->strA != NULL && !__itt_fstrcmp(h->strA, name))
+            break;
+    if (h == NULL) {
+        NEW_STRING_HANDLE_A(&__itt_ittapi_global,h,h_tail,name);
+    }
+    __itt_mutex_unlock(&__itt_ittapi_global.mutex);
+    return h;
+}
+
+/* -------------------------------------------------------------------------- */
+
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(pause),_init))(void)
+{
+    if (!__itt_ittapi_global.api_initialized && __itt_ittapi_global.thread_list->tid == 0)
+    {
+        __itt_init_ittlib_name(NULL, __itt_group_all);
+        if (ITTNOTIFY_NAME(pause) && ITTNOTIFY_NAME(pause) != ITT_VERSIONIZE(ITT_JOIN(_N_(pause),_init)))
+        {
+            ITTNOTIFY_NAME(pause)();
+            return;
+        }
+    }
+    __itt_ittapi_global.state = __itt_collection_paused;
+}
+
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(resume),_init))(void)
+{
+    if (!__itt_ittapi_global.api_initialized && __itt_ittapi_global.thread_list->tid == 0)
+    {
+        __itt_init_ittlib_name(NULL, __itt_group_all);
+        if (ITTNOTIFY_NAME(resume) && ITTNOTIFY_NAME(resume) != ITT_VERSIONIZE(ITT_JOIN(_N_(resume),_init)))
+        {
+            ITTNOTIFY_NAME(resume)();
+            return;
+        }
+    }
+    __itt_ittapi_global.state = __itt_collection_normal;
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init))(const wchar_t* name)
+{
+    TIDT tid = __itt_thread_id();
+    __itt_thread_info *h_tail, *h;
+
+    if (!__itt_ittapi_global.api_initialized && __itt_ittapi_global.thread_list->tid == 0)
+    {
+        __itt_init_ittlib_name(NULL, __itt_group_all);
+        if (ITTNOTIFY_NAME(thread_set_nameW) && ITTNOTIFY_NAME(thread_set_nameW) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init)))
+        {
+            ITTNOTIFY_NAME(thread_set_nameW)(name);
+            return;
+        }
+    }
+
+    __itt_mutex_lock(&__itt_ittapi_global.mutex);
+    for (h_tail = NULL, h = __itt_ittapi_global.thread_list; h != NULL; h_tail = h, h = h->next)
+        if (h->tid == tid)
+            break;
+    if (h == NULL) {
+        NEW_THREAD_INFO_W(&__itt_ittapi_global, h, h_tail, tid, __itt_thread_normal, name);
+    }
+    else
+    {
+        h->nameW = name ? _wcsdup(name) : NULL;
+    }
+    __itt_mutex_unlock(&__itt_ittapi_global.mutex);
+}
+
+static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_setW),_init))(const wchar_t* name, int namelen)
+{
+    namelen = namelen;
+    ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init))(name);
+    return 0;
+}
+
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init))(const char* name)
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init))(const char* name)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+{
+    TIDT tid = __itt_thread_id();
+    __itt_thread_info *h_tail, *h;
+
+    if (!__itt_ittapi_global.api_initialized && __itt_ittapi_global.thread_list->tid == 0)
+    {
+        __itt_init_ittlib_name(NULL, __itt_group_all);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+        if (ITTNOTIFY_NAME(thread_set_nameA) && ITTNOTIFY_NAME(thread_set_nameA) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init)))
+        {
+            ITTNOTIFY_NAME(thread_set_nameA)(name);
+            return;
+        }
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+        if (ITTNOTIFY_NAME(thread_set_name) && ITTNOTIFY_NAME(thread_set_name) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init)))
+        {
+            ITTNOTIFY_NAME(thread_set_name)(name);
+            return;
+        }
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+    }
+
+    __itt_mutex_lock(&__itt_ittapi_global.mutex);
+    for (h_tail = NULL, h = __itt_ittapi_global.thread_list; h != NULL; h_tail = h, h = h->next)
+        if (h->tid == tid)
+            break;
+    if (h == NULL) {
+        NEW_THREAD_INFO_A(&__itt_ittapi_global, h, h_tail, tid, __itt_thread_normal, name);
+    }
+    else
+    {
+        h->nameA = name ? __itt_fstrdup(name) : NULL;
+    }
+    __itt_mutex_unlock(&__itt_ittapi_global.mutex);
+}
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_setA),_init))(const char* name, int namelen)
+{
+    namelen = namelen;
+    ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init))(name);
+    return 0;
+}
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_set),_init))(const char* name, int namelen)
+{
+    namelen = namelen;
+    ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init))(name);
+    return 0;
+}
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init))(void)
+{
+    TIDT tid = __itt_thread_id();
+    __itt_thread_info *h_tail, *h;
+
+    if (!__itt_ittapi_global.api_initialized && __itt_ittapi_global.thread_list->tid == 0)
+    {
+        __itt_init_ittlib_name(NULL, __itt_group_all);
+        if (ITTNOTIFY_NAME(thread_ignore) && ITTNOTIFY_NAME(thread_ignore) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init)))
+        {
+            ITTNOTIFY_NAME(thread_ignore)();
+            return;
+        }
+    }
+
+    __itt_mutex_lock(&__itt_ittapi_global.mutex);
+    for (h_tail = NULL, h = __itt_ittapi_global.thread_list; h != NULL; h_tail = h, h = h->next)
+        if (h->tid == tid)
+            break;
+    if (h == NULL) {
+        static const char* name = "unknown";
+        NEW_THREAD_INFO_A(&__itt_ittapi_global, h, h_tail, tid, __itt_thread_ignored, name);
+    }
+    else
+    {
+        h->state = __itt_thread_ignored;
+    }
+    __itt_mutex_unlock(&__itt_ittapi_global.mutex);
+}
+
+static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_ignore),_init))(void)
+{
+    ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init))();
+}
+
+/* -------------------------------------------------------------------------- */
 
 static const char* __itt_fsplit(const char* s, const char* sep, const char** out, int* len)
 {
@@ -300,7 +580,7 @@ static const char* __itt_fsplit(const char* s, const char* sep, const char** out
     int j;
 
     if (!s || !sep || !out || !len)
-        return 0;
+        return NULL;
 
     for (i = 0; s[i]; i++)
     {
@@ -316,10 +596,10 @@ static const char* __itt_fsplit(const char* s, const char* sep, const char** out
     }
 
     if (!s[i])
-        return 0;
+        return NULL;
 
     *len = 0;
-    *out = s + i;
+    *out = &s[i];
 
     for (; s[i]; i++, (*len)++)
     {
@@ -347,50 +627,38 @@ static const char* __itt_fsplit(const char* s, const char* sep, const char** out
             break;
     }
 
-    return s + i;
-}
-
-#ifdef ITT_NOTIFY_EXT_REPORT
-ITT_EXTERN_C void _N_(error_handler)(__itt_error_code, va_list args);
-#endif /* ITT_NOTIFY_EXT_REPORT */
-
-static void __itt_report_error(__itt_error_code code, ...)
-{
-    va_list args;
-    va_start( args, code );
-    if (error_handler != NULL)
-        error_handler(code, args);
-#ifdef ITT_NOTIFY_EXT_REPORT
-    _N_(error_handler)(code, args);
-#endif /* ITT_NOTIFY_EXT_REPORT */
-    va_end(args);
+    return &s[i];
 }
 
+/* This function return value of env variable that placed into static buffer.
+ * !!! The same static buffer is used for subsequent calls. !!!
+ * This was done to aviod dynamic allocation for few calls.
+ * Actually we need this function only four times.
+ */
 static const char* __itt_get_env_var(const char* name)
 {
 #define MAX_ENV_VALUE_SIZE 4086
     static char  env_buff[MAX_ENV_VALUE_SIZE];
-    static char* env_value = (char*)&env_buff;
+    static char* env_value = (char*)env_buff;
 
     if (name != NULL)
     {
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-        size_t max_len = MAX_ENV_VALUE_SIZE - ((size_t)env_value - (size_t)&env_buff);
+        size_t max_len = MAX_ENV_VALUE_SIZE - (size_t)(env_value - env_buff);
         DWORD rc = GetEnvironmentVariableA(name, env_value, (DWORD)max_len);
         if (rc >= max_len)
-        {
             __itt_report_error(__itt_error_env_too_long, name, (size_t)rc - 1, (size_t)(max_len - 1));
-        }
         else if (rc > 0)
         {
-            char* ret = env_value;
+            const char* ret = (const char*)env_value;
             env_value += rc + 1;
             return ret;
         }
         else
         {
-            /* If environment variable is empty, GetEnvirornmentVariables() returns zero (number of   */
-            /* characters (not including terminating null), and GetLastError() returns ERROR_SUCCESS. */
+            /* If environment variable is empty, GetEnvirornmentVariables()
+             * returns zero (number of characters (not including terminating null),
+             * and GetLastError() returns ERROR_SUCCESS. */
             DWORD err = GetLastError();
             if (err == ERROR_SUCCESS)
                 return env_value;
@@ -403,10 +671,10 @@ static const char* __itt_get_env_var(const char* name)
         if (env != NULL)
         {
             size_t len = strlen(env);
-            size_t max_len = MAX_ENV_VALUE_SIZE - ((size_t)env_value - (size_t)&env_buff);
+            size_t max_len = MAX_ENV_VALUE_SIZE - (size_t)(env_value - env_buff);
             if (len < max_len)
             {
-                char* ret = env_value;
+                const char* ret = (const char*)env_value;
                 strncpy(env_value, env, len + 1);
                 env_value += len + 1;
                 return ret;
@@ -418,23 +686,94 @@ static const char* __itt_get_env_var(const char* name)
     return NULL;
 }
 
-static const char* __itt_get_lib_name()
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+
+#include <Winreg.h>
+
+typedef LONG (APIENTRY* RegCloseKeyProcType)(HKEY);
+typedef LONG (APIENTRY* RegOpenKeyExAProcType)(HKEY, LPCTSTR, DWORD, REGSAM, PHKEY);
+typedef LONG (APIENTRY* RegGetValueAProcType)(HKEY, LPCTSTR, LPCTSTR, DWORD, LPDWORD, PVOID, LPDWORD);
+
+/* This function return value of registry key that placed into static buffer.
+ * This was done to aviod dynamic memory allocation.
+ */
+static const char* __itt_get_lib_name_registry(void)
+{
+#define MAX_REG_VALUE_SIZE 4086
+    static char reg_buff[MAX_REG_VALUE_SIZE];
+    DWORD size;
+    LONG  res;
+    HKEY  hKey;
+    RegCloseKeyProcType   pRegCloseKey;
+    RegOpenKeyExAProcType pRegOpenKeyExA;
+    RegGetValueAProcType  pRegGetValueA;
+    HMODULE h_advapi32 = LoadLibraryA("advapi32.dll");
+    DWORD autodetect = 0;
+
+    if (h_advapi32 == NULL)
+    {
+        return NULL;
+    }
+
+    pRegCloseKey   =   (RegCloseKeyProcType)GetProcAddress(h_advapi32, "CloseKey");
+    pRegOpenKeyExA = (RegOpenKeyExAProcType)GetProcAddress(h_advapi32, "RegOpenKeyExA");
+    pRegGetValueA  =  (RegGetValueAProcType)GetProcAddress(h_advapi32, "RegGetValueA");
+
+    if (pRegCloseKey   == NULL ||
+        pRegOpenKeyExA == NULL ||
+        pRegGetValueA  == NULL)
+    {
+        FreeLibrary(h_advapi32);
+        return NULL;
+    }
+
+    res = pRegOpenKeyExA(HKEY_CURRENT_USER, (LPCTSTR)"Software\\Intel Corporation\\ITT Environment\\Collector", 0, KEY_READ, &hKey);
+    if (res != ERROR_SUCCESS || hKey == 0)
+    {
+        FreeLibrary(h_advapi32);
+        return NULL;
+    }
+
+    size = sizeof(DWORD);
+    res = pRegGetValueA(hKey, (LPCTSTR)"AutoDetect", NULL, RRF_RT_REG_DWORD, NULL, (BYTE*)&autodetect, &size);
+    if (res != ERROR_SUCCESS || size == 0 || autodetect == 0)
+    {
+        pRegCloseKey(hKey);
+        FreeLibrary(h_advapi32);
+        return NULL;
+    }
+
+    size = MAX_REG_VALUE_SIZE-1;
+    res = pRegGetValueA(hKey, (LPCTSTR)ITT_TO_STR(LIB_VAR_NAME), NULL, REG_SZ, NULL, (BYTE*)&reg_buff, &size);
+    pRegCloseKey(hKey);
+    FreeLibrary(h_advapi32);
+
+    return (res == ERROR_SUCCESS && size > 0) ? reg_buff : NULL;
+}
+
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+static const char* __itt_get_lib_name(void)
 {
     const char* lib_name = __itt_get_env_var(ITT_TO_STR(LIB_VAR_NAME));
-    return (lib_name == NULL) ? ittnotify_lib_name : lib_name;
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+    if (lib_name == NULL)
+        lib_name = __itt_get_lib_name_registry();
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+    return lib_name;
 }
 
 #ifndef min
 #define min(a,b) (a) < (b) ? (a) : (b)
 #endif /* min */
 
-static __itt_group_id __itt_get_groups()
+static __itt_group_id __itt_get_groups(void)
 {
-    int i;
+    register int i;
     __itt_group_id res = __itt_group_none;
-
     const char* var_name  = "INTEL_ITTNOTIFY_GROUPS";
     const char* group_str = __itt_get_env_var(var_name);
+
     if (group_str != NULL)
     {
         int len;
@@ -444,7 +783,7 @@ static __itt_group_id __itt_get_groups()
         {
             __itt_fstrcpyn(gr, chunk, sizeof(gr));
 
-            gr[min((size_t)len, sizeof(gr) - 1)] = 0;
+            gr[min((unsigned)len, sizeof(gr) - 1)] = 0;
 
             for (i = 0; group_list[i].name != NULL; i++)
             {
@@ -457,10 +796,11 @@ static __itt_group_id __itt_get_groups()
         }
         /* TODO: !!! Workaround for bug with warning for unknown group !!!
          * Should be fixed in new initialization scheme.
-         * Now the following groups should be set always.
-         */
+         * Now the following groups should be set always. */
         for (i = 0; group_list[i].id != __itt_group_none; i++)
-            if (group_list[i].id != __itt_group_all && group_list[i].id > __itt_group_splitter)
+            if (group_list[i].id != __itt_group_all &&
+                group_list[i].id > __itt_group_splitter_min &&
+                group_list[i].id < __itt_group_splitter_max)
                 res = (__itt_group_id)(res | group_list[i].id);
         return res;
     }
@@ -474,121 +814,161 @@ static __itt_group_id __itt_get_groups()
     return res;
 }
 
-static int __itt_is_legacy_lib(lib_t lib)
+static int __itt_lib_version(lib_t lib)
 {
     if (lib == NULL)
-        return 0; // if unknown assume NO
-
+        return 0;
+    if (__itt_get_proc(lib, "__itt_api_init"))
+        return 2;
     if (__itt_get_proc(lib, "__itt_api_version"))
-        return 0; // New interface - NO
-    return 1; // It's legacy otherwise
+        return 1;
+    return 0;
+}
+
+/* It's not used right now! Comment it out to avoid warnings.
+static void __itt_reinit_all_pointers(void)
+{
+    register int i;
+    // Fill all pointers with initial stubs
+    for (i = 0; __itt_ittapi_global.api_list_ptr[i].name != NULL; i++)
+        *__itt_ittapi_global.api_list_ptr[i].func_ptr = __itt_ittapi_global.api_list_ptr[i].init_func;
+}
+*/
+
+static void __itt_nullify_all_pointers(void)
+{
+    register int i;
+    /* Nulify all pointers except domain_create and string_handle_create */
+    for (i = 0; __itt_ittapi_global.api_list_ptr[i].name != NULL; i++)
+        *__itt_ittapi_global.api_list_ptr[i].func_ptr = __itt_ittapi_global.api_list_ptr[i].null_func;
 }
 
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #pragma warning(push)
-#pragma warning(disable: 4054)
+#pragma warning(disable: 4054) /* warning C4054: 'type cast' : from function pointer 'XXX' to data pointer 'void *' */
+#pragma warning(disable: 4055) /* warning C4055: 'type cast' : from data pointer 'void *' to function pointer 'XXX' */
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 
-/* ITT_EXTERN_C - should be exported after agreament
-static void _N_(fini_ittlib)(void)
+ITT_EXTERN_C void _N_(fini_ittlib)(void)
 {
-    int i;
+    __itt_api_fini_t* __itt_api_fini_ptr;
+    static volatile TIDT current_thread = 0;
 
-    if (ittnotify_init)
+    if (__itt_ittapi_global.api_initialized)
     {
-        // Clear all pointers
-        for (i = 0; func_map[i].name != NULL; i++)
-            *func_map[i].func_ptr = NULL;
-
-        if (ittnotify_lib != NULL)
-            __itt_unload_lib(ittnotify_lib);
-
-        ittnotify_lib  = NULL;
-        ittnotify_init = 0;
+        __itt_mutex_lock(&__itt_ittapi_global.mutex);
+        if (__itt_ittapi_global.api_initialized)
+        {
+            if (current_thread == 0)
+            {
+                current_thread = __itt_thread_id();
+                __itt_api_fini_ptr = (__itt_api_fini_t*)__itt_get_proc(__itt_ittapi_global.lib, "__itt_api_fini");
+                if (__itt_api_fini_ptr)
+                    __itt_api_fini_ptr(&__itt_ittapi_global);
+
+                __itt_nullify_all_pointers();
+
+ /* TODO: !!! not safe !!! don't support unload so far.
+  *             if (__itt_ittapi_global.lib != NULL)
+  *                 __itt_unload_lib(__itt_ittapi_global.lib);
+  *             __itt_ittapi_global.lib = NULL;
+  */
+                __itt_ittapi_global.api_initialized = 0;
+                current_thread = 0;
+            }
+        }
+        __itt_mutex_unlock(&__itt_ittapi_global.mutex);
     }
 }
-*/
 
-static int _N_(init_ittlib)(const char* lib_name, __itt_group_id groups)
+ITT_EXTERN_C int _N_(init_ittlib)(const char* lib_name, __itt_group_id init_groups)
 {
-    int i, ret = 0;
+    register int i;
+    __itt_group_id groups;
+#ifdef ITT_COMPLETE_GROUP
+    __itt_group_id zero_group = __itt_group_none;
+#endif /* ITT_COMPLETE_GROUP */
     static volatile TIDT current_thread = 0;
 
-    if (!ittnotify_init)
+    if (!__itt_ittapi_global.api_initialized)
     {
 #ifndef ITT_SIMPLE_INIT
-        static mutex_t mutex;
-        static volatile int inter_counter = 0;
-        static volatile int mutex_initialized = 0;
-
-        if (!mutex_initialized)
-        {
-            if (__itt_interlocked_increment(&inter_counter) == 1)
-            {
-                __itt_mutex_init(&mutex);
-                mutex_initialized = 1;
-            }
-            else
-                while (!mutex_initialized)
-                    __itt_thread_yield();
-        }
-
-        __itt_mutex_lock(&mutex);
+        ITT_MUTEX_INIT_AND_LOCK(__itt_ittapi_global);
 #endif /* ITT_SIMPLE_INIT */
 
-        if (!ittnotify_init)
+        if (!__itt_ittapi_global.api_initialized)
         {
             if (current_thread == 0)
             {
                 current_thread = __itt_thread_id();
-                if (groups == __itt_group_none)
-                    groups = __itt_get_groups();
-                if (groups == __itt_group_none)
+                __itt_ittapi_global.thread_list->tid = current_thread;
+                if (lib_name == NULL)
+                    lib_name = __itt_get_lib_name();
+                groups = __itt_get_groups();
+                if (groups != __itt_group_none || lib_name != NULL)
                 {
-                    // Clear all pointers
-                    for (i = 0; func_map[i].name != NULL; i++ )
-                        *func_map[i].func_ptr = NULL;
-                }
-                else
-                {
-                    __itt_group_id zero_group = __itt_group_none;
-                    if (lib_name == NULL)
-                        lib_name = __itt_get_lib_name();
-                    ittnotify_lib = __itt_load_lib(lib_name);
-                    if (ittnotify_lib != NULL)
+                    __itt_ittapi_global.lib = __itt_load_lib((lib_name == NULL) ? ittnotify_lib_name : lib_name);
+                    if (__itt_ittapi_global.lib != NULL)
                     {
-                        if (__itt_is_legacy_lib(ittnotify_lib))
-                            groups = __itt_group_legacy;
+                        __itt_api_init_t* __itt_api_init_ptr;
+                        int lib_version = __itt_lib_version(__itt_ittapi_global.lib);
 
-                        for (i = 0; func_map[i].name != NULL; i++)
-                        {
-                            if (func_map[i].group & groups)
+                        switch (lib_version) {
+                        case 0:
+                            groups = __itt_group_legacy;
+                        case 1:
+                            /* Fill all pointers from dynamic library */
+                            for (i = 0; __itt_ittapi_global.api_list_ptr[i].name != NULL; i++)
                             {
-                                *func_map[i].func_ptr = (void*)__itt_get_proc(ittnotify_lib, func_map[i].name);
-                                if (*func_map[i].func_ptr == NULL)
+                                if (__itt_ittapi_global.api_list_ptr[i].group & groups & init_groups)
                                 {
-                                    __itt_report_error(__itt_error_no_symbol, lib_name, func_map[i].name );
-                                    zero_group = (__itt_group_id)(zero_group | func_map[i].group);
+                                    *__itt_ittapi_global.api_list_ptr[i].func_ptr = (void*)__itt_get_proc(__itt_ittapi_global.lib, __itt_ittapi_global.api_list_ptr[i].name);
+                                    if (*__itt_ittapi_global.api_list_ptr[i].func_ptr == NULL)
+                                    {
+                                        /* Restore pointers for function with static implementation */
+                                        *__itt_ittapi_global.api_list_ptr[i].func_ptr = __itt_ittapi_global.api_list_ptr[i].null_func;
+                                        __itt_report_error(__itt_error_no_symbol, lib_name, __itt_ittapi_global.api_list_ptr[i].name);
+#ifdef ITT_COMPLETE_GROUP
+                                        zero_group = (__itt_group_id)(zero_group | __itt_ittapi_global.api_list_ptr[i].group);
+#endif /* ITT_COMPLETE_GROUP */
+                                    }
                                 }
+                                else
+                                    *__itt_ittapi_global.api_list_ptr[i].func_ptr = __itt_ittapi_global.api_list_ptr[i].null_func;
                             }
-                            else
-                                *func_map[i].func_ptr = NULL;
-                        }
 
-                        if (groups == __itt_group_legacy)
-                        {
-                            // Compatibility with legacy tools
-                            ITTNOTIFY_NAME(sync_prepare)   = ITTNOTIFY_NAME(notify_sync_prepare);
-                            ITTNOTIFY_NAME(sync_cancel)    = ITTNOTIFY_NAME(notify_sync_cancel);
-                            ITTNOTIFY_NAME(sync_acquired)  = ITTNOTIFY_NAME(notify_sync_acquired);
-                            ITTNOTIFY_NAME(sync_releasing) = ITTNOTIFY_NAME(notify_sync_releasing);
+                            if (groups == __itt_group_legacy)
+                            {
+                                /* Compatibility with legacy tools */
+                                ITTNOTIFY_NAME(thread_ignore)  = ITTNOTIFY_NAME(thr_ignore);
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+                                ITTNOTIFY_NAME(sync_createA)   = ITTNOTIFY_NAME(sync_set_nameA);
+                                ITTNOTIFY_NAME(sync_createW)   = ITTNOTIFY_NAME(sync_set_nameW);
+#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+                                ITTNOTIFY_NAME(sync_create)    = ITTNOTIFY_NAME(sync_set_name);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+                                ITTNOTIFY_NAME(sync_prepare)   = ITTNOTIFY_NAME(notify_sync_prepare);
+                                ITTNOTIFY_NAME(sync_cancel)    = ITTNOTIFY_NAME(notify_sync_cancel);
+                                ITTNOTIFY_NAME(sync_acquired)  = ITTNOTIFY_NAME(notify_sync_acquired);
+                                ITTNOTIFY_NAME(sync_releasing) = ITTNOTIFY_NAME(notify_sync_releasing);
+                            }
+
+#ifdef ITT_COMPLETE_GROUP
+                            for (i = 0; __itt_ittapi_global.api_list_ptr[i].name != NULL; i++)
+                                if (__itt_ittapi_global.api_list_ptr[i].group & zero_group)
+                                    *__itt_ittapi_global.api_list_ptr[i].func_ptr = __itt_ittapi_global.api_list_ptr[i].null_func;
+#endif /* ITT_COMPLETE_GROUP */
+                            break;
+                        case 2:
+                            __itt_api_init_ptr = (__itt_api_init_t*)__itt_get_proc(__itt_ittapi_global.lib, "__itt_api_init");
+                            if (__itt_api_init_ptr)
+                                __itt_api_init_ptr(&__itt_ittapi_global, init_groups);
+                            break;
                         }
                     }
                     else
                     {
-                        // Clear all pointers
-                        for (i = 0; func_map[i].name != NULL; i++)
-                            *func_map[i].func_ptr = NULL;
+                        __itt_nullify_all_pointers();
 
                         __itt_report_error(__itt_error_no_module, lib_name,
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
@@ -598,40 +978,35 @@ static int _N_(init_ittlib)(const char* lib_name, __itt_group_id groups)
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
                         );
                     }
-#ifdef ITT_COMPLETE_GROUP
-                    for (i = 0; func_map[i].name != NULL; i++)
-                        if (func_map[i].group & zero_group)
-                            *func_map[i].func_ptr = NULL;
-#endif /* ITT_COMPLETE_GROUP */
-
-                    /* evaluating if any function ptr is non empty */
-                    for (i = 0; func_map[i].name != NULL; i++)
-                    {
-                        if (*func_map[i].func_ptr != NULL)
-                        {
-                            ret = 1;
-                            break;
-                        }
-                    }
                 }
-
-                ittnotify_init = 1;
+                else
+                {
+                    __itt_nullify_all_pointers();
+                }
+                __itt_ittapi_global.api_initialized = 1;
                 current_thread = 0;
+                /* !!! Just to avoid unused code elimination !!! */
+                if (__itt_fini_ittlib_ptr == _N_(fini_ittlib)) current_thread = 0;
             }
         }
 
 #ifndef ITT_SIMPLE_INIT
-        __itt_mutex_unlock(&mutex);
+        __itt_mutex_unlock(&__itt_ittapi_global.mutex);
 #endif /* ITT_SIMPLE_INIT */
     }
 
-    return ret;
+    /* Evaluating if any function ptr is non empty and it's in init_groups */
+    for (i = 0; __itt_ittapi_global.api_list_ptr[i].name != NULL; i++)
+        if (*__itt_ittapi_global.api_list_ptr[i].func_ptr != __itt_ittapi_global.api_list_ptr[i].null_func &&
+            __itt_ittapi_global.api_list_ptr[i].group & init_groups)
+            return 1;
+    return 0;
 }
 
-ITT_EXTERN_C __itt_error_notification_t* _N_(set_error_handler)(__itt_error_notification_t* handler)
+ITT_EXTERN_C __itt_error_handler_t* _N_(set_error_handler)(__itt_error_handler_t* handler)
 {
-    __itt_error_notification_t* prev = error_handler;
-    error_handler = handler;
+    __itt_error_handler_t* prev = (__itt_error_handler_t*)__itt_ittapi_global.error_handler;
+    __itt_ittapi_global.error_handler = (void*)handler;
     return prev;
 }
 
diff --git a/src/tbb/tools_api/ittnotify_static.h b/src/tbb/tools_api/ittnotify_static.h
index d7c10f2..52aad68 100644
--- a/src/tbb/tools_api/ittnotify_static.h
+++ b/src/tbb/tools_api/ittnotify_static.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,18 +28,6 @@
 
 #include "ittnotify_config.h"
 
-#ifndef ITT_STUB
-#  define ITT_STUB ITT_STUBV
-#endif /* ITT_STUB */
-
-#ifndef ITTAPI
-#  define ITTAPI CDECL
-#endif /* ITTAPI */
-
-#ifndef LIBITTAPI
-#  define LIBITTAPI /* nothing */
-#endif /* LIBITTAPI */
-
 #ifndef ITT_FORMAT_DEFINED
 #  ifndef ITT_FORMAT
 #    define ITT_FORMAT
@@ -53,7 +41,23 @@
  * parameters for macro expected:
  * ITT_STUB(api, type, func_name, arguments, params, func_name_in_dll, group, printf_fmt)
  */
-/* public */
+#ifdef __ITT_INTERNAL_INIT
+
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_domain*, domain_createA, (const char    *name), (ITT_FORMAT name), domain_createA, __itt_group_structure, "\"%s\"")
+ITT_STUB(ITTAPI, __itt_domain*, domain_createW, (const wchar_t *name), (ITT_FORMAT name), domain_createW, __itt_group_structure, "\"%S\"")
+#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_domain*, domain_create,  (const char    *name), (ITT_FORMAT name), domain_create,  __itt_group_structure, "\"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createA, (const char    *name), (ITT_FORMAT name), string_handle_createA, __itt_group_structure, "\"%s\"")
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createW, (const wchar_t *name), (ITT_FORMAT name), string_handle_createW, __itt_group_structure, "\"%S\"")
+#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_create,  (const char    *name), (ITT_FORMAT name), string_handle_create,  __itt_group_structure, "\"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
 ITT_STUBV(ITTAPI, void, pause,  (void), (ITT_NO_PARAMS), pause,  __itt_group_control | __itt_group_legacy, "no args")
 ITT_STUBV(ITTAPI, void, resume, (void), (ITT_NO_PARAMS), resume, __itt_group_control | __itt_group_legacy, "no args")
 
@@ -66,6 +70,17 @@ ITT_STUBV(ITTAPI, void, thread_set_name,  (const char    *name), (ITT_FORMAT nam
 ITT_STUBV(ITTAPI, void, thread_ignore, (void), (ITT_NO_PARAMS), thread_ignore, __itt_group_thread, "no args")
 
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(LIBITTAPI, int,  thr_name_setA, (const char    *name, int namelen), (ITT_FORMAT name, namelen), thr_name_setA, __itt_group_thread | __itt_group_legacy, "\"%s\", %d")
+ITT_STUB(LIBITTAPI, int,  thr_name_setW, (const wchar_t *name, int namelen), (ITT_FORMAT name, namelen), thr_name_setW, __itt_group_thread | __itt_group_legacy, "\"%S\", %d")
+#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUB(LIBITTAPI, int,  thr_name_set,  (const char    *name, int namelen), (ITT_FORMAT name, namelen), thr_name_set,  __itt_group_thread | __itt_group_legacy, "\"%s\", %d")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(LIBITTAPI, void, thr_ignore,   (void),                             (ITT_NO_PARAMS),            thr_ignore,    __itt_group_thread | __itt_group_legacy, "no args")
+#endif /* __ITT_INTERNAL_BODY */
+
+#else  /* __ITT_INTERNAL_INIT */
+
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
 ITT_STUBV(ITTAPI, void, sync_createA, (void *addr, const char    *objtype, const char    *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_createA, __itt_group_sync | __itt_group_fsync, "%p, \"%s\", \"%s\", %x")
 ITT_STUBV(ITTAPI, void, sync_createW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_createW, __itt_group_sync | __itt_group_fsync, "%p, \"%S\", \"%S\", %x")
 ITT_STUBV(ITTAPI, void, sync_renameA, (void *addr, const char    *name), (ITT_FORMAT addr, name), sync_renameA, __itt_group_sync | __itt_group_fsync, "%p, \"%s\"")
@@ -103,33 +118,62 @@ ITT_STUBV(ITTAPI, void, model_disable_pop,         (void),                    (I
 
 #ifndef __ITT_INTERNAL_BODY
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUB(ITTAPI, __itt_counter, counter_createA, (const char    *name, const char    *domain), (ITT_FORMAT name, domain), counter_createA, __itt_group_counter, "\"%s\", \"%s\"")
-ITT_STUB(ITTAPI, __itt_counter, counter_createW, (const wchar_t *name, const wchar_t *domain), (ITT_FORMAT name, domain), counter_createW, __itt_group_counter, "\"%s\", \"%s\"")
-#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUB(ITTAPI, __itt_counter, counter_create,  (const char    *name, const char    *domain), (ITT_FORMAT name, domain), counter_create,  __itt_group_counter, "\"%s\", \"%s\"")
+ITT_STUBV(ITTAPI, void, model_site_beginW,         (const wchar_t *name), (ITT_FORMAT name), model_site_beginW, __itt_group_model, "\"%s\"")
+ITT_STUBV(ITTAPI, void, model_task_beginW,         (const wchar_t *name), (ITT_FORMAT name), model_task_beginW, __itt_group_model, "\"%s\"")
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, model_site_beginAL,        (const char *name, size_t len), (ITT_FORMAT name, len), model_site_beginAL, __itt_group_model, "\"%s\", %d")
+ITT_STUBV(ITTAPI, void, model_task_beginAL,        (const char *name, size_t len), (ITT_FORMAT name, len), model_task_beginAL, __itt_group_model, "\"%s\", %d")
 #endif /* __ITT_INTERNAL_BODY */
-ITT_STUBV(ITTAPI, void, counter_destroy,   (__itt_counter id),                           (ITT_FORMAT id),        counter_destroy,   __itt_group_counter, "%p")
-ITT_STUBV(ITTAPI, void, counter_inc,       (__itt_counter id),                           (ITT_FORMAT id),        counter_inc,       __itt_group_counter, "%p")
-ITT_STUBV(ITTAPI, void, counter_inc_delta, (__itt_counter id, unsigned long long value), (ITT_FORMAT id, value), counter_inc_delta, __itt_group_counter, "%p, %lu")
 
 #ifndef __ITT_INTERNAL_BODY
-ITT_STUB(ITTAPI, __itt_caller, stack_caller_create,  (void),         (ITT_NO_PARAMS), stack_caller_create,  __itt_group_stitch, "no args")
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createA, (const char    *name, const char    *domain), (ITT_FORMAT name, domain), heap_function_createA, __itt_group_heap, "\"%s\", \"%s\"")
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createW, (const wchar_t *name, const wchar_t *domain), (ITT_FORMAT name, domain), heap_function_createW, __itt_group_heap, "\"%s\", \"%s\"")
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_heap_function, heap_function_create,  (const char    *name, const char    *domain), (ITT_FORMAT name, domain), heap_function_create,  __itt_group_heap, "\"%s\", \"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #endif /* __ITT_INTERNAL_BODY */
-ITT_STUBV(ITTAPI, void, stack_caller_destroy,     (__itt_caller id), (ITT_FORMAT id), stack_caller_destroy, __itt_group_stitch, "%p")
-ITT_STUBV(ITTAPI, void, stack_callee_enter,       (__itt_caller id), (ITT_FORMAT id), stack_callee_enter,   __itt_group_stitch, "%p")
-ITT_STUBV(ITTAPI, void, stack_callee_leave,       (__itt_caller id), (ITT_FORMAT id), stack_callee_leave,   __itt_group_stitch, "%p")
+ITT_STUBV(ITTAPI, void, heap_allocate_begin,   (__itt_heap_function h, size_t size, int initialized),             (ITT_FORMAT h, size, initialized),       heap_allocate_begin, __itt_group_heap, "%p, %lu, %d")
+ITT_STUBV(ITTAPI, void, heap_allocate_end,     (__itt_heap_function h, void** addr, size_t size, int initialized), (ITT_FORMAT h, addr, size, initialized), heap_allocate_end,   __itt_group_heap, "%p, %p, %lu, %d")
+ITT_STUBV(ITTAPI, void, heap_free_begin,       (__itt_heap_function h, void*  addr), (ITT_FORMAT h, addr), heap_free_begin, __itt_group_heap, "%p, %p")
+ITT_STUBV(ITTAPI, void, heap_free_end,         (__itt_heap_function h, void*  addr), (ITT_FORMAT h, addr), heap_free_end,   __itt_group_heap, "%p, %p")
+ITT_STUBV(ITTAPI, void, heap_reallocate_begin, (__itt_heap_function h, void*  addr, size_t new_size, int initialized),                  (ITT_FORMAT h, addr, new_size, initialized),           heap_reallocate_begin, __itt_group_heap, "%p, %p, %lu, %d")
+ITT_STUBV(ITTAPI, void, heap_reallocate_end,   (__itt_heap_function h, void*  addr, void** new_addr, size_t new_size, int initialized), (ITT_FORMAT h, addr, new_addr, new_size, initialized), heap_reallocate_end,   __itt_group_heap, "%p, %p, %p, %lu, %d")
+ITT_STUBV(ITTAPI, void, heap_internal_access_begin, (void), (ITT_NO_PARAMS), heap_internal_access_begin, __itt_group_heap, "no args")
+ITT_STUBV(ITTAPI, void, heap_internal_access_end,   (void), (ITT_NO_PARAMS), heap_internal_access_end,   __itt_group_heap, "no args")
+
+ITT_STUBV(ITTAPI, void, id_create,  (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), id_create,  __itt_group_structure, "%p, %lu")
+ITT_STUBV(ITTAPI, void, id_destroy, (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), id_destroy, __itt_group_structure, "%p, %lu")
+
+ITT_STUBV(ITTAPI, void, region_begin, (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), region_begin, __itt_group_structure, "%p, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, region_end,   (const __itt_domain *domain, __itt_id id),                                             (ITT_FORMAT domain, id),               region_end,   __itt_group_structure, "%p, %lu")
 
 #ifndef __ITT_INTERNAL_BODY
+ITT_STUBV(ITTAPI, void, frame_begin_v3, (const __itt_domain *domain, __itt_id *id), (ITT_FORMAT domain, id), frame_begin_v3, __itt_group_structure, "%p, %p")
+ITT_STUBV(ITTAPI, void, frame_end_v3,   (const __itt_domain *domain, __itt_id *id), (ITT_FORMAT domain, id), frame_end_v3,   __itt_group_structure, "%p, %p")
+#endif /* __ITT_INTERNAL_BODY */
+
+ITT_STUBV(ITTAPI, void, task_group,   (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), task_group,  __itt_group_structure, "%p, %lu, %lu, %p")
+
+ITT_STUBV(ITTAPI, void, task_begin,    (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), task_begin,    __itt_group_structure, "%p, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_begin_fn, (const __itt_domain *domain, __itt_id id, __itt_id parent, void* fn),                  (ITT_FORMAT domain, id, parent, fn),   task_begin_fn, __itt_group_structure, "%p, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_end,      (const __itt_domain *domain),                                                          (ITT_FORMAT domain),                   task_end,      __itt_group_structure, "%p")
+
+ITT_STUBV(ITTAPI, void, counter_inc_v3,       (const __itt_domain *domain, __itt_string_handle *name),                           (ITT_FORMAT domain, name),        counter_inc_v3,       __itt_group_structure, "%p, %p")
+ITT_STUBV(ITTAPI, void, counter_inc_delta_v3, (const __itt_domain *domain, __itt_string_handle *name, unsigned long long value), (ITT_FORMAT domain, name, value), counter_inc_delta_v3, __itt_group_structure, "%p, %p, %lu")
+
+ITT_STUBV(ITTAPI, void, marker, (const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope), (ITT_FORMAT domain, id, name, scope), marker, __itt_group_structure, "%p, %lu, %p, %d")
+
+ITT_STUBV(ITTAPI, void, metadata_add,      (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data), (ITT_FORMAT domain, id, key, type, count, data), metadata_add, __itt_group_structure, "%p, %lu, %p, %d, %lu, %p")
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUB(ITTAPI, __itt_frame, frame_createA, (const char    *domain), (ITT_FORMAT domain), frame_createA, __itt_group_frame, "\"%s\"")
-ITT_STUB(ITTAPI, __itt_frame, frame_createW, (const wchar_t *domain), (ITT_FORMAT domain), frame_createW, __itt_group_frame, "\"%s\"")
-#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUB(ITTAPI, __itt_frame, frame_create,  (const char    *domain), (ITT_FORMAT domain), frame_create,  __itt_group_frame, "\"%s\"")
+ITT_STUBV(ITTAPI, void, metadata_str_addA, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char* data, size_t length),    (ITT_FORMAT domain, id, key, data, length), metadata_str_addA, __itt_group_structure, "%p, %lu, %p, %p, %lu")
+ITT_STUBV(ITTAPI, void, metadata_str_addW, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t* data, size_t length), (ITT_FORMAT domain, id, key, data, length), metadata_str_addW, __itt_group_structure, "%p, %lu, %p, %p, %lu")
+#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, metadata_str_add,  (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char* data, size_t length),    (ITT_FORMAT domain, id, key, data, length), metadata_str_add,  __itt_group_structure, "%p, %lu, %p, %p, %lu")
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* __ITT_INTERNAL_BODY */
-ITT_STUBV(ITTAPI, void, frame_begin,         (__itt_frame frame),     (ITT_FORMAT frame),  frame_begin,   __itt_group_frame, "%p")
-ITT_STUBV(ITTAPI, void, frame_end,           (__itt_frame frame),     (ITT_FORMAT frame),  frame_end,     __itt_group_frame, "%p")
+
+ITT_STUBV(ITTAPI, void, relation_add_to_current, (const __itt_domain *domain, __itt_relation relation, __itt_id tail),                (ITT_FORMAT domain, relation, tail),       relation_add_to_current, __itt_group_structure, "%p, %lu, %p")
+ITT_STUBV(ITTAPI, void, relation_add,            (const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, head, relation, tail), relation_add,            __itt_group_structure, "%p, %p, %lu, %p")
 
 #ifndef __ITT_INTERNAL_BODY
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
@@ -144,32 +188,6 @@ ITT_STUB(LIBITTAPI, int,  event_end,            (__itt_event event),
 
 #ifndef __ITT_INTERNAL_BODY
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createA, (const char    *name, const char    *domain), (ITT_FORMAT name, domain), heap_function_createA, __itt_group_heap, "\"%s\", \"%s\"")
-ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createW, (const wchar_t *name, const wchar_t *domain), (ITT_FORMAT name, domain), heap_function_createW, __itt_group_heap, "\"%s\", \"%s\"")
-#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUB(ITTAPI, __itt_heap_function, heap_function_create,  (const char    *name, const char    *domain), (ITT_FORMAT name, domain), heap_function_create,  __itt_group_heap, "\"%s\", \"%s\"")
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#endif /* __ITT_INTERNAL_BODY */
-ITT_STUBV(ITTAPI, void, heap_allocate_begin,   (__itt_heap_function h, size_t size, int initialized),             (ITT_FORMAT h, size, initialized),       heap_allocate_begin, __itt_group_heap, "%p, %lu, %d")
-ITT_STUBV(ITTAPI, void, heap_allocate_end,     (__itt_heap_function h, void* addr, size_t size, int initialized), (ITT_FORMAT h, addr, size, initialized), heap_allocate_end,   __itt_group_heap, "%p, %p, %lu, %d")
-ITT_STUBV(ITTAPI, void, heap_free_begin,       (__itt_heap_function h, void* addr), (ITT_FORMAT h, addr), heap_free_begin, __itt_group_heap, "%p, %p")
-ITT_STUBV(ITTAPI, void, heap_free_end,         (__itt_heap_function h, void* addr), (ITT_FORMAT h, addr), heap_free_end,   __itt_group_heap, "%p, %p")
-ITT_STUBV(ITTAPI, void, heap_reallocate_begin, (__itt_heap_function h, void* addr, size_t new_size, int initialized),                 (ITT_FORMAT h, addr, new_size, initialized),           heap_reallocate_begin, __itt_group_heap, "%p, %p, %lu, %d")
-ITT_STUBV(ITTAPI, void, heap_reallocate_end,   (__itt_heap_function h, void* addr, void* new_addr, size_t new_size, int initialized), (ITT_FORMAT h, addr, new_addr, new_size, initialized), heap_reallocate_end,   __itt_group_heap, "%p, %p, %p, %lu, %d")
-ITT_STUBV(ITTAPI, void, heap_internal_access_begin, (void), (ITT_NO_PARAMS), heap_internal_access_begin, __itt_group_heap, "no args")
-ITT_STUBV(ITTAPI, void, heap_internal_access_end,   (void), (ITT_NO_PARAMS), heap_internal_access_end,   __itt_group_heap, "no args")
-
-/* legacy */
-#ifndef __ITT_INTERNAL_BODY
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUB(LIBITTAPI, int,  thr_name_setA, (const char    *name, int namelen), (ITT_FORMAT name, namelen), thr_name_setA, __itt_group_thread | __itt_group_legacy, "\"%s\", %d")
-ITT_STUB(LIBITTAPI, int,  thr_name_setW, (const wchar_t *name, int namelen), (ITT_FORMAT name, namelen), thr_name_setW, __itt_group_thread | __itt_group_legacy, "\"%S\", %d")
-#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
-ITT_STUB(LIBITTAPI, int,  thr_name_set,  (const char    *name, int namelen), (ITT_FORMAT name, namelen), thr_name_set,  __itt_group_thread | __itt_group_legacy, "\"%s\", %d")
-#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUBV(LIBITTAPI, void, thr_ignore,   (void),                             (ITT_NO_PARAMS),            thr_ignore,    __itt_group_thread | __itt_group_legacy, "no args")
-
-#if ITT_PLATFORM==ITT_PLATFORM_WIN
 ITT_STUBV(ITTAPI, void, sync_set_nameA, (void *addr, const char    *objtype, const char    *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_set_nameA, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%s\", \"%s\", %x")
 ITT_STUBV(ITTAPI, void, sync_set_nameW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_set_nameW, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%S\", \"%S\", %x")
 #else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
@@ -198,7 +216,29 @@ ITT_STUB(LIBITTAPI, __itt_state_t,     state_set,    (__itt_state_t s),
 ITT_STUB(LIBITTAPI, __itt_obj_state_t, obj_mode_set, (__itt_obj_prop_t p, __itt_obj_state_t s), (ITT_FORMAT p, s), obj_mode_set, __itt_group_legacy, "%d, %d")
 ITT_STUB(LIBITTAPI, __itt_thr_state_t, thr_mode_set, (__itt_thr_prop_t p, __itt_thr_state_t s), (ITT_FORMAT p, s), thr_mode_set, __itt_group_legacy, "%d, %d")
 
-/* internal */
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_frame, frame_createA, (const char    *domain), (ITT_FORMAT domain), frame_createA, __itt_group_frame, "\"%s\"")
+ITT_STUB(ITTAPI, __itt_frame, frame_createW, (const wchar_t *domain), (ITT_FORMAT domain), frame_createW, __itt_group_frame, "\"%s\"")
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_frame, frame_create,  (const char    *domain), (ITT_FORMAT domain), frame_create,  __itt_group_frame, "\"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* __ITT_INTERNAL_BODY */
+ITT_STUBV(ITTAPI, void, frame_begin,         (__itt_frame frame),     (ITT_FORMAT frame),  frame_begin,   __itt_group_frame, "%p")
+ITT_STUBV(ITTAPI, void, frame_end,           (__itt_frame frame),     (ITT_FORMAT frame),  frame_end,     __itt_group_frame, "%p")
+
+#ifndef __ITT_INTERNAL_BODY
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_counter, counter_createA, (const char    *name, const char    *domain), (ITT_FORMAT name, domain), counter_createA, __itt_group_counter, "\"%s\", \"%s\"")
+ITT_STUB(ITTAPI, __itt_counter, counter_createW, (const wchar_t *name, const wchar_t *domain), (ITT_FORMAT name, domain), counter_createW, __itt_group_counter, "\"%s\", \"%s\"")
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_counter, counter_create,  (const char    *name, const char    *domain), (ITT_FORMAT name, domain), counter_create,  __itt_group_counter, "\"%s\", \"%s\"")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* __ITT_INTERNAL_BODY */
+ITT_STUBV(ITTAPI, void, counter_destroy,   (__itt_counter id),                           (ITT_FORMAT id),        counter_destroy,   __itt_group_counter, "%p")
+ITT_STUBV(ITTAPI, void, counter_inc,       (__itt_counter id),                           (ITT_FORMAT id),        counter_inc,       __itt_group_counter, "%p")
+ITT_STUBV(ITTAPI, void, counter_inc_delta, (__itt_counter id, unsigned long long value), (ITT_FORMAT id, value), counter_inc_delta, __itt_group_counter, "%p, %lu")
+
 #ifndef __ITT_INTERNAL_BODY
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 ITT_STUB(ITTAPI, __itt_mark_type, mark_createA, (const char    *name), (ITT_FORMAT name), mark_createA, __itt_group_mark, "\"%s\"")
@@ -222,10 +262,40 @@ ITT_STUB(ITTAPI, int,  mark_global,  (__itt_mark_type mt, const char    *paramet
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 ITT_STUB(ITTAPI, int,  mark_global_off, (__itt_mark_type mt),                        (ITT_FORMAT mt),            mark_global_off, __itt_group_mark, "%d")
 
-/* prototype */
-/* empty so far */
+#ifndef __ITT_INTERNAL_BODY
+ITT_STUB(ITTAPI, __itt_caller, stack_caller_create, (void), (ITT_NO_PARAMS), stack_caller_create,  __itt_group_stitch, "no args")
+#endif /* __ITT_INTERNAL_BODY */
+ITT_STUBV(ITTAPI, void, stack_caller_destroy, (__itt_caller id), (ITT_FORMAT id), stack_caller_destroy, __itt_group_stitch, "%p")
+ITT_STUBV(ITTAPI, void, stack_callee_enter,   (__itt_caller id), (ITT_FORMAT id), stack_callee_enter,   __itt_group_stitch, "%p")
+ITT_STUBV(ITTAPI, void, stack_callee_leave,   (__itt_caller id), (ITT_FORMAT id), stack_callee_leave,   __itt_group_stitch, "%p")
+
+ITT_STUB(ITTAPI,  __itt_clock_domain*, clock_domain_create, (__itt_get_clock_info_fn fn, void* fn_data), (ITT_FORMAT fn, fn_data), clock_domain_create, __itt_group_structure, "%p, %p")
+ITT_STUBV(ITTAPI, void,                clock_domain_reset,  (void),                                      (ITT_NO_PARAMS),          clock_domain_reset,  __itt_group_structure, "no args")
+ITT_STUBV(ITTAPI, void, id_create_ex,  (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id), (ITT_FORMAT domain, clock_domain, timestamp, id), id_create_ex,  __itt_group_structure, "%p, %p, %lu, %lu")
+ITT_STUBV(ITTAPI, void, id_destroy_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id), (ITT_FORMAT domain, clock_domain, timestamp, id), id_destroy_ex, __itt_group_structure, "%p, %p, %lu, %lu")
+ITT_STUBV(ITTAPI, void, task_begin_ex,    (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name), (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, name), task_begin_ex, __itt_group_structure, "%p, %p, %lu, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_begin_fn_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, void* fn),                  (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, fn), task_begin_fn_ex, __itt_group_structure, "%p, %p, %lu, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_end_ex,      (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp),                                                            (ITT_FORMAT domain, clock_domain, timestamp), task_end_ex, __itt_group_structure, "%p, %p, %lu")
+ITT_STUBV(ITTAPI, void, task_begin_overlapped,       (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name),                                                                   (ITT_FORMAT domain, id, parent, name), task_begin_overlapped, __itt_group_structure, "%p, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_begin_overlapped_ex,    (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name), (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, name), task_begin_overlapped_ex, __itt_group_structure, "%p, %p, %lu, %lu, %lu, %p")
+ITT_STUBV(ITTAPI, void, task_end_overlapped, (const __itt_domain *domain, __itt_id id),                                                                                                                       (ITT_FORMAT domain, id), task_end_overlapped, __itt_group_structure, "%p, %lu")
+ITT_STUBV(ITTAPI, void, task_end_overlapped_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id),                                                    (ITT_FORMAT domain, clock_domain, timestamp, id), task_end_overlapped_ex, __itt_group_structure, "%p, %p, %lu, %lu")
+ITT_STUBV(ITTAPI, void, marker_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope), (ITT_FORMAT domain, clock_domain, timestamp, id, name, scope), marker_ex, __itt_group_structure, "%p, %p, %lu, %lu, %p, %d")
+ITT_STUBV(ITTAPI, void, metadata_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data), (ITT_FORMAT domain, scope, key, type, count, data), metadata_add_with_scope, __itt_group_structure, "%p, %d, %p, %d, %lu, %p")
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeA, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length),    (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scopeA, __itt_group_structure, "%p, %d, %p, %p, %lu")
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeW, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length), (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scopeW, __itt_group_structure, "%p, %d, %p, %p, %lu")
+#else  /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, metadata_str_add_with_scope,  (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length),    (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scope,  __itt_group_structure, "%p, %d, %p, %p, %lu")
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUBV(ITTAPI, void, relation_add_to_current_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail),                (ITT_FORMAT domain, clock_domain, timestamp, relation, tail),       relation_add_to_current_ex, __itt_group_structure, "%p, %p, %lu, %d, %lu")
+ITT_STUBV(ITTAPI, void, relation_add_ex,            (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, clock_domain, timestamp, head, relation, tail), relation_add_ex,            __itt_group_structure, "%p, %p, %lu, %lu, %d, %lu")
+ITT_STUB(ITTAPI,  __itt_track_group*, track_group_create, (__itt_string_handle* name, __itt_track_group_type track_group_type),                    (ITT_FORMAT name, track_group_type),        track_group_create, __itt_group_structure, "%p, %d")
+ITT_STUB(ITTAPI,  __itt_track*,       track_create,       (__itt_track_group* track_group,__itt_string_handle* name, __itt_track_type track_type), (ITT_FORMAT track_group, name, track_type), track_create,       __itt_group_structure, "%p, %p, %d")
+ITT_STUBV(ITTAPI, void,               set_track,          (__itt_track *track),                                                                    (ITT_FORMAT track),                         set_track,          __itt_group_structure, "%p")
 
-/* hidden */
 #ifndef __ITT_INTERNAL_BODY
 ITT_STUB(ITTAPI, const char*, api_version, (void), (ITT_NO_PARAMS), api_version, __itt_group_all & ~__itt_group_legacy, "no args")
 #endif /* __ITT_INTERNAL_BODY */
+
+#endif /* __ITT_INTERNAL_INIT */
diff --git a/src/tbb/tools_api/ittnotify_types.h b/src/tbb/tools_api/ittnotify_types.h
index f971cbc..f33d6ac 100644
--- a/src/tbb/tools_api/ittnotify_types.h
+++ b/src/tbb/tools_api/ittnotify_types.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,47 +29,53 @@
 #ifndef _ITTNOTIFY_TYPES_H_
 #define _ITTNOTIFY_TYPES_H_
 
-typedef enum __itt_group_id_
+typedef enum ___itt_group_id
 {
-    __itt_group_none    = 0,
-    __itt_group_legacy  = 1<<0,
-    __itt_group_control = 1<<1,
-    __itt_group_thread  = 1<<2,
-    __itt_group_mark    = 1<<3,
-    __itt_group_sync    = 1<<4,
-    __itt_group_fsync   = 1<<5,
-    __itt_group_jit     = 1<<6,
-    __itt_group_model   = 1<<7,
-    __itt_group_splitter= 1<<7,
-//-----------------------------
-    __itt_group_counter = 1<<8,
-    __itt_group_frame   = 1<<9,
-    __itt_group_stitch  = 1<<10,
-    __itt_group_heap    = 1<<11,
-    __itt_group_all     = -1
+    __itt_group_none      = 0,
+    __itt_group_legacy    = 1<<0,
+    __itt_group_control   = 1<<1,
+    __itt_group_thread    = 1<<2,
+    __itt_group_mark      = 1<<3,
+    __itt_group_sync      = 1<<4,
+    __itt_group_fsync     = 1<<5,
+    __itt_group_jit       = 1<<6,
+    __itt_group_model     = 1<<7,
+    __itt_group_splitter_min = 1<<7,
+    __itt_group_counter   = 1<<8,
+    __itt_group_frame     = 1<<9,
+    __itt_group_stitch    = 1<<10,
+    __itt_group_heap      = 1<<11,
+    __itt_group_splitter_max = 1<<12,
+    __itt_group_structure = 1<<12,
+    __itt_group_all       = -1
 } __itt_group_id;
 
-typedef struct __itt_group_list_
+#pragma pack(push, 8)
+
+typedef struct ___itt_group_list
 {
     __itt_group_id id;
     const char*    name;
 } __itt_group_list;
 
+#pragma pack(pop)
+
 #define ITT_GROUP_LIST(varname) \
-    static __itt_group_list varname[] = {   \
-        { __itt_group_all,     "all"     }, \
-        { __itt_group_control, "control" }, \
-        { __itt_group_thread,  "thread"  }, \
-        { __itt_group_mark,    "mark"    }, \
-        { __itt_group_sync,    "sync"    }, \
-        { __itt_group_fsync,   "fsync"   }, \
-        { __itt_group_jit,     "jit"     }, \
-        { __itt_group_model,   "model"   }, \
-        { __itt_group_counter, "counter" }, \
-        { __itt_group_frame,   "frame"   }, \
-        { __itt_group_stitch,  "stitch"  }, \
-        { __itt_group_heap,    "heap"    }, \
-        { __itt_group_none,    NULL      }  \
+    static __itt_group_list varname[] = {       \
+        { __itt_group_all,       "all"       }, \
+        { __itt_group_control,   "control"   }, \
+        { __itt_group_thread,    "thread"    }, \
+        { __itt_group_mark,      "mark"      }, \
+        { __itt_group_sync,      "sync"      }, \
+        { __itt_group_fsync,     "fsync"     }, \
+        { __itt_group_jit,       "jit"       }, \
+        { __itt_group_model,     "model"     }, \
+        { __itt_group_counter,   "counter"   }, \
+        { __itt_group_frame,     "frame"     }, \
+        { __itt_group_stitch,    "stitch"    }, \
+        { __itt_group_heap,      "heap"      }, \
+        { __itt_group_structure, "structure" }, \
+        { __itt_group_none,      NULL        }  \
     }
 
 #endif /* _ITTNOTIFY_TYPES_H_ */
diff --git a/src/tbb/tools_api/legacy/ittnotify.h b/src/tbb/tools_api/legacy/ittnotify.h
index b8808cd..b0dde48 100644
--- a/src/tbb/tools_api/legacy/ittnotify.h
+++ b/src/tbb/tools_api/legacy/ittnotify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,6 +28,7 @@
 
 #ifndef _LEGACY_ITTNOTIFY_H_
 #define _LEGACY_ITTNOTIFY_H_
+
 /**
  * @file
  * @brief Legacy User API functions and types
@@ -72,17 +73,29 @@
 #  endif /* _WIN32 */
 #endif /* ITT_PLATFORM */
 
+#if defined(_UNICODE) && !defined(UNICODE)
+#define UNICODE
+#endif
+
 #include <stddef.h>
-#include <stdarg.h>
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #include <tchar.h>
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#include <stdint.h>
+#if defined(UNICODE) || defined(_UNICODE)
+#include <wchar.h>
+#endif /* UNICODE || _UNICODE */
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 
 #ifndef CDECL
 #  if ITT_PLATFORM==ITT_PLATFORM_WIN
 #    define CDECL __cdecl
 #  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#    define CDECL /* nothing */
+#    if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
+#      define CDECL /* not actual on x86_64 platform */
+#    else  /* _M_X64 || _M_AMD64 || __x86_64__ */
+#      define CDECL __attribute__ ((cdecl))
+#    endif /* _M_X64 || _M_AMD64 || __x86_64__ */
 #  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #endif /* CDECL */
 
@@ -90,16 +103,61 @@
 #  if ITT_PLATFORM==ITT_PLATFORM_WIN
 #    define STDCALL __stdcall
 #  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-#    define STDCALL /* nothing */
+#    if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
+#      define STDCALL /* not supported on x86_64 platform */
+#    else  /* _M_X64 || _M_AMD64 || __x86_64__ */
+#      define STDCALL __attribute__ ((stdcall))
+#    endif /* _M_X64 || _M_AMD64 || __x86_64__ */
 #  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #endif /* STDCALL */
 
 #define ITTAPI    CDECL
-#define LIBITTAPI /* nothing */
+#define LIBITTAPI CDECL
+
+/* TODO: Temporary for compatibility! */
+#define ITTAPI_CALL    CDECL
+#define LIBITTAPI_CALL CDECL
 
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+/* use __forceinline (VC++ specific) */
+#define INLINE           __forceinline
+#define INLINE_ATTRIBUTE /* nothing */
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/*
+ * Generally, functions are not inlined unless optimization is specified.
+ * For functions declared inline, this attribute inlines the function even
+ * if no optimization level was specified.
+ */
+#ifdef __STRICT_ANSI__
+#define INLINE           static
+#else  /* __STRICT_ANSI__ */
+#define INLINE           static inline
+#endif /* __STRICT_ANSI__ */
+#define INLINE_ATTRIBUTE __attribute__ ((always_inline))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+/** @endcond */
+
+/** @cond exclude_from_documentation */
+/* Helper macro for joining tokens */
 #define ITT_JOIN_AUX(p,n) p##n
 #define ITT_JOIN(p,n)     ITT_JOIN_AUX(p,n)
 
+#ifdef ITT_MAJOR
+#undef ITT_MAJOR
+#endif
+#ifdef ITT_MINOR
+#undef ITT_MINOR
+#endif
+#define ITT_MAJOR     3
+#define ITT_MINOR     0
+
+/* Standard versioning of a token with major and minor version numbers */
+#define ITT_VERSIONIZE(x)    \
+    ITT_JOIN(x,              \
+    ITT_JOIN(_,              \
+    ITT_JOIN(ITT_MAJOR,      \
+    ITT_JOIN(_, ITT_MINOR))))
+
 #ifndef INTEL_ITTNOTIFY_PREFIX
 #  define INTEL_ITTNOTIFY_PREFIX __itt_
 #endif /* INTEL_ITTNOTIFY_PREFIX */
@@ -108,26 +166,41 @@
 #endif /* INTEL_ITTNOTIFY_POSTFIX */
 
 #define ITTNOTIFY_NAME_AUX(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n)
-#define ITTNOTIFY_NAME(n)     ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX))
+#define ITTNOTIFY_NAME(n)     ITT_VERSIONIZE(ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX)))
 
 #define ITTNOTIFY_VOID(n) (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)
 #define ITTNOTIFY_DATA(n) (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)
 
+#define ITTNOTIFY_VOID_D0(n,d)       (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d)
+#define ITTNOTIFY_VOID_D1(n,d,x)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x)
+#define ITTNOTIFY_VOID_D2(n,d,x,y)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y)
+#define ITTNOTIFY_VOID_D3(n,d,x,y,z) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z)
+#define ITTNOTIFY_VOID_D4(n,d,x,y,z,a)     (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
+#define ITTNOTIFY_VOID_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
+#define ITTNOTIFY_VOID_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
+#define ITTNOTIFY_DATA_D0(n,d)       (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d)
+#define ITTNOTIFY_DATA_D1(n,d,x)     (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x)
+#define ITTNOTIFY_DATA_D2(n,d,x,y)   (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y)
+#define ITTNOTIFY_DATA_D3(n,d,x,y,z) (!(d)->flags) ?       0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z)
+#define ITTNOTIFY_DATA_D4(n,d,x,y,z,a)     (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
+#define ITTNOTIFY_DATA_D5(n,d,x,y,z,a,b)   (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
+#define ITTNOTIFY_DATA_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ?       0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
+
 #ifdef ITT_STUB
 #undef ITT_STUB
 #endif
 #ifdef ITT_STUBV
 #undef ITT_STUBV
 #endif
-#define ITT_STUBV(api,type,name,args,params)                      \
+#define ITT_STUBV(api,type,name,args)                             \
     typedef type (api* ITT_JOIN(ITTNOTIFY_NAME(name),_t)) args;   \
     extern ITT_JOIN(ITTNOTIFY_NAME(name),_t) ITTNOTIFY_NAME(name);
 #define ITT_STUB ITT_STUBV
+/** @endcond */
 
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
-/** @endcond */
 
 /**
  * @defgroup legacy Legacy API
@@ -141,13 +214,14 @@ extern "C" {
  * General behavior: application continues to run, but no profiling information is being collected
  *
  * Pausing occurs not only for the current thread but for all process as well as spawned processes
- * - Intel(R) Parallel Inspector:
+ * - Intel(R) Parallel Inspector and Intel(R) Inspector XE:
  *   - Does not analyze or report errors that involve memory access.
  *   - Other errors are reported as usual. Pausing data collection in
- *     Intel(R) Parallel Inspector only pauses tracing and analyzing
- *     memory access. It does not pause tracing or analyzing threading APIs.
+ *     Intel(R) Parallel Inspector and Intel(R) Inspector XE
+ *     only pauses tracing and analyzing memory access.
+ *     It does not pause tracing or analyzing threading APIs.
  *   .
- * - Intel(R) Parallel Amplifier:
+ * - Intel(R) Parallel Amplifier and Intel(R) VTune(TM) Amplifier XE:
  *   - Does continue to record when new threads are started.
  *   .
  * - Other effects:
@@ -164,8 +238,8 @@ void ITTAPI __itt_resume(void);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(ITTAPI, void, pause,   (void), ())
-ITT_STUBV(ITTAPI, void, resume,  (void), ())
+ITT_STUBV(ITTAPI, void, pause,   (void))
+ITT_STUBV(ITTAPI, void, resume,  (void))
 #define __itt_pause      ITTNOTIFY_VOID(pause)
 #define __itt_pause_ptr  ITTNOTIFY_NAME(pause)
 #define __itt_resume     ITTNOTIFY_VOID(resume)
@@ -199,7 +273,7 @@ ITT_STUBV(ITTAPI, void, resume,  (void), ())
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 int LIBITTAPI __itt_thr_name_setA(const char    *name, int namelen);
 int LIBITTAPI __itt_thr_name_setW(const wchar_t *name, int namelen);
-#ifdef UNICODE
+#if defined(UNICODE) || defined(_UNICODE)
 #  define __itt_thr_name_set     __itt_thr_name_setW
 #  define __itt_thr_name_set_ptr __itt_thr_name_setW_ptr
 #else
@@ -214,10 +288,10 @@ int LIBITTAPI __itt_thr_name_set(const char *name, int namelen);
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUB(LIBITTAPI, int, thr_name_setA, (const char    *name, int namelen), (name, namelen))
-ITT_STUB(LIBITTAPI, int, thr_name_setW, (const wchar_t *name, int namelen), (name, namelen))
+ITT_STUB(LIBITTAPI, int, thr_name_setA, (const char    *name, int namelen))
+ITT_STUB(LIBITTAPI, int, thr_name_setW, (const wchar_t *name, int namelen))
 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUB(LIBITTAPI, int, thr_name_set,  (const char    *name, int namelen), (name, namelen))
+ITT_STUB(LIBITTAPI, int, thr_name_set,  (const char    *name, int namelen))
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #define __itt_thr_name_setA     ITTNOTIFY_DATA(thr_name_setA)
@@ -258,7 +332,7 @@ void LIBITTAPI __itt_thr_ignore(void);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(LIBITTAPI, void, thr_ignore, (void), ())
+ITT_STUBV(LIBITTAPI, void, thr_ignore, (void))
 #define __itt_thr_ignore     ITTNOTIFY_VOID(thr_ignore)
 #define __itt_thr_ignore_ptr ITTNOTIFY_NAME(thr_ignore)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -306,7 +380,7 @@ ITT_STUBV(LIBITTAPI, void, thr_ignore, (void), ())
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 void ITTAPI __itt_sync_set_nameA(void *addr, const char    *objtype, const char    *objname, int attribute);
 void ITTAPI __itt_sync_set_nameW(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute);
-#ifdef UNICODE
+#if defined(UNICODE) || defined(_UNICODE)
 #  define __itt_sync_set_name     __itt_sync_set_nameW
 #  define __itt_sync_set_name_ptr __itt_sync_set_nameW_ptr
 #else /* UNICODE */
@@ -321,10 +395,10 @@ void ITTAPI __itt_sync_set_name(void *addr, const char* objtype, const char* obj
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUBV(ITTAPI, void, sync_set_nameA, (void *addr, const char    *objtype, const char    *objname, int attribute), (addr, objtype, objname, attribute))
-ITT_STUBV(ITTAPI, void, sync_set_nameW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (addr, objtype, objname, attribute))
+ITT_STUBV(ITTAPI, void, sync_set_nameA, (void *addr, const char    *objtype, const char    *objname, int attribute))
+ITT_STUBV(ITTAPI, void, sync_set_nameW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute))
 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUBV(ITTAPI, void, sync_set_name,  (void *addr, const char    *objtype, const char    *objname, int attribute), (addr, objtype, objname, attribute))
+ITT_STUBV(ITTAPI, void, sync_set_name,  (void *addr, const char    *objtype, const char    *objname, int attribute))
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #define __itt_sync_set_nameA     ITTNOTIFY_VOID(sync_set_nameA)
@@ -374,7 +448,7 @@ ITT_STUBV(ITTAPI, void, sync_set_name,  (void *addr, const char    *objtype, con
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 int LIBITTAPI __itt_notify_sync_nameA(void *addr, const char    *objtype, int typelen, const char    *objname, int namelen, int attribute);
 int LIBITTAPI __itt_notify_sync_nameW(void *addr, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute);
-#ifdef UNICODE
+#if defined(UNICODE) || defined(_UNICODE)
 #  define __itt_notify_sync_name __itt_notify_sync_nameW
 #else
 #  define __itt_notify_sync_name __itt_notify_sync_nameA
@@ -387,10 +461,10 @@ int LIBITTAPI __itt_notify_sync_name(void *addr, const char *objtype, int typele
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUB(LIBITTAPI, int, notify_sync_nameA, (void *addr, const char    *objtype, int typelen, const char    *objname, int namelen, int attribute), (addr, objtype, typelen, objname, namelen, attribute))
-ITT_STUB(LIBITTAPI, int, notify_sync_nameW, (void *addr, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute), (addr, objtype, typelen, objname, namelen, attribute))
+ITT_STUB(LIBITTAPI, int, notify_sync_nameA, (void *addr, const char    *objtype, int typelen, const char    *objname, int namelen, int attribute))
+ITT_STUB(LIBITTAPI, int, notify_sync_nameW, (void *addr, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute))
 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUB(LIBITTAPI, int, notify_sync_name,  (void *addr, const char    *objtype, int typelen, const char    *objname, int namelen, int attribute), (addr, objtype, typelen, objname, namelen, attribute))
+ITT_STUB(LIBITTAPI, int, notify_sync_name,  (void *addr, const char    *objtype, int typelen, const char    *objname, int namelen, int attribute))
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #define __itt_notify_sync_nameA     ITTNOTIFY_DATA(notify_sync_nameA)
@@ -431,7 +505,7 @@ void LIBITTAPI __itt_notify_sync_prepare(void* addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(LIBITTAPI, void, notify_sync_prepare, (void *addr), (addr))
+ITT_STUBV(LIBITTAPI, void, notify_sync_prepare, (void *addr))
 #define __itt_notify_sync_prepare     ITTNOTIFY_VOID(notify_sync_prepare)
 #define __itt_notify_sync_prepare_ptr ITTNOTIFY_NAME(notify_sync_prepare)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -452,7 +526,7 @@ void LIBITTAPI __itt_notify_sync_cancel(void *addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(LIBITTAPI, void, notify_sync_cancel, (void *addr), (addr))
+ITT_STUBV(LIBITTAPI, void, notify_sync_cancel, (void *addr))
 #define __itt_notify_sync_cancel     ITTNOTIFY_VOID(notify_sync_cancel)
 #define __itt_notify_sync_cancel_ptr ITTNOTIFY_NAME(notify_sync_cancel)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -473,7 +547,7 @@ void LIBITTAPI __itt_notify_sync_acquired(void *addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(LIBITTAPI, void, notify_sync_acquired, (void *addr), (addr))
+ITT_STUBV(LIBITTAPI, void, notify_sync_acquired, (void *addr))
 #define __itt_notify_sync_acquired     ITTNOTIFY_VOID(notify_sync_acquired)
 #define __itt_notify_sync_acquired_ptr ITTNOTIFY_NAME(notify_sync_acquired)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -494,7 +568,7 @@ void LIBITTAPI __itt_notify_sync_releasing(void* addr);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(LIBITTAPI, void, notify_sync_releasing, (void *addr), (addr))
+ITT_STUBV(LIBITTAPI, void, notify_sync_releasing, (void *addr))
 #define __itt_notify_sync_releasing     ITTNOTIFY_VOID(notify_sync_releasing)
 #define __itt_notify_sync_releasing_ptr ITTNOTIFY_NAME(notify_sync_releasing)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -526,7 +600,7 @@ typedef int __itt_event;
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 __itt_event LIBITTAPI __itt_event_createA(const char    *name, int namelen);
 __itt_event LIBITTAPI __itt_event_createW(const wchar_t *name, int namelen);
-#ifdef UNICODE
+#if defined(UNICODE) || defined(_UNICODE)
 #  define __itt_event_create     __itt_event_createW
 #  define __itt_event_create_ptr __itt_event_createW_ptr
 #else
@@ -541,10 +615,10 @@ __itt_event LIBITTAPI __itt_event_create(const char *name, int namelen);
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
-ITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char    *name, int namelen), (name, namelen))
-ITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen), (name, namelen))
+ITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char    *name, int namelen))
+ITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen))
 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
-ITT_STUB(LIBITTAPI, __itt_event, event_create,  (const char *name, int namelen), (name, namelen))
+ITT_STUB(LIBITTAPI, __itt_event, event_create,  (const char *name, int namelen))
 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
 #if ITT_PLATFORM==ITT_PLATFORM_WIN
 #define __itt_event_createA     ITTNOTIFY_DATA(event_createA)
@@ -585,7 +659,7 @@ int LIBITTAPI __itt_event_start(__itt_event event);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUB(LIBITTAPI, int, event_start, (__itt_event event), (event))
+ITT_STUB(LIBITTAPI, int, event_start, (__itt_event event))
 #define __itt_event_start     ITTNOTIFY_DATA(event_start)
 #define __itt_event_start_ptr ITTNOTIFY_NAME(event_start)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -607,7 +681,7 @@ int LIBITTAPI __itt_event_end(__itt_event event);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event), (event))
+ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event))
 #define __itt_event_end     ITTNOTIFY_DATA(event_end)
 #define __itt_event_end_ptr ITTNOTIFY_NAME(event_end)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -635,7 +709,7 @@ void LIBITTAPI __itt_memory_read(void *addr, size_t size);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(LIBITTAPI, void, memory_read, (void *addr, size_t size), (addr, size))
+ITT_STUBV(LIBITTAPI, void, memory_read, (void *addr, size_t size))
 #define __itt_memory_read     ITTNOTIFY_VOID(memory_read)
 #define __itt_memory_read_ptr ITTNOTIFY_NAME(memory_read)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -656,7 +730,7 @@ void LIBITTAPI __itt_memory_write(void *addr, size_t size);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(LIBITTAPI, void, memory_write, (void *addr, size_t size), (addr, size))
+ITT_STUBV(LIBITTAPI, void, memory_write, (void *addr, size_t size))
 #define __itt_memory_write     ITTNOTIFY_VOID(memory_write)
 #define __itt_memory_write_ptr ITTNOTIFY_NAME(memory_write)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -677,7 +751,7 @@ void LIBITTAPI __itt_memory_update(void *address, size_t size);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUBV(LIBITTAPI, void, memory_update, (void *addr, size_t size), (addr, size))
+ITT_STUBV(LIBITTAPI, void, memory_update, (void *addr, size_t size))
 #define __itt_memory_update     ITTNOTIFY_VOID(memory_update)
 #define __itt_memory_update_ptr ITTNOTIFY_NAME(memory_update)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -732,7 +806,7 @@ __itt_state_t LIBITTAPI __itt_state_get(void);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUB(ITTAPI, __itt_state_t, state_get, (void), ())
+ITT_STUB(ITTAPI, __itt_state_t, state_get, (void))
 #define __itt_state_get     ITTNOTIFY_DATA(state_get)
 #define __itt_state_get_ptr ITTNOTIFY_NAME(state_get)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -753,7 +827,7 @@ __itt_state_t LIBITTAPI __itt_state_set(__itt_state_t s);
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUB(ITTAPI, __itt_state_t, state_set, (__itt_state_t s), (s))
+ITT_STUB(ITTAPI, __itt_state_t, state_set, (__itt_state_t s))
 #define __itt_state_set     ITTNOTIFY_DATA(state_set)
 #define __itt_state_set_ptr ITTNOTIFY_NAME(state_set)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -774,7 +848,7 @@ __itt_thr_state_t LIBITTAPI __itt_thr_mode_set(__itt_thr_prop_t p, __itt_thr_sta
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUB(ITTAPI, __itt_thr_state_t, thr_mode_set, (__itt_thr_prop_t p, __itt_thr_state_t s), (p, s))
+ITT_STUB(ITTAPI, __itt_thr_state_t, thr_mode_set, (__itt_thr_prop_t p, __itt_thr_state_t s))
 #define __itt_thr_mode_set     ITTNOTIFY_DATA(thr_mode_set)
 #define __itt_thr_mode_set_ptr ITTNOTIFY_NAME(thr_mode_set)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -795,7 +869,7 @@ __itt_obj_state_t LIBITTAPI __itt_obj_mode_set(__itt_obj_prop_t p, __itt_obj_sta
 /** @cond exclude_from_documentation */
 #ifndef INTEL_NO_MACRO_BODY
 #ifndef INTEL_NO_ITTNOTIFY_API
-ITT_STUB(ITTAPI, __itt_obj_state_t, obj_mode_set, (__itt_obj_prop_t p, __itt_obj_state_t s), (p, s))
+ITT_STUB(ITTAPI, __itt_obj_state_t, obj_mode_set, (__itt_obj_prop_t p, __itt_obj_state_t s))
 #define __itt_obj_mode_set     ITTNOTIFY_DATA(obj_mode_set)
 #define __itt_obj_mode_set_ptr ITTNOTIFY_NAME(obj_mode_set)
 #else  /* INTEL_NO_ITTNOTIFY_API */
@@ -808,10 +882,102 @@ ITT_STUB(ITTAPI, __itt_obj_state_t, obj_mode_set, (__itt_obj_prop_t p, __itt_obj
 /** @endcond */
 /** @} legacy_state group */
 
+/**
+ * @defgroup frames Frames
+ * @ingroup legacy
+ * Frames group
+ * @{
+ */
+/**
+ * @brief opaque structure for frame identification
+ */
+typedef struct __itt_frame_t *__itt_frame;
+
+/**
+ * @brief Create a global frame with given domain
+ */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+__itt_frame ITTAPI __itt_frame_createA(const char    *domain);
+__itt_frame ITTAPI __itt_frame_createW(const wchar_t *domain);
+#if defined(UNICODE) || defined(_UNICODE)
+#  define __itt_frame_create     __itt_frame_createW
+#  define __itt_frame_create_ptr __itt_frame_createW_ptr
+#else /* UNICODE */
+#  define __itt_frame_create     __itt_frame_createA
+#  define __itt_frame_create_ptr __itt_frame_createA_ptr
+#endif /* UNICODE */
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+__itt_frame ITTAPI __itt_frame_create(const char *domain);
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+
 /** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+ITT_STUB(ITTAPI, __itt_frame, frame_createA, (const char    *domain))
+ITT_STUB(ITTAPI, __itt_frame, frame_createW, (const wchar_t *domain))
+#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+ITT_STUB(ITTAPI, __itt_frame, frame_create,  (const char *domain))
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_frame_createA     ITTNOTIFY_DATA(frame_createA)
+#define __itt_frame_createA_ptr ITTNOTIFY_NAME(frame_createA)
+#define __itt_frame_createW     ITTNOTIFY_DATA(frame_createW)
+#define __itt_frame_createW_ptr ITTNOTIFY_NAME(frame_createW)
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_frame_create     ITTNOTIFY_DATA(frame_create)
+#define __itt_frame_create_ptr ITTNOTIFY_NAME(frame_create)
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_frame_createA(domain)
+#define __itt_frame_createA_ptr 0
+#define __itt_frame_createW(domain)
+#define __itt_frame_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_frame_create(domain)
+#define __itt_frame_create_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#if ITT_PLATFORM==ITT_PLATFORM_WIN
+#define __itt_frame_createA_ptr 0
+#define __itt_frame_createW_ptr 0
+#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#define __itt_frame_create_ptr  0
+#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+
+/** @brief Record an frame begin occurrence. */
+void ITTAPI __itt_frame_begin(__itt_frame frame);
+/** @brief Record an frame end occurrence. */
+void ITTAPI __itt_frame_end  (__itt_frame frame);
+
+/** @cond exclude_from_documentation */
+#ifndef INTEL_NO_MACRO_BODY
+#ifndef INTEL_NO_ITTNOTIFY_API
+ITT_STUBV(ITTAPI, void, frame_begin, (__itt_frame frame))
+ITT_STUBV(ITTAPI, void, frame_end,   (__itt_frame frame))
+#define __itt_frame_begin     ITTNOTIFY_VOID(frame_begin)
+#define __itt_frame_begin_ptr ITTNOTIFY_NAME(frame_begin)
+#define __itt_frame_end       ITTNOTIFY_VOID(frame_end)
+#define __itt_frame_end_ptr   ITTNOTIFY_NAME(frame_end)
+#else  /* INTEL_NO_ITTNOTIFY_API */
+#define __itt_frame_begin(frame)
+#define __itt_frame_begin_ptr 0
+#define __itt_frame_end(frame)
+#define __itt_frame_end_ptr   0
+#endif /* INTEL_NO_ITTNOTIFY_API */
+#else  /* INTEL_NO_MACRO_BODY */
+#define __itt_frame_begin_ptr 0
+#define __itt_frame_end_ptr   0
+#endif /* INTEL_NO_MACRO_BODY */
+/** @endcond */
+/** @} frames group */
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
-/** @endcond */
 
 #endif /* _LEGACY_ITTNOTIFY_H_ */
diff --git a/src/tbb/tools_api/prototype/ittnotify.h b/src/tbb/tools_api/prototype/ittnotify.h
index e7db4fb..856d6b6 100644
--- a/src/tbb/tools_api/prototype/ittnotify.h
+++ b/src/tbb/tools_api/prototype/ittnotify.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 365e010..488ad0b 100644
--- a/src/tbb/win32-tbb-export.def
+++ b/src/tbb/win32-tbb-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/tbb/win32-tbb-export.lst b/src/tbb/win32-tbb-export.lst
index 9651de9..2c8e98a 100644
--- a/src/tbb/win32-tbb-export.lst
+++ b/src/tbb/win32-tbb-export.lst
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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
@@ -104,6 +104,7 @@ __TBB_SYMBOL( ?what at bad_last_alloc@tbb@@UBEPBDXZ )
 __TBB_SYMBOL( ?what at missing_wait@tbb@@UBEPBDXZ )
 __TBB_SYMBOL( ?what at invalid_multiple_scheduling@tbb@@UBEPBDXZ )
 __TBB_SYMBOL( ?what at improper_lock@tbb@@UBEPBDXZ )
+__TBB_SYMBOL( ?what at user_abort@tbb@@UBEPBDXZ )
 
 // tbb_misc.cpp
 __TBB_SYMBOL( ?assertion_failure at tbb@@YAXPBDH00 at Z )
@@ -239,6 +240,7 @@ __TBB_SYMBOL( ??0concurrent_queue_base_v3 at internal@tbb@@IAE at I@Z )
 __TBB_SYMBOL( ??1concurrent_queue_base_v3 at internal@tbb@@MAE at XZ )
 __TBB_SYMBOL( ?internal_pop at concurrent_queue_base_v3@internal at tbb@@IAEXPAX at Z )
 __TBB_SYMBOL( ?internal_pop_if_present at concurrent_queue_base_v3@internal at tbb@@IAE_NPAX at Z )
+__TBB_SYMBOL( ?internal_abort at concurrent_queue_base_v3@internal at tbb@@IAEXXZ )
 __TBB_SYMBOL( ?internal_push at concurrent_queue_base_v3@internal at tbb@@IAEXPBX at Z )
 __TBB_SYMBOL( ?internal_push_if_not_full at concurrent_queue_base_v3@internal at tbb@@IAE_NPBX at Z )
 __TBB_SYMBOL( ?internal_size at concurrent_queue_base_v3@internal at tbb@@IBEHXZ )
diff --git a/src/tbb/win64-gcc-tbb-export.def b/src/tbb/win64-gcc-tbb-export.def
index f4dc4d2..e3a9533 100644
--- a/src/tbb/win64-gcc-tbb-export.def
+++ b/src/tbb/win64-gcc-tbb-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbb/win64-gcc-tbb-export.lst b/src/tbb/win64-gcc-tbb-export.lst
index 70ef9dd..b693825 100644
--- a/src/tbb/win64-gcc-tbb-export.lst
+++ b/src/tbb/win64-gcc-tbb-export.lst
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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
@@ -129,6 +129,12 @@ __TBB_SYMBOL( _ZNK3tbb13improper_lock4whatEv )
 __TBB_SYMBOL( _ZTIN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTSN3tbb13improper_lockE )
 __TBB_SYMBOL( _ZTVN3tbb13improper_lockE )
+__TBB_SYMBOL( _ZN3tbb10user_abortD0Ev )
+__TBB_SYMBOL( _ZN3tbb10user_abortD1Ev )
+__TBB_SYMBOL( _ZNK3tbb10user_abort4whatEv )
+__TBB_SYMBOL( _ZTIN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTSN3tbb10user_abortE )
+__TBB_SYMBOL( _ZTVN3tbb10user_abortE )
 
 /* tbb_misc.cpp */
 __TBB_SYMBOL( _ZN3tbb17assertion_failureEPKciS1_S1_ )
@@ -286,6 +292,7 @@ __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v313internal_pushEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v325internal_push_if_not_fullEPKv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v312internal_popEPv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v323internal_pop_if_presentEPv )
+__TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v314internal_abortEv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv )
 __TBB_SYMBOL( _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityExy ) // MODIFIED LINUX ENTRY
 __TBB_SYMBOL( _ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv )
diff --git a/src/tbb/win64-tbb-export.def b/src/tbb/win64-tbb-export.def
index 36061d2..59926ff 100644
--- a/src/tbb/win64-tbb-export.def
+++ b/src/tbb/win64-tbb-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 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/tbb/win64-tbb-export.lst b/src/tbb/win64-tbb-export.lst
index 3be44b2..ae2661e 100644
--- a/src/tbb/win64-tbb-export.lst
+++ b/src/tbb/win64-tbb-export.lst
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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
@@ -100,6 +100,7 @@ __TBB_SYMBOL( ?what at bad_last_alloc@tbb@@UEBAPEBDXZ )
 __TBB_SYMBOL( ?what at missing_wait@tbb@@UEBAPEBDXZ )
 __TBB_SYMBOL( ?what at invalid_multiple_scheduling@tbb@@UEBAPEBDXZ )
 __TBB_SYMBOL( ?what at improper_lock@tbb@@UEBAPEBDXZ )
+__TBB_SYMBOL( ?what at user_abort@tbb@@UEBAPEBDXZ )
 
 // tbb_misc.cpp
 __TBB_SYMBOL( ?assertion_failure at tbb@@YAXPEBDH00 at Z )
@@ -237,6 +238,7 @@ __TBB_SYMBOL( ?internal_push at concurrent_queue_base_v3@internal at tbb@@IEAAXPEBX at Z
 __TBB_SYMBOL( ?internal_push_if_not_full at concurrent_queue_base_v3@internal at tbb@@IEAA_NPEBX at Z )
 __TBB_SYMBOL( ?internal_pop at concurrent_queue_base_v3@internal at tbb@@IEAAXPEAX at Z )
 __TBB_SYMBOL( ?internal_pop_if_present at concurrent_queue_base_v3@internal at tbb@@IEAA_NPEAX at Z )
+__TBB_SYMBOL( ?internal_abort at concurrent_queue_base_v3@internal at tbb@@IEAAXXZ )
 __TBB_SYMBOL( ?internal_size at concurrent_queue_base_v3@internal at tbb@@IEBA_JXZ )
 __TBB_SYMBOL( ?internal_empty at concurrent_queue_base_v3@internal at tbb@@IEBA_NXZ )
 __TBB_SYMBOL( ?internal_finish_clear at concurrent_queue_base_v3@internal at tbb@@IEAAXXZ )
diff --git a/src/tbb/xbox360-tbb-export.def b/src/tbb/xbox360-tbb-export.def
index 6b4b207..66c6580 100644
--- a/src/tbb/xbox360-tbb-export.def
+++ b/src/tbb/xbox360-tbb-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/tbbmalloc/Customize.h b/src/tbbmalloc/Customize.h
index de458c3..de3fb18 100644
--- a/src/tbbmalloc/Customize.h
+++ b/src/tbbmalloc/Customize.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,15 +29,6 @@
 #ifndef _TBB_malloc_Customize_H_
 #define _TBB_malloc_Customize_H_
 
-/* Thread shutdown notification callback */
-/* redefine the name of the callback to meet TBB requirements
-   for externally visible names of service functions */
-#define mallocThreadShutdownNotification __TBB_mallocThreadShutdownNotification
-#define mallocProcessShutdownNotification __TBB_mallocProcessShutdownNotification
-
-extern "C" void mallocThreadShutdownNotification(void *);
-extern "C" void mallocProcessShutdownNotification(void);
-
 // customizing MALLOC_ASSERT macro
 #include "tbb/tbb_stddef.h"
 #define MALLOC_ASSERT(assertion, message) __TBB_ASSERT(assertion, message)
@@ -85,7 +76,7 @@ public:
                 unlock_value = __TBB_LockByte(m.value);
                 if (locked) *locked = true;
             } else {
-                if (bool res = __TBB_TryLockByte(m.value)) {
+                if (__TBB_TryLockByte(m.value)) {
                     unlock_value = 0;
                     if (locked) *locked = true;
                 } else
@@ -123,6 +114,10 @@ inline void SpinWaitWhileEq(const volatile intptr_t &location, const intptr_t va
     tbb::internal::spin_wait_while_eq(location, value);
 }
 
+inline void SpinWaitUntilEq(const volatile intptr_t &location, const intptr_t value) {
+    tbb::internal::spin_wait_until_eq(location, value);
+}
+
 inline intptr_t BitScanRev(uintptr_t x) {
     return !x? -1 : __TBB_Log2(x);
 }
diff --git a/src/tbbmalloc/MapMemory.h b/src/tbbmalloc/MapMemory.h
index 8065a3c..b036cf4 100644
--- a/src/tbbmalloc/MapMemory.h
+++ b/src/tbbmalloc/MapMemory.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -49,6 +49,16 @@ void *ErrnoPreservingMalloc(size_t bytes)
 #endif
 
 #include <sys/mman.h>
+#if __linux__
+/* __TBB_MAP_HUGETLB is MAP_HUGETLB from system header linux/mman.h.
+   The header do not included here, as on some Linux flavors inclusion of
+   linux/mman.h leads to compilation error,
+   while changing of MAP_HUGETLB is highly unexpected.
+*/
+#define __TBB_MAP_HUGETLB 0x40000
+#else
+#define __TBB_MAP_HUGETLB 0
+#endif
 
 #if XPG4_WAS_DEFINED
  #undef _XPG4_2
@@ -56,7 +66,7 @@ void *ErrnoPreservingMalloc(size_t bytes)
 #endif
 
 #define MEMORY_MAPPING_USES_MALLOC 0
-void* MapMemory (size_t bytes)
+void* MapMemory (size_t bytes, bool hugePages)
 {
     void* result = 0;
     int prevErrno = errno;
@@ -64,7 +74,8 @@ void* MapMemory (size_t bytes)
 // Mac OS* X defines MAP_ANON, which is deprecated in Linux.
 #define MAP_ANONYMOUS MAP_ANON
 #endif /* MAP_ANONYMOUS */
-    result = mmap(NULL, bytes, (PROT_READ | PROT_WRITE), MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+    int addFlags = hugePages? __TBB_MAP_HUGETLB : 0;
+    result = mmap(NULL, bytes, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|addFlags, -1, 0);
     if (result==MAP_FAILED)
         errno = prevErrno;
     return result==MAP_FAILED? 0: result;
@@ -83,10 +94,10 @@ int UnmapMemory(void *area, size_t bytes)
 #include <windows.h>
 
 #define MEMORY_MAPPING_USES_MALLOC 0
-void* MapMemory (size_t bytes)
+void* MapMemory (size_t bytes, bool)
 {
     /* Is VirtualAlloc thread safe? */
-    return VirtualAlloc(NULL, bytes, (MEM_RESERVE | MEM_COMMIT | MEM_TOP_DOWN), PAGE_READWRITE);
+    return VirtualAlloc(NULL, bytes, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
 }
 
 int UnmapMemory(void *area, size_t bytes)
@@ -98,7 +109,7 @@ int UnmapMemory(void *area, size_t bytes)
 #else
 
 #define MEMORY_MAPPING_USES_MALLOC 1
-void* MapMemory (size_t bytes)
+void* MapMemory (size_t bytes, bool)
 {
     return ErrnoPreservingMalloc( bytes );
 }
diff --git a/src/tbbmalloc/Statistics.h b/src/tbbmalloc/Statistics.h
index 5d7927c..b6bd5be 100644
--- a/src/tbbmalloc/Statistics.h
+++ b/src/tbbmalloc/Statistics.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -84,9 +84,9 @@ static inline void initStatisticsCollection() {
 #define STAT_increment(a,b,c) ((void)0)
 #endif /* COLLECT_STATISTICS */
 
+#if COLLECT_STATISTICS
 static inline void STAT_print(int thread)
 {
-#if COLLECT_STATISTICS
     if (!reportAllocationStatistics)
         return;
 
@@ -133,5 +133,5 @@ static inline void STAT_print(int thread)
     fprintf(outfile, "\n");
 
     fclose(outfile);
-#endif
 }
+#endif
diff --git a/src/tbbmalloc/TypeDefinitions.h b/src/tbbmalloc/TypeDefinitions.h
index 9bf4bce..5098ce2 100644
--- a/src/tbbmalloc/TypeDefinitions.h
+++ b/src/tbbmalloc/TypeDefinitions.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -54,6 +54,12 @@
 #   define USE_PTHREAD 1
 #endif
 
+// According to C99 standard INTPTR_MIN defined for C++
+// iff __STDC_LIMIT_MACROS pre-defined
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
 // Include files containing declarations of intptr_t and uintptr_t
 #include <stddef.h>  // size_t
 #if _MSC_VER
@@ -89,6 +95,13 @@ static inline T alignUp  (T arg, uintptr_t alignment) {
     return T(((uintptr_t)arg+(alignment-1)) & ~(alignment-1));
     // /*is this better?*/ return (((uintptr_t)arg-1) | (alignment-1)) + 1;
 }
+template<typename T> // works for not power-of-2 alignments
+static inline T alignUpGeneric(T arg, uintptr_t alignment) {
+    if (size_t rem = arg % alignment) {
+        arg += alignment - rem;
+    }
+    return arg;
+}
 template<typename T>
 static inline bool isAligned(T arg, uintptr_t alignment) {
     return 0==((uintptr_t)arg & (alignment-1));
diff --git a/src/tbbmalloc/backend.cpp b/src/tbbmalloc/backend.cpp
index 8916fb1..62c015e 100644
--- a/src/tbbmalloc/backend.cpp
+++ b/src/tbbmalloc/backend.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -33,13 +33,6 @@
 namespace rml {
 namespace internal {
 
-// If USE_MALLOC_FOR_LARGE_OBJECT is nonzero, then large allocations are done via malloc.
-// Otherwise large allocations are done using the scalable allocator's block allocator.
-// As of 06.Jun.17, using malloc is about 10x faster on Linux.
-#if !_WIN32
-#define USE_MALLOC_FOR_LARGE_OBJECT 1
-#endif
-
 /*********** Code to acquire memory from the OS or other executive ****************/
 
 /*
@@ -58,93 +51,53 @@ namespace internal {
 /* assume MapMemory and UnmapMemory are customized */
 #endif
 
-#if USE_MALLOC_FOR_LARGE_OBJECT
-
-// (get|free)RawMemory only necessary for the USE_MALLOC_FOR_LARGE_OBJECT case
-void* getRawMemory (size_t size, bool useMapMem = false)
-{
-    void *object;
-
-    if (useMapMem)
-        object = MapMemory(size);
-    else
-#if MALLOC_CHECK_RECURSION
-    if (RecursiveMallocCallProtector::noRecursion())
-        object = ErrnoPreservingMalloc(size);
-    else if ( rml::internal::original_malloc_found ) {
-        int prevErrno = errno;
-        object = (*rml::internal::original_malloc_ptr)(size);
-        if (!object)
-            errno = prevErrno;
-    } else
-        object = MapMemory(size);
-#else
-    object = MallocNoErrno(size);
-#endif /* MALLOC_CHECK_RECURSION */
-
-    return object;
-}
-
-bool freeRawMemory (void *object, size_t size, bool useMapMem)
-{
-    bool unmapFailed = false;
-
-    if (useMapMem)
-        unmapFailed = UnmapMemory(object, size);
-    else
-#if MALLOC_CHECK_RECURSION
-    if (RecursiveMallocCallProtector::noRecursion())
-        free(object);
-    else if ( rml::internal::original_malloc_found )
-        (*rml::internal::original_free_ptr)(object);
-    else
-        unmapFailed = UnmapMemory(object, size);
-#else
-    free(object);
-#endif /* MALLOC_CHECK_RECURSION */
-
-    return unmapFailed;
-}
-
-#else /* USE_MALLOC_FOR_LARGE_OBJECT */
-
-void* getRawMemory (size_t size, bool = false) {
-    int myErr = errno;
-    void *ret = MapMemory(size);
-    errno = myErr;
-    return ret;
+void* getRawMemory (size_t size, bool hugePages) {
+    return MapMemory(size, hugePages);
 }
 
-bool freeRawMemory (void *object, size_t size, bool) {
+bool freeRawMemory (void *object, size_t size) {
     return UnmapMemory(object, size);
 }
 
-#endif /* USE_MALLOC_FOR_LARGE_OBJECT */
-
-void *Backend::getRawMem(size_t &size, bool useMapMem) const
+void *Backend::getRawMem(size_t &size) const
 {
     if (extMemPool->userPool()) {
-        if (size_t rem = size % extMemPool->granularity) {
-            size += extMemPool->granularity - rem;
-        }
-        MALLOC_ASSERT(0 == size % extMemPool->granularity, ASSERT_TEXT);
-
+        size = alignUpGeneric(size, extMemPool->granularity);
         return (*extMemPool->rawAlloc)(extMemPool->poolId, size);
     }
-    return getRawMemory(size, useMapMem);
+    if (ExtMemoryPool::useHugePages) {
+        size_t hugeSize = alignUpGeneric(size, ExtMemoryPool::hugePageSize);
+        if (void *res = getRawMemory(hugeSize, /*hugePages=*/true)) {
+            size = hugeSize;
+            return res;
+        }
+        ExtMemoryPool::useHugePages = false;
+    }
+    size_t granSize = alignUpGeneric(size, extMemPool->granularity);
+    if (void *res = getRawMemory(granSize, /*hugePages=*/false)) {
+        size = granSize;
+        return res;
+    }
+    return NULL;
 }
 
-void Backend::freeRawMem(void *object, size_t size, bool useMapMem) const
+void Backend::freeRawMem(void *object, size_t size) const
 {
     if (extMemPool->userPool())
         (*extMemPool->rawFree)(extMemPool->poolId, object, size);
-    else
-        freeRawMemory(object, size, useMapMem);
+    else {
+        // something that looks like a huge page is releasing,
+        // so a huge page might be available at next allocation
+        // TODO: keep page status in regions and use exact check here
+        if (ExtMemoryPool::hugePageSize && !(size % ExtMemoryPool::hugePageSize))
+            ExtMemoryPool::useHugePages = true;
+        freeRawMemory(object, size);
+    }
 }
 
 /********* End memory acquisition code ********************************/
 
-// Protected object size. After successful locking returns size of locked block.
+// Protected object size. After successful locking returns size of locked block,
 // and releasing requires setting block size.
 class GuardedSize : tbb::internal::no_copy {
     uintptr_t value;
@@ -182,6 +135,7 @@ public:
         MALLOC_ASSERT(size > MAX_LOCKED_VAL, ASSERT_TEXT);
         FencedStore((intptr_t&)value, size);
     }
+    friend void Backend::IndexedBins::verify();
 };
 
 struct MemRegion {
@@ -190,6 +144,7 @@ struct MemRegion {
                         // regions.
     size_t     allocSz, // got from poll callback
                blockSz; // initial and maximal inner block size
+    bool       exact;   // region tageted to exact large object allocation
 };
 
 // this data must be unmodified while block is in use, so separate it
@@ -202,6 +157,7 @@ protected:
 class FreeBlock : BlockMutexes {
 public:
     static const size_t minBlockSize;
+    friend void Backend::IndexedBins::verify();
 
     FreeBlock    *prev,       // in 2-linked list related to bin
                  *next,
@@ -307,7 +263,7 @@ FreeBlock *CoalRequestQ::getAll()
 // try to remove block from bin; if split result stay in the bin, not remove it
 // but split the block
 // alignedBin, if the bin is 16KB-aligned right side.
-FreeBlock *Backend::IndexedBins::getBlock(int binIdx, ProcBlocks *procBlocks,
+FreeBlock *Backend::IndexedBins::getBlock(int binIdx, BackendSync *sync,
                 size_t size, bool res16Kaligned, bool alignedBin, bool wait,
                 int *binLocked)
 {
@@ -352,7 +308,7 @@ try_next:
             if (fBlock) {
                 // consume must be called before result of removing from a bin
                 // is visible externally.
-                procBlocks->consume();
+                sync->consume();
                 if (alignedBin && res16Kaligned &&
                     Backend::sizeToBin(szBlock-size) == Backend::sizeToBin(szBlock)) {
                     // free remainder of fBlock stay in same bin,
@@ -387,6 +343,8 @@ void Backend::Bin::removeBlock(FreeBlock *fBlock)
 {
     if (head == fBlock)
         head = fBlock->next;
+    if (tail == fBlock)
+        tail = fBlock->prev;
     if (fBlock->prev)
         fBlock->prev->next = fBlock->next;
     if (fBlock->next)
@@ -400,30 +358,52 @@ void Backend::IndexedBins::addBlock(int binIdx, FreeBlock *fBlock, size_t blockS
     fBlock->myBin = binIdx;
     fBlock->aligned = toAlignedBin(fBlock, blockSz);
     fBlock->prev = NULL;
-    MallocMutex::scoped_lock scopedLock(b->tLock);
-    fBlock->next = b->head;
-    b->head = fBlock;
-    if (fBlock->next)
-        fBlock->next->prev = fBlock;
+    {
+        MallocMutex::scoped_lock scopedLock(b->tLock);
+        fBlock->next = b->head;
+        b->head = fBlock;
+        if (fBlock->next)
+            fBlock->next->prev = fBlock;
+        if (!b->tail)
+            b->tail = fBlock;
+    }
     bitMask.set(binIdx, true);
 }
 
-bool Backend::IndexedBins::tryAddBlock(int binIdx, FreeBlock *fBlock, size_t blockSz)
+bool Backend::IndexedBins::tryAddBlock(int binIdx, FreeBlock *fBlock, bool addToTail)
 {
     bool locked;
     Bin *b = &freeBins[binIdx];
 
     fBlock->myBin = binIdx;
-    fBlock->aligned = toAlignedBin(fBlock, blockSz);
-    fBlock->prev = NULL;
-
-    MallocMutex::scoped_lock scopedLock(b->tLock, /*wait=*/false, &locked);
-    if (!locked)
-        return false;
-    fBlock->next = b->head;
-    b->head = fBlock;
-    if (fBlock->next)
-        fBlock->next->prev = fBlock;
+    fBlock->aligned = toAlignedBin(fBlock, fBlock->sizeTmp);
+    if (addToTail) {
+        fBlock->next = NULL;
+        {
+            MallocMutex::scoped_lock scopedLock(b->tLock, /*wait=*/false, &locked);
+            if (!locked)
+                return false;
+            fBlock->prev = b->tail;
+            b->tail = fBlock;
+            if (fBlock->prev)
+                fBlock->prev->next = fBlock;
+            if (!b->head)
+                b->head = fBlock;
+        }
+    } else {
+        fBlock->prev = NULL;
+        {
+            MallocMutex::scoped_lock scopedLock(b->tLock, /*wait=*/false, &locked);
+            if (!locked)
+                return false;
+            fBlock->next = b->head;
+            b->head = fBlock;
+            if (fBlock->next)
+                fBlock->next->prev = fBlock;
+            if (!b->tail)
+                b->tail = fBlock;
+        }
+    }
     bitMask.set(binIdx, true);
     return true;
 }
@@ -443,13 +423,18 @@ void Backend::IndexedBins::lockRemoveBlock(int binIdx, FreeBlock *fBlock)
         bitMask.set(binIdx, false);
 }
 
+bool ExtMemoryPool::regionsAreReleaseable() const
+{
+    return !keepAllMemory && !delayRegsReleasing;
+}
+
 // try to allocate num blocks of size Bytes from particular "generic" bin
 // res16Kaligned is true if result must be 16KB alined
 FreeBlock *Backend::getFromBin(int binIdx, int num, size_t size, bool res16Kaligned,
                                int *binLocked)
 {
     FreeBlock *fBlock =
-        freeLargeBins.getBlock(binIdx, &procBlocks, num*size, res16Kaligned,
+        freeLargeBins.getBlock(binIdx, &bkndSync, num*size, res16Kaligned,
                                /*alignedBin=*/false, /*wait=*/false, binLocked);
     if (fBlock) {
         if (res16Kaligned) {
@@ -474,13 +459,13 @@ FreeBlock *Backend::getFromBin(int binIdx, int num, size_t size, bool res16Kalig
             MALLOC_ASSERT(isAligned(fBlock, blockSize), ASSERT_TEXT);
         } else {
             if (size_t splitSz = fBlock->sizeTmp - num*size) {
-                 // split block and return free right part
+                // split block and return free right part
                 FreeBlock *splitB = (FreeBlock*)((uintptr_t)fBlock + num*size);
                 splitB->initHeader();
                 coalescAndPut(splitB, splitSz);
             }
         }
-        procBlocks.signal();
+        bkndSync.signal();
         FreeBlock::markBlocks(fBlock, num, size);
     }
 
@@ -493,7 +478,7 @@ FreeBlock *Backend::getFromAlignedSpace(int binIdx, int num, size_t size,
                                         bool res16Kaligned, bool wait, int *binLocked)
 {
     FreeBlock *fBlock =
-        freeAlignedBins.getBlock(binIdx, &procBlocks, num*size, res16Kaligned,
+        freeAlignedBins.getBlock(binIdx, &bkndSync, num*size, res16Kaligned,
                                  /*alignedBin=*/true, wait, binLocked);
 
     if (fBlock) {
@@ -515,7 +500,7 @@ FreeBlock *Backend::getFromAlignedSpace(int binIdx, int num, size_t size,
             }
             coalescAndPut(newAlgnd, newSz);
         }
-        procBlocks.signal();
+        bkndSync.signal();
         MALLOC_ASSERT(!res16Kaligned || isAligned(fBlock, blockSize), ASSERT_TEXT);
         FreeBlock::markBlocks(fBlock, num, size);
     }
@@ -538,24 +523,24 @@ void Backend::correctMaxRequestSize(size_t requestSize)
 
 // try to allocate size Byte block in available bins
 // res16Kaligned is true if result must be 16KB aligned
-void *Backend::genericGetBlock(int num, size_t size, bool res16Kaligned, bool startup)
+FreeBlock *Backend::genericGetBlock(int num, size_t size, bool res16Kaligned)
 {
     // after (soft|hard)CachesCleanup we can get memory in large bins,
     // while after addNewRegion only in ALGN_SPACE_BIN. This flag
     // is for large bins update status.
     bool largeBinsUpdated = true;
-    void *block = NULL;
+    FreeBlock *block = NULL;
     const size_t totalReqSize = num*size;
     const int nativeBin = sizeToBin(totalReqSize);
     // If we found 2 or less locked bins, it's time to ask more memory from OS.
     // But nothing can be asked from fixed pool.
-    int lockedBinsThreshold = extMemPool->fixedSizePool()? 0 : 2;
+    int lockedBinsThreshold = extMemPool->fixedPool || size>=maxBinedSize? 0 : 2;
 
     correctMaxRequestSize(totalReqSize);
     scanCoalescQ(/*forceCoalescQDrop=*/false);
 
     for (;;) {
-        const intptr_t startModifiedCnt = procBlocks.getNumOfMods();
+        const intptr_t startModifiedCnt = bkndSync.getNumOfMods();
         int numOfLockedBins;
 
         for (;;) {
@@ -564,28 +549,30 @@ void *Backend::genericGetBlock(int num, size_t size, bool res16Kaligned, bool st
             // TODO: try different bin search order
             if (res16Kaligned) {
                 if (!block)
-                    for (int i=freeAlignedBins.getMinNonemptyBin(nativeBin);
-                         i<freeBinsNum;
-                         i=freeAlignedBins.getMinNonemptyBin(i+1))
-                        if (block = getFromAlignedSpace(i, num, size, /*res16Kaligned=*/true, /*wait=*/false, &numOfLockedBins))
-                            break;
+                    for ( int i=freeAlignedBins.getMinNonemptyBin(nativeBin);
+                          i<freeBinsNum; i=freeAlignedBins.getMinNonemptyBin(i+1) ){
+                        block = getFromAlignedSpace(i, num, size, /*res16Kaligned=*/true, /*wait=*/false, &numOfLockedBins);
+                        if (block) break;
+                    }
                 if (!block && largeBinsUpdated)
-                    for (int i=freeLargeBins.getMinNonemptyBin(nativeBin);
-                         i<freeBinsNum; i=freeLargeBins.getMinNonemptyBin(i+1))
-                        if (block = getFromBin(i, num, size, /*res16Kaligned=*/true, &numOfLockedBins))
-                            break;
+                    for ( int i=freeLargeBins.getMinNonemptyBin(nativeBin);
+                          i<freeBinsNum; i=freeLargeBins.getMinNonemptyBin(i+1) ){
+                        block = getFromBin(i, num, size, /*res16Kaligned=*/true, &numOfLockedBins);  
+                        if (block) break;
+                    }
             } else {
-                if (largeBinsUpdated)
-                    for (int i=freeLargeBins.getMinNonemptyBin(nativeBin);
-                         i<freeBinsNum; i=freeLargeBins.getMinNonemptyBin(i+1))
-                        if (block = getFromBin(i, num, size, /*res16Kaligned=*/false, &numOfLockedBins))
-                            break;
+                if (!block && largeBinsUpdated)
+                    for ( int i=freeLargeBins.getMinNonemptyBin(nativeBin);
+                          i<freeBinsNum; i=freeLargeBins.getMinNonemptyBin(i+1) ){
+                        block = getFromBin(i, num, size, /*res16Kaligned=*/false, &numOfLockedBins);  
+                        if (block) break;
+                    }
                 if (!block)
-                    for (int i=freeAlignedBins.getMinNonemptyBin(nativeBin);
-                         i<freeBinsNum;
-                         i=freeAlignedBins.getMinNonemptyBin(i+1))
-                        if (block = getFromAlignedSpace(i, num, size, /*res16Kaligned=*/false, /*wait=*/false, &numOfLockedBins))
-                            break;
+                    for ( int i=freeAlignedBins.getMinNonemptyBin(nativeBin);
+                          i<freeBinsNum; i=freeAlignedBins.getMinNonemptyBin(i+1) ){
+                        block = getFromAlignedSpace(i, num, size, /*res16Kaligned=*/false, /*wait=*/false, &numOfLockedBins);  
+                        if (block) break;
+                    }
             }
             if (block || numOfLockedBins<=lockedBinsThreshold)
                 break;
@@ -599,14 +586,14 @@ void *Backend::genericGetBlock(int num, size_t size, bool res16Kaligned, bool st
             size_t maxBinSize = 0;
 
             // Another thread is modifying backend while we can't get the block.
-            // Wait while it leaves
-            // and re-do the scan before other ways to extend the backend.
-            if (procBlocks.waitTillSignalled(startModifiedCnt)
+            // Wait while it leaves and re-do the scan
+            // before trying other ways to extend the backend.
+            if (bkndSync.waitTillSignalled(startModifiedCnt)
                 // semaphore is protecting adding more more memory from OS
                 || memExtendingSema.wait())
                continue;
 
-            if (startModifiedCnt != procBlocks.getNumOfMods()) {
+            if (startModifiedCnt != bkndSync.getNumOfMods()) {
                 memExtendingSema.signal();
                 continue;
             }
@@ -617,20 +604,20 @@ void *Backend::genericGetBlock(int num, size_t size, bool res16Kaligned, bool st
             // space consumption). If region is "quite large", allocate only one,
             // to prevent fragmentation. It supposely doesn't hurt perfromance,
             // because the object requested by user is large.
-            const size_t regSz_sizeBased =
+            const size_t regSz_sizeBased = size>=maxBinedSize?
+                size :
                 alignUp(4*FencedLoad((intptr_t&)maxRequestedSize), 1024*1024);
             if (size == blockSize || regSz_sizeBased < maxBinedSize) {
-                const size_t extendingRegionSize = maxBinedSize;
                 for (unsigned idx=0; idx<4; idx++) {
-                    size_t binSize =
-                        addNewRegion(extendingRegionSize);
+                    size_t binSize = addNewRegion(maxBinedSize, /*exact=*/false);
                     if (!binSize)
                         break;
                     if (binSize > maxBinSize)
                         maxBinSize = binSize;
                 }
             } else {
-                maxBinSize = addNewRegion(regSz_sizeBased);
+                largeBinsUpdated = true;
+                maxBinSize = addNewRegion(regSz_sizeBased, /*exact=*/true);
             }
             memExtendingSema.signal();
 
@@ -645,7 +632,7 @@ void *Backend::genericGetBlock(int num, size_t size, bool res16Kaligned, bool st
                 if (extMemPool->hardCachesCleanup())
                     largeBinsUpdated = true;
                 else {
-                    if (procBlocks.waitTillSignalled(startModifiedCnt))
+                    if (bkndSync.waitTillSignalled(startModifiedCnt))
                         continue;
                     // OS can't give us more memory, but we have some in locked bins
                     if (lockedBinsThreshold && numOfLockedBins) {
@@ -660,43 +647,37 @@ void *Backend::genericGetBlock(int num, size_t size, bool res16Kaligned, bool st
     return block;
 }
 
-LargeMemoryBlock *Backend::getLargeBlock(size_t size, bool startup)
+LargeMemoryBlock *Backend::getLargeBlock(size_t size)
 {
-    bool directRawMemCall = false;
-    void *lmb;
-
-    if (size >= maxBinedSize && !extMemPool->fixedSizePool()) {
-        directRawMemCall = true;
-        if (! (lmb = getRawMem(size, /*useMapMem=*/true))) {
-            bool hardCleanupDone = false;
-
-            // try to clean caches, hoping to find memory after it
-            if (!extMemPool->softCachesCleanup()) {
-                if (!extMemPool->hardCachesCleanup())
-                    return NULL;
-                hardCleanupDone = true;
-            }
-            if (! (lmb = getRawMem(size, /*useMapMem=*/true))) {
-                if (hardCleanupDone || !extMemPool->hardCachesCleanup())
-                    return NULL;
-                if (! (lmb = getRawMem(size, /*useMapMem=*/true))) {
-                    // our last chance is to get the block from bins
-                    lmb = genericGetBlock(1, size, /*res16Kaligned=*/false,
-                                          startup);
-                    if (!lmb) return NULL;
-                    directRawMemCall = false;
-                }
-            }
-        }
-    } else
-        lmb = genericGetBlock(1, size, /*res16Kaligned=*/false, startup);
+    LargeMemoryBlock *lmb =
+        (LargeMemoryBlock*)genericGetBlock(1, size, /*res16Kaligned=*/false);
+    if (lmb) {
+        lmb->unalignedSize = size;
+        if (extMemPool->mustBeAddedToGlobalLargeBlockList())
+            extMemPool->lmbList.add(lmb);
+    }
+    return lmb;
+}
 
-    LargeMemoryBlock *res = (LargeMemoryBlock*)lmb;
-    if (res) {
-        res->directRawMemCall = directRawMemCall;
-        res->unalignedSize = size;
+void *Backend::getBackRefSpace(size_t size, bool *rawMemUsed)
+{
+    // This block is released only at shutdown, so it can prevent
+    // a entire region releasing when it's received from the backend,
+    // so prefer getRawMemory using.
+    if (void *ret = getRawMemory(size, /*hugePages=*/false)) {
+        *rawMemUsed = true;
+        return ret;
     }
-    return res;
+    void *ret = genericGetBlock(1, size, /*res16Kaligned=*/false);
+    if (ret) *rawMemUsed = false;
+    return ret;
+}
+
+void Backend::putBackRefSpace(void *b, size_t size, bool rawMemUsed)
+{
+    if (rawMemUsed)
+        freeRawMemory(b, size);
+    // ignore not raw mem, as it released on region releasing
 }
 
 void Backend::removeBlockFromBin(FreeBlock *fBlock)
@@ -708,19 +689,55 @@ void Backend::removeBlockFromBin(FreeBlock *fBlock)
             freeLargeBins.lockRemoveBlock(fBlock->myBin, fBlock);
 }
 
-void Backend::genericPutBlock(FreeBlock *fBlock, size_t blockSz,
-                              bool directRawMemCall)
+void Backend::genericPutBlock(FreeBlock *fBlock, size_t blockSz)
 {
-    if (blockSz >= maxBinedSize && !extMemPool->fixedSizePool()
-        && directRawMemCall)
-        freeRawMem(fBlock, blockSz, /*useMapMem=*/true);
-    else {
-        procBlocks.consume();
-        coalescAndPut(fBlock, blockSz);
-        procBlocks.signal();
+    bkndSync.consume();
+    coalescAndPut(fBlock, blockSz);
+    bkndSync.signal();
+}
+
+void AllLargeBlocksList::add(LargeMemoryBlock *lmb)
+{
+    MallocMutex::scoped_lock scoped_cs(largeObjLock);
+    lmb->gPrev = NULL;
+    lmb->gNext = loHead;
+    if (lmb->gNext)
+        lmb->gNext->gPrev = lmb;
+    loHead = lmb;
+}
+
+void AllLargeBlocksList::remove(LargeMemoryBlock *lmb)
+{
+    MallocMutex::scoped_lock scoped_cs(largeObjLock);
+    if (loHead == lmb)
+        loHead = lmb->gNext;
+    if (lmb->gNext)
+        lmb->gNext->gPrev = lmb->gPrev;
+    if (lmb->gPrev)
+        lmb->gPrev->gNext = lmb->gNext;
+}
+
+void AllLargeBlocksList::removeAll(Backend *backend)
+{
+    LargeMemoryBlock *next, *lmb = loHead;
+    loHead = NULL;
+
+    for (; lmb; lmb = next) {
+        next = lmb->gNext;
+        // nothing left to AllLargeBlocksList::remove
+        lmb->gNext = lmb->gPrev = NULL;
+        removeBackRef(lmb->backRefIdx);
+        backend->putLargeBlock(lmb);
     }
 }
 
+void Backend::putLargeBlock(LargeMemoryBlock *lmb)
+{
+    if (extMemPool->mustBeAddedToGlobalLargeBlockList())
+        extMemPool->lmbList.remove(lmb);
+    genericPutBlock((FreeBlock *)lmb, lmb->unalignedSize);
+}
+
 void Backend::releaseRegion(MemRegion *memRegion)
 {
     {
@@ -732,7 +749,7 @@ void Backend::releaseRegion(MemRegion *memRegion)
         if (memRegion->prev)
             memRegion->prev->next = memRegion->next;
     }
-    freeRawMem(memRegion, memRegion->allocSz, /*useMapMem=*/true);
+    freeRawMem(memRegion, memRegion->allocSz);
 }
 
 // coalesce fBlock with its neighborhood
@@ -829,60 +846,63 @@ void Backend::coalescAndPutList(FreeBlock *list, bool forceCoalescQDrop, bool do
     int alignedSpaceIdx = -1;
 
     for (;list; list = helper) {
+        bool addToTail = false;
         helper = list->nextToFree;
         FreeBlock *toRet = doCoalesc(list, &memRegion);
         if (!toRet)
             continue;
 
         if (memRegion && memRegion->blockSz == toRet->sizeTmp
-            && !extMemPool->fixedSizePool()) {
-            // release the region, because there is no used blocks in it
-            if (toRet->blockInBin)
-                removeBlockFromBin(toRet);
-
-            releaseRegion(memRegion);
-        } else {
-            size_t currSz = toRet->sizeTmp;
-            int bin = sizeToBin(currSz);
-            bool toAligned = toAlignedBin(toRet, currSz);
-            bool needAddToBin = true;
-
-            if (toRet->blockInBin) {
-                // is it stay in same bin?
-                if (toRet->myBin == bin && toRet->aligned == toAligned)
-                    needAddToBin = false;
-                else {
-                    toRet->blockInBin = false;
+            && !extMemPool->fixedPool) {
+            if (extMemPool->regionsAreReleaseable()) {
+                // release the region, because there is no used blocks in it
+                if (toRet->blockInBin)
                     removeBlockFromBin(toRet);
-                }
+                releaseRegion(memRegion);
+                continue;
+            } else // add block from empty region to end of bin,
+                addToTail = true; // preserving for exact fit
+        }
+        size_t currSz = toRet->sizeTmp;
+        int bin = sizeToBin(currSz);
+        bool toAligned = toAlignedBin(toRet, currSz);
+        bool needAddToBin = true;
+
+        if (toRet->blockInBin) {
+            // is it stay in same bin?
+            if (toRet->myBin == bin && toRet->aligned == toAligned)
+                needAddToBin = false;
+            else {
+                toRet->blockInBin = false;
+                removeBlockFromBin(toRet);
             }
+        }
 
-            // not stay in same bin, or bin-less, add it
-            if (needAddToBin) {
-                toRet->prev = toRet->next = toRet->nextToFree = NULL;
-                toRet->myBin = NO_BIN;
-                toRet->sizeTmp = 0;
-
-                // If the block is too small to fit in any bin, keep it bin-less.
-                // It's not a leak because the block later can be coalesced.
-                if (currSz >= minBinedSize) {
-                    if (!(toAligned?
-                          freeAlignedBins.tryAddBlock(bin, toRet, currSz) :
-                          freeLargeBins.tryAddBlock(bin, toRet, currSz))) {
-                        toRet->sizeTmp = currSz;
-                        coalescQ.putBlock(toRet);
-                        continue;
-                    }
+        // not stay in same bin, or bin-less, add it
+        if (needAddToBin) {
+            toRet->prev = toRet->next = toRet->nextToFree = NULL;
+            toRet->myBin = NO_BIN;
+
+            // If the block is too small to fit in any bin, keep it bin-less.
+            // It's not a leak because the block later can be coalesced.
+            if (currSz >= minBinedSize) {
+                toRet->sizeTmp = currSz;
+                if (!(toAligned?
+                      freeAlignedBins.tryAddBlock(bin, toRet, addToTail) :
+                      freeLargeBins.tryAddBlock(bin, toRet, addToTail))) {
+                    coalescQ.putBlock(toRet);
+                    continue;
                 }
             }
-            // Free (possibly coalesced) free block.
-            // Adding to bin must be done before this point,
-            // because after a block is free it can be coalesced, and
-            // using its pointer became unsafe.
-            // Remember that coalescing is not done under any global lock.
-            toRet->setMeFree(currSz);
-            toRet->rightNeig(currSz)->setLeftFree(currSz);
+            toRet->sizeTmp = 0;
         }
+        // Free (possibly coalesced) free block.
+        // Adding to bin must be done before this point,
+        // because after a block is free it can be coalesced, and
+        // using its pointer became unsafe.
+        // Remember that coalescing is not done under any global lock.
+        toRet->setMeFree(currSz);
+        toRet->rightNeig(currSz)->setLeftFree(currSz);
     }
 }
 
@@ -905,16 +925,39 @@ bool Backend::scanCoalescQ(bool forceCoalescQDrop)
     return currCoalescList;
 }
 
-size_t Backend::initRegion(MemRegion *region, size_t rawSize)
+FreeBlock *Backend::findBlockInRegion(MemRegion *region)
 {
-    FreeBlock *fBlock = (FreeBlock *)((uintptr_t)region + sizeof(MemRegion));
-    // right bound is 16KB-aligned, keep LastFreeBlock after it
-    size_t blockSz =
-        alignDown((uintptr_t)region + rawSize - sizeof(LastFreeBlock), blockSize)
-        - ((uintptr_t)region + sizeof(MemRegion));
-    if (blockSz < blockSize) return 0;
-    MALLOC_ASSERT(isAligned((uintptr_t)fBlock+blockSz, blockSize), ASSERT_TEXT);
+    FreeBlock *fBlock;
+    size_t blockSz;
+    uintptr_t fBlockEnd,
+        lastFreeBlock = (uintptr_t)region + region->allocSz - sizeof(LastFreeBlock);
+
+    if (region->exact) {
+        fBlock = (FreeBlock *)alignUp((uintptr_t)region + sizeof(MemRegion),
+                                      largeObjectAlignment);
+        fBlockEnd = lastFreeBlock;
+    } else { // right bound is 16KB-aligned, keep LastFreeBlock after it
+        fBlock = (FreeBlock *)((uintptr_t)region + sizeof(MemRegion));
+        fBlockEnd = alignDown(lastFreeBlock, blockSize);
+    }
+    if (fBlockEnd <= (uintptr_t)fBlock)
+        return NULL; // allocSz is too small
+    blockSz = fBlockEnd - (uintptr_t)fBlock;
+    // TODO: extend get16KBlock to support degradation, i.e. getting less blocks
+    // then requested, and then relax this check
+    // (now all or nothing is implemented, check according to this)
+    if (blockSz < numOfBlocksAllocOnMiss*blockSize)
+        return NULL;
 
+    region->blockSz = blockSz;
+    return fBlock;
+}
+
+// startUseBlock adds free block to a bin, the block can be used and
+// even released after this, so the region must be added to regionList already
+void Backend::startUseBlock(MemRegion *region, FreeBlock *fBlock)
+{
+    size_t blockSz = region->blockSz;
     fBlock->initHeader();
     fBlock->setMeFree(blockSz);
 
@@ -926,31 +969,44 @@ size_t Backend::initRegion(MemRegion *region, size_t rawSize)
     lastBl->memRegion = region;
 
     unsigned targetBin = sizeToBin(blockSz);
-    region->allocSz = rawSize;
-    region->blockSz = blockSz;
-    if (toAlignedBin(fBlock, blockSz)) {
+    if (!region->exact && toAlignedBin(fBlock, blockSz)) {
         freeAlignedBins.addBlock(targetBin, fBlock, blockSz);
     } else {
         freeLargeBins.addBlock(targetBin, fBlock, blockSz);
     }
-    return blockSz;
 }
 
-size_t Backend::addNewRegion(size_t rawSize)
+size_t Backend::addNewRegion(size_t rawSize, bool exact)
 {
-    size_t binSize;
     // to guarantee that header is not overwritten in used blocks
     MALLOC_ASSERT(sizeof(BlockMutexes) <= sizeof(BlockI), ASSERT_TEXT);
     // to guarantee that block length is not conflicting with
     // special values of GuardedSize
     MALLOC_ASSERT(FreeBlock::minBlockSize > GuardedSize::MAX_SPEC_VAL, ASSERT_TEXT);
-
-    MemRegion *region = (MemRegion*)getRawMem(rawSize,  /*useMapMem=*/true);
-    // it's rough estimation, but enough to do correct check after alignment
-    if (!region || rawSize < sizeof(MemRegion)+blockSize) {
+    // "exact" means that not less than rawSize for block inside the region.
+    // Reserve space for region header, worst case alignment
+    // and last block mark.
+    if (exact)
+        rawSize += sizeof(MemRegion) + largeObjectAlignment 
+                +  FreeBlock::minBlockSize + sizeof(LastFreeBlock);
+
+    MemRegion *region = (MemRegion*)getRawMem(rawSize);
+    if (!region) return 0;
+    if (rawSize < sizeof(MemRegion)) {
+        if (!extMemPool->fixedPool)
+            freeRawMem(region, rawSize);
         return 0;
     }
 
+    region->exact = exact;
+    region->allocSz = rawSize;
+    FreeBlock *fBlock = findBlockInRegion(region);
+    if (!fBlock) {
+        if (!extMemPool->fixedPool)
+            freeRawMem(region, rawSize);
+        return 0;
+    }
+    // adding to global list of all regions
     {
         region->prev = NULL;
         MallocMutex::scoped_lock lock(regionListLock);
@@ -959,58 +1015,111 @@ size_t Backend::addNewRegion(size_t rawSize)
         if (regionList->next)
             regionList->next->prev = regionList;
     }
-    if (! (binSize = initRegion(region, rawSize))) {
-        {
-            MallocMutex::scoped_lock lock(regionListLock);
-            if (regionList == region)
-                regionList = region->next;
-            if (region->next)
-                region->next->prev = region->prev;
-            if (region->prev)
-                region->prev->next = region->next;
-        }
-        freeRawMem(region, rawSize, /*useMapMem=*/true);
-        return 0;
-    }
-    procBlocks.pureSignal();
+    // copy it here, as just after starting to use region it might be released
+    size_t blockSz = region->blockSz;
 
-    return binSize;
+    startUseBlock(region, fBlock);
+    bkndSync.pureSignal();
+    return blockSz;
 }
 
-bool Backend::reset()
+void Backend::reset()
 {
     MemRegion *curr;
 
     MALLOC_ASSERT(extMemPool->userPool(), "Only user pool can be reset.");
+    // no active threads are allowed in backend while reset() called
+    verify();
 
     freeLargeBins.reset();
     freeAlignedBins.reset();
 
-    for (curr = regionList; curr; curr = curr->next)
-        if (!initRegion(curr, curr->allocSz))
-            return false;
-    return true;
+    for (curr = regionList; curr; curr = curr->next) {
+        FreeBlock *fBlock = findBlockInRegion(curr);
+        MALLOC_ASSERT(fBlock, "A memory region unexpectedly got smaller");
+        startUseBlock(curr, fBlock);
+    }
 }
 
 bool Backend::destroy()
 {
-    MALLOC_ASSERT(extMemPool->userPool(), "Only user pool can be destroyed.");
+    // no active threads are allowed in backend while destroy() called
+    verify();
     while (regionList) {
         MemRegion *helper = regionList->next;
-        (*extMemPool->rawFree)(extMemPool->poolId, regionList,
-                               regionList->allocSz);
+        if (inUserPool())
+            (*extMemPool->rawFree)(extMemPool->poolId, regionList,
+                                   regionList->allocSz);
+        else {
+            freeRawMemory(regionList, regionList->allocSz);
+        }
         regionList = helper;
     }
     return true;
 }
 
+void Backend::IndexedBins::verify()
+{
+    for (int i=0; i<freeBinsNum; i++) {
+        for (FreeBlock *fb = freeBins[i].head; fb; fb=fb->next) {
+            uintptr_t mySz = fb->myL.value;
+            MALLOC_ASSERT(mySz>GuardedSize::MAX_SPEC_VAL, ASSERT_TEXT);
+            FreeBlock *right = (FreeBlock*)((uintptr_t)fb + mySz);
+            MALLOC_ASSERT(right->myL.value<=GuardedSize::MAX_SPEC_VAL, ASSERT_TEXT);
+            MALLOC_ASSERT(right->leftL.value==mySz, ASSERT_TEXT);
+            MALLOC_ASSERT(fb->leftL.value<=GuardedSize::MAX_SPEC_VAL, ASSERT_TEXT);
+        }
+    }
+}
+
+// For correct operation, it must be called when no other threads
+// is changing backend.
+void Backend::verify()
+{
+#if MALLOC_DEBUG
+    scanCoalescQ(/*forceCoalescQDrop=*/false);
+
+    freeLargeBins.verify();
+    freeAlignedBins.verify();
+#endif // MALLOC_DEBUG
+}
+
+#if _TBBMALLOC_BACKEND_LOG
 size_t Backend::Bin::countFreeBlocks()
 {
     size_t cnt = 0;
-    for (FreeBlock *fb = head; fb; fb = fb->next)
-        cnt++;
+    {
+        MallocMutex::scoped_lock lock(tLock);
+        for (FreeBlock *fb = head; fb; fb = fb->next)
+            cnt++;
+    }
     return cnt;
 }
 
+void Backend::IndexedBins::reportStat(FILE *f)
+{
+    for (int i=0; i<Backend::freeBinsNum; i++)
+        if (size_t cnt = freeBins[i].countFreeBlocks())
+            fprintf(f, "%d:%lu ", i, cnt);
+}
+
+void Backend::reportStat(FILE *f)
+{
+    int regNum = 0;
+
+    scanCoalescQ(/*forceCoalescQDrop=*/false);
+
+    {
+        MallocMutex::scoped_lock lock(regionListLock);
+        for (MemRegion *curr = regionList; curr; curr = curr->next)
+            regNum++;
+    }
+    fprintf(f, "%d regions\nlarge ", regNum);
+    freeLargeBins.reportStat(f);
+    fprintf(f, "\naligned ");
+    freeAlignedBins.reportStat(f);
+    fprintf(f, "\n");
+}
+#endif // _TBBMALLOC_BACKEND_LOG
 
 } } // namespaces
diff --git a/src/tbbmalloc/backref.cpp b/src/tbbmalloc/backref.cpp
index f699e28..1973f02 100644
--- a/src/tbbmalloc/backref.cpp
+++ b/src/tbbmalloc/backref.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -42,14 +42,17 @@ struct BackRefBlock : public BlockI {
     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;
+    // list of all blocks that were allocated from raw mem (i.e., not from backend)
+    BackRefBlock *nextRawMemBlock;
     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) :
+    BackRefBlock(BackRefBlock *blockToUse, int num) :
         nextForUse(NULL), bumpPtr((FreeObject*)((uintptr_t)blockToUse + blockSize - sizeof(void*))),
-        freeList(NULL), allocatedCount(0), myNum(myNum), addedToForUse(false) {
+        freeList(NULL), nextRawMemBlock(NULL), allocatedCount(0), myNum(num),
+        addedToForUse(false) {
         memset(&blockMutex, 0, sizeof(MallocMutex));
         // index in BackRefMaster must fit to uint16_t
         MALLOC_ASSERT(!(myNum >> 16), ASSERT_TEXT);
@@ -57,6 +60,7 @@ struct BackRefBlock : public BlockI {
 
     // when BackRefMaster::findFreeBlock() calls get16KBlock
     // BackRefBlock::bytes is used implicitly
+    // TODO: take into account VirtualAlloc granularity
     static const int bytes = blockSize;
 };
 
@@ -70,11 +74,17 @@ struct BackRefMaster {
  */
     static const size_t bytes = 64*1024;
     static const int dataSz;
+/* space is reserved for master table and 4 leaves
+   taking into account VirtualAlloc allocation granularity */
+    static const int leaves = 4;
+    static const size_t masterSize = BackRefMaster::bytes+leaves*BackRefBlock::bytes;
 
     Backend       *backend;
     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  *allRawMemBlocks;
+    intptr_t       lastUsed;       // index of the last used block
+    bool           rawMemUsed;
     BackRefBlock  *backRefBl[1];   // the real size of the array is dataSz
 
     BackRefBlock *findFreeBlock();
@@ -90,43 +100,60 @@ static BackRefMaster *backRefMaster;
 
 bool initBackRefMaster(Backend *backend)
 {
-    // reserve space for master table and 4 leaves taking into account VirtualAlloc allocation granularity
-    // MapMemory is forced because the function runs during startup.
-    const int leaves = 4;
-    const size_t masterSize = BackRefMaster::bytes+leaves*BackRefBlock::bytes;
-
-    backRefMaster = (BackRefMaster*)getRawMemory(masterSize, /*useMapMem=*/true);
-    if (!backRefMaster)
-        backRefMaster = (BackRefMaster*)backend->getLargeBlock(masterSize, /*startup=*/true);
-    if (! backRefMaster)
+    bool rawMemUsed;
+    BackRefMaster *master =
+        (BackRefMaster*)backend->getBackRefSpace(BackRefMaster::masterSize,
+                                                 &rawMemUsed);
+    if (! master)
         return false;
-    backRefMaster->backend = backend;
-    backRefMaster->listForUse = NULL;
-    for (int i=0; i<leaves; i++) {
-        BackRefBlock *bl = (BackRefBlock *)((uintptr_t)backRefMaster + BackRefMaster::bytes + i*BackRefBlock::bytes);
-        backRefMaster->lastUsed = i;
-        backRefMaster->addEmptyBackRefBlock(bl);
+    master->backend = backend;
+    master->listForUse = master->allRawMemBlocks = NULL;
+    master->rawMemUsed = rawMemUsed;
+    master->lastUsed = -1;
+    for (int i=0; i<BackRefMaster::leaves; i++) {
+        BackRefBlock *bl = (BackRefBlock *)((uintptr_t)master + BackRefMaster::bytes + i*BackRefBlock::bytes);
+        master->addEmptyBackRefBlock(bl);
         if (i)
-            backRefMaster->addBackRefBlockToList(bl);
+            master->addBackRefBlockToList(bl);
         else // active leaf is not needed in listForUse
-            backRefMaster->active = bl;
+            master->active = bl;
     }
+    // backRefMaster is read in getBackRef, so publish it in consistent state
+    FencedStore((intptr_t&)backRefMaster, (intptr_t)master);
     return true;
 }
 
+void destroyBackRefMaster(Backend *backend)
+{
+    if (backRefMaster) { // Is initBackRefMaster() called?
+        for (BackRefBlock *curr=backRefMaster->allRawMemBlocks; curr; ) {
+            BackRefBlock *next = curr->nextRawMemBlock;
+            // allRawMemBlocks list is only for raw mem blocks
+            backend->putBackRefSpace(curr, BackRefBlock::bytes, /*rawMemUsed=*/true);
+            curr = next;
+        }
+        backend->putBackRefSpace(backRefMaster, BackRefMaster::masterSize,
+                                 backRefMaster->rawMemUsed);
+    }
+}
+
 void BackRefMaster::addBackRefBlockToList(BackRefBlock *bl)
 {
-    bl->nextForUse = backRefMaster->listForUse;
-    backRefMaster->listForUse = bl;
+    bl->nextForUse = listForUse;
+    listForUse = bl;
     bl->addedToForUse = true;
 }
 
 void BackRefMaster::addEmptyBackRefBlock(BackRefBlock *newBl)
 {
+    intptr_t nextLU = lastUsed+1;
     memset((char*)newBl+sizeof(BackRefBlock), 0,
            BackRefBlock::bytes-sizeof(BackRefBlock));
-    new (newBl) BackRefBlock(newBl, lastUsed);
-    backRefBl[lastUsed] = newBl;
+    new (newBl) BackRefBlock(newBl, nextLU);
+    backRefBl[nextLU] = newBl;
+    // lastUsed is read in getBackRef, and access to backRefBl[lastUsed]
+    // is possible only after checking backref against current lastUsed
+    FencedStore(lastUsed, nextLU);
 }
 
 BackRefBlock *BackRefMaster::findFreeBlock()
@@ -140,16 +167,16 @@ BackRefBlock *BackRefMaster::findFreeBlock()
         MALLOC_ASSERT(active->addedToForUse, ASSERT_TEXT);
         active->addedToForUse = false;
     } else if (lastUsed-1 < backRefMaster->dataSz) {    // allocate new data node
-        // This block is never released, so can prevent releasing of a region
-        // if it's received from the backend, so prefer getRawMemory using.
-        BackRefBlock *newBl = (BackRefBlock*)
-            getRawMemory(BackRefBlock::bytes,
-                         /*useMapMem=*/!isMallocInitializedExt());
-        if (!newBl)
-            newBl = (BackRefBlock*)backend->get16KBlock(1, /*startup=*/!isMallocInitializedExt());
+        bool rawMemUsed;
+        BackRefBlock *newBl =
+            (BackRefBlock*)backend->getBackRefSpace(BackRefBlock::bytes, &rawMemUsed);
         if (!newBl) return NULL;
-        lastUsed++;
         backRefMaster->addEmptyBackRefBlock(newBl);
+        if (rawMemUsed) {
+            newBl->nextRawMemBlock = backRefMaster->allRawMemBlocks;
+            backRefMaster->allRawMemBlocks = newBl;
+        } else
+            newBl->nextRawMemBlock = NULL;
         active = newBl;
     } else  // no free blocks, give up
         return NULL;
@@ -159,7 +186,9 @@ BackRefBlock *BackRefMaster::findFreeBlock()
 void *getBackRef(BackRefIdx backRefIdx)
 {
     // !backRefMaster means no initialization done, so it can't be valid memory
-    if (!backRefMaster || backRefIdx.getMaster() > backRefMaster->lastUsed
+    // see addEmptyBackRefBlock for fences around lastUsed
+    if (!FencedLoad((intptr_t&)backRefMaster)
+        || backRefIdx.getMaster() > FencedLoad(backRefMaster->lastUsed)
         || backRefIdx.getOffset() >= BR_MAX_CNT)
         return NULL;
     return *(void**)((uintptr_t)backRefMaster->backRefBl[backRefIdx.getMaster()]
@@ -185,7 +214,8 @@ BackRefIdx BackRefIdx::newBackRef(bool largeObj)
             MallocMutex::scoped_lock lock(backRefMutex);
 
             MALLOC_ASSERT(backRefMaster, ASSERT_TEXT);
-            if (! (blockToUse = backRefMaster->findFreeBlock()))
+            blockToUse = backRefMaster->findFreeBlock();
+            if (!blockToUse)
                 return BackRefIdx();
         }
         toUse = NULL;
diff --git a/src/tbbmalloc/frontend.cpp b/src/tbbmalloc/frontend.cpp
index 4fa15e7..7002e71 100644
--- a/src/tbbmalloc/frontend.cpp
+++ b/src/tbbmalloc/frontend.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,6 +40,8 @@
     #define TlsGetValue_func pthread_getspecific
     #include <sched.h>
     inline void do_yield() {sched_yield();}
+    #include <dlfcn.h>    /* for dlsym */
+    extern "C" { static void mallocThreadShutdownNotification(void*); }
 
 #elif USE_WINTHREAD
     #define TlsSetValue_func TlsSetValue
@@ -54,8 +56,6 @@
 
 #define FREELIST_NONBLOCKING 1
 
-void mallocThreadShutdownNotification(void* arg);
-
 namespace rml {
 class MemoryPool;
 namespace internal {
@@ -78,7 +78,7 @@ bool RecursiveMallocCallProtector::noRecursion() {
 /*
  * Block::objectSize value used to mark blocks allocated by startupAlloc
  */
-const unsigned int startupAllocObjSizeMark = ~(unsigned int)0;
+const uint16_t startupAllocObjSizeMark = ~(uint16_t)0;
 
 /*
  * This number of bins in the TLS that leads to blocks that we can allocate in.
@@ -86,30 +86,12 @@ const unsigned int startupAllocObjSizeMark = ~(unsigned int)0;
 const uint32_t numBlockBinLimit = 31;
 
 /*
- * Best estimate of cache line size, for the purpose of avoiding false sharing.
- * Too high causes memory overhead, too low causes false-sharing overhead.
- * Because, e.g., 32-bit code might run on a 64-bit system with a larger cache line size,
- * it would probably be better to probe at runtime where possible and/or allow for an environment variable override,
- * but currently this is still used for compile-time layout of class Block, so the change is not entirely trivial.
- */
-#if __powerpc64__ || __ppc64__ || __bgp__
-const int estimatedCacheLineSize = 128;
-#else
-const int estimatedCacheLineSize =  64;
-#endif
-
-/*
  * The following constant is used to define the size of struct Block, the block header.
  * The intent is to have the size of a Block multiple of the cache line size, this allows us to
  * get good alignment at the cost of some overhead equal to the amount of padding included in the Block.
  */
 const int blockHeaderAlignment = estimatedCacheLineSize;
 
-/*
- * Alignment of large (>= minLargeObjectSize) objects.
- */
-const int largeObjectAlignment = estimatedCacheLineSize;
-
 /********* The data structures and global objects        **************/
 
 /*
@@ -146,6 +128,20 @@ public:
         }
 #endif /* USE_WINTHREAD */
     }
+    static void destroy() {
+        if( Tid_key ) {
+#if USE_WINTHREAD
+            TlsFree( Tid_key );
+#else
+            int status = pthread_key_delete( Tid_key );
+            if ( status ) {
+                fprintf (stderr, "The memory manager cannot delete tls key; exiting \n");
+                exit(1);
+            }
+#endif /* USE_WINTHREAD */
+            Tid_key = 0;
+        }
+    }
     static ThreadId get() {
         ThreadId result;
         result.id = reinterpret_cast<intptr_t>(TlsGetValue_func(Tid_key));
@@ -158,6 +154,7 @@ public:
         }
         return result;
     }
+
     bool defined() const { return id; }
     void undef() { id = 0; }
     void invalid() { id = (unsigned int)-1; }
@@ -260,35 +257,39 @@ public:
 };
 
 class MemoryPool {
-    static MallocMutex  memPoolListLock;
+    // if no explicit grainsize, expect to see malloc in user's pAlloc
+    // and set reasonable low granularity
+    static const size_t defaultGranularity = estimatedCacheLineSize;
 
     MemoryPool();                  // deny
 public:
-#if USE_WINTHREAD
-    // list of all active pools is used under Windows to release
-    // all TLS data on thread termination
+    static MallocMutex  memPoolListLock;
+
+    // list of all active pools is used to release
+    // all TLS data on thread termination or library unload
     MemoryPool    *next,
                   *prev;
-#endif
     ExtMemoryPool  extMemPool;
     OrphanedBlocks orphanedBlocks;
     BootStrapBlocks bootStrapBlocks;
 
     bool init(intptr_t poolId, const MemPoolPolicy* memPoolPolicy);
+    static void initDefaultPool();
     void reset();
     void destroy();
 
-    void initTLS() { new (&extMemPool.tlsPointerKey) TLSKey(); }
-    TLSData *getTLS() { return extMemPool.tlsPointerKey.getThreadMallocTLS(); }
-    void clearTLS() { extMemPool.tlsPointerKey.setThreadMallocTLS(NULL); }
     Bin *getAllocationBin(size_t size);
     Block *getEmptyBlock(size_t size);
     void returnEmptyBlock(Block *block, bool poolTheBlock);
 };
 
-MallocMutex  MemoryPool::memPoolListLock;
 static char defaultMemPool_space[sizeof(MemoryPool)];
 static MemoryPool *defaultMemPool = (MemoryPool *)defaultMemPool_space;
+const size_t MemoryPool::defaultGranularity;
+// zero-initialized
+MallocMutex  MemoryPool::memPoolListLock;
+bool ExtMemoryPool::useHugePages;
+size_t ExtMemoryPool::hugePageSize;
 
 // Block is 16KB-aligned. To prvent false sharing, separate locally-accessed
 // fields and fields commonly accessed by not owner threads.
@@ -305,13 +306,14 @@ protected:
 
     Block       *next;
     Block       *previous;        /* Use double linked list to speed up removal */
-    unsigned int objectSize;
+    uint16_t     objectSize;
     ThreadId     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) */
     bool         isFull;
+    bool         orphaned;
 
     friend void *BootStrapBlocks::allocate(MemoryPool *memPool, size_t size);
     friend class FreeBlockPool;
@@ -324,6 +326,7 @@ class Block : public LocalBlockFields {
     size_t       __pad_public_fields[(2*blockHeaderAlignment -
                                       sizeof(LocalBlockFields))/sizeof(size_t)];
 public:
+    bool empty() const { return allocatedCount==0 && publicFreeList==NULL; }
     inline FreeObject* allocate();
     inline FreeObject *allocateFromFreeList();
     inline bool emptyEnoughToUse();
@@ -341,13 +344,17 @@ public:
         return objectSize;
     }
     const BackRefIdx *getBackRefIdx() const { return &backRefIdx; }
-    bool ownBlock() const { return owner.own(); }
+    bool ownBlock() const { return !orphaned && owner.own(); }
     bool isStartupAllocObject() const { return objectSize == startupAllocObjSizeMark; }
     inline FreeObject *findObjectToFree(void *object) const;
     bool checkFreePrecond(void *object) const {
-        return allocatedCount>0
-            && allocatedCount <= (blockSize-sizeof(Block))/objectSize
-            && (!bumpPtr || object>bumpPtr);
+        if (allocatedCount>0)
+            if (startupAllocObjSizeMark == objectSize) // startup block
+                return object<=bumpPtr;
+            else
+                return allocatedCount <= (blockSize-sizeof(Block))/objectSize
+                       && (!bumpPtr || object>bumpPtr);
+        return false;
     }
     const BackRefIdx *getBackRef() const { return &backRefIdx; }
     void initEmptyBlock(Bin* tlsBin, size_t size);
@@ -363,7 +370,7 @@ private:
     inline bool isProperlyPlaced(const void *object) const;
 
     friend class Bin;
-    friend void ::mallocThreadShutdownNotification(void* arg);
+    friend class TLSData;
     friend void MemoryPool::destroy();
 };
 
@@ -376,6 +383,7 @@ class Bin {
 
 public:
     inline Block* getActiveBlock() const { return activeBlk; }
+    void resetActiveBlock() { activeBlk = 0; }
     bool activeBlockUnused() const { return activeBlk && !activeBlk->allocatedCount; }
     inline void setActiveBlock(Block *block);
     inline Block* setPreviousBlockActive();
@@ -392,7 +400,6 @@ public:
         MALLOC_ASSERT( mailbox == 0, ASSERT_TEXT );
     }
 
-    friend void ::mallocThreadShutdownNotification(void* arg);
     friend void Block::freePublicObject (FreeObject *objectToFree);
 };
 
@@ -443,6 +450,16 @@ const uint32_t numBlockBins = minFittingIndex+numFittingBins;
 const uint32_t minLargeObjectSize = fittingSize5 + 1;
 
 /*
+ * Default granularity of memory pools
+ */
+
+#if USE_WINTHREAD
+const size_t scalableMallocPoolGranularity = 64*1024; // for VirtualAlloc use
+#else
+const size_t scalableMallocPoolGranularity = 4*1024;  // page size, for mmap use
+#endif
+
+/*
  * 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.
  */
@@ -462,11 +479,11 @@ public:
     public:
         Block* block;
         bool   lastAccMiss;
-        ResOfGet(Block *b, bool lastAccMiss) : block(b), lastAccMiss(lastAccMiss) {}
+        ResOfGet(Block *b, bool lastMiss) : block(b), lastAccMiss(lastMiss) {}
     };
 
     // allocated in zero-initialized memory
-    FreeBlockPool(Backend *backend) : backend(backend) {}
+    FreeBlockPool(Backend *bknd) : backend(bknd) {}
     ResOfGet getBlock();
     void returnBlock(Block *block);
     bool releaseAllBlocks();
@@ -478,13 +495,14 @@ class TLSData {
 #endif
 public:
     Bin           bin[numBlockBinLimit];
-    FreeBlockPool pool;
+    FreeBlockPool freeBlocks;
 #if USE_PTHREAD
-    TLSData(MemoryPool *memPool, Backend *backend) : memPool(memPool), pool(backend) {}
+    TLSData(MemoryPool *mPool, Backend *bknd) : memPool(mPool), freeBlocks(bknd) {}
     MemoryPool *getMemPool() const { return memPool; }
 #else
-    TLSData(MemoryPool * /*memPool*/, Backend *backend) : pool(backend) {}
+    TLSData(MemoryPool * /*memPool*/, Backend *bknd) : freeBlocks(bknd) {}
 #endif
+    void release(MemoryPool *mPool);
 };
 
 TLSData *TLSKey::createTLS(MemoryPool *memPool, Backend *backend)
@@ -509,17 +527,17 @@ bool ExtMemoryPool::release16KBCaches()
     TLSData *tlsData = tlsPointerKey.getThreadMallocTLS();
 
     if (tlsData) {
-        released = tlsData->pool.releaseAllBlocks();
+        released = tlsData->freeBlocks.releaseAllBlocks();
 
         // active blocks can be not used, so return them to backend
-        for (int i=0; i<numBlockBinLimit; i++)
+        for (uint32_t i=0; i<numBlockBinLimit; i++)
             if (tlsData->bin[i].activeBlockUnused()) {
                 Block *block = tlsData->bin[i].getActiveBlock();
                 tlsData->bin[i].outofTLSBin(block);
                 // 16KB blocks in user's pools not have valid backRefIdx
                 if (!userPool())
                     removeBackRef(*(block->getBackRefIdx()));
-                backend.put16KBlock(block, /*startup=*/false);
+                backend.put16KBlock(block);
 
                 released = true;
             }
@@ -543,8 +561,8 @@ bool        RecursiveMallocCallProtector::canUsePthread;
 
 static void *internalMalloc(size_t size);
 static void internalFree(void *object);
-static void *internalPoolMalloc(rml::MemoryPool* mPool, size_t size);
-static bool internalPoolFree(rml::MemoryPool *mPool, void *object);
+static void *internalPoolMalloc(MemoryPool* mPool, size_t size);
+static bool internalPoolFree(MemoryPool *mPool, void *object);
 
 #if !MALLOC_DEBUG
 #if __INTEL_COMPILER || _MSC_VER
@@ -782,18 +800,16 @@ Block *MemoryPool::getEmptyBlock(size_t size)
     TLSData* tls = extMemPool.tlsPointerKey.getThreadMallocTLS();
 
     if (tls)
-        resOfGet = tls->pool.getBlock();
+        resOfGet = tls->freeBlocks.getBlock();
     if (resOfGet.block) {
         result = resOfGet.block;
     } else {
-        // if previous access missed pool, allocate 2 blocks in advance
-        static const int ALLOC_ON_MISS = 2;
-        int i, num = resOfGet.lastAccMiss? ALLOC_ON_MISS : 1;
-        BackRefIdx backRefIdx[ALLOC_ON_MISS];
+        int i, num = resOfGet.lastAccMiss? Backend::numOfBlocksAllocOnMiss : 1;
+        BackRefIdx backRefIdx[Backend::numOfBlocksAllocOnMiss];
+
+        result = static_cast<Block*>(extMemPool.backend.get16KBlock(num));
+        if (!result) return NULL;
 
-        if ( !(result = static_cast<Block*>(
-                   extMemPool.backend.get16KBlock(num, /*startup=*/false))) )
-            return NULL;
         if (!extMemPool.userPool())
             for (i=0; i<num; i++) {
                 backRefIdx[i] = BackRefIdx::newBackRef(/*largeObj=*/false);
@@ -804,7 +820,7 @@ Block *MemoryPool::getEmptyBlock(size_t size)
                     Block *b;
                     for (b=result, i=0; i<num;
                          b=(Block*)((uintptr_t)b+blockSize), i++)
-                        extMemPool.backend.put16KBlock(b, /*startup=*/false);
+                        extMemPool.backend.put16KBlock(b);
                     return NULL;
                 }
             }
@@ -820,7 +836,7 @@ Block *MemoryPool::getEmptyBlock(size_t size)
             // all but first one go to per-thread pool
             if (i > 0) {
                 MALLOC_ASSERT(tls, ASSERT_TEXT);
-                tls->pool.returnBlock(b);
+                tls->freeBlocks.returnBlock(b);
             }
         }
     }
@@ -835,26 +851,50 @@ void MemoryPool::returnEmptyBlock(Block *block, bool poolTheBlock)
 {
     block->makeEmpty();
     if (poolTheBlock) {
-        extMemPool.tlsPointerKey.getThreadMallocTLS()->pool.returnBlock(block);
+        extMemPool.tlsPointerKey.getThreadMallocTLS()->freeBlocks.returnBlock(block);
     }
     else {
         // 16KB blocks in user's pools not have valid backRefIdx
         if (!extMemPool.userPool())
             removeBackRef(*(block->getBackRefIdx()));
-        extMemPool.backend.put16KBlock(block, /*startup=*/false);
+        extMemPool.backend.put16KBlock(block);
     }
 }
 
-bool MemoryPool::init(intptr_t poolId, const MemPoolPolicy* memPoolPolicy)
+bool ExtMemoryPool::init(intptr_t poolId, rawAllocType rawAlloc,
+                         rawFreeType rawFree, size_t granularity,
+                         bool keepAllMemory, bool fixedPool)
 {
+    this->poolId = poolId;
+    this->rawAlloc = rawAlloc;
+    this->rawFree = rawFree;
+    this->granularity = granularity;
+    this->keepAllMemory = keepAllMemory;
+    this->fixedPool = fixedPool;
+    this->delayRegsReleasing = false;
     initTLS();
-    extMemPool.poolId = poolId;
-    extMemPool.rawAlloc = memPoolPolicy->pAlloc;
-    extMemPool.rawFree = memPoolPolicy->pFree;
-    extMemPool.granularity = memPoolPolicy->granularity;
-    if (!extMemPool.backend.bootstrap(&extMemPool)) return false;
+    // allocate initial region for user's objects placement
+    return backend.bootstrap(this);
+}
 
-#if USE_WINTHREAD
+void ExtMemoryPool::initTLS() { new (&tlsPointerKey) TLSKey(); }
+
+TLSData *ExtMemoryPool::getTLS()
+{
+    return tlsPointerKey.getThreadMallocTLS();
+}
+
+void ExtMemoryPool::clearTLS()
+{
+    tlsPointerKey.setThreadMallocTLS(NULL);
+}
+
+bool MemoryPool::init(intptr_t poolId, const MemPoolPolicy *policy)
+{
+    if (!extMemPool.init(poolId, policy->pAlloc, policy->pFree,
+               policy->granularity? policy->granularity : defaultGranularity,
+               policy->keepAllMemory, policy->fixedPool))
+        return false;
     {
         MallocMutex::scoped_lock lock(memPoolListLock);
         next = defaultMemPool->next;
@@ -863,27 +903,25 @@ bool MemoryPool::init(intptr_t poolId, const MemPoolPolicy* memPoolPolicy)
         if (next)
             next->prev = this;
     }
-#endif
     return true;
 }
 
 void MemoryPool::reset()
 {
-    for (LargeMemoryBlock *lmb = extMemPool.loHead; lmb; ) {
-        removeBackRef(lmb->backRefIdx);
-        lmb = lmb->gNext;
-    }
-    extMemPool.loHead = NULL;
+    // memory is not releasing during pool reset
+    // TODO: mark regions to release unused on next reset()
+    extMemPool.delayRegionsReleasing(true);
+
     bootStrapBlocks.reset();
     orphanedBlocks.reset();
     extMemPool.reset();
 
-    initTLS();
+    extMemPool.initTLS();
+    extMemPool.delayRegionsReleasing(false);
 }
 
 void MemoryPool::destroy()
 {
-#if USE_WINTHREAD
     {
         MallocMutex::scoped_lock lock(memPoolListLock);
         // remove itself from global pool list
@@ -892,17 +930,25 @@ void MemoryPool::destroy()
         if (next)
             next->prev = prev;
     }
-#endif
-    // 16KB blocks do not have backreferencies, only large objects do
-    for (LargeMemoryBlock *lmb = extMemPool.loHead; lmb; ) {
-        removeBackRef(lmb->backRefIdx);
-        lmb = lmb->gNext;
+    // 16KB blocks in non-default pool does not have backreferencies,
+    // only large objects do
+    for (LargeMemoryBlock *lmb = extMemPool.lmbList.getHead(); lmb; ) {
+        LargeMemoryBlock *next = lmb->gNext;
+        if (extMemPool.userPool())
+            removeBackRef(lmb->backRefIdx);
+        // For speeding up pool destroy, not returning blocks
+        // to backend, as we destroy backend at ones.
+        // But must return blocks that are too big to hit backend.
+        if (ExtMemoryPool::tooLargeToBeBined(lmb->unalignedSize))
+            extMemPool.backend.putLargeBlock(lmb);
+        lmb = next;
     }
     extMemPool.destroy();
 }
 
 void Bin::verifyTLSBin (size_t size) const
 {
+    suppress_unused_warning(size);
 #if MALLOC_DEBUG
 /* The debug version verifies the TLSBin as needed */
     uint32_t objSize = getObjectSize(size);
@@ -1172,6 +1218,8 @@ void Block::privatizeOrphaned(Bin* bin)
     /* There is not a race here since no other thread owns this block */
     MALLOC_ASSERT( !owner.defined(), ASSERT_TEXT );
     owner = ThreadId::get();
+    MALLOC_ASSERT(orphaned, ASSERT_TEXT);
+    orphaned = false;
     // It is safe to change nextPrivatizable, as publicFreeList is not null
     MALLOC_ASSERT( isNotForUse(nextPrivatizable), ASSERT_TEXT );
     nextPrivatizable = (Block*)bin;
@@ -1189,6 +1237,8 @@ void Block::shareOrphaned(const Bin *bin)
 {
     MALLOC_ASSERT( bin, ASSERT_TEXT );
     STAT_increment(owner, index, freeBlockPublic);
+    MALLOC_ASSERT(!orphaned, ASSERT_TEXT);
+    orphaned = true;
     // need to set publicFreeList to non-zero, so other threads
     // will not change nextPrivatizable and it can be zeroed.
     if ((intptr_t)nextPrivatizable==(intptr_t)bin) {
@@ -1235,6 +1285,7 @@ void Block::cleanBlockHeader()
     freeList = NULL;
     allocatedCount = 0;
     isFull = 0;
+    orphaned = false;
 
     publicFreeList = NULL;
 }
@@ -1330,7 +1381,7 @@ void FreeBlockPool::returnBlock(Block *block)
             helper = currBl->next;
             if (!backend->inUserPool())
                 removeBackRef(currBl->backRefIdx);
-            backend->put16KBlock(currBl, /*startup=*/false);
+            backend->put16KBlock(currBl);
         }
     }
     insertBlock(block);
@@ -1346,7 +1397,7 @@ bool FreeBlockPool::releaseAllBlocks()
         // 16KB blocks in user's pools not have valid backRefIdx
         if (!backend->inUserPool())
             removeBackRef(currBl->backRefIdx);
-        backend->put16KBlock(currBl, /*startup=*/false);
+        backend->put16KBlock(currBl);
     }
     head = tail = NULL;
     size = 0;
@@ -1416,6 +1467,41 @@ FreeObject *Block::findObjectToFree(void *object) const
     return objectToFree;
 }
 
+void TLSData::release(MemoryPool *mPool)
+{
+    freeBlocks.releaseAllBlocks();
+
+    for (unsigned index = 0; index < numBlockBins; index++) {
+        Block *activeBlk = bin[index].getActiveBlock();
+        if (!activeBlk)
+            continue;
+        Block *threadlessBlock = activeBlk->previous;
+        while (threadlessBlock) {
+            Block *threadBlock = threadlessBlock->previous;
+            if (threadlessBlock->empty()) {
+                /* we destroy the thread, so not use its block pool */
+                mPool->returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);
+            } else {
+                mPool->orphanedBlocks.put(bin+index, threadlessBlock);
+            }
+            threadlessBlock = threadBlock;
+        }
+        threadlessBlock = activeBlk;
+        while (threadlessBlock) {
+            Block *threadBlock = threadlessBlock->next;
+            if (threadlessBlock->empty()) {
+                /* we destroy the thread, so not use its block pool */
+                mPool->returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);
+            } else {
+                mPool->orphanedBlocks.put(bin+index, threadlessBlock);
+            }
+            threadlessBlock = threadBlock;
+        }
+        bin[index].resetActiveBlock();
+    }
+}
+
+
 #if MALLOC_CHECK_RECURSION
 // TODO: Use deducated heap for this
 
@@ -1449,7 +1535,7 @@ StartupBlock *StartupBlock::getBlock()
     if (backRefIdx.isInvalid()) return NULL;
 
     StartupBlock *block = static_cast<StartupBlock*>(
-        defaultMemPool->extMemPool.backend.get16KBlock(1, /*startup=*/true));
+        defaultMemPool->extMemPool.backend.get16KBlock(1));
     if (!block) return NULL;
 
     block->cleanBlockHeader();
@@ -1461,9 +1547,6 @@ StartupBlock *StartupBlock::getBlock()
     return block;
 }
 
-/* TODO: Function is called when malloc nested call is detected, so simultaneous
-   usage from different threads are unprobable, so block pre-allocation
-   can be not useful, and the code might be simplified. */
 FreeObject *StartupBlock::allocate(size_t size)
 {
     FreeObject *result;
@@ -1475,17 +1558,22 @@ FreeObject *StartupBlock::allocate(size_t size)
     size = alignUp(size, sizeof(size_t));
     // We need size of an object to implement msize.
     size_t reqSize = size + sizeof(size_t);
-    // speculatively allocates newBlock to later use or return it as unused
-    if (!firstStartupBlock || firstStartupBlock->availableSize() < reqSize)
-        if (!(newBlock = StartupBlock::getBlock()))
-            return NULL;
-
+    // speculatively allocates newBlock to try avoid allocation while holding lock
+    /* TODO: The function is called when malloc nested call is detected,
+             so simultaneous usage from different threads seems unlikely.
+             If pre-allocation is found useless, the code might be simplified. */
+    if (!firstStartupBlock || firstStartupBlock->availableSize() < reqSize) {
+        newBlock = StartupBlock::getBlock();
+        if (!newBlock) return NULL;
+    }
     {
         MallocMutex::scoped_lock scoped_cs(startupMallocLock);
-
+        // Re-check whether we need a new block (conditions might have changed)
         if (!firstStartupBlock || firstStartupBlock->availableSize() < reqSize) {
-            if (!newBlock && !(newBlock = StartupBlock::getBlock()))
-                return NULL;
+            if (!newBlock) {
+                newBlock = StartupBlock::getBlock();
+                if (!newBlock) return NULL;
+            }
             newBlock->next = (Block*)firstStartupBlock;
             if (firstStartupBlock)
                 firstStartupBlock->previous = (Block*)newBlock;
@@ -1555,6 +1643,47 @@ void StartupBlock::free(void *ptr)
 static intptr_t mallocInitialized;   // implicitly initialized to 0
 static MallocMutex initMutex;
 
+#include "../tbb/tbb_version.h"
+
+/** The leading "\0" is here so that applying "strings" to the binary
+    delivers a clean result. */
+static char VersionString[] = "\0" TBBMALLOC_VERSION_STRINGS;
+
+#if _XBOX
+bool GetBoolEnvironmentVariable(const char *name) { return false; }
+#else
+bool GetBoolEnvironmentVariable(const char *name)
+{
+    if( const char* s = getenv(name) )
+        return strcmp(s,"0") != 0;
+    return false;
+}
+#endif
+
+void MemoryPool::initDefaultPool()
+{
+#if __linux__
+    if (FILE *f = fopen("/proc/meminfo", "r")) {
+        const int SZ = 100;
+        char buf[SZ];
+        long long totalHugePages=0, hugePageSize=0;
+        MALLOC_ASSERT(sizeof(totalHugePages) >= 8,
+                      "At least 64 bits required for keeping page size/numbers.");
+
+        while (fgets(buf, SZ, f)) {
+            if (1 == sscanf(buf, "HugePages_Total: %llu", &totalHugePages))
+                continue;
+            sscanf(buf, "Hugepagesize: %llu kB", &hugePageSize);
+        }
+        fclose(f);
+        if (totalHugePages)
+            ExtMemoryPool::useHugePages = true;
+        if (hugePageSize)
+            ExtMemoryPool::hugePageSize = hugePageSize*1024;
+    }
+#endif
+}
+
 inline bool isMallocInitialized() {
     // Load must have acquire fence; otherwise thread taking "initialized" path
     // might perform textually later loads *before* mallocInitialized becomes 2.
@@ -1576,17 +1705,16 @@ static void initMemoryManager()
     MALLOC_ASSERT( 2*blockHeaderAlignment == sizeof(Block), ASSERT_TEXT );
     MALLOC_ASSERT( sizeof(FreeObject) == sizeof(void*), ASSERT_TEXT );
 
-    defaultMemPool->extMemPool.rawAlloc = NULL;
-    defaultMemPool->extMemPool.rawFree = NULL;
-    defaultMemPool->extMemPool.granularity = 4*1024; // i.e., page size
+    bool initOk = defaultMemPool->
+        extMemPool.init(0, NULL, NULL, scalableMallocPoolGranularity,
+                        /*keepAllMemory=*/false, /*fixedPool=*/false);
 // TODO: add error handling, and on error do something better than exit(1)
-    if (!defaultMemPool->extMemPool.backend.bootstrap(&defaultMemPool->extMemPool)
-        || !initBackRefMaster(&defaultMemPool->extMemPool.backend)) {
+    if (!initOk || !initBackRefMaster(&defaultMemPool->extMemPool.backend)) {
         fprintf (stderr, "The memory manager cannot access sufficient memory to initialize; exiting \n");
         exit(1);
     }
-    defaultMemPool->initTLS();
     ThreadId::init();      // Create keys for thread id
+    MemoryPool::initDefaultPool();
 #if COLLECT_STATISTICS
     initStatisticsCollection();
 #endif
@@ -1614,6 +1742,11 @@ static void doInitialization()
         // might become remotely visible before side effects of
         // initMemoryManager() become remotely visible.
         FencedStore( mallocInitialized, 2 );
+        if( GetBoolEnvironmentVariable("TBB_VERSION") ) {
+            fputs(VersionString+1,stderr);
+            fprintf(stderr, "TBBmalloc: scalable allocator\t%s\n",
+                    ExtMemoryPool::useHugePages? "use huge pages" : "no huge pages" );
+        }
     }
     /* It can't be 0 or I would have initialized it */
     MALLOC_ASSERT( mallocInitialized==2, ASSERT_TEXT );
@@ -1658,18 +1791,16 @@ FreeObject *Block::allocateFromBumpPtr()
 
 inline FreeObject* Block::allocate()
 {
-    FreeObject *result;
-
     MALLOC_ASSERT( owner.own(), ASSERT_TEXT );
 
     /* for better cache locality, first looking in the free list. */
-    if ( (result = allocateFromFreeList()) ) {
+    if ( FreeObject *result = allocateFromFreeList() ) {
         return result;
     }
     MALLOC_ASSERT( !freeList, ASSERT_TEXT );
 
     /* if free list is empty, try thread local bump pointer allocation. */
-    if ( (result = allocateFromBumpPtr()) ) {
+    if ( FreeObject *result = allocateFromBumpPtr() ) {
         return result;
     }
     MALLOC_ASSERT( !bumpPtr, ASSERT_TEXT );
@@ -1699,6 +1830,50 @@ void Bin::processLessUsedBlock(MemoryPool *memPool, Block *block)
     }
 }
 
+#if USE_PTHREAD && (__TBB_SOURCE_DIRECTLY_INCLUDED || __TBB_USE_DLOPEN_REENTRANCY_WORKAROUND)
+
+/* Decrease race interval between dynamic library unloading and pthread key
+   destructor. Protect only Pthreads with supported unloading. */
+class ShutdownSync {
+/* flag is the number of threads in pthread key dtor body
+   (i.e., between threadDtorStart() and threadDtorDone())
+   or the signal to skip dtor, if flag < 0 */
+    intptr_t flag;
+    static const intptr_t skipDtor = INTPTR_MIN/2;
+public:
+/* Suppose that 2*abs(skipDtor) or more threads never call threadExitStart()
+   simultaneously, so flag is never becomes negative because of that. */
+    bool threadDtorStart() {
+        if (flag < 0)
+            return false;
+        if (AtomicIncrement(flag) <= 0) { // note that new value returned
+            AtomicAdd(flag, -1);  // flag is spoiled by us, restore it
+            return false;
+        }
+        return true;
+    }
+    void threadDtorDone() {
+        AtomicAdd(flag, -1);
+    }
+    void processExit() {
+        if (AtomicAdd(flag, skipDtor) != 0)
+            SpinWaitUntilEq(flag, skipDtor);
+    }
+};
+
+#else
+
+class ShutdownSync {
+public:
+    bool threadDtorStart() { return true; }
+    void threadDtorDone() { }
+    void processExit() { }
+};
+
+#endif // USE_PTHREAD && (__TBB_SOURCE_DIRECTLY_INCLUDED || __TBB_USE_DLOPEN_REENTRANCY_WORKAROUND)
+
+static ShutdownSync shutdownSync;
+
 /*
  * All aligned allocations fall into one of the following categories:
  *  1. if both request size and alignment are <= maxSegregatedObjectSize,
@@ -1719,12 +1894,12 @@ static void *allocateAligned(MemoryPool *memPool, size_t size, size_t alignment)
 
     void *result;
     if (size<=maxSegregatedObjectSize && alignment<=maxSegregatedObjectSize)
-        result = internalPoolMalloc((rml::MemoryPool*)memPool, alignUp(size? size: sizeof(size_t), alignment));
+        result = internalPoolMalloc(memPool, alignUp(size? size: sizeof(size_t), alignment));
     else if (size<minLargeObjectSize) {
         if (alignment<=fittingAlignment)
-            result = internalMalloc(size);
+            result = internalPoolMalloc(memPool, size);
         else if (size+alignment < minLargeObjectSize) {
-            void *unaligned = internalMalloc(size+alignment);
+            void *unaligned = internalPoolMalloc(memPool, size+alignment);
             if (!unaligned) return NULL;
             result = alignUp(unaligned, alignment);
         } else
@@ -1735,7 +1910,7 @@ static void *allocateAligned(MemoryPool *memPool, size_t size, size_t alignment)
         if (!isMallocInitialized())
             doInitialization();
         // take into account only alignment that are higher then natural
-        result = mallocLargeObject(&memPool->extMemPool, size,
+        result = memPool->extMemPool.mallocLargeObject(size,
                                    largeObjectAlignment>alignment?
                                    largeObjectAlignment: alignment);
     }
@@ -1759,7 +1934,7 @@ static void *reallocAligned(MemoryPool *memPool, void *ptr,
         } else {
             copySize = lmb->objectSize;
             result = alignment ? allocateAligned(memPool, size, alignment) :
-                internalPoolMalloc((rml::MemoryPool*)memPool, size);
+                internalPoolMalloc(memPool, size);
         }
     } else {
         Block* block = (Block *)alignDown(ptr, blockSize);
@@ -1768,12 +1943,12 @@ static void *reallocAligned(MemoryPool *memPool, void *ptr,
             return ptr;
         } else {
             result = alignment ? allocateAligned(memPool, size, alignment) :
-                internalPoolMalloc((rml::MemoryPool*)memPool, size);
+                internalPoolMalloc(memPool, size);
         }
     }
     if (result) {
         memcpy(result, ptr, copySize<size? copySize: size);
-        internalPoolFree((rml::MemoryPool*)memPool, ptr);
+        internalPoolFree(memPool, ptr);
     }
     return result;
 }
@@ -1788,7 +1963,7 @@ inline bool Block::isProperlyPlaced(const void *object) const
 FreeObject *Block::findAllocatedObject(const void *address) const
 {
     // calculate offset from the end of the block space
-    uintptr_t offset = (uintptr_t)this + blockSize - (uintptr_t)address;
+    uint16_t offset = (uintptr_t)this + blockSize - (uintptr_t)address;
     MALLOC_ASSERT( offset<=blockSize-sizeof(Block), ASSERT_TEXT );
     // find offset difference from a multiple of allocation size
     offset %= objectSize;
@@ -1823,7 +1998,11 @@ bool isLargeObject(void *object)
     LargeObjectHdr *header = (LargeObjectHdr*)object - 1;
     BackRefIdx idx = safer_dereference(&header->backRefIdx);
 
-    return idx.isLargeObject() && getBackRef(idx) == header;
+    return idx.isLargeObject()
+        // in valid LargeObjectHdr memoryBlock points somewhere before header
+        // TODO: more strict check
+        && (uintptr_t)header->memoryBlock < (uintptr_t)header
+        && getBackRef(idx) == header;
 }
 
 static inline bool isSmallObject (void *ptr)
@@ -1862,14 +2041,12 @@ static inline void freeSmallObject(MemoryPool *memPool, void *object)
 
 }
 
-static void *internalPoolMalloc(rml::MemoryPool* mPool, size_t size)
+static void *internalPoolMalloc(MemoryPool* memPool, size_t size)
 {
     Bin* bin;
     Block * mallocBlock;
-    FreeObject *result = NULL;
-    rml::internal::MemoryPool* memPool = (rml::internal::MemoryPool*)mPool;
 
-    if (!mPool) return NULL;
+    if (!memPool) return NULL;
 
     if (!size) size = sizeof(size_t);
 
@@ -1877,26 +2054,21 @@ static void *internalPoolMalloc(rml::MemoryPool* mPool, size_t size)
      * Use Large Object Allocation
      */
     if (size >= minLargeObjectSize)
-        return mallocLargeObject(&memPool->extMemPool, size, largeObjectAlignment);
+        return memPool->extMemPool.mallocLargeObject(size, largeObjectAlignment);
 
     /*
      * Get an element in thread-local array corresponding to the given size;
      * It keeps ptr to the active block for allocations of this size
      */
     bin = memPool->getAllocationBin(size);
-    if ( !bin )
-        return NULL;
+    if ( !bin ) return NULL;
 
-    /* Get the block of you want to try to allocate in. */
-    mallocBlock = bin->getActiveBlock();
-
-    if (mallocBlock) {
-        do {
-            if( (result = mallocBlock->allocate()) ) {
-                return result;
-            }
-            // the previous block, if any, should be empty enough
-        } while( (mallocBlock = bin->setPreviousBlockActive()) );
+    /* Get a block to try to allocate in. */
+    for( mallocBlock = bin->getActiveBlock(); mallocBlock;
+         mallocBlock = bin->setPreviousBlockActive() ) // the previous block should be empty enough
+    {
+        if( FreeObject *result = mallocBlock->allocate() )
+            return result;
     }
 
     /*
@@ -1908,12 +2080,11 @@ static void *internalPoolMalloc(rml::MemoryPool* mPool, size_t size)
             bin->moveBlockToBinFront(mallocBlock);
         }
         MALLOC_ASSERT( mallocBlock->freeListNonNull(), ASSERT_TEXT );
-        if ( (result = mallocBlock->allocateFromFreeList()) ) {
+        if ( FreeObject *result = mallocBlock->allocateFromFreeList() )
             return result;
-        }
         /* Else something strange happened, need to retry from the beginning; */
         TRACEF(( "[ScalableMalloc trace] Something is wrong: no objects in public free list; reentering.\n" ));
-        return internalPoolMalloc(mPool, size);
+        return internalPoolMalloc(memPool, size);
     }
 
     /*
@@ -1923,9 +2094,8 @@ static void *internalPoolMalloc(rml::MemoryPool* mPool, size_t size)
     while (mallocBlock) {
         bin->pushTLSBin(mallocBlock);
         bin->setActiveBlock(mallocBlock); // TODO: move under the below condition?
-        if( (result = mallocBlock->allocate()) ) {
+        if( FreeObject *result = mallocBlock->allocate() )
             return result;
-        }
         mallocBlock = memPool->orphanedBlocks.get(bin, size);
     }
 
@@ -1936,12 +2106,11 @@ static void *internalPoolMalloc(rml::MemoryPool* mPool, size_t size)
     if (mallocBlock) {
         bin->pushTLSBin(mallocBlock);
         bin->setActiveBlock(mallocBlock);
-        if( (result = mallocBlock->allocate()) ) {
+        if( FreeObject *result = mallocBlock->allocate() )
             return result;
-        }
         /* Else something strange happened, need to retry from the beginning; */
         TRACEF(( "[ScalableMalloc trace] Something is wrong: no objects in empty block; reentering.\n" ));
-        return internalPoolMalloc(mPool, size);
+        return internalPoolMalloc(memPool, size);
     }
     /*
      * else nothing works so return NULL
@@ -1950,15 +2119,17 @@ static void *internalPoolMalloc(rml::MemoryPool* mPool, size_t size)
     return NULL;
 }
 
-static bool internalPoolFree(rml::MemoryPool *mPool, void *object)
+static bool internalPoolFree(MemoryPool *memPool, void *object)
 {
-    if (!mPool || !object) return false;
+    if (!memPool || !object) return false;
 
-    rml::internal::MemoryPool* memPool = (rml::internal::MemoryPool*)mPool;
+    // The library is initialized at allocation call, so releasing while
+    // not initialized means foreign object is releasing.
+    MALLOC_ASSERT(isMallocInitialized(), ASSERT_TEXT);
     MALLOC_ASSERT(memPool->extMemPool.userPool() || isRecognized(object),
                   "Invalid pointer in pool_free detected.");
     if (isLargeObject(object))
-        freeLargeObject(&memPool->extMemPool, object);
+        memPool->extMemPool.freeLargeObject(object);
     else
         freeSmallObject(memPool, object);
     return true;
@@ -1971,18 +2142,18 @@ static void *internalMalloc(size_t size)
 #if MALLOC_CHECK_RECURSION
     if (RecursiveMallocCallProtector::sameThreadActive())
         return size<minLargeObjectSize? StartupBlock::allocate(size) :
-            (FreeObject*)mallocLargeObject(&defaultMemPool->extMemPool, size, blockSize, /*startupAlloc=*/ true);
+            (FreeObject*)defaultMemPool->extMemPool.mallocLargeObject(size, blockSize);
 #endif
 
     if (!isMallocInitialized())
         doInitialization();
 
-    return internalPoolMalloc((rml::MemoryPool*)defaultMemPool, size);
+    return internalPoolMalloc(defaultMemPool, size);
 }
 
 static void internalFree(void *object)
 {
-    internalPoolFree((rml::MemoryPool*)defaultMemPool, object);
+    internalPoolFree(defaultMemPool, object);
 }
 
 static size_t internalMsize(void* ptr)
@@ -2013,22 +2184,51 @@ static size_t internalMsize(void* ptr)
 
 using namespace rml::internal;
 
-rml::MemoryPool *pool_create(intptr_t pool_id, const MemPoolPolicy* memPoolPolicy)
+// legacy entry point saved for compatibility with binaries complied
+// with pre-6003 versions of TBB
+rml::MemoryPool *pool_create(intptr_t pool_id, const MemPoolPolicy *policy)
+{
+    rml::MemoryPool *pool;
+    MemPoolPolicy pol(policy->pAlloc, policy->pFree, policy->granularity);
+
+    pool_create_v1(pool_id, &pol, &pool);
+    return pool;
+}
+
+rml::MemPoolError pool_create_v1(intptr_t pool_id, const MemPoolPolicy *policy,
+                                 rml::MemoryPool **pool)
 {
+    if ( !policy->pAlloc || policy->version<MemPoolPolicy::VERSION
+         // empty pFree allowed only for fixed pools
+         || !(policy->fixedPool || policy->pFree) ) {
+        *pool = NULL;
+        return INVALID_POLICY;
+    }
+    if ( policy->version>MemPoolPolicy::VERSION // future versions are not supported
+         // new flags can be added in place of reserved, but default
+         // behaviour must be supported by this version
+         || policy->reserved ) {
+        *pool = NULL;
+        return UNSUPPORTED_POLICY;
+    }
     if (!isMallocInitialized())
         doInitialization();
-    if (!memPoolPolicy->pAlloc) return NULL;
 
     rml::internal::MemoryPool *memPool =
         (rml::internal::MemoryPool*)internalMalloc((sizeof(rml::internal::MemoryPool)));
-    if (!memPool) return NULL;
+    if (!memPool) {
+        *pool = NULL;
+        return NO_MEMORY;
+    }
     memset(memPool, 0, sizeof(rml::internal::MemoryPool));
-    if (!memPool->init(pool_id, memPoolPolicy)) {
+    if (!memPool->init(pool_id, policy)) {
         internalFree(memPool);
-        return NULL;
+        *pool = NULL;
+        return NO_MEMORY;
     }
 
-    return (rml::MemoryPool*)memPool;
+    *pool = (rml::MemoryPool*)memPool;
+    return POOL_OK;
 }
 
 bool pool_destroy(rml::MemoryPool* memPool)
@@ -2050,23 +2250,49 @@ bool pool_reset(rml::MemoryPool* memPool)
 
 void *pool_malloc(rml::MemoryPool* mPool, size_t size)
 {
-    return internalPoolMalloc(mPool, size);
+    return internalPoolMalloc((rml::internal::MemoryPool*)mPool, size);
 }
 
 void *pool_realloc(rml::MemoryPool* mPool, void *object, size_t size)
 {
     if (!object)
-        return internalPoolMalloc(mPool, size);
+        return internalPoolMalloc((rml::internal::MemoryPool*)mPool, size);
     if (!size) {
-        internalPoolFree(mPool, object);
+        internalPoolFree((rml::internal::MemoryPool*)mPool, object);
         return NULL;
     }
     return reallocAligned((rml::internal::MemoryPool*)mPool, object, size, 0);
 }
 
+void *pool_aligned_malloc(rml::MemoryPool* mPool, size_t size, size_t alignment)
+{
+    if (!isPowerOfTwo(alignment) || 0==size)
+        return NULL;
+
+    return allocateAligned((rml::internal::MemoryPool*)mPool, size, alignment);
+}
+
+void *pool_aligned_realloc(rml::MemoryPool* memPool, void *ptr, size_t size, size_t alignment)
+{
+    if (!isPowerOfTwo(alignment))
+        return NULL;
+    rml::internal::MemoryPool *mPool = (rml::internal::MemoryPool*)memPool;
+    void *tmp;
+
+    if (!ptr)
+        tmp = allocateAligned(mPool, size, alignment);
+    else if (!size) {
+        internalPoolFree(mPool, ptr);
+        return NULL;
+    } else
+        tmp = reallocAligned(mPool, ptr, size, alignment);
+
+    return tmp;
+}
+
 bool pool_free(rml::MemoryPool *mPool, void *object)
 {
-    return internalPoolFree(mPool, object);
+    return internalPoolFree((rml::internal::MemoryPool*)mPool, object);
 }
 
 } // namespace rml
@@ -2086,73 +2312,71 @@ static unsigned int threadGoingDownCount = 0;
  * for pthreads, the function is set as a callback in pthread_key_create for TLS bin.
  * it will be automatically called at thread exit with the key value as the argument.
  *
- * for Windows, it should be called directly e.g. from DllMain; the argument can be NULL
- * one should include "TypeDefinitions.h" for the declaration of this function.
+ * for Windows, it should be called directly e.g. from DllMain
 */
-extern "C" void mallocThreadShutdownNotification(void* arg)
+void mallocThreadShutdownNotification(void* arg)
 {
-    Block *threadBlock;
-    Block *threadlessBlock;
-    unsigned int index;
-
     // Check whether TLS has been initialized
     if (!isMallocInitialized()) return;
 
     TRACEF(( "[ScalableMalloc trace] Thread id %d blocks return start %d\n",
              getThreadId(),  threadGoingDownCount++ ));
 #if USE_WINTHREAD
-    // The routine is called once, need to walk through all pools on Windows
+    MallocMutex::scoped_lock lock(MemoryPool::memPoolListLock);
+    // The routine is called once per thread, need to walk through all pools on Windows
     for (MemoryPool *memPool = defaultMemPool; memPool; memPool = memPool->next) {
-        TLSData *tls = memPool->getTLS();
+        TLSData *tls = memPool->extMemPool.getTLS();
 #else
-        // The routine is called for each memPool, just need to get its pointer from TLSData.
+        if (!shutdownSync.threadDtorStart()) return;
+        // The routine is called for each memPool, just need to get memPool from TLSData.
         TLSData *tls = (TLSData*)arg;
         MemoryPool *memPool = tls->getMemPool();
 #endif
         if (tls) {
-            Bin *tlsBin = tls->bin;
-            tls->pool.releaseAllBlocks();
-
-            for (index = 0; index < numBlockBins; index++) {
-                if (tlsBin[index].activeBlk==NULL)
-                    continue;
-                threadlessBlock = tlsBin[index].activeBlk->previous;
-                while (threadlessBlock) {
-                    threadBlock = threadlessBlock->previous;
-                    if (threadlessBlock->allocatedCount==0 && threadlessBlock->publicFreeList==NULL) {
-                        /* we destroy the thread, so not use its block pool */
-                        memPool->returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);
-                    } else {
-                        memPool->orphanedBlocks.put(tlsBin+index, threadlessBlock);
-                    }
-                    threadlessBlock = threadBlock;
-                }
-                threadlessBlock = tlsBin[index].activeBlk;
-                while (threadlessBlock) {
-                    threadBlock = threadlessBlock->next;
-                    if (threadlessBlock->allocatedCount==0 && threadlessBlock->publicFreeList==NULL) {
-                        /* we destroy the thread, so not use its block pool */
-                        memPool->returnEmptyBlock(threadlessBlock, /*poolTheBlock=*/false);
-                    } else {
-                        memPool->orphanedBlocks.put(tlsBin+index, threadlessBlock);
-                    }
-                    threadlessBlock = threadBlock;
-                }
-                tlsBin[index].activeBlk = 0;
-            }
+            tls->release(memPool);
             memPool->bootStrapBlocks.free(tls);
-            memPool->clearTLS();
+            memPool->extMemPool.clearTLS();
         }
-
 #if USE_WINTHREAD
     } // for memPool (Windows only)
+#else
+    shutdownSync.threadDtorDone();
 #endif
 
     TRACEF(( "[ScalableMalloc trace] Thread id %d blocks return end\n", getThreadId() ));
 }
 
-extern "C" void mallocProcessShutdownNotification(void)
+#if USE_WINTHREAD
+extern "C" void __TBB_mallocThreadShutdownNotification()
 {
+    mallocThreadShutdownNotification(NULL);
+}
+#endif
+
+extern "C" void __TBB_mallocProcessShutdownNotification()
+{
+    if (!isMallocInitialized()) return;
+
+    shutdownSync.processExit();
+#if __TBB_SOURCE_DIRECTLY_INCLUDED
+/* Pthread keys must be deleted as soon as possible to not call key dtor
+   on thread termination when then the tbbmalloc code can be already unloaded.
+*/
+    defaultMemPool->destroy();
+    destroyBackRefMaster(&defaultMemPool->extMemPool.backend);
+    ThreadId::destroy();      // Delete key for thread id
+#elif __TBB_USE_DLOPEN_REENTRANCY_WORKAROUND
+/* In most cases we prevent unloading tbbmalloc, and don't clean up memory
+   on process shutdown. When impossible to prevent, library unload results
+   in shutdown notification, and it makes sense to release unused memory
+   at that point (we can't release all memory because it's possible that
+   it will be accessed after this point).
+   TODO: better support systems where we can't prevent unloading by removing
+   pthread destructors and releasing caches.
+ */
+    defaultMemPool->extMemPool.hardCachesCleanup();
+#endif // __TBB_SOURCE_DIRECTLY_INCLUDED
+
 #if COLLECT_STATISTICS
     ThreadId nThreads = ThreadIdCount;
     for( int i=1; i<=nThreads && i<MAX_THREADS; ++i )
@@ -2183,7 +2407,7 @@ extern "C" void safer_scalable_free (void *object, void (*original_free)(void*))
     // must check 1st for large object, because small object check touches 4 pages on left,
     // and it can be unaccessable
     if (isLargeObject(object))
-        freeLargeObject(&defaultMemPool->extMemPool, object);
+        defaultMemPool->extMemPool.freeLargeObject(object);
     else if (isSmallObject(object))
         freeSmallObject(defaultMemPool, object);
     else if (original_free)
@@ -2224,7 +2448,7 @@ extern "C" void* scalable_realloc(void* ptr, size_t size)
  */
 extern "C" void* safer_scalable_realloc (void* ptr, size_t sz, void* original_realloc)
 {
-    void *tmp;
+    void *tmp; // TODO: fix warnings about uninitialized use of tmp
 
     if (!ptr) {
         tmp = internalMalloc(sz);
@@ -2259,6 +2483,8 @@ extern "C" void* safer_scalable_realloc (void* ptr, size_t sz, void* original_re
         tmp = original_realloc_ptr(ptr,sz);
     }
 #endif
+    else tmp = NULL;
+
     if (!tmp) errno = ENOMEM;
     return tmp;
 }
@@ -2376,6 +2602,7 @@ extern "C" void * safer_scalable_aligned_realloc(void *ptr, size_t size, size_t
         }
     }
 #endif
+    suppress_unused_warning(orig_function);
     if (!tmp) errno = ENOMEM;
     return tmp;
 }
diff --git a/src/tbbmalloc/large_objects.cpp b/src/tbbmalloc/large_objects.cpp
index 51cf1d2..b07ee5b 100644
--- a/src/tbbmalloc/large_objects.cpp
+++ b/src/tbbmalloc/large_objects.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -38,71 +38,53 @@ static struct LargeBlockCacheStat {
     uintptr_t age;
 } loCacheStat;
 
-static uintptr_t cleanupCacheIfNeed(ExtMemoryPool *extMemPool);
-
-bool CachedLargeBlocksL::push(ExtMemoryPool *extMemPool, LargeMemoryBlock *ptr)
-{   
+bool LargeObjectCache::CacheBin::put(ExtMemoryPool *extMemPool,
+                                     LargeMemoryBlock *ptr)
+{
+    bool blockCached = true;
     ptr->prev = NULL;
-    ptr->age  = cleanupCacheIfNeed(extMemPool);
-
-    MallocMutex::scoped_lock scoped_cs(lock);
-    if (lastCleanedAge) {
-        ptr->next = first;
-        first = ptr;
-        if (ptr->next) ptr->next->prev = ptr;
-        if (!last) {
-            MALLOC_ASSERT(0 == oldest, ASSERT_TEXT);
-            oldest = ptr->age;
-            last = ptr;
+    ptr->age  = extMemPool->loc.cleanupCacheIfNeed(extMemPool);
+
+    {
+        MallocMutex::scoped_lock scoped_cs(lock);
+        if (lastCleanedAge) {
+            ptr->next = first;
+            first = ptr;
+            if (ptr->next) ptr->next->prev = ptr;
+            if (!last) {
+                MALLOC_ASSERT(0 == oldest, ASSERT_TEXT);
+                oldest = ptr->age;
+                last = ptr;
+            }
+        } else {
+            // 1st object of such size was released.
+            // Not cache it, and remeber when this occurs
+            // to take into account during cache miss.
+            lastCleanedAge = ptr->age;
+            blockCached = false;
         }
-        return true;
-    } else {
-        // 1st object of such size was released.
-        // Not cache it, and remeber when this occurs
-        // to take into account during cache miss.
-        lastCleanedAge = ptr->age;
-        return false;
     }
+    return blockCached;
 }
 
-void LargeMemoryBlock::registerInPool(ExtMemoryPool *extMemPool)
+LargeMemoryBlock *LargeObjectCache::CacheBin::get(ExtMemoryPool *extMemPool,
+                                                  size_t size)
 {
-    MallocMutex::scoped_lock scoped_cs(extMemPool->largeObjLock);
-    gPrev = NULL;
-    gNext = extMemPool->loHead;
-    if (gNext)
-        gNext->gPrev = this;
-    extMemPool->loHead = this;
-}
-
-void LargeMemoryBlock::unregisterFromPool(ExtMemoryPool *extMemPool)
-{
-    MallocMutex::scoped_lock scoped_cs(extMemPool->largeObjLock);
-    if (extMemPool->loHead == this)
-        extMemPool->loHead = gNext;
-    if (gNext)
-        gNext->gPrev = gPrev;
-    if (gPrev)
-        gPrev->gNext = gNext;
-}
-
-LargeMemoryBlock *CachedLargeBlocksL::pop(ExtMemoryPool *extMemPool)
-{   
-    uintptr_t currAge = cleanupCacheIfNeed(extMemPool);
+    uintptr_t currAge = extMemPool->loc.cleanupCacheIfNeed(extMemPool);
     LargeMemoryBlock *result=NULL;
     {
         MallocMutex::scoped_lock scoped_cs(lock);
         if (first) {
             result = first;
             first = result->next;
-            if (first)  
+            if (first)
                 first->prev = NULL;
             else {
                 last = NULL;
                 oldest = 0;
             }
         } else {
-            /* If cache miss occured, set ageThreshold to twice the difference 
+            /* If cache miss occured, set ageThreshold to twice the difference
                between current time and last time cache was cleaned. */
             ageThreshold = 2*(currAge - lastCleanedAge);
         }
@@ -110,12 +92,12 @@ LargeMemoryBlock *CachedLargeBlocksL::pop(ExtMemoryPool *extMemPool)
     return result;
 }
 
-bool CachedLargeBlocksL::releaseLastIfOld(ExtMemoryPool *extMemPool,
-                                        uintptr_t currAge)
+bool LargeObjectCache::CacheBin::cleanToThreshold(ExtMemoryPool *extMemPool,
+                                                  uintptr_t currAge)
 {
     LargeMemoryBlock *toRelease = NULL;
     bool released = false;
- 
+
     /* oldest may be more recent then age, that's why cast to signed type
        was used. age overflow is also processed correctly. */
     if (last && (intptr_t)(currAge - oldest) > ageThreshold) {
@@ -137,7 +119,7 @@ bool CachedLargeBlocksL::releaseLastIfOld(ExtMemoryPool *extMemPool,
             MALLOC_ASSERT( toRelease, ASSERT_TEXT );
             lastCleanedAge = toRelease->age;
         }
-        else 
+        else
             return false;
     }
     released = toRelease;
@@ -145,19 +127,17 @@ bool CachedLargeBlocksL::releaseLastIfOld(ExtMemoryPool *extMemPool,
     while ( toRelease ) {
         LargeMemoryBlock *helper = toRelease->next;
         removeBackRef(toRelease->backRefIdx);
-        if (extMemPool->userPool())
-            toRelease->unregisterFromPool(extMemPool);
         extMemPool->backend.putLargeBlock(toRelease);
         toRelease = helper;
     }
     return released;
 }
 
-bool CachedLargeBlocksL::releaseAll(ExtMemoryPool *extMemPool)
+bool LargeObjectCache::CacheBin::cleanAll(ExtMemoryPool *extMemPool)
 {
     LargeMemoryBlock *toRelease = NULL;
     bool released = false;
- 
+
     if (last) {
         MallocMutex::scoped_lock scoped_cs(lock);
         // double check
@@ -166,8 +146,8 @@ bool CachedLargeBlocksL::releaseAll(ExtMemoryPool *extMemPool)
             last = NULL;
             first = NULL;
             oldest = 0;
-        } 
-        else 
+        }
+        else
             return false;
     }
     released = toRelease;
@@ -175,8 +155,6 @@ bool CachedLargeBlocksL::releaseAll(ExtMemoryPool *extMemPool)
     while ( toRelease ) {
         LargeMemoryBlock *helper = toRelease->next;
         removeBackRef(toRelease->backRefIdx);
-        if (extMemPool->userPool())
-            toRelease->unregisterFromPool(extMemPool);
         extMemPool->backend.putLargeBlock(toRelease);
         toRelease = helper;
     }
@@ -184,80 +162,76 @@ bool CachedLargeBlocksL::releaseAll(ExtMemoryPool *extMemPool)
 }
 
 // release from cache blocks that are older than ageThreshold
-bool ExtMemoryPool::doLOCacheCleanup(uintptr_t currAge)
+bool LargeObjectCache::regularCleanup(ExtMemoryPool *extMemPool, uintptr_t currAge)
 {
-    bool res = false;
+    bool released = false;
 
     for (int i = numLargeBlockBins-1; i >= 0; i--)
-        res |= cachedLargeBlocks[i].releaseLastIfOld(this, currAge);
-
-    return res;
+        if (bin[i].cleanToThreshold(extMemPool, currAge))
+            released = true;
+    return released;
 }
 
 bool ExtMemoryPool::softCachesCleanup()
 {
     // TODO: cleanup small objects as well
-    return doLOCacheCleanup(FencedLoad((intptr_t&)loCacheStat.age));
+    return loc.regularCleanup(this, FencedLoad((intptr_t&)loCacheStat.age));
 }
 
-static uintptr_t cleanupCacheIfNeed(ExtMemoryPool *extMemPool)
+uintptr_t LargeObjectCache::cleanupCacheIfNeed(ExtMemoryPool *extMemPool)
 {
-    /* loCacheStat.age overflow is OK, as we only want difference between 
+    /* loCacheStat.age overflow is OK, as we only want difference between
      * its current value and some recent.
      *
-     * Both malloc and free should increment loCacheStat.age, as in 
+     * Both malloc and free should increment loCacheStat.age, as in
      * a different case multiple cached blocks would have same age,
      * and accuracy of predictors suffers.
      */
     uintptr_t currAge = (uintptr_t)AtomicIncrement((intptr_t&)loCacheStat.age);
 
     if ( 0 == currAge % cacheCleanupFreq )
-        extMemPool->doLOCacheCleanup(currAge);
+        regularCleanup(extMemPool, currAge);
 
     return currAge;
 }
 
-static LargeMemoryBlock* getCachedLargeBlock(ExtMemoryPool *extMemPool, size_t size)
+LargeMemoryBlock *LargeObjectCache::get(ExtMemoryPool *extMemPool, size_t size)
 {
     MALLOC_ASSERT( size%largeBlockCacheStep==0, ASSERT_TEXT );
     LargeMemoryBlock *lmb = NULL;
-    // blockSize is the minimal alignment and thus the minimal size of a large object.
-    size_t idx = (size-minLargeObjectSize)/largeBlockCacheStep;
+    size_t idx = sizeToIdx(size);
     if (idx<numLargeBlockBins) {
-        lmb = extMemPool->cachedLargeBlocks[idx].pop(extMemPool);
+        lmb = bin[idx].get(extMemPool, size);
         if (lmb) {
-            MALLOC_ITT_SYNC_ACQUIRED(extMemPool->cachedLargeBlocks+idx);
+            MALLOC_ITT_SYNC_ACQUIRED(bin+idx);
             STAT_increment(getThreadId(), ThreadCommonCounters, allocCachedLargeBlk);
         }
     }
     return lmb;
 }
 
-void* mallocLargeObject(ExtMemoryPool *extMemPool, size_t size, size_t alignment,
-                        bool startupAlloc)
+void *ExtMemoryPool::mallocLargeObject(size_t size, size_t alignment)
 {
-    LargeMemoryBlock* lmb;
     size_t headersSize = sizeof(LargeMemoryBlock)+sizeof(LargeObjectHdr);
-    // TODO: take into account that they are already largeObjectAlignment-alinged
+    // TODO: take into account that they are already largeObjectAlignment-aligned
     size_t allocationSize = alignUp(size+headersSize+alignment, largeBlockCacheStep);
 
     if (allocationSize < size) // allocationSize is wrapped around after alignUp
         return NULL;
 
-    if (startupAlloc || !(lmb = getCachedLargeBlock(extMemPool, allocationSize))) {
-        BackRefIdx backRefIdx;
-
-        if ((backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/true)).isInvalid()) 
+    LargeMemoryBlock* lmb = loc.get(this, allocationSize);
+    if (!lmb) {
+        BackRefIdx backRefIdx = BackRefIdx::newBackRef(/*largeObj=*/true);
+        if (backRefIdx.isInvalid())
             return NULL;
-        // unalignedSize is set in result
-        lmb = extMemPool->backend.getLargeBlock(allocationSize, startupAlloc);
+
+        // unalignedSize is set in getLargeBlock
+        lmb = backend.getLargeBlock(allocationSize);
         if (!lmb) {
             removeBackRef(backRefIdx);
             return NULL;
         }
         lmb->backRefIdx = backRefIdx;
-        if (extMemPool->userPool())
-            lmb->registerInPool(extMemPool);
         STAT_increment(getThreadId(), ThreadCommonCounters, allocNewLargeObj);
     }
 
@@ -266,21 +240,19 @@ void* mallocLargeObject(ExtMemoryPool *extMemPool, size_t size, size_t alignment
     header->memoryBlock = lmb;
     header->backRefIdx = lmb->backRefIdx;
     setBackRef(header->backRefIdx, header);
- 
+
     lmb->objectSize = size;
 
     MALLOC_ASSERT( isLargeObject(alignedArea), ASSERT_TEXT );
     return alignedArea;
 }
 
-static bool freeLargeObjectToCache(ExtMemoryPool *extMemPool, LargeMemoryBlock* largeBlock)
+bool LargeObjectCache::put(ExtMemoryPool *extMemPool, LargeMemoryBlock *largeBlock)
 {
-    size_t size = largeBlock->unalignedSize;
-    size_t idx = (size-minLargeObjectSize)/largeBlockCacheStep;
+    size_t idx = sizeToIdx(largeBlock->unalignedSize);
     if (idx<numLargeBlockBins) {
-        MALLOC_ASSERT( size%largeBlockCacheStep==0, ASSERT_TEXT );
-        MALLOC_ITT_SYNC_RELEASING(extMemPool->cachedLargeBlocks+idx);
-        if (extMemPool->cachedLargeBlocks[idx].push(extMemPool, largeBlock)) {
+        MALLOC_ITT_SYNC_RELEASING(bin+idx);
+        if (bin[idx].put(extMemPool, largeBlock)) {
             STAT_increment(getThreadId(), ThreadCommonCounters, cacheLargeBlk);
             return true;
         } else
@@ -289,17 +261,15 @@ static bool freeLargeObjectToCache(ExtMemoryPool *extMemPool, LargeMemoryBlock*
     return false;
 }
 
-void freeLargeObject(ExtMemoryPool *extMemPool, void *object)
+void ExtMemoryPool::freeLargeObject(void *object)
 {
     LargeObjectHdr *header = (LargeObjectHdr*)object - 1;
 
     // overwrite backRefIdx to simplify double free detection
     header->backRefIdx = BackRefIdx();
-    if (!freeLargeObjectToCache(extMemPool, header->memoryBlock)) {
+    if (!loc.put(this, header->memoryBlock)) {
         removeBackRef(header->memoryBlock->backRefIdx);
-        if (extMemPool->userPool())
-            header->memoryBlock->unregisterFromPool(extMemPool);
-        extMemPool->backend.putLargeBlock(header->memoryBlock);
+        backend.putLargeBlock(header->memoryBlock);
         STAT_increment(getThreadId(), ThreadCommonCounters, freeLargeObj);
     }
 }
diff --git a/src/tbbmalloc/lin32-proxy-export.def b/src/tbbmalloc/lin32-proxy-export.def
index c32a241..a1e3937 100644
--- a/src/tbbmalloc/lin32-proxy-export.def
+++ b/src/tbbmalloc/lin32-proxy-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/lin32-tbbmalloc-export.def b/src/tbbmalloc/lin32-tbbmalloc-export.def
index 5bfc767..f2fc293 100644
--- a/src/tbbmalloc/lin32-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin32-tbbmalloc-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -46,10 +46,13 @@ scalable_msize;
 /* memory pool stuff */
 _ZN3rml10pool_resetEPNS_10MemoryPoolE;
 _ZN3rml11pool_createEiPKNS_13MemPoolPolicyE;
+_ZN3rml14pool_create_v1EiPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE;
 _ZN3rml11pool_mallocEPNS_10MemoryPoolEj;
 _ZN3rml12pool_destroyEPNS_10MemoryPoolE;
 _ZN3rml9pool_freeEPNS_10MemoryPoolEPv;
 _ZN3rml12pool_reallocEPNS_10MemoryPoolEPvj;
+_ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvjj;
+_ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEjj;
 
 local:
 
diff --git a/src/tbbmalloc/lin64-proxy-export.def b/src/tbbmalloc/lin64-proxy-export.def
index e0933d9..f14eba8 100644
--- a/src/tbbmalloc/lin64-proxy-export.def
+++ b/src/tbbmalloc/lin64-proxy-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/lin64-tbbmalloc-export.def b/src/tbbmalloc/lin64-tbbmalloc-export.def
index 3501d70..2c8c885 100644
--- a/src/tbbmalloc/lin64-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin64-tbbmalloc-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -45,11 +45,14 @@ __TBB_internal_posix_memalign;
 scalable_msize;
 /* memory pool stuff */
 _ZN3rml11pool_createElPKNS_13MemPoolPolicyE;
+_ZN3rml14pool_create_v1ElPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE;
 _ZN3rml10pool_resetEPNS_10MemoryPoolE;
 _ZN3rml11pool_mallocEPNS_10MemoryPoolEm;
 _ZN3rml12pool_destroyEPNS_10MemoryPoolE;
 _ZN3rml9pool_freeEPNS_10MemoryPoolEPv;
 _ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm;
+_ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm;
+_ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm;
 
 local:
 
diff --git a/src/tbbmalloc/lin64ipf-proxy-export.def b/src/tbbmalloc/lin64ipf-proxy-export.def
index e0933d9..f14eba8 100644
--- a/src/tbbmalloc/lin64ipf-proxy-export.def
+++ b/src/tbbmalloc/lin64ipf-proxy-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/lin64ipf-tbbmalloc-export.def b/src/tbbmalloc/lin64ipf-tbbmalloc-export.def
index 01a5b19..2c8c885 100644
--- a/src/tbbmalloc/lin64ipf-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin64ipf-tbbmalloc-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -44,13 +44,15 @@ __TBB_internal_realloc;
 __TBB_internal_posix_memalign;
 scalable_msize;
 /* memory pool stuff */
-_ZN3rml10pool_resetEPNS_10MemoryPoolE;
-_ZN3rml11pool_createEiPKNS_13MemPoolPolicyE;
 _ZN3rml11pool_createElPKNS_13MemPoolPolicyE;
+_ZN3rml14pool_create_v1ElPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE;
+_ZN3rml10pool_resetEPNS_10MemoryPoolE;
 _ZN3rml11pool_mallocEPNS_10MemoryPoolEm;
 _ZN3rml12pool_destroyEPNS_10MemoryPoolE;
 _ZN3rml9pool_freeEPNS_10MemoryPoolEPv;
 _ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm;
+_ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm;
+_ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm;
 
 local:
 
diff --git a/src/tbbmalloc/mac32-tbbmalloc-export.def b/src/tbbmalloc/mac32-tbbmalloc-export.def
index eea06f7..0a66a5b 100644
--- a/src/tbbmalloc/mac32-tbbmalloc-export.def
+++ b/src/tbbmalloc/mac32-tbbmalloc-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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
@@ -29,8 +29,11 @@ _scalable_aligned_free
 _scalable_msize
 /* memory pool stuff */
 __ZN3rml11pool_createElPKNS_13MemPoolPolicyE
+__ZN3rml14pool_create_v1ElPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE
 __ZN3rml10pool_resetEPNS_10MemoryPoolE
 __ZN3rml12pool_destroyEPNS_10MemoryPoolE
 __ZN3rml11pool_mallocEPNS_10MemoryPoolEm
 __ZN3rml9pool_freeEPNS_10MemoryPoolEPv
 __ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm
+__ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm
+__ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm
diff --git a/src/tbbmalloc/mac64-tbbmalloc-export.def b/src/tbbmalloc/mac64-tbbmalloc-export.def
index eea06f7..0a66a5b 100644
--- a/src/tbbmalloc/mac64-tbbmalloc-export.def
+++ b/src/tbbmalloc/mac64-tbbmalloc-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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
@@ -29,8 +29,11 @@ _scalable_aligned_free
 _scalable_msize
 /* memory pool stuff */
 __ZN3rml11pool_createElPKNS_13MemPoolPolicyE
+__ZN3rml14pool_create_v1ElPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE
 __ZN3rml10pool_resetEPNS_10MemoryPoolE
 __ZN3rml12pool_destroyEPNS_10MemoryPoolE
 __ZN3rml11pool_mallocEPNS_10MemoryPoolEm
 __ZN3rml9pool_freeEPNS_10MemoryPoolEPv
 __ZN3rml12pool_reallocEPNS_10MemoryPoolEPvm
+__ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvmm
+__ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEmm
diff --git a/src/tbbmalloc/proxy.cpp b/src/tbbmalloc/proxy.cpp
index ae249de..7687432 100644
--- a/src/tbbmalloc/proxy.cpp
+++ b/src/tbbmalloc/proxy.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -292,6 +292,8 @@ __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr90d);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr90);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr100d);
 __TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr100);
+__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr110d);
+__TBB_ORIG_ALLOCATOR_REPLACEMENT_WRAPPER(msvcr110);
 
 
 /*** replacements for global operators new and delete ***/
@@ -343,6 +345,8 @@ const char* modules_to_replace[] = {
     "msvcr90.dll",
     "msvcr100d.dll",
     "msvcr100.dll",
+    "msvcr110d.dll",
+    "msvcr110.dll",
     "msvcr70d.dll",
     "msvcr70.dll",
     "msvcr71d.dll",
@@ -421,12 +425,25 @@ void doMallocReplacement()
 {
     int i,j;
 
+    // Replace functions and keep backup of original code (separate for each runtime)
+    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr70)
+    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr71)
+    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr80)
+    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr90)
+    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr100)
+    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr110)
+
     // Replace functions without storing original code
     int modules_to_replace_count = sizeof(modules_to_replace) / sizeof(modules_to_replace[0]);
     int routines_to_replace_count = sizeof(routines_to_replace) / sizeof(routines_to_replace[0]);
     for ( j=0; j<modules_to_replace_count; j++ )
         for (i = 0; i < routines_to_replace_count; i++)
         {
+#if !_WIN64
+            // in Microsoft* Visual Studio* 11 Beta 32-bit operator delete consists of 2 bytes only: short jump to free(ptr);
+            // replacement should be skipped for this particular case.
+            if ( (strcmp(modules_to_replace[j],"msvcr110.dll")==0) && (strcmp(routines_to_replace[i]._func,"??3 at YAXPAX@Z")==0) ) continue;
+#endif
             FRR_TYPE type = ReplaceFunction( modules_to_replace[j], routines_to_replace[i]._func, routines_to_replace[i]._fptr, NULL, NULL );
             if (type == FRR_NODLL) break;
             if (type != FRR_OK && routines_to_replace[i]._on_error==FRR_FAIL)
@@ -436,13 +453,6 @@ void doMallocReplacement()
                 exit(1);
             }
         }
-
-    // Replace functions and keep backup of original code (separate for each runtime)
-    __TBB_ORIG_ALLOCATOR_REPLACEMENT_CALL(msvcr70)
-    __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 a68fdc2..a98f9b5 100644
--- a/src/tbbmalloc/proxy.h
+++ b/src/tbbmalloc/proxy.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 072b146..d13be8b 100644
--- a/src/tbbmalloc/tbb_function_replacement.cpp
+++ b/src/tbbmalloc/tbb_function_replacement.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/tbbmalloc/tbb_function_replacement.h b/src/tbbmalloc/tbb_function_replacement.h
index a1ea605..37eea33 100644
--- a/src/tbbmalloc/tbb_function_replacement.h
+++ b/src/tbbmalloc/tbb_function_replacement.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,6 +29,7 @@
 #ifndef __TBB_function_replacement_H
 #define __TBB_function_replacement_H
 
+#include <stddef.h> //for ptrdiff_t
 typedef enum {
     FRR_OK,     /* Succeeded in replacing the function */
     FRR_NODLL,  /* The requested DLL was not found */
diff --git a/src/tbbmalloc/tbbmalloc.cpp b/src/tbbmalloc/tbbmalloc.cpp
index 10cb225..b26534b 100644
--- a/src/tbbmalloc/tbbmalloc.cpp
+++ b/src/tbbmalloc/tbbmalloc.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -27,6 +27,7 @@
 */
 
 #include "TypeDefinitions.h" // Customize.h and proxy.h get included
+#include "tbbmalloc_internal_api.h"
 
 #include "../tbb/itt_notify.h" // for __TBB_load_ittnotify()
 
@@ -71,24 +72,19 @@ namespace internal {
 
 void* (*original_malloc_ptr)(size_t) = 0;
 void  (*original_free_ptr)(void*) = 0;
+#if MALLOC_LD_PRELOAD
 static void* (*original_calloc_ptr)(size_t,size_t) = 0;
 static void* (*original_realloc_ptr)(void*,size_t) = 0;
+#endif
 
 #endif /* MALLOC_CHECK_RECURSION */
 
-#if DO_ITT_NOTIFY
 /** Caller is responsible for ensuring this routine is called exactly once. */
-void MallocInitializeITT() {
+extern "C" void MallocInitializeITT() {
+#if DO_ITT_NOTIFY
     tbb::internal::__TBB_load_ittnotify();
+#endif
 }
-#else
-void MallocInitializeITT() {}
-#endif /* DO_ITT_NOTIFY */
-
-extern "C" 
-void ITT_DoOneTimeInitialization() {
-    MallocInitializeITT();
-} // required for itt_notify.cpp to work
 
 #if TBB_USE_DEBUG
 #define DEBUG_SUFFIX "_debug"
@@ -138,29 +134,45 @@ void init_tbbmalloc() {
 /* Preventing TBB allocator library from unloading to prevent
    resource leak, as memory is not released on the library unload.
 */
-#if USE_WINTHREAD && __TBB_DYNAMIC_LOAD_ENABLED
+#if USE_WINTHREAD && !__TBB_SOURCE_DIRECTLY_INCLUDED
     // Prevent Windows from displaying message boxes if it fails to load library
     UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);
-    LoadLibrary(MALLOCLIB_NAME);
+    HMODULE lib = LoadLibrary(MALLOCLIB_NAME);
+    MALLOC_ASSERT(lib, "Allocator can't load ifself.");
     SetErrorMode (prev_mode);
-#endif /* USE_PTHREAD */
+#endif /* USE_PTHREAD && !__TBB_SOURCE_DIRECTLY_INCLUDED */
 }
 
-#if !(_WIN32||_WIN64)
+#if !__TBB_SOURCE_DIRECTLY_INCLUDED
+#if USE_WINTHREAD
+extern "C" BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID )
+{
+
+    if (callReason==DLL_THREAD_DETACH)
+    {
+        __TBB_mallocThreadShutdownNotification();
+    }
+    else if (callReason==DLL_PROCESS_DETACH)
+    {
+        __TBB_mallocProcessShutdownNotification();
+    }
+    return TRUE;
+}
+#else
 struct RegisterProcessShutdownNotification {
     RegisterProcessShutdownNotification() {
-#if USE_PTHREAD && __TBB_DYNAMIC_LOAD_ENABLED
         // prevents unloading, POSIX case
-        dlopen(MALLOCLIB_NAME, RTLD_NOW);
-#endif
+        void *ret = dlopen(MALLOCLIB_NAME, RTLD_NOW);
+        MALLOC_ASSERT(ret, "Allocator can't load ifself.");
     }
     ~RegisterProcessShutdownNotification() {
-        mallocProcessShutdownNotification();
+        __TBB_mallocProcessShutdownNotification();
     }
 };
 
 static RegisterProcessShutdownNotification reg;
-#endif
+#endif /* USE_WINTHREAD */
+#endif /* !__TBB_SOURCE_DIRECTLY_INCLUDED */
 
 #if MALLOC_CHECK_RECURSION
 
@@ -201,33 +213,8 @@ void __TBB_internal_free(void *object)
 
 #endif /* MALLOC_CHECK_RECURSION */
 
-#include "../tbb/tbb_version.h"
-
-/** The leading "\0" is here so that applying "strings" to the binary
-    delivers a clean result.
-    volatile added to prevent possible dropping of constant by linker. */
-volatile char VersionString[] = "\0" TBB_VERSION_STRINGS;
-
 } } // namespaces
 
-#ifdef _WIN32
-
-extern "C" BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID )
-{
-
-    if (callReason==DLL_THREAD_DETACH)
-    {
-        mallocThreadShutdownNotification(NULL);
-    }
-    else if (callReason==DLL_PROCESS_DETACH)
-    {
-        mallocProcessShutdownNotification();
-    }
-    return TRUE;
-}
-
-#endif //_WIN32
-
 #if __TBB_ipf
 /* It was found that on IPF inlining of __TBB_machine_lockbyte leads
    to serious performance regression with ICC 10.0. So keep it out-of-line.
diff --git a/src/tbbmalloc/tbbmalloc.rc b/src/tbbmalloc/tbbmalloc.rc
index 6a01920..be0bd76 100644
--- a/src/tbbmalloc/tbbmalloc.rc
+++ b/src/tbbmalloc/tbbmalloc.rc
@@ -1,4 +1,4 @@
-// Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+// Copyright 2005-2012 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-2011 Intel Corporation.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright 2005-2012 Intel Corporation.  All Rights Reserved.\0"
             VALUE "LegalTrademarks", "\0"
 #ifndef TBB_USE_DEBUG
             VALUE "OriginalFilename", "tbbmalloc.dll\0"
diff --git a/src/tbbmalloc/tbbmalloc_internal.h b/src/tbbmalloc/tbbmalloc_internal.h
index c011c24..74cf8cd 100644
--- a/src/tbbmalloc/tbbmalloc_internal.h
+++ b/src/tbbmalloc/tbbmalloc_internal.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -46,20 +46,22 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <limits.h> // for CHAR_BIT
+#include <string.h> // for memset
 #if MALLOC_CHECK_RECURSION
 #include <new>        /* for placement new */
 #endif
+#include "tbb/scalable_allocator.h"
+#include "tbbmalloc_internal_api.h"
 
 #if __sun || __SUNPRO_CC
 #define __asm__ asm
 #endif
 
-extern "C" {
-    void mallocThreadShutdownNotification(void*);
-}
-
 /********* Various compile-time options        **************/
 
+#if !__TBB_DEFINE_MIC && __TBB_MIC_NATIVE
+ #error Intel(R) Many Integrated Core Compiler does not define __MIC__ anymore.
+#endif
 
 #define MALLOC_TRACE 0
 
@@ -78,21 +80,12 @@ extern "C" {
 
 namespace rml {
 
-#if !MEM_POLICY_DEFINED
-typedef void *(*rawAllocType)(intptr_t pool_id, size_t &bytes);
-typedef int   (*rawFreeType)(intptr_t pool_id, void* raw_ptr, size_t raw_bytes);
-
-struct MemPoolPolicy {
-    rawAllocType pAlloc;        // pAlloc and pFree must be thread-safe
-    rawFreeType  pFree;
-    size_t       granularity;   // granularity of pAlloc allocations
-    void        *pReserved;     // reserved for future extensions
-    size_t       szReserved;    // size of pReserved data
-};
-#endif
-
 namespace internal {
 
+//! Utility template function to prevent "unused" warnings by various compilers.
+template<typename T>
+void suppress_unused_warning( const T& ) {}
+
 /********** Various numeric parameters controlling allocations ********/
 
 /*
@@ -112,10 +105,23 @@ const uint32_t largeBlockCacheStep = 8*1024;
  */
 const unsigned cacheCleanupFreq = 256;
 
- /*
-  * The number of bins to cache large objects.
-  */
-const uint32_t numLargeBlockBins = 1024; // for 1024 max cached size is near 8MB
+/*
+ * Best estimate of cache line size, for the purpose of avoiding false sharing.
+ * Too high causes memory overhead, too low causes false-sharing overhead.
+ * Because, e.g., 32-bit code might run on a 64-bit system with a larger cache line size,
+ * it would probably be better to probe at runtime where possible and/or allow for an environment variable override,
+ * but currently this is still used for compile-time layout of class Block, so the change is not entirely trivial.
+ */
+#if __powerpc64__ || __ppc64__ || __bgp__
+const uint32_t estimatedCacheLineSize = 128;
+#else
+const uint32_t estimatedCacheLineSize =  64;
+#endif
+
+/*
+ * Alignment of large (>= minLargeObjectSize) objects.
+ */
+const size_t largeObjectAlignment = estimatedCacheLineSize;
 
 /********** End of numeric parameters controlling allocations *********/
 
@@ -127,6 +133,7 @@ class FreeBlock;
 class TLSData;
 class Backend;
 class MemoryPool;
+extern const uint32_t minLargeObjectSize;
 
 class TLSKey {
     tls_key_t TLS_pointer_key;
@@ -138,28 +145,61 @@ public:
     TLSData* createTLS(MemoryPool *memPool, Backend *backend);
 };
 
-class CachedLargeBlocksL {
-    LargeMemoryBlock *first,
-                     *last;
-    /* age of an oldest block in the list; equal to last->age, if last defined,
-       used for quick cheching it without acquiring the lock. */
-    uintptr_t     oldest;
-    /* currAge when something was excluded out of list because of the age,
-       not because of cache hit */
-    uintptr_t     lastCleanedAge;
-    /* Current threshold value for the blocks of a particular size.
-       Set on cache miss. */
-    intptr_t      ageThreshold;
-
-    MallocMutex   lock;
-    /* CachedBlocksList should be placed in zero-initialized memory,
-       ctor not needed. */
-    CachedLargeBlocksL();
+class LargeObjectCache {
+    // The number of bins to cache large objects.
+#if __TBB_DEFINE_MIC
+    static const uint32_t numLargeBlockBins = 11; // for 100KB max cached size
+#else
+    static const uint32_t numLargeBlockBins = 1024; // for ~8MB max cached size
+#endif
+    // 2-linked list of same-size cached blocks
+    class CacheBin {
+        LargeMemoryBlock *first,
+                         *last;
+  /* age of an oldest block in the list; equal to last->age, if last defined,
+     used for quick cheching it without acquiring the lock. */
+        uintptr_t         oldest;
+  /* currAge when something was excluded out of list because of the age,
+     not because of cache hit */
+        uintptr_t         lastCleanedAge;
+  /* Current threshold value for the blocks of a particular size.
+     Set on cache miss. */
+        intptr_t          ageThreshold;
+
+        MallocMutex       lock;
+  /* should be placed in zero-initialized memory, ctor not needed. */
+        CacheBin();
+    public:
+        void init() { memset(this, 0, sizeof(CacheBin)); }
+        inline bool put(ExtMemoryPool *extMemPool, LargeMemoryBlock* ptr);
+        inline LargeMemoryBlock *get(ExtMemoryPool *extMemPool, size_t size);
+        bool cleanToThreshold(ExtMemoryPool *extMemPool, uintptr_t currAge);
+        bool cleanAll(ExtMemoryPool *extMemPool);
+    };
+
+    // bins with lists of recently freed large blocks cached for re-use
+    CacheBin bin[numLargeBlockBins];
+
+    static int sizeToIdx(size_t size) {
+        // minLargeObjectSize is minimal size of a large object
+        return (size-minLargeObjectSize)/largeBlockCacheStep;
+    }
 public:
-    inline bool push(ExtMemoryPool *extMemPool, LargeMemoryBlock* ptr);
-    inline LargeMemoryBlock* pop(ExtMemoryPool *extMemPool);
-    bool releaseLastIfOld(ExtMemoryPool *extMemPool, uintptr_t currAge);
-    bool releaseAll(ExtMemoryPool *extMemPool);
+    bool put(ExtMemoryPool *extMemPool, LargeMemoryBlock *largeBlock);
+    LargeMemoryBlock *get(ExtMemoryPool *extMemPool, size_t size);
+
+    uintptr_t cleanupCacheIfNeed(ExtMemoryPool *extMemPool);
+    bool regularCleanup(ExtMemoryPool *extMemPool, uintptr_t currAge);
+    bool cleanAll(ExtMemoryPool *extMemPool) {
+        bool released = false;
+        for (int i = numLargeBlockBins-1; i >= 0; i--)
+            released |= bin[i].cleanAll(extMemPool);
+        return released;
+    }
+    void reset() {
+        for (int i = numLargeBlockBins-1; i >= 0; i--)
+                bin[i].init();
+    }
 };
 
 class BackRefIdx { // composite index to backreference array
@@ -188,24 +228,20 @@ struct LargeMemoryBlock : public BlockI {
     LargeMemoryBlock *next,          // ptrs in list of cached blocks
                      *prev,
     // 2-linked list of pool's large objects
-    // Used to destroy backrefs on pool destroy/reset (backrefs are global).
+    // Used to destroy backrefs on pool destroy/reset (backrefs are global)
+    // and for releasing all non-bined blocks.
                      *gPrev,
                      *gNext;
     uintptr_t         age;           // age of block while in cache
     size_t            objectSize;    // the size requested by a client
     size_t            unalignedSize; // the size requested from getMemory
-    // Is the block from getRawMem or from bin?
-    // It can't be detected reliable via size, because sometimes
-    // objects larger then Backend::maxBinedSize can be allocated from bins.
-    bool              directRawMemCall;
     BackRefIdx        backRefIdx;    // cached here, used copy is in LargeObjectHdr
-    void registerInPool(ExtMemoryPool *extMemPool);
-    void unregisterFromPool(ExtMemoryPool *extMemPool);
 };
 
 // global state of blocks currently in processing
-class ProcBlocks {
-    // number of blocks currently removed from one bin and not returned
+class BackendSync {
+    // Class instances should reside in zero-initialized memory!
+    // The number of blocks currently removed from a bin and not returned back
     intptr_t  blocksInProcessing;  // to another
     intptr_t  binsModifications;   // incremented on every bin modification
 public:
@@ -216,6 +252,7 @@ public:
         AtomicIncrement(binsModifications);
         intptr_t prev = AtomicAdd(blocksInProcessing, -1);
         MALLOC_ASSERT(prev > 0, ASSERT_TEXT);
+        suppress_unused_warning(prev);
     }
     intptr_t getNumOfMods() const { return FencedLoad(binsModifications); }
     // return true if need re-do the search
@@ -247,27 +284,33 @@ public:
 template<unsigned NUM>
 class BitMask {
     static const int SZ = NUM/( CHAR_BIT*sizeof(uintptr_t)) + (NUM % sizeof(uintptr_t) ? 1:0);
+    static const unsigned WORD_LEN = CHAR_BIT*sizeof(uintptr_t);
     uintptr_t mask[SZ];
 public:
     void set(size_t idx, bool val) {
         MALLOC_ASSERT(idx<NUM, ASSERT_TEXT);
 
-        size_t i = idx / (CHAR_BIT*sizeof(uintptr_t));
-        int pos = idx % (CHAR_BIT*sizeof(uintptr_t));
+        size_t i = idx / WORD_LEN;
+        int pos = WORD_LEN - idx % WORD_LEN - 1;
         if (val)
             AtomicOr(&mask[i], 1ULL << pos);
         else
             AtomicAnd(&mask[i], ~(1ULL << pos));
     }
     int getMinTrue(unsigned startIdx) const {
-        size_t idx = startIdx / (CHAR_BIT*sizeof(uintptr_t));
-        int pos = startIdx % (CHAR_BIT*sizeof(uintptr_t));
-        // clear bits before startIdx
-        uintptr_t curr = mask[idx] & ~((1ULL<<pos) - 1);
+        size_t idx = startIdx / WORD_LEN;
+        uintptr_t curr;
+        int pos;
+
+        if (startIdx % WORD_LEN) { // clear bits before startIdx
+            pos = WORD_LEN - startIdx % WORD_LEN;
+            curr = mask[idx] & ((1ULL<<pos) - 1);
+        } else
+            curr = mask[idx];
 
         for (int i=idx; i<SZ; i++, curr=mask[i]) {
             if (-1 != (pos = BitScanRev(curr)))
-                return i*sizeof(uintptr_t)*CHAR_BIT + pos;
+                return (i+1)*WORD_LEN - pos - 1;
         }
         return -1;
     }
@@ -310,16 +353,27 @@ public:
     static const int freeBinsNum =
         (maxBinedSize-minBinedSize)/largeBlockCacheStep + 1;
 
+    // if previous access missed per-thread 16KB blocks pool,
+    // allocate numOfBlocksAllocOnMiss blocks in advance
+    static const int numOfBlocksAllocOnMiss = 2;
+
+    enum {
+        NO_BIN = -1,
+        HUGE_BIN = freeBinsNum-1
+    };
+
     // Bin keeps 2-linked list of free blocks. It must be 2-linked
     // because during coalescing a block it's removed from a middle of the list.
     struct Bin {
-        FreeBlock   *head;
+        FreeBlock   *head,
+                    *tail;
         MallocMutex  tLock;
 
         void removeBlock(FreeBlock *fBlock);
-        void reset() { head = 0; }
+        void reset() { head = tail = 0; }
+#if _TBBMALLOC_BACKEND_LOG
         size_t countFreeBlocks();
-        void verify();
+#endif
         bool empty() const { return !head; }
     };
 
@@ -328,16 +382,20 @@ public:
         BitMask<Backend::freeBinsNum> bitMask;
         Bin                           freeBins[Backend::freeBinsNum];
     public:
-        FreeBlock *getBlock(int binIdx, ProcBlocks *procBlocks, size_t size,
+        FreeBlock *getBlock(int binIdx, BackendSync *sync, size_t size,
                             bool res16Kaligned, bool alignedBin, bool wait,
                             int *resLocked);
         void lockRemoveBlock(int binIdx, FreeBlock *fBlock);
         void addBlock(int binIdx, FreeBlock *fBlock, size_t blockSz);
-        bool tryAddBlock(int binIdx, FreeBlock *fBlock, size_t blockSz);
+        bool tryAddBlock(int binIdx, FreeBlock *fBlock, bool addToTail);
         int getMinNonemptyBin(unsigned startBin) const {
             int p = bitMask.getMinTrue(startBin);
             return p == -1 ? Backend::freeBinsNum : p;
         }
+        void verify();
+#if _TBBMALLOC_BACKEND_LOG
+        void reportStat(FILE *f);
+#endif
         void reset();
     };
 
@@ -348,7 +406,7 @@ private:
     MallocMutex    regionListLock;
 
     CoalRequestQ   coalescQ; // queue of coalescing requests
-    ProcBlocks     procBlocks;
+    BackendSync    bkndSync;
     // semaphore protecting adding more more memory from OS
     MemExtendingSema memExtendingSema;
 
@@ -359,13 +417,13 @@ private:
     size_t         maxRequestedSize;
     void correctMaxRequestSize(size_t requestSize);
 
-    size_t addNewRegion(size_t rawSize);
-    size_t initRegion(MemRegion *region, size_t rawSize);
+    size_t addNewRegion(size_t rawSize, bool exact);
+    FreeBlock *findBlockInRegion(MemRegion *region);
+    void startUseBlock(MemRegion *region, FreeBlock *fBlock);
     void releaseRegion(MemRegion *region);
 
-    void *genericGetBlock(int num, size_t size, bool res16Kaligned, bool startup);
-    void genericPutBlock(FreeBlock *fBlock, size_t blockSz,
-                         bool directRawMemCall);
+    FreeBlock *genericGetBlock(int num, size_t size, bool res16Kaligned);
+    void genericPutBlock(FreeBlock *fBlock, size_t blockSz);
     FreeBlock *getFromAlignedSpace(int binIdx, int num, size_t size, bool res16Kaligned, bool wait, int *locked);
     FreeBlock *getFromBin(int binIdx, int num, size_t size, bool res16Kaligned, int *locked);
 
@@ -376,51 +434,47 @@ private:
 
     void removeBlockFromBin(FreeBlock *fBlock);
 
-    void *getRawMem(size_t &size, bool useMapMem) const;
-    void freeRawMem(void *object, size_t size, bool useMapMem) const;
+    void *getRawMem(size_t &size) const;
+    void freeRawMem(void *object, size_t size) const;
 
 public:
+    void verify();
+#if _TBBMALLOC_BACKEND_LOG
+    void reportStat(FILE *f);
+#endif
     bool bootstrap(ExtMemoryPool *extMemoryPool) {
         extMemPool = extMemoryPool;
-        return addNewRegion(2*1024*1024);
+        return addNewRegion(2*1024*1024, /*exact=*/false);
     }
-    bool reset();
+    void reset();
     bool destroy();
 
-    BlockI *get16KBlock(int num, bool startup) {
+    BlockI *get16KBlock(int num) {
         BlockI *b = (BlockI*)
-            genericGetBlock(num, blockSize, /*res16Kaligned=*/true, startup);
+            genericGetBlock(num, blockSize, /*res16Kaligned=*/true);
         MALLOC_ASSERT(isAligned(b, blockSize), ASSERT_TEXT);
         return b;
     }
-    void put16KBlock(BlockI *block, bool /*startup*/) {
-        genericPutBlock((FreeBlock *)block, blockSize,
-                        /*directRawMemCall=*/false);
+    void put16KBlock(BlockI *block) {
+        genericPutBlock((FreeBlock *)block, blockSize);
     }
+    void *getBackRefSpace(size_t size, bool *rawMemUsed);
+    void putBackRefSpace(void *b, size_t size, bool rawMemUsed);
 
     bool inUserPool() const;
 
-    LargeMemoryBlock *getLargeBlock(size_t size, bool startup);
-    void putLargeBlock(LargeMemoryBlock *lmb) {
-        genericPutBlock((FreeBlock *)lmb, lmb->unalignedSize,
-                        lmb->directRawMemCall);
-    }
-
-    void reportStat();
-
-    enum {
-        NO_BIN = -1
-    };
+    LargeMemoryBlock *getLargeBlock(size_t size);
+    void putLargeBlock(LargeMemoryBlock *lmb);
 private:
     static int sizeToBin(size_t size) {
         if (size >= maxBinedSize)
-            return freeBinsNum-1;
+            return HUGE_BIN;
         else if (size < minBinedSize)
             return NO_BIN;
 
         int bin = (size - minBinedSize)/largeBlockCacheStep;
 
-        MALLOC_ASSERT(bin < freeBinsNum-1, "Invalid size.");
+        MALLOC_ASSERT(bin < HUGE_BIN, "Invalid size.");
         return bin;
     }
     static bool toAlignedBin(FreeBlock *block, size_t size) {
@@ -431,55 +485,70 @@ private:
                 freeAlignedBins;
 };
 
+class AllLargeBlocksList {
+    MallocMutex       largeObjLock;
+    LargeMemoryBlock *loHead;
+public:
+    LargeMemoryBlock *getHead() { return loHead; }
+    void add(LargeMemoryBlock *lmb);
+    void remove(LargeMemoryBlock *lmb);
+    void removeAll(Backend *backend);
+};
+
 struct ExtMemoryPool {
+    static size_t     hugePageSize;
+    static bool       useHugePages;
     Backend           backend;
 
     intptr_t          poolId;
     // to find all large objects
-    MallocMutex       largeObjLock;
-    LargeMemoryBlock *loHead;
+    AllLargeBlocksList lmbList;
     // Callbacks to be used instead of MapMemory/UnmapMemory.
     rawAllocType      rawAlloc;
     rawFreeType       rawFree;
     size_t            granularity;
+    bool              keepAllMemory,
+                      delayRegsReleasing,
+                      fixedPool;
     TLSKey            tlsPointerKey;  // per-pool TLS key
 
-    // bins with lists of recently freed large blocks cached for re-use
-    CachedLargeBlocksL cachedLargeBlocks[numLargeBlockBins];
+    LargeObjectCache  loc;
+
+    static bool tooLargeToBeBined(size_t sz) { return sz >= Backend::maxBinedSize; }
 
-    bool doLOCacheCleanup(uintptr_t currAge);
+    bool init(intptr_t poolId, rawAllocType rawAlloc, rawFreeType rawFree,
+              size_t granularity, bool keepAllMemory, bool fixedPool);
+    void initTLS();
+    inline TLSData *getTLS();
+    void clearTLS();
 
     // i.e., not system default pool for scalable_malloc/scalable_free
     bool userPool() const { return rawAlloc; }
 
-    bool fixedSizePool() const { return userPool() && !rawFree; }
-
      // true if something has beed released
     bool softCachesCleanup();
     bool release16KBCaches();
-    bool hardCachesCleanup() {
-        bool res = false;
-
-        for (int i = numLargeBlockBins-1; i >= 0; i--)
-            res |= cachedLargeBlocks[i].releaseAll(this);
-        // TODO: to release all thread's pools, not just current thread
-        res |= release16KBCaches();
-
-        return res;
-    }
-
+    // TODO: to release all thread's pools, not just current thread
+    bool hardCachesCleanup() { return loc.cleanAll(this) | release16KBCaches(); }
     void reset() {
-        // must reset LOC because all backrefs are cleaned,
-        // because backrefs in LOC are invalid already
-        hardCachesCleanup();
-        backend.reset();
+        lmbList.removeAll(&backend);
+        loc.reset();
         tlsPointerKey.~TLSKey();
+        backend.reset();
     }
     void destroy() {
-        if (rawFree)
-            backend.destroy();
+        // pthread_key_dtors must be disabled before memory unmapping
+        // TODO: race-free solution
         tlsPointerKey.~TLSKey();
+        if (rawFree || !userPool())
+            backend.destroy();
     }
+    bool mustBeAddedToGlobalLargeBlockList() const { return userPool(); }
+    void delayRegionsReleasing(bool mode) { delayRegsReleasing = mode; }
+    inline bool regionsAreReleaseable() const;
+
+    void *mallocLargeObject(size_t size, size_t alignment);
+    void freeLargeObject(void *object);
 };
 
 inline bool Backend::inUserPool() const { return extMemPool->userPool(); }
@@ -591,19 +660,15 @@ public:
 
 bool isMallocInitializedExt();
 
-extern const uint32_t minLargeObjectSize;
 bool isLargeObject(void *object);
-void* mallocLargeObject(ExtMemoryPool *extMemPool, size_t size, size_t alignment, bool startupAlloc = false);
-void freeLargeObject(ExtMemoryPool *extMemPool, void *object);
 
 unsigned int getThreadId();
 
 bool initBackRefMaster(Backend *backend);
+void destroyBackRefMaster(Backend *backend);
 void removeBackRef(BackRefIdx backRefIdx);
 void setBackRef(BackRefIdx backRefIdx, void *newPtr);
 void *getBackRef(BackRefIdx backRefIdx);
-void* getRawMemory(size_t size, bool useMapMem);
-bool freeRawMemory(void *object, size_t size, bool useMapMem);
 
 } // namespace internal
 } // namespace rml
diff --git a/src/tbbmalloc/tbbmalloc_internal_api.h b/src/tbbmalloc/tbbmalloc_internal_api.h
new file mode 100644
index 0000000..aeb2599
--- /dev/null
+++ b/src/tbbmalloc/tbbmalloc_internal_api.h
@@ -0,0 +1,45 @@
+/*
+    Copyright 2005-2012 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_tbbmalloc_internal_api_H
+#define __TBB_tbbmalloc_internal_api_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+void __TBB_mallocProcessShutdownNotification();
+#if _WIN32||_WIN64
+void __TBB_mallocThreadShutdownNotification();
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif // __TBB_tbbmalloc_internal_api_H
diff --git a/src/tbbmalloc/win32-gcc-tbbmalloc-export.def b/src/tbbmalloc/win32-gcc-tbbmalloc-export.def
index 0c8cd0b..45e5589 100644
--- a/src/tbbmalloc/win32-gcc-tbbmalloc-export.def
+++ b/src/tbbmalloc/win32-gcc-tbbmalloc-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -44,10 +44,13 @@ safer_scalable_aligned_realloc;
 /* memory pool stuff */
 _ZN3rml10pool_resetEPNS_10MemoryPoolE;
 _ZN3rml11pool_createEiPKNS_13MemPoolPolicyE;
+_ZN3rml14pool_create_v1EiPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE;
 _ZN3rml11pool_mallocEPNS_10MemoryPoolEj;
 _ZN3rml12pool_destroyEPNS_10MemoryPoolE;
 _ZN3rml9pool_freeEPNS_10MemoryPoolEPv;
 _ZN3rml12pool_reallocEPNS_10MemoryPoolEPvj;
+_ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvjj;
+_ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEjj;
 
 local:*;
 };
diff --git a/src/tbbmalloc/win32-tbbmalloc-export.def b/src/tbbmalloc/win32-tbbmalloc-export.def
index 7a44ecb..48a92e3 100644
--- a/src/tbbmalloc/win32-tbbmalloc-export.def
+++ b/src/tbbmalloc/win32-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
@@ -41,9 +41,11 @@ scalable_msize
 safer_scalable_msize
 safer_scalable_aligned_realloc
 ?pool_create at rml@@YAPAVMemoryPool at 1@HPBUMemPoolPolicy at 1@@Z
+?pool_create_v1 at rml@@YA?AW4MemPoolError at 1@HPBUMemPoolPolicy at 1@PAPAVMemoryPool at 1@@Z
 ?pool_destroy at rml@@YA_NPAVMemoryPool at 1@@Z
 ?pool_malloc at rml@@YAPAXPAVMemoryPool at 1@I at Z
 ?pool_free at rml@@YA_NPAVMemoryPool at 1@PAX at Z
 ?pool_reset at rml@@YA_NPAVMemoryPool at 1@@Z
 ?pool_realloc at rml@@YAPAXPAVMemoryPool at 1@PAXI at Z
-
+?pool_aligned_realloc at rml@@YAPAXPAVMemoryPool at 1@PAXII at Z
+?pool_aligned_malloc at rml@@YAPAXPAVMemoryPool at 1@II at Z
diff --git a/src/tbbmalloc/win64-gcc-tbbmalloc-export.def b/src/tbbmalloc/win64-gcc-tbbmalloc-export.def
index c1455b6..762828c 100644
--- a/src/tbbmalloc/win64-gcc-tbbmalloc-export.def
+++ b/src/tbbmalloc/win64-gcc-tbbmalloc-export.def
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -44,10 +44,13 @@ safer_scalable_aligned_realloc;
 /* memory pool stuff */
 _ZN3rml10pool_resetEPNS_10MemoryPoolE;
 _ZN3rml11pool_createExPKNS_13MemPoolPolicyE;
+_ZN3rml14pool_create_v1ExPKNS_13MemPoolPolicyEPPNS_10MemoryPoolE;
 _ZN3rml11pool_mallocEPNS_10MemoryPoolEy;
 _ZN3rml12pool_destroyEPNS_10MemoryPoolE;
 _ZN3rml9pool_freeEPNS_10MemoryPoolEPv;
 _ZN3rml12pool_reallocEPNS_10MemoryPoolEPvy;
+_ZN3rml20pool_aligned_reallocEPNS_10MemoryPoolEPvyy;
+_ZN3rml19pool_aligned_mallocEPNS_10MemoryPoolEyy;
 
 local:*;
 };
diff --git a/src/tbbmalloc/win64-tbbmalloc-export.def b/src/tbbmalloc/win64-tbbmalloc-export.def
index 9a0566f..5e07e82 100644
--- a/src/tbbmalloc/win64-tbbmalloc-export.def
+++ b/src/tbbmalloc/win64-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
@@ -42,8 +42,11 @@ safer_scalable_msize
 safer_scalable_aligned_realloc
 ; memory pool stuff
 ?pool_create at rml@@YAPEAVMemoryPool at 1@_JPEBUMemPoolPolicy at 1@@Z
+?pool_create_v1 at rml@@YA?AW4MemPoolError at 1@_JPEBUMemPoolPolicy at 1@PEAPEAVMemoryPool at 1@@Z
 ?pool_destroy at rml@@YA_NPEAVMemoryPool at 1@@Z
 ?pool_malloc at rml@@YAPEAXPEAVMemoryPool at 1@_K at Z
 ?pool_free at rml@@YA_NPEAVMemoryPool at 1@PEAX at Z
 ?pool_reset at rml@@YA_NPEAVMemoryPool at 1@@Z
 ?pool_realloc at rml@@YAPEAXPEAVMemoryPool at 1@PEAX_K at Z
+?pool_aligned_realloc at rml@@YAPEAXPEAVMemoryPool at 1@PEAX_K2 at Z
+?pool_aligned_malloc at rml@@YAPEAXPEAVMemoryPool at 1@_K1 at Z
diff --git a/src/tbbmalloc/xbox360-tbbmalloc-export.def b/src/tbbmalloc/xbox360-tbbmalloc-export.def
index f335e7c..ae0bb71 100644
--- a/src/tbbmalloc/xbox360-tbbmalloc-export.def
+++ b/src/tbbmalloc/xbox360-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/tbbproxy/tbbproxy-windows.asm b/src/tbbproxy/tbbproxy-windows.asm
index 465d53c..6570207 100644
--- a/src/tbbproxy/tbbproxy-windows.asm
+++ b/src/tbbproxy/tbbproxy-windows.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+; Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 ;
 ; This file is part of Threading Building Blocks.
 ;
diff --git a/src/tbbproxy/tbbproxy.cpp b/src/tbbproxy/tbbproxy.cpp
index 544e5fa..d97b70b 100644
--- a/src/tbbproxy/tbbproxy.cpp
+++ b/src/tbbproxy/tbbproxy.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -471,7 +471,7 @@ static tbb::runtime_loader::error_code _load( char const * dll_name, int min_ver
         if ( _handle != NULL ) {
             int rc = dlclose( _handle );
             if ( rc != 0 ) {
-                // Error occured.
+                // Error occurred.
                 __TBB_ASSERT( rc != 0, "Unexpected error: dlclose() failed" );
             } // if
         } // if
diff --git a/src/test/harness.h b/src/test/harness.h
index c4d318a..e435b39 100644
--- a/src/test/harness.h
+++ b/src/test/harness.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -61,7 +61,13 @@ namespace Harness {
     before including harness.h **/
 int TestMain ();
 
-#define __TBB_LAMBDAS_PRESENT  ( _MSC_VER >= 1600 && !__INTEL_COMPILER || __INTEL_COMPILER > 1100 && _TBB_CPP0X )
+#if __INTEL_COMPILER
+#define __TBB_LAMBDAS_PRESENT ( _TBB_CPP0X && __INTEL_COMPILER > 1100 )
+#elif __GNUC__
+#define __TBB_LAMBDAS_PRESENT ( _TBB_CPP0X && __TBB_GCC_VERSION >= 40500 )
+#elif _MSC_VER
+#define __TBB_LAMBDAS_PRESENT ( _MSC_VER>=1600 )
+#endif
 
 #if defined(_MSC_VER) && _MSC_VER < 1400
     #define __TBB_EXCEPTION_TYPE_INFO_BROKEN 1
@@ -87,8 +93,12 @@ int TestMain ();
 
 #include <new>
 
+#if __TBB_MIC_NATIVE
+    #include "harness_mic.h"
+#else
     #define HARNESS_EXPORT
     #define REPORT_FATAL_ERROR REPORT
+#endif /* !__MIC__ */
 
 #if _WIN32||_WIN64
     #include "tbb/machine/windows_api.h"
@@ -139,8 +149,11 @@ void ReportWarning( const char* filename, int line, const char* expression, cons
     REPORT("Warning: %s:%d, assertion %s: %s\n", filename, line, expression, message ? message : "failed" );
 }
 #else
-#define ASSERT(p,msg) ((void)0)
-#define ASSERT_WARNING(p,msg) ((void)0)
+//! Utility template function to prevent "unused" warnings by various compilers.
+template<typename T> void suppress_unused_warning( const T& ) {}
+
+#define ASSERT(p,msg) (suppress_unused_warning(p), (void)0)
+#define ASSERT_WARNING(p,msg) (suppress_unused_warning(p), (void)0)
 #endif /* HARNESS_NO_ASSERT */
 
 #if !HARNESS_NO_PARSE_COMMAND_LINE
@@ -223,7 +236,6 @@ static void ParseCommandLine( int argc, char* argv[] ) {
 
 #if !HARNESS_CUSTOM_MAIN
 
-
 #if __TBB_MPI_INTEROP
 #undef SEEK_SET
 #undef SEEK_CUR
@@ -268,7 +280,15 @@ int main(int argc, char* argv[]) {
         MPI_Send (&size, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);
     }
 #endif
+#if __TBB_MIC
+    int res = Harness::Unknown;
+    #pragma offload target(mic:-1) out(res)
+    {
+        res = TestMain ();
+    }
+#else
     int res = TestMain ();
+#endif
     ASSERT( res==Harness::Done || res==Harness::Skipped, "Wrong return code by TestMain");
 #if __TBB_MPI_INTEROP
     if (myrank == 0) {
@@ -281,7 +301,6 @@ int main(int argc, char* argv[]) {
     return 0;
 }
 
-
 #endif /* !HARNESS_CUSTOM_MAIN */
 
 //! Base class for prohibiting compiler-generated operator=
@@ -327,7 +346,8 @@ public:
         // launched by make, the default stack size is set to the hard limit, and
         // calls to pthread_create fail with out-of-memory error.
         // Therefore we set the stack size explicitly (as for TBB worker threads).
-        const size_t MByte = 1<<20;
+// TODO: make a single definition of MByte used by all tests.
+        const size_t MByte = 1024*1024;
 #if __i386__||__i386
         const size_t stack_size = 1*MByte;
 #elif __x86_64__
diff --git a/src/test/harness_allocator.h b/src/test/harness_allocator.h
index 531fad4..43e124e 100644
--- a/src/test/harness_allocator.h
+++ b/src/test/harness_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 0ae7ae1..8b0e822 100644
--- a/src/test/harness_assert.h
+++ b/src/test/harness_assert.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 117cac9..c8cc7aa 100644
--- a/src/test/harness_bad_expr.h
+++ b/src/test/harness_bad_expr.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 139dc0f..3923df7 100644
--- a/src/test/harness_barrier.h
+++ b/src/test/harness_barrier.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -44,7 +44,7 @@ class SpinBarrier
     };
 
     SpinBarrier( const SpinBarrier& );    // no copy ctor
-    void operator=( const SpinBarrier& ); // no assignment 
+    void operator=( const SpinBarrier& ); // no assignment
 public:
     SpinBarrier( unsigned nthreads = 0 ) { initialize(nthreads); };
 
diff --git a/src/test/harness_concurrency_tracker.h b/src/test/harness_concurrency_tracker.h
index 5fab92a..a0c562f 100644
--- a/src/test/harness_concurrency_tracker.h
+++ b/src/test/harness_concurrency_tracker.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 6b0e8dd..1e58c38 100644
--- a/src/test/harness_cpu.h
+++ b/src/test/harness_cpu.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_defs.h b/src/test/harness_defs.h
new file mode 100644
index 0000000..9a13a68
--- /dev/null
+++ b/src/test/harness_defs.h
@@ -0,0 +1,50 @@
+/*
+    Copyright 2005-2012 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_harness_defs_H
+#define __TBB_harness_defs_H
+
+#include "tbb/tbb_config.h"
+
+#if __TBB_TEST_PIC && !__PIC__
+#define __TBB_TEST_SKIP_PIC_MODE 1
+#else
+#define __TBB_TEST_SKIP_PIC_MODE 0
+#endif
+
+#if __TBB_TEST_GCC_BUILTINS && !__TBB_GCC_BUILTIN_ATOMICS_PRESENT
+#define __TBB_TEST_SKIP_BUILTINS_MODE 1
+#else
+#define __TBB_TEST_SKIP_BUILTINS_MODE 0
+#endif
+
+#ifndef TBB_USE_GCC_BUILTINS
+    #define TBB_USE_GCC_BUILTINS             __TBB_TEST_GCC_BUILTINS && __TBB_GCC_BUILTIN_ATOMICS_PRESENT
+#endif
+
+#endif /* __TBB_harness_defs_H */
diff --git a/src/test/harness_dynamic_libs.h b/src/test/harness_dynamic_libs.h
new file mode 100644
index 0000000..2b26f85
--- /dev/null
+++ b/src/test/harness_dynamic_libs.h
@@ -0,0 +1,85 @@
+/*
+    Copyright 2005-2012 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.
+*/
+
+#if _WIN32 || _WIN64
+#include "tbb/machine/windows_api.h"
+#else
+#include <dlfcn.h>
+#endif
+
+namespace Harness {
+
+#if _WIN32 || _WIN64
+typedef  HMODULE LIBRARY_HANDLE;
+#else
+typedef void *LIBRARY_HANDLE;
+#endif
+
+#if _WIN32 || _WIN64
+#define TEST_LIBRARY_NAME(base) base".dll"
+#elif __APPLE__
+#define TEST_LIBRARY_NAME(base) base".dylib"
+#else
+#define TEST_LIBRARY_NAME(base) base".so"
+#endif
+
+LIBRARY_HANDLE OpenLibrary(const char *name)
+{
+#if _WIN32 || _WIN64
+    return ::LoadLibrary(name);
+#else
+    return dlopen(name, RTLD_NOW|RTLD_GLOBAL);
+#endif
+}
+
+void CloseLibrary(LIBRARY_HANDLE lib)
+{
+#if _WIN32 || _WIN64
+    BOOL ret = FreeLibrary(lib);
+    ASSERT(ret, "FreeLibrary must be successful");
+#else
+    int ret = dlclose(lib);
+    ASSERT(ret == 0, "dlclose must be successful");
+#endif
+}
+
+typedef void (*FunctionAddress)();
+
+FunctionAddress GetAddress(Harness::LIBRARY_HANDLE lib, const char *name)
+{
+    union { FunctionAddress func; void *symb; } converter;
+#if _WIN32 || _WIN64
+    converter.symb = (void*)GetProcAddress(lib, name);
+#else
+    converter.symb = (void*)dlsym(lib, name);
+#endif
+    ASSERT(converter.func, "Can't find required symbol in dynamic library");
+    return converter.func;
+}
+
+}  // namespace Harness
diff --git a/src/test/harness_eh.h b/src/test/harness_eh.h
index 603e3cc..7c93435 100644
--- a/src/test/harness_eh.h
+++ b/src/test/harness_eh.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_graph.h b/src/test/harness_graph.h
index e56672e..da8bf8d 100644
--- a/src/test/harness_graph.h
+++ b/src/test/harness_graph.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -63,12 +63,12 @@ struct convertor<tbb::flow::continue_msg,OutputType> {
     }
 };
 
-// helper for multioutput_function_node tests.
+// helper for multifunction_node tests.
 template<size_t N>
 struct mof_helper {
     template<typename InputType, typename ports_type>
     static inline void output_converted_value(const InputType &i, ports_type &p) {
-        std::get<N-1>(p).put(convertor<InputType,typename std::tuple_element<N-1,ports_type>::type::output_type>::convert_value(i));
+        (void)std::get<N-1>(p).try_put(convertor<InputType,typename std::tuple_element<N-1,ports_type>::type::output_type>::convert_value(i));
         output_converted_value<N-1>(i, p);
     }
 };
@@ -78,7 +78,7 @@ struct mof_helper<1> {
     template<typename InputType, typename ports_type>
     static inline void output_converted_value(const InputType &i, ports_type &p) {
         // just emit a default-constructed object
-        std::get<0>(p).put(convertor<InputType,typename std::tuple_element<0,ports_type>::type::output_type>::convert_value(i));
+        (void)std::get<0>(p).try_put(convertor<InputType,typename std::tuple_element<0,ports_type>::type::output_type>::convert_value(i));
     }
 };
 
@@ -110,16 +110,14 @@ struct harness_graph_default_functor< tbb::flow::continue_msg, tbb::flow::contin
     }
 };
 
-#if TBB_PREVIEW_GRAPH_NODES
 template<typename InputType, typename OutputSet>
-struct harness_graph_default_multioutput_functor {
+struct harness_graph_default_multifunction_functor {
     static const int N = std::tuple_size<OutputSet>::value;
-    typedef typename tbb::flow::multioutput_function_node<InputType,OutputSet>::output_ports_type ports_type;
+    typedef typename tbb::flow::multifunction_node<InputType,OutputSet>::output_ports_type ports_type;
     static void construct(const InputType &i, ports_type &p) {
         mof_helper<N>::output_converted_value(i, p);
     }
 };
-#endif
 
 static tbb::atomic<size_t> current_executors;
 
@@ -162,11 +160,10 @@ struct harness_graph_executor {
 
 };
 
-#if TBB_PREVIEW_GRAPH_NODES
-//! A multioutput executor that accepts InputType and has only one Output of OutputType.
+//! A multifunction executor that accepts InputType and has only one Output of OutputType.
 template< typename InputType, typename OutputTuple, typename M=tbb::null_rw_mutex >
-struct harness_graph_multioutput_executor {
-    typedef typename tbb::flow::multioutput_function_node<InputType,OutputTuple>::output_ports_type ports_type;
+struct harness_graph_multifunction_executor {
+    typedef typename tbb::flow::multifunction_node<InputType,OutputTuple>::output_ports_type ports_type;
     typedef typename std::tuple_element<0,OutputTuple>::type OutputType;
 
     typedef void (*mfunction_ptr_type)( const InputType& v, ports_type &p );
@@ -192,18 +189,17 @@ struct harness_graph_multioutput_executor {
         functor() { my_execute_count = 0; }
         functor( const functor &f ) { my_execute_count = f.my_execute_count; }
         void operator()( const InputType &i, ports_type &p ) {
-           typename M::scoped_lock l( harness_graph_multioutput_executor::mutex );
+           typename M::scoped_lock l( harness_graph_multifunction_executor::mutex );
            size_t c = current_executors.fetch_and_increment();
-           ASSERT( harness_graph_multioutput_executor::max_executors == 0 || c <= harness_graph_multioutput_executor::max_executors, NULL ); 
+           ASSERT( harness_graph_multifunction_executor::max_executors == 0 || c <= harness_graph_multifunction_executor::max_executors, NULL ); 
            ++execute_count;
            my_execute_count.fetch_and_increment();
-           (*harness_graph_multioutput_executor::fptr)(i,p);
+           (*harness_graph_multifunction_executor::fptr)(i,p);
            current_executors.fetch_and_decrement();
         }
     };
 
 };
-#endif //  TBB_PREVIEW_GRAPH_NODES
 
 template< typename InputType, typename OutputType, typename M >
 M harness_graph_executor<InputType, OutputType, M>::mutex;
@@ -218,21 +214,19 @@ typename harness_graph_executor<InputType, OutputType, M>::function_ptr_type har
 template< typename InputType, typename OutputType, typename M >
 size_t harness_graph_executor<InputType, OutputType, M>::max_executors = 0;
 
-#if TBB_PREVIEW_GRAPH_NODES
-// static vars for multioutput_function_node tests
+// static vars for multifunction_node tests
 template< typename InputType, typename OutputTuple, typename M >
-M harness_graph_multioutput_executor<InputType, OutputTuple, M>::mutex;
+M harness_graph_multifunction_executor<InputType, OutputTuple, M>::mutex;
 
 template< typename InputType, typename OutputTuple, typename M >
-tbb::atomic<size_t> harness_graph_multioutput_executor<InputType, OutputTuple, M>::execute_count;
+tbb::atomic<size_t> harness_graph_multifunction_executor<InputType, OutputTuple, M>::execute_count;
 
 template< typename InputType, typename OutputTuple, typename M >
-typename harness_graph_multioutput_executor<InputType, OutputTuple, M>::mfunction_ptr_type harness_graph_multioutput_executor<InputType, OutputTuple, M>::fptr
-    = harness_graph_default_multioutput_functor< InputType, OutputTuple >::construct;
+typename harness_graph_multifunction_executor<InputType, OutputTuple, M>::mfunction_ptr_type harness_graph_multifunction_executor<InputType, OutputTuple, M>::fptr
+    = harness_graph_default_multifunction_functor< InputType, OutputTuple >::construct;
 
 template< typename InputType, typename OutputTuple, typename M >
-size_t harness_graph_multioutput_executor<InputType, OutputTuple, M>::max_executors = 0;
-#endif
+size_t harness_graph_multifunction_executor<InputType, OutputTuple, M>::max_executors = 0;
 
 //! Counts the number of puts received
 template< typename T >
diff --git a/src/test/harness_inject_scheduler.h b/src/test/harness_inject_scheduler.h
index 10f2b6e..44751b9 100644
--- a/src/test/harness_inject_scheduler.h
+++ b/src/test/harness_inject_scheduler.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -38,7 +38,9 @@
 // Enable preview features if any 
 #define __TBB_BUILD 1
 
-#define __TBB_TASK_CPP_DIRECTLY_INCLUDED 1
+#undef DO_ITT_NOTIFY
+
+#define __TBB_SOURCE_DIRECTLY_INCLUDED 1
 #include "../tbb/tbb_main.cpp"
 #include "../tbb/dynamic_link.cpp"
 #include "../tbb/tbb_misc_ex.cpp"
@@ -59,7 +61,9 @@
 #include "../tbb/spin_rw_mutex.cpp"
 #include "../tbb/spin_mutex.cpp"
 #include "../tbb/private_server.cpp"
+#if _WIN32||_WIN64
 #include "../tbb/semaphore.cpp"
+#endif
 #include "../rml/client/rml_tbb.cpp"
 
 #endif /* harness_inject_scheduler_H */
diff --git a/src/test/harness_iterator.h b/src/test/harness_iterator.h
index f553ecb..3fc9c69 100644
--- a/src/test/harness_iterator.h
+++ b/src/test/harness_iterator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_m128.h b/src/test/harness_m128.h
index 5a1a15a..5a7a123 100644
--- a/src/test/harness_m128.h
+++ b/src/test/harness_m128.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_memory.h b/src/test/harness_memory.h
index a413f57..8e24a8a 100644
--- a/src/test/harness_memory.h
+++ b/src/test/harness_memory.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_report.h b/src/test/harness_report.h
index 952ae78..6caf642 100644
--- a/src/test/harness_report.h
+++ b/src/test/harness_report.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -28,14 +28,13 @@
 
 // Just the tracing portion of the harness.
 //
-// This header defines TRACE and TRCAENL macros, which use REPORT like syntax and 
+// This header defines TRACE and TRACENL macros, which use REPORT like syntax and 
 // are useful for duplicating trace output to the standard debug output on Windows.
 // It is possible to add the ability of automatic extending messages with additional
 // info (file, line, function, time, thread ID, ...).
 //
 // Macros output nothing when test app runs in non-verbose mode (default).
 //
-// The full "harness.h" must be included before this header.
 
 #ifndef tbb_tests_harness_report_H
 #define tbb_tests_harness_report_H
@@ -55,6 +54,11 @@
 
 #include <cstdarg>
 
+#include "tbb/tbb_config.h"
+
+#if __TBB_DEFINE_MIC
+#include "harness_mic.h"
+#endif
 
 #ifdef HARNESS_INCOMPLETE_SOURCES
 #error Source files are not complete. Check the build environment
diff --git a/src/test/harness_task.h b/src/test/harness_task.h
index ea6bc41..1f7d4d9 100644
--- a/src/test/harness_task.h
+++ b/src/test/harness_task.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/harness_tbb_independence.h b/src/test/harness_tbb_independence.h
index 0d69873..d07f0dd 100644
--- a/src/test/harness_tbb_independence.h
+++ b/src/test/harness_tbb_independence.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -29,10 +29,6 @@
 #ifndef harness_tbb_independence_H
 #define harness_tbb_independence_H
 
-#if __TBB_DYNAMIC_LOAD_ENABLED
-#include "../tbb/tbb_assert_impl.h"
-#endif
-
 #if __linux__  && __ia64__
 
 #define __TBB_NO_IMPLICIT_LINKAGE 1
@@ -75,19 +71,6 @@ extern "C" int64_t __TBB_machine_cmpswp8__TBB_full_fence(volatile void *ptr, int
     return result;
 }
 
-#elif _WIN64 && defined(_M_X64) && !__MINGW64__
-
-#define __TBB_NO_IMPLICIT_LINKAGE 1
-#include "tbb/tbb_machine.h"
-
-#if __TBB_DYNAMIC_LOAD_ENABLED
-extern "C" {
-void __TBB_machine_pause(__int32 /*delay*/ ) { __TBB_Yield(); }
-}
-#endif
-
-#endif /* _WIN64 */
-
-extern "C" void ITT_DoOneTimeInitialization() { }
+#endif /* __linux__  && __ia64 */
 
 #endif // harness_tbb_independence_H
diff --git a/src/test/harness_test_cases_framework.h b/src/test/harness_test_cases_framework.h
new file mode 100644
index 0000000..e8f673a
--- /dev/null
+++ b/src/test/harness_test_cases_framework.h
@@ -0,0 +1,243 @@
+/*
+    Copyright 2005-2012 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_harness_test_cases_framework_H
+#define tbb_harness_test_cases_framework_H
+
+#if defined(_MSC_VER)
+    #define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#undef DO_ITT_NOTIFY
+#undef TBB_DO_ITT_EVENTS
+
+#include "harness.h"
+//#include "harness_report.h"
+#include "harness_assert.h"
+//#include "harness_allocator.h"
+#include "tbb/tbb_stddef.h"
+
+#include <cstdlib>
+
+#include <vector>
+#include <algorithm>
+
+#include <string>
+#include <sstream>
+#include <iostream>
+
+namespace test_framework{
+    template<typename test_class>
+    void run_test(){
+        test_class()();
+    }
+
+    struct assertion_failure:std::exception{
+        const char* my_filename;
+        int my_line;
+        const char* my_expression;
+        const char * my_comment;
+        assertion_failure(const char* filename, int line, const char* expression, const char * comment):
+             my_filename(filename),
+             my_line(line),
+             my_expression(expression),
+             my_comment(comment)
+        {}
+        virtual const char* what() const throw(){
+            return "test assertion failed";
+        }
+    };
+    void throw_assertion_failure(){throw assertion_failure("",0,"","");}
+    void throw_assertion_failure(const char* filename, int line, const char* expression, const char * comment){
+        throw assertion_failure(filename, line, expression, comment);
+    }
+    class test_suite{
+        typedef void(*run_test_function_pointer_type)();
+        typedef std::pair<std::string, run_test_function_pointer_type> tc_record_pair;
+        std::vector<tc_record_pair > test_cases;
+    public:
+        template<class test_class>
+        void register_test_case(std::string const& name, test_class * ){
+            test_cases.push_back(tc_record_pair(name,& run_test<test_class>));
+        }
+        std::string operator()(bool silent=false){
+            std::stringstream str;
+            size_t failed=0;
+            for (size_t i=0;i<test_cases.size();++i){
+                try{
+                    (test_cases[i].second)();
+                }catch(std::exception& e){
+                    failed++;
+                    str<<"test case \""<<test_cases[i].first<<"\" failed with exception. what():\""<<e.what()<<"\""<<std::endl;
+                }
+            }
+            if (!silent) {
+                str<<test_cases.size()<<" test cases are run; "<<failed<<" failed"<<std::endl;
+            }
+            return str.str();
+        }
+    };
+    test_suite& get_suite_ref(){static test_suite ts; return ts;}
+    void run_all_and_print_results(test_suite& ts,std::ostream& o , bool silent=false){
+        o<<ts(silent);
+    }
+}
+using test_framework::get_suite_ref;
+#define TEST_CASE_WITH_FIXTURE(TC_NAME,FIXTURE_NAME)       \
+        struct TC_NAME;                                    \
+        struct TC_NAME:FIXTURE_NAME {                      \
+            /* explicitly implemented default constructor  \
+              is need here to please gcc 4.3.2*/           \
+            TC_NAME(){}                                    \
+            void operator()();                             \
+        };                                                 \
+        bool TC_NAME##_registerd =  (get_suite_ref().register_test_case(#TC_NAME,static_cast<TC_NAME*>(0)),true);\
+        void TC_NAME::operator()()
+
+namespace test_framework_unit_tests{
+    namespace test_helper{
+        template <size_t id> struct tag{};
+        template<typename tag>
+        struct test_case{
+            static bool is_run;
+            void operator()(){
+                is_run=true;
+            }
+        };
+        template<typename tag> bool test_case<tag>::is_run = false;
+
+    }
+    using namespace test_framework;
+    namespace test_test_suite_ref{
+        void run_all_runs_all_registered_test_cases(){
+            test_suite s;
+            using test_helper::tag;
+            test_helper::test_case<tag<__LINE__> > tc1;
+            test_helper::test_case<tag<__LINE__> > tc2;
+            s.register_test_case("tc1",&tc1);
+            s.register_test_case("tc2",&tc2);
+            s();
+            ASSERT(tc1.is_run && tc2.is_run,"test_suite::operator() should run all the tests");
+        }
+
+        struct silent_switch_fixture{
+            test_helper::test_case<test_helper::tag<__LINE__> > do_nothing_tc;
+        };
+        struct run_all_and_print_results_should_respect_silent_mode: silent_switch_fixture{
+            void operator()(){
+                using test_helper::tag;
+                test_helper::test_case<tag<__LINE__> > do_nothing_tc;
+                test_suite ts;
+                ts.register_test_case("tc_name",&do_nothing_tc);
+                bool silent =true;
+                ASSERT(ts(silent).empty(),"in silent mode no message except error should be output");
+            }
+        };
+        struct run_all_and_print_results_should_respect_verbose_mode: silent_switch_fixture{
+            void operator()(){
+                using test_helper::tag;
+                test_helper::test_case<tag<__LINE__> > do_nothing_tc;
+                test_suite ts;
+                ts.register_test_case("tc_name",&do_nothing_tc);
+                bool silent =true;
+                ASSERT(!ts(!silent).empty(),"in verbose mode all messages should be outputed");
+            }
+        };
+    }
+    namespace test_test_case_macro{
+        test_suite& get_suite_ref(){static test_suite ts; return ts;}
+        typedef test_helper::test_case<test_helper::tag<__LINE__> > unique_test_type;
+        TEST_CASE_WITH_FIXTURE(test_auto_registration,unique_test_type){
+            unique_test_type::operator()();
+        }
+        void run_test_test_case_macro(){
+            get_suite_ref()();
+            ASSERT(unique_test_type::is_run,"test case macro should register the test case in suite");
+        }
+        void test_test_case_macro_does_not_create_test_case_object(){
+            ASSERT(false,"to implement");
+        }
+    }
+    namespace internal_assertions_failure_test_cases{
+
+        test_suite& get_suite_ref(){static test_suite ts; return ts;}
+
+        //TODO: investigate compilation errors regarding tbb::set_assertion_handler
+//        struct empty_fixture{};
+//        TEST_CASE_WITH_FIXTURE(test_internal_assertion_does_not_stop_test_suite,empty_fixture){
+//            struct handler{
+//                static void _( const char* /*filename*/, int /*line*/, const char* /*expression*/, const char * /*comment*/ ){
+//                }
+//            };
+//
+//            tbb::assertion_handler_type previous  = tbb::set_assertion_handler(handler::_);
+//            __TBB_ASSERT(false,"this assert should not stop the test suite run");
+//            tbb::set_assertion_handler(previous );
+////            ASSERT(assertion_handler::is_called,"__TBB_ASSERT should call installed assertion handler");
+//        }
+//        TEST_CASE_WITH_FIXTURE(test_internal_assertion_does_mark_the_test_as_failed,empty_fixture){
+//            test_suite ts;
+//            struct _{
+////                static
+//                static void assertion_handler_type( const char* /*filename*/, int /*line*/, const char* /*expression*/, const char * /*comment*/ ){
+//                }
+//            };
+//            tbb::assertion_handler_type previous  = tbb::set_assertion_handler(_::assertion_handler_type);
+//            __TBB_ASSERT(false,"this assert should not stop the test suite run");
+//            tbb::set_assertion_handler(previous );
+//            std::string result = ts();
+//            std::size_t test_case_name_begin_pos = result.find("test case \"");
+//            std::size_t failed_begin_pos = result.find("failed");
+//            ASSERT(test_case_name_begin_pos!=std::string::npos && failed_begin_pos!=std::string::npos && test_case_name_begin_pos<failed_begin_pos,"internal assertion should result in test failure");
+//        }
+
+    }
+    void run_all_test(){
+        test_test_suite_ref::run_all_runs_all_registered_test_cases();
+        test_test_suite_ref::run_all_and_print_results_should_respect_silent_mode()();
+        test_test_suite_ref::run_all_and_print_results_should_respect_verbose_mode()();
+        test_test_case_macro::run_test_test_case_macro();
+        //TODO: uncomment and implement
+//        test_test_case_macro::test_test_case_macro_does_not_create_test_case_object();
+        run_all_and_print_results(internal_assertions_failure_test_cases::get_suite_ref(),std::cout,!Verbose);
+    }
+}
+
+int TestMain (){
+    SetHarnessErrorProcessing(test_framework::throw_assertion_failure);
+    //TODO: deal with assertions during stack unwinding
+    //tbb::set_assertion_handler( test_framework::throw_assertion_failure );
+    {
+        test_framework_unit_tests::run_all_test();
+    }
+    bool silent = !Verbose;
+    run_all_and_print_results(test_framework::get_suite_ref(),std::cout,silent);
+    return Harness::Done;
+}
+
+#endif //tbb_harness_test_cases_framework_H
diff --git a/src/test/test_ScalableAllocator.cpp b/src/test/test_ScalableAllocator.cpp
index 46bcad1..7a12496 100644
--- a/src/test/test_ScalableAllocator.cpp
+++ b/src/test/test_ScalableAllocator.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,6 +40,10 @@
 #include "tbb/memory_pool.h"
 #include "tbb/scalable_allocator.h"
 
+#if __TBB_SOURCE_DIRECTLY_INCLUDED && (_WIN32||_WIN64)
+#include "../tbbmalloc/tbbmalloc_internal_api.h"
+#define __TBBMALLOC_CALL_THREAD_SHUTDOWN 1
+#endif
 // the actual body of the test is there:
 #include "test_allocator.h"
 #include "harness_allocator.h"
@@ -81,6 +85,56 @@ public:
     }
 };
 
+class NullAllocator {
+public:
+    typedef char value_type;
+    NullAllocator() { }
+    NullAllocator(const NullAllocator&) { }
+    ~NullAllocator() { }
+    void *allocate(size_t) { return NULL; }
+    void deallocate(void *, size_t) { ASSERT(0, NULL); }
+};
+
+void TestZeroSpaceMemoryPool()
+{
+    try {
+        tbb::memory_pool<NullAllocator> pool;
+        ASSERT(0, "Useless allocator with no memory must not be created");
+    } catch (std::bad_alloc) {
+    } catch (...) {
+        ASSERT(0, "wrong exception type; expected bad_alloc");
+    }
+}
+
+/* test that pools in small space are either usable or not created
+   (i.e., exception raised) */
+void TestSmallFixedSizePool()
+{
+    char *buf;
+    bool allocated = false;
+
+    for (size_t sz = 0; sz < 64*1024; sz = sz? 3*sz : 3) {
+        buf = (char*)malloc(sz);
+        try {
+            tbb::fixed_pool pool(buf, sz);
+            allocated = pool.malloc( 16 ) || pool.malloc( 9*1024 );
+            ASSERT(allocated, NULL);
+        } catch (std::bad_alloc) {
+        } catch (...) {
+            ASSERT(0, "wrong exception type; expected bad_alloc");
+        }
+        free(buf);
+    }
+    ASSERT(allocated, "Maximal buf size should be enough to create working fixed_pool");
+    try {
+        tbb::fixed_pool pool(NULL, 10*1024*1024);
+        ASSERT(0, "Useless allocator with no memory must not be created");
+    } catch (std::bad_alloc) {
+    } catch (...) {
+        ASSERT(0, "wrong exception type; expected bad_alloc");
+    }
+}
+
 int TestMain () {
 #if _MSC_VER && !__TBBMALLOC_NO_IMPLICIT_LINKAGE
     #ifdef _DEBUG
@@ -108,9 +162,9 @@ int TestMain () {
         strcpy(p1, text);
         char *p2 = (char*)pool.realloc( p1, 15 );
         ASSERT( p2 && !strcmp(p2, text), "realloc broke memory" );
-        
+
         result += TestMain(tbb::memory_pool_allocator<void>(pool) );
-        
+
         // try allocate almost entire buf keeping some reasonable space for internals
         char *p3 = (char*)pool.realloc( p2, sizeof(buf)-128*1024 );
         ASSERT( p3, "defragmentation failed" );
@@ -122,6 +176,9 @@ int TestMain () {
 
         result += TestMain(tbb::memory_pool_allocator<void>(pool) );
     }
+    TestSmallFixedSizePool();
+    TestZeroSpaceMemoryPool();
+
     ASSERT( !result, NULL );
     return Harness::Done;
 }
diff --git a/src/test/test_ScalableAllocator_STL.cpp b/src/test/test_ScalableAllocator_STL.cpp
index 051f48a..63e33dc 100644
--- a/src/test/test_ScalableAllocator_STL.cpp
+++ b/src/test/test_ScalableAllocator_STL.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_aggregator.cpp b/src/test/test_aggregator.cpp
new file mode 100644
index 0000000..fc9e553
--- /dev/null
+++ b/src/test/test_aggregator.cpp
@@ -0,0 +1,193 @@
+/*
+    Copyright 2005-2012 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_PREVIEW_AGGREGATOR
+    #define TBB_PREVIEW_AGGREGATOR 1
+#endif
+
+#include "tbb/aggregator.h"
+#include "harness.h"
+#include <queue>
+
+typedef std::priority_queue<int, std::vector<int>, std::less<int> > pq_t;
+
+int N;
+int* shared_data;
+
+// Code for testing basic interface using function objects
+class push_fnobj : NoAssign, Harness::NoAfterlife {
+    pq_t& pq;
+    int threadID;
+public:
+    push_fnobj(pq_t& pq_, int tid) : pq(pq_), threadID(tid) {}
+    void operator()() const {
+        AssertLive();
+        pq.push(threadID);
+    }
+};
+
+class pop_fnobj : NoAssign, Harness::NoAfterlife {
+    pq_t& pq;
+public:
+    pop_fnobj(pq_t& pq_) : pq(pq_) {}
+    void operator()() const {
+        AssertLive();
+        ASSERT(!pq.empty(), "queue should not be empty yet");
+        int elem = pq.top();
+        pq.pop();
+        shared_data[elem]++;
+    }
+};
+
+class BasicBody : NoAssign {
+    pq_t& pq;
+    tbb::aggregator& agg;
+public:
+    BasicBody(pq_t& pq_, tbb::aggregator& agg_) : pq(pq_), agg(agg_) {}  
+    void operator()(const int threadID) const {
+        for (int i=0; i<N; ++i) agg.execute( push_fnobj(pq, threadID) );
+        for (int i=0; i<N; ++i) agg.execute( pop_fnobj(pq) );
+    }
+};
+
+void TestBasicInterface(int nThreads) {
+    pq_t my_pq;
+    tbb::aggregator agg;
+    for (int i=0; i<MaxThread; ++i) shared_data[i] = 0;
+    REMARK("Testing aggregator basic interface.\n");
+    NativeParallelFor(nThreads, BasicBody(my_pq, agg));
+    for (int i=0; i<nThreads; ++i)
+        ASSERT(shared_data[i] == N, "wrong number of elements pushed");
+    REMARK("Done testing aggregator basic interface.\n");
+}
+// End of code for testing basic interface using function objects
+
+
+// Code for testing basic interface using lambda expressions
+#if __TBB_LAMBDAS_PRESENT
+void TestBasicLambdaInterface(int nThreads) {
+    pq_t my_pq;
+    tbb::aggregator agg;
+    for (int i=0; i<MaxThread; ++i) shared_data[i] = 0;
+    REMARK("Testing aggregator basic lambda interface.\n");
+    NativeParallelFor(nThreads, [&agg, &my_pq](const int threadID) {
+        for (int i=0; i<N; ++i)
+            agg.execute( [&, threadID]() { my_pq.push(threadID); } );
+        for (int i=0; i<N; ++i) {
+            agg.execute( [&]() { 
+                ASSERT(!my_pq.empty(), "queue should not be empty yet");
+                int elem = my_pq.top();
+                my_pq.pop();
+                shared_data[elem]++;
+            } );
+        }
+    } );
+    for (int i=0; i<nThreads; ++i)
+        ASSERT(shared_data[i] == N, "wrong number of elements pushed");
+    REMARK("Done testing aggregator basic lambda interface.\n");
+}
+#endif /* __TBB_LAMBDAS_PRESENT */
+// End of code for testing basic interface using lambda expressions
+
+// Code for testing expert interface 
+class op_data : public tbb::aggregator_operation, NoAssign {
+public:
+    const int tid;
+    op_data(const int tid_=-1) : tbb::aggregator_operation(), tid(tid_) {}
+};
+
+class my_handler {
+    pq_t *pq;
+public:
+    my_handler() {}
+    my_handler(pq_t *pq_) : pq(pq_) {}
+    void operator()(tbb::aggregator_operation* op_list) const {
+        while (op_list) {
+            op_data& request = static_cast<op_data&>(*op_list);
+            op_list = op_list->next();
+            request.start();
+            if (request.tid >= 0) pq->push(request.tid);
+            else {
+                ASSERT(!pq->empty(), "queue should not be empty!");
+                int elem = pq->top();
+                pq->pop();
+                shared_data[elem]++;
+            }
+            request.finish();
+        }
+    }
+};
+
+class ExpertBody : NoAssign {
+    pq_t& pq;
+    tbb::aggregator_ext<my_handler>& agg;
+public:
+    ExpertBody(pq_t& pq_, tbb::aggregator_ext<my_handler>& agg_) : pq(pq_), agg(agg_) {}
+    void operator()(const int threadID) const {
+        for (int i=0; i<N; ++i) {
+            op_data to_push(threadID);
+            agg.process( &to_push );
+        }
+        for (int i=0; i<N; ++i) {
+            op_data to_pop;
+            agg.process( &to_pop );
+        }
+    }
+};
+
+void TestExpertInterface(int nThreads) {
+    pq_t my_pq;
+    tbb::aggregator_ext<my_handler> agg((my_handler(&my_pq)));
+    for (int i=0; i<MaxThread; ++i) shared_data[i] = 0;
+    REMARK("Testing aggregator expert interface.\n");
+    NativeParallelFor(nThreads, ExpertBody(my_pq, agg));
+    for (int i=0; i<nThreads; ++i)
+        ASSERT(shared_data[i] == N, "wrong number of elements pushed");
+    REMARK("Done testing aggregator expert interface.\n");
+}
+// End of code for testing expert interface 
+
+int TestMain() {
+    if (MinThread < 1)
+        MinThread = 1;
+    shared_data = new int[MaxThread];
+    for (int p = MinThread; p <= MaxThread; ++p) {
+        REMARK("Testing on %d threads.\n", p);
+        N = 0;
+        while (N <= 100) {
+            REMARK("Testing with N=%d\n", N);
+            TestBasicInterface(p);
+#if __TBB_LAMBDAS_PRESENT
+            TestBasicLambdaInterface(p);
+#endif /* __TBB_LAMBDAS_PRESENT */
+            TestExpertInterface(p);
+            N = N ? N*10 : 1;
+        }
+    }
+    return Harness::Done;
+}
diff --git a/src/test/test_aligned_space.cpp b/src/test/test_aligned_space.cpp
index 85ace49..486bd0a 100644
--- a/src/test/test_aligned_space.cpp
+++ b/src/test/test_aligned_space.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_allocator.h b/src/test/test_allocator.h
index a694950..0958632 100644
--- a/src/test/test_allocator.h
+++ b/src/test/test_allocator.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -190,6 +190,9 @@ struct Body: NoAssign {
         for( size_t k=0; k<256; ++k )
             if(array[k])
                 check_deallocate(array, k, thread_id);
+#if __TBBMALLOC_CALL_THREAD_SHUTDOWN
+        __TBB_mallocThreadShutdownNotification();
+#endif
     }
 };
 
diff --git a/src/test/test_allocator_STL.h b/src/test/test_allocator_STL.h
index e0a2644..4e9a8fe 100644
--- a/src/test/test_allocator_STL.h
+++ b/src/test/test_allocator_STL.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,6 +40,8 @@ void TestSequence(const typename Container::allocator_type &a) {
         ASSERT( *p==i*i, NULL );
         ++p;
     }
+    // regression test against compilation error for GCC 4.6.2
+    c.resize(1000);
 }
 
 template<typename Set>
diff --git a/src/test/test_assembly.cpp b/src/test/test_assembly.cpp
index e471466..d737dec 100644
--- a/src/test/test_assembly.cpp
+++ b/src/test/test_assembly.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -27,6 +27,15 @@
 */
 
 // Program for basic correctness testing of assembly-language routines.
+#include "harness_defs.h"
+
+#if __TBB_TEST_SKIP_BUILTINS_MODE
+#include "harness.h"
+int TestMain() {
+    REPORT("Known issue: GCC builtins aren't available\n");
+    return Harness::Skipped;
+}
+#else
 
 #include "tbb/task.h"
 
@@ -140,3 +149,4 @@ int TestMain () {
     }
     return Harness::Done;
 }
+#endif // __TBB_TEST_SKIP_BUILTINS_MODE
diff --git a/src/test/test_atomic.cpp b/src/test/test_atomic.cpp
index 565cf0a..85949e9 100644
--- a/src/test/test_atomic.cpp
+++ b/src/test/test_atomic.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,13 +26,15 @@
     the GNU General Public License.
 */
 
-#if __TBB_TEST_PIC && !__PIC__
-// Position independent code test was requested but __PIC__ is not defined; skip
+#include "harness_defs.h"
+
+#if __TBB_TEST_SKIP_PIC_MODE || __TBB_TEST_SKIP_BUILTINS_MODE
 #include "harness.h"
 int TestMain() {
+    REPORT("Known issue: %s\n",
+           __TBB_TEST_SKIP_PIC_MODE? "PIC mode is not supported" : "GCC builtins aren't available");
     return Harness::Skipped;
 }
-
 #else
 
 // Put tbb/atomic.h first, so if it is missing a prerequisite header, we find out about it.
@@ -395,84 +397,88 @@ void TestAtomicFloat( const char* name ) {
     TestParallel<T>( name );
 }
 
-const int numMaskedOperations = 100000;
-const int testSpaceSize = 8;
-int prime[testSpaceSize] = {3,5,7,11,13,17,19,23};
-
-template<typename T>
-class TestMaskedCAS_Body: NoAssign {
-    T*  test_space_uncontended;
-    T*  test_space_contended;
-public:
-    TestMaskedCAS_Body( T* _space1, T* _space2 ) : test_space_uncontended(_space1), test_space_contended(_space2) {}
-    void operator()( int my_idx ) const {
-        using tbb::internal::__TBB_MaskedCompareAndSwap;
-        const T my_prime = T(prime[my_idx]);
-        T* const my_ptr = test_space_uncontended+my_idx;
-        T old_value=0;
-        for( int i=0; i<numMaskedOperations; ++i, old_value+=my_prime ){
-            T result;
-        // Test uncontended case
-            T new_value = old_value + my_prime;
-            // The following CAS should always fail
-            result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(my_ptr,new_value,old_value-1);
-            ASSERT(result!=old_value-1, "masked CAS succeeded while it should fail");
-            ASSERT(result==*my_ptr, "masked CAS result mismatch with real value");
-            // The following one should succeed
-            result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(my_ptr,new_value,old_value);
-            ASSERT(result==old_value && *my_ptr==new_value, "masked CAS failed while it should succeed");
-            // The following one should fail again
-            result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(my_ptr,new_value,old_value);
-            ASSERT(result!=old_value, "masked CAS succeeded while it should fail");
-            ASSERT(result==*my_ptr, "masked CAS result mismatch with real value");
-        // Test contended case
-            for( int j=0; j<testSpaceSize; ++j ){
-                // try adding my_prime until success
-                T value;
-                do {
-                    value = test_space_contended[j];
-                    result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(test_space_contended+j,value+my_prime,value);
-                } while( result!=value );
+#if __TBB_BIG_ENDIAN!=-1
+namespace masked_cas_helpers {
+    const int numMaskedOperations = 100000;
+    const int testSpaceSize = 8;
+    int prime[testSpaceSize] = {3,5,7,11,13,17,19,23};
+
+
+    template<typename T>
+    class TestMaskedCAS_Body: NoAssign {
+        T*  test_space_uncontended;
+        T*  test_space_contended;
+    public:
+        TestMaskedCAS_Body( T* _space1, T* _space2 ) : test_space_uncontended(_space1), test_space_contended(_space2) {}
+        void operator()( int my_idx ) const {
+            using tbb::internal::__TBB_MaskedCompareAndSwap;
+            const T my_prime = T(prime[my_idx]);
+            T* const my_ptr = test_space_uncontended+my_idx;
+            T old_value=0;
+            for( int i=0; i<numMaskedOperations; ++i, old_value+=my_prime ){
+                T result;
+            // Test uncontended case
+                T new_value = old_value + my_prime;
+                // The following CAS should always fail
+                result = __TBB_MaskedCompareAndSwap<T>(my_ptr,new_value,old_value-1);
+                ASSERT(result!=old_value-1, "masked CAS succeeded while it should fail");
+                ASSERT(result==*my_ptr, "masked CAS result mismatch with real value");
+                // The following one should succeed
+                result = __TBB_MaskedCompareAndSwap<T>(my_ptr,new_value,old_value);
+                ASSERT(result==old_value && *my_ptr==new_value, "masked CAS failed while it should succeed");
+                // The following one should fail again
+                result = __TBB_MaskedCompareAndSwap<T>(my_ptr,new_value,old_value);
+                ASSERT(result!=old_value, "masked CAS succeeded while it should fail");
+                ASSERT(result==*my_ptr, "masked CAS result mismatch with real value");
+            // Test contended case
+                for( int j=0; j<testSpaceSize; ++j ){
+                    // try adding my_prime until success
+                    T value;
+                    do {
+                        value = test_space_contended[j];
+                        result = __TBB_MaskedCompareAndSwap<T>(test_space_contended+j,value+my_prime,value);
+                    } while( result!=value );
+                }
             }
         }
-    }
-};
-
-template<typename T>
-struct intptr_as_array_of
-{
-    static const int how_many_Ts = sizeof(intptr_t)/sizeof(T);
-    union {
-        intptr_t result;
-        T space[ how_many_Ts ];
     };
-};
 
-template<typename T>
-intptr_t getCorrectUncontendedValue(int slot_idx) {
-    intptr_as_array_of<T> slot;
-    slot.result = 0;
-    for( int i=0; i<slot.how_many_Ts; ++i ) {
-        const T my_prime = T(prime[slot_idx*slot.how_many_Ts + i]);
-        for( int j=0; j<numMaskedOperations; ++j )
-            slot.space[i] += my_prime;
-    }
-    return slot.result;
-}
+    template<typename T>
+    struct intptr_as_array_of
+    {
+        static const int how_many_Ts = sizeof(intptr_t)/sizeof(T);
+        union {
+            intptr_t result;
+            T space[ how_many_Ts ];
+        };
+    };
 
-template<typename T>
-intptr_t getCorrectContendedValue() {
-    intptr_as_array_of<T>  slot;
-    slot.result = 0;
-    for( int i=0; i<slot.how_many_Ts; ++i )
-        for( int primes=0; primes<testSpaceSize; ++primes )
+    template<typename T>
+    intptr_t getCorrectUncontendedValue(int slot_idx) {
+        intptr_as_array_of<T> slot;
+        slot.result = 0;
+        for( int i=0; i<slot.how_many_Ts; ++i ) {
+            const T my_prime = T(prime[slot_idx*slot.how_many_Ts + i]);
             for( int j=0; j<numMaskedOperations; ++j )
-                slot.space[i] += prime[primes];
-    return slot.result;
-}
+                slot.space[i] += my_prime;
+        }
+        return slot.result;
+    }
 
+    template<typename T>
+    intptr_t getCorrectContendedValue() {
+        intptr_as_array_of<T>  slot;
+        slot.result = 0;
+        for( int i=0; i<slot.how_many_Ts; ++i )
+            for( int primes=0; primes<testSpaceSize; ++primes )
+                for( int j=0; j<numMaskedOperations; ++j )
+                    slot.space[i] += prime[primes];
+        return slot.result;
+    }
+} // namespace masked_cas_helpers
 template<typename T>
 void TestMaskedCAS() {
+    using namespace masked_cas_helpers;
     REMARK("testing masked CAS<%d>\n",int(sizeof(T)));
 
     const int num_slots = sizeof(T)*testSpaceSize/sizeof(intptr_t);
@@ -492,7 +498,7 @@ void TestMaskedCAS() {
         ASSERT( arr2[i+1]==correctContendedValue, "unexpected value in a contended slot" );
     }
 }
-
+#endif
 template <typename T>
 class TestRelaxedLoadStorePlainBody {
     static T s_turn,
@@ -570,6 +576,84 @@ class ArrayElement {
     char item[N];
 };
 
+#include "harness_barrier.h"
+namespace bit_operation_test_suite{
+    struct fixture : NoAssign{
+        static const uintptr_t zero = 0;
+        const uintptr_t random_value ;
+        const uintptr_t inverted_random_value ;
+        fixture():
+            random_value (tbb::internal::size_t_select(0x9E3779B9,0x9E3779B97F4A7C15ULL)),
+            inverted_random_value ( ~random_value)
+        {}
+    };
+
+    struct TestAtomicORSerially : fixture {
+        void operator()(){
+            //these additional variable are needed to get more meaningful expression in the assert
+            uintptr_t initial_value = zero;
+            uintptr_t atomic_or_result = initial_value;
+            uintptr_t atomic_or_operand = random_value;
+
+            __TBB_AtomicOR(&atomic_or_result,atomic_or_operand);
+
+            ASSERT(atomic_or_result == (initial_value | atomic_or_operand),"AtomicOR should do the OR operation");
+        }
+    };
+    struct TestAtomicANDSerially : fixture {
+        void operator()(){
+            //these additional variable are needed to get more meaningful expression in the assert
+            uintptr_t initial_value = inverted_random_value;
+            uintptr_t atomic_and_result = initial_value;
+            uintptr_t atomic_and_operand = random_value;
+
+            __TBB_AtomicAND(&atomic_and_result,atomic_and_operand);
+
+            ASSERT(atomic_and_result == (initial_value & atomic_and_operand),"AtomicAND should do the AND operation");
+        }
+    };
+
+    struct TestAtomicORandANDConcurrently : fixture {
+        static const uintptr_t bit_per_word = sizeof(uintptr_t) * 8;
+        static const uintptr_t threads_number = bit_per_word;
+        Harness::SpinBarrier m_barrier;
+        uintptr_t bitmap;
+        TestAtomicORandANDConcurrently():bitmap(zero) {}
+
+        struct thread_body{
+            TestAtomicORandANDConcurrently* test;
+            thread_body(TestAtomicORandANDConcurrently* the_test) : test(the_test) {}
+            void operator()(int thread_index)const{
+                const uintptr_t single_bit_mask = ((uintptr_t)1u) << (thread_index % bit_per_word);
+                test->m_barrier.wait();
+                static const char* error_msg = "AtomicOR and AtomicAND should be atomic";
+                for (uintptr_t attempts=0; attempts<1000; attempts++ ){
+                    //Set and clear designated bits in a word.
+                    __TBB_AtomicOR(&test->bitmap,single_bit_mask);
+                     __TBB_Yield();
+                    bool the_bit_is_set_after_set_via_atomic_or = ((__TBB_load_with_acquire(test->bitmap) & single_bit_mask )== single_bit_mask);
+                    ASSERT(the_bit_is_set_after_set_via_atomic_or,error_msg);
+
+                    __TBB_AtomicAND(&test->bitmap,~single_bit_mask);
+                    __TBB_Yield();
+                    bool the_bit_is_clear_after_clear_via_atomic_and = ((__TBB_load_with_acquire(test->bitmap) & single_bit_mask )== zero);
+                    ASSERT(the_bit_is_clear_after_clear_via_atomic_and,error_msg);
+                }
+            }
+        };
+        void operator()(){
+            m_barrier.initialize(threads_number);
+            NativeParallelFor(threads_number,thread_body(this));
+        }
+    };
+}
+void TestBitOperations(){
+    using namespace bit_operation_test_suite;
+    TestAtomicORSerially()();
+    TestAtomicANDSerially()();
+    TestAtomicORandANDConcurrently()();
+}
+
 int TestMain () {
     #if __TBB_64BIT_ATOMICS
     TestAtomicInteger<unsigned long long>("unsigned long long");
@@ -609,14 +693,20 @@ int TestMain () {
     ASSERT(sizeof(double)==8, "type double is not 64 bits");
     #endif
     ASSERT( !ParallelError, NULL );
-    TestMaskedCAS<unsigned char>();
-    TestMaskedCAS<unsigned short>();
+    #if __TBB_BIG_ENDIAN!=-1
+        TestMaskedCAS<unsigned char>();
+        TestMaskedCAS<unsigned short>();
+    #else
+        REPORT("Generic part-word CAS is not available\n");
+    #endif
 #if __TBB_64BIT_ATOMICS
     TestRegisterPromotionSuppression<tbb::internal::int64_t>();
 #endif
     TestRegisterPromotionSuppression<tbb::internal::int32_t>();
     TestRegisterPromotionSuppression<tbb::internal::int16_t>();
     TestRegisterPromotionSuppression<tbb::internal::int8_t>();
+    TestBitOperations();
+
     return Harness::Done;
 }
 
@@ -1077,4 +1167,4 @@ void TestParallel( const char* name ) {
     TestDekkerArbitration<T, UseGlobalHelperFullyFenced>();
 }
 
-#endif // __TBB_TEST_PIC && !__PIC__
+#endif // __TBB_TEST_SKIP_PIC_MODE || __TBB_TEST_SKIP_BUILTINS_MODE
diff --git a/src/test/test_blocked_range.cpp b/src/test/test_blocked_range.cpp
index 2f555e5..cf53d78 100644
--- a/src/test/test_blocked_range.cpp
+++ b/src/test/test_blocked_range.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_blocked_range2d.cpp b/src/test/test_blocked_range2d.cpp
index 7a523fc..175985f 100644
--- a/src/test/test_blocked_range2d.cpp
+++ b/src/test/test_blocked_range2d.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_blocked_range3d.cpp b/src/test/test_blocked_range3d.cpp
index 04ab94e..27b5833 100644
--- a/src/test/test_blocked_range3d.cpp
+++ b/src/test/test_blocked_range3d.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_broadcast_node.cpp b/src/test/test_broadcast_node.cpp
index 47e5eb3..39f4b43 100644
--- a/src/test/test_broadcast_node.cpp
+++ b/src/test/test_broadcast_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -73,7 +73,8 @@ public:
 template< typename T >
 void test_serial_broadcasts() {
 
-    tbb::flow::broadcast_node<T> b;
+    tbb::flow::graph g;
+    tbb::flow::broadcast_node<T> b(g);
     
     for ( int num_receivers = 1; num_receivers < R; ++num_receivers ) {
         counting_array_receiver<T> *receivers = new counting_array_receiver<T>[num_receivers];
@@ -104,8 +105,8 @@ void test_serial_broadcasts() {
 
 template< typename T >
 class native_body : private NoAssign {
- 
-   tbb::flow::broadcast_node<T> &my_b;
+
+    tbb::flow::broadcast_node<T> &my_b;
 
 public:
 
@@ -148,7 +149,8 @@ void run_parallel_broadcasts(int p, tbb::flow::broadcast_node<T>& b) {
 template< typename T >
 void test_parallel_broadcasts(int p) {
 
-    tbb::flow::broadcast_node<T> b;
+    tbb::flow::graph g;
+    tbb::flow::broadcast_node<T> b(g);
     run_parallel_broadcasts(p, b);
     
     // test copy constructor
diff --git a/src/test/test_buffer_node.cpp b/src/test/test_buffer_node.cpp
index 29b4f99..6165078 100644
--- a/src/test/test_buffer_node.cpp
+++ b/src/test/test_buffer_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -150,7 +150,7 @@ struct parallel_put_get : NoAssign {
 // Item can be reserved, released, consumed ( single serial receiver )
 //
 template< typename T >
-int test_reservation(int num_threads) {
+int test_reservation() {
     tbb::flow::graph g;
     T bogus_value(-1);
 
diff --git a/src/test/test_cache_aligned_allocator.cpp b/src/test/test_cache_aligned_allocator.cpp
index a50826c..c194cbc 100644
--- a/src/test/test_cache_aligned_allocator.cpp
+++ b/src/test/test_cache_aligned_allocator.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_cache_aligned_allocator_STL.cpp b/src/test/test_cache_aligned_allocator_STL.cpp
index 2338bc3..1cb6dc4 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-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_cilk_common.h b/src/test/test_cilk_common.h
index e1bb7a2..ce7162b 100644
--- a/src/test/test_cilk_common.h
+++ b/src/test/test_cilk_common.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_cilk_dynamic_load.cpp b/src/test/test_cilk_dynamic_load.cpp
index a11554b..57630e9 100644
--- a/src/test/test_cilk_dynamic_load.cpp
+++ b/src/test/test_cilk_dynamic_load.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,16 +34,14 @@
 #define CILK_SYMBOLS_VISIBLE (_WIN32||_WIN64)
 // The compiler does not add "-lcilkrts" linker option on some linux systems
 #define CILK_LINKAGE_BROKEN  (__linux__ && __GNUC__<4 && __INTEL_COMPILER_BUILD_DATE <= 20110427)
-// In U4, cilkrts incorrectly sends the interop notifications to TBB
-#define CILK_NOTIFICATIONS_BROKEN ( __INTEL_COMPILER_BUILD_DATE == 20110427 )
+// Currently, the interop doesn't support the situation:
+//1) TBB is outermost;
+//2)   Cilk, and it should be dynamically loaded with dlopen/LoadLibrary (possibly via a 3rd party module);
+//3)     TBB again;
+//4)       Cilk again.
+#define HEAVY_NESTED_INTEROP_SUPPORT __INTEL_COMPILER_BUILD_DATE < 20110427
 
-#if __TBB_CILK_INTEROP && CILK_SYMBOLS_VISIBLE && !CILK_LINKAGE_BROKEN && !CILK_NOTIFICATIONS_BROKEN
-
-#if _WIN32 || _WIN64
-#include "tbb/machine/windows_api.h"
-#else
-#include <dlfcn.h>
-#endif /* _WIN32 || _WIN64 */
+#if __TBB_CILK_INTEROP && CILK_SYMBOLS_VISIBLE && !CILK_LINKAGE_BROKEN && HEAVY_NESTED_INTEROP_SUPPORT
 
 #include "tbb/task_scheduler_init.h"
 #include "tbb/task.h"
@@ -81,6 +79,7 @@ CILK_TEST_EXPORT void CilkShutdown()
 #else /* _USRDLL undefined */
 
 #include "harness.h"
+#include "harness_dynamic_libs.h"
 
 int SerialFib( int n ) {
     int a=0, b=1;
@@ -107,30 +106,11 @@ class FibTask: public tbb::task {
             result = n;
         } else {
 
-#if _WIN32 || _WIN64
-            HMODULE hLib = LoadLibrary("test_cilk_dynamic_load_dll.dll");
-            ASSERT( hLib, "failed to load test_cilk_dynamic_load_dll" );
-
-            CilkFib = (CILK_CALL) GetProcAddress(hLib, "CilkFib");
-            ASSERT( CilkFib, "failed to get address" );
-
-            CilkShutdown = (CILK_SHUTDOWN) GetProcAddress(hLib, "CilkShutdown");
-            ASSERT( CilkShutdown, "failed to get address" );
-#else /* !WIN */
-        #if __APPLE__
-            #define LIBRARY_NAME(base) base".dylib"
-        #else
-            #define LIBRARY_NAME(base) base".so"
-        #endif /* __APPLE__ */
-            void *hLib = dlopen( LIBRARY_NAME("test_cilk_dynamic_load_dll"), RTLD_LAZY );
-            ASSERT( hLib, "failed to load test_cilk_dynamic_load_dll" );
-
-            CilkFib = (CILK_CALL) dlsym(hLib, "CilkFib");
-            ASSERT( CilkFib, "failed to get address" );
-
-            CilkShutdown = (CILK_SHUTDOWN) dlsym(hLib, "CilkShutdown");
-            ASSERT( CilkShutdown, "failed to get address" );
-#endif /* !WIN */
+            // TODO: why RTLD_LAZY was used here?
+            Harness::LIBRARY_HANDLE hLib =
+                Harness::OpenLibrary(TEST_LIBRARY_NAME("test_cilk_dynamic_load_dll"));
+            CilkFib = (CILK_CALL)Harness::GetAddress(hLib, "CilkFib");
+            CilkShutdown = (CILK_SHUTDOWN)Harness::GetAddress(hLib, "CilkShutdown");
 
             int x, y;
             x = CilkFib(n-2);
@@ -139,11 +119,7 @@ class FibTask: public tbb::task {
 
             CilkShutdown();
 
-#if _WIN32 || _WIN64
-            FreeLibrary(hLib);
-#else
-            dlclose(hLib);
-#endif
+            Harness::CloseLibrary(hLib);
         }
         return NULL;
     }
diff --git a/src/test/test_cilk_interop.cpp b/src/test/test_cilk_interop.cpp
index 46861c8..8c68ae9 100644
--- a/src/test/test_cilk_interop.cpp
+++ b/src/test/test_cilk_interop.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_combinable.cpp b/src/test/test_combinable.cpp
index 5dbd83a..dad8451 100644
--- a/src/test/test_combinable.cpp
+++ b/src/test/test_combinable.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_concurrent_hash_map.cpp b/src/test/test_concurrent_hash_map.cpp
index e9b02f3..50b6915 100644
--- a/src/test/test_concurrent_hash_map.cpp
+++ b/src/test/test_concurrent_hash_map.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_concurrent_lru_cache.cpp b/src/test/test_concurrent_lru_cache.cpp
new file mode 100644
index 0000000..5361fe0
--- /dev/null
+++ b/src/test/test_concurrent_lru_cache.cpp
@@ -0,0 +1,412 @@
+/*
+    Copyright 2005-2012 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.
+*/
+
+#if _MSC_VER
+    #pragma warning (disable: 4503) // Suppress "decorated name length exceeded, name was truncated" warning
+#endif
+
+#include "harness_test_cases_framework.h"
+#include "harness.h"
+#include "harness_barrier.h"
+
+#include <utility>
+
+#ifdef TEST_COARSE_GRAINED_LOCK_IMPLEMENTATION
+    #include "../perf/coarse_grained_raii_lru_cache.h"
+    #define selected_raii_lru_cache_impl coarse_grained_raii_lru_cache
+#else
+    #define TBB_PREVIEW_CONCURRENT_LRU_CACHE 1
+    #include "tbb/concurrent_lru_cache.h"
+    #define selected_raii_lru_cache_impl tbb::concurrent_lru_cache
+#endif
+
+#include "tbb/task_scheduler_init.h"
+
+namespace helpers{
+    // Busy work and calibration helpers
+    unsigned int one_us_iters = 345; // default value
+
+    // if user wants to calibrate to microseconds on particular machine, call
+    // this at beginning of program; sets one_us_iters to number of iters to
+    // busy_wait for approx. 1 us
+//    void calibrate_busy_wait() {
+//        tbb::tick_count t0, t1;
+//
+//        t0 = tbb::tick_count::now();
+//        for (volatile unsigned int i=0; i<1000000; ++i) continue;
+//        t1 = tbb::tick_count::now();
+//
+//        one_us_iters = (unsigned int)((1000000.0/(t1-t0).seconds())*0.000001);
+//        printf("one_us_iters: %d\n", one_us_iters);
+//    }
+    void busy_wait(int us)
+    {
+        unsigned int iter = us*one_us_iters;
+        for (volatile unsigned int i=0; i<iter; ++i) continue;
+    }
+}
+namespace helpers{
+    template<class T> void ignore( const T& ) { }
+    //TODO: add test cases for prevent_optimizng_out function
+    template<typename type>
+    void prevent_optimizng_out(type volatile const& s){
+        volatile const type* dummy = &s;
+        ignore(dummy);
+    }
+
+    struct empty_fixture{};
+
+    template<typename argument_type>
+    struct native_for_concurrent_op_repeated:NoAssign{
+        typedef void (*test_function_pointer_type)(argument_type&);
+
+        argument_type& m_counter_ref;
+        test_function_pointer_type m_test_function_pointer_type;
+        std::size_t m_repeat_number;
+        native_for_concurrent_op_repeated(argument_type& counter_ref, test_function_pointer_type action, std::size_t repeat_number)
+            :m_counter_ref(counter_ref), m_test_function_pointer_type(action), m_repeat_number(repeat_number)
+        {}
+        template <typename ignored_parameter_type>
+        void operator()(ignored_parameter_type const&)const{
+            for (size_t i=0; i<m_repeat_number;++i){
+                m_test_function_pointer_type(m_counter_ref);
+            }
+        }
+
+    };
+
+    template <typename counter_type = size_t>
+    struct object_instanses_counting_type{
+        counter_type * m_p_count;
+        object_instanses_counting_type(): m_p_count (new counter_type){*m_p_count =1; } //to overcome absense of constructor in tbb::atomic
+        ~object_instanses_counting_type(){ if (! --(*m_p_count)){delete(m_p_count);}}
+        object_instanses_counting_type(object_instanses_counting_type const& other): m_p_count(other.m_p_count){
+            ++(*m_p_count);
+        }
+        object_instanses_counting_type& operator=(object_instanses_counting_type other){
+            std::swap(this->m_p_count,other.m_p_count);
+            return *this;
+        }
+        size_t instances_count()const {return *m_p_count;}
+    };
+    typedef object_instanses_counting_type<> object_instanses_counting_serial_type;
+    typedef object_instanses_counting_type<tbb::atomic<std::size_t> > object_instanses_counting_concurent_type;
+
+    namespace object_instanses_counting_type_test_cases{
+        namespace serial_tests{
+            TEST_CASE_WITH_FIXTURE(test_object_instanses_counting_type_creation,empty_fixture){
+                ASSERT(object_instanses_counting_serial_type().instances_count()==1,"newly created instance by definition has instances_count equal to 1");
+            }
+            TEST_CASE_WITH_FIXTURE(test_object_instanses_counting_type_copy,empty_fixture){
+                object_instanses_counting_serial_type source;
+                ASSERT(object_instanses_counting_serial_type(source).instances_count()==2,"copy should increase ref count");
+            }
+            TEST_CASE_WITH_FIXTURE(test_object_instanses_counting_type_assignment,empty_fixture){
+                object_instanses_counting_serial_type source;
+                object_instanses_counting_serial_type assigned;
+                assigned = source;
+                ASSERT(source.instances_count()==2,"assign should increase ref count");
+                ASSERT(assigned.instances_count()==2,"assign should increase ref count");
+            }
+        }
+        namespace concurent_tests{
+            typedef native_for_concurrent_op_repeated<object_instanses_counting_concurent_type>  native_for_concurrent_op;
+
+            struct native_for_single_op_repeated_fixture{
+                object_instanses_counting_concurent_type source;
+                void run_native_for_and_assert_source_is_unique(native_for_concurrent_op::test_function_pointer_type operation,const char* msg){
+                    //TODO: refactor number of threads into separate fixture
+                    const size_t number_of_threads = min(4,tbb::task_scheduler_init::default_num_threads());
+                    const size_t repeats_per_thread = 1000000;
+
+                    NativeParallelFor(number_of_threads , native_for_concurrent_op(source,operation,repeats_per_thread));
+                    ASSERT(source.instances_count()==1,msg);
+                }
+
+            };
+            TEST_CASE_WITH_FIXTURE(test_object_instanses_counting_type_copy,native_for_single_op_repeated_fixture){
+                struct _{ static void copy(object_instanses_counting_concurent_type& source){
+                    object_instanses_counting_concurent_type copy(source);
+                    helpers::prevent_optimizng_out(copy);
+                }};
+                run_native_for_and_assert_source_is_unique(&_::copy,"reference counting during copy construction/destruction is not thread safe ?");
+            }
+            TEST_CASE_WITH_FIXTURE(test_object_instanses_counting_type_assignment,native_for_single_op_repeated_fixture){
+                struct _{ static void assign(object_instanses_counting_concurent_type& source){
+                    object_instanses_counting_concurent_type assigned;
+                    assigned = source;
+                    helpers::prevent_optimizng_out(assigned);
+                }};
+                run_native_for_and_assert_source_is_unique(&_::assign,"reference counting during assigning/destruction is not thread safe ?");
+            }
+
+        }
+}
+}
+
+struct get_lru_cache_type{
+
+    template< typename parameter1, typename parameter2, typename parameter3=void>
+    struct apply{
+        typedef selected_raii_lru_cache_impl<parameter1,parameter2,parameter3> type;
+    };
+    template< typename parameter1, typename parameter2>
+    struct apply<parameter1,parameter2,void>{
+        typedef selected_raii_lru_cache_impl<parameter1,parameter2> type;
+    };
+
+};
+
+namespace serial_tests{
+    using namespace helpers;
+    namespace usability{
+    namespace compilation_only{
+        TEST_CASE_WITH_FIXTURE(test_creation_and_use_interface,empty_fixture){
+            struct dummy_function{static int _(int key){return key;}};
+            typedef get_lru_cache_type::apply<int,int>::type cache_type;
+            size_t number_of_lru_history_items = 8;
+            cache_type cache((&dummy_function::_),(number_of_lru_history_items));
+            int dummy_key=0;
+            cache_type::handle h = cache[dummy_key];
+            int value = h.value();
+            (void)value;
+        }
+    }
+    namespace behaviour{
+        namespace helpers{
+            template <size_t id> struct tag{};
+            template< typename tag, typename value_and_key_type>
+            struct call_counting_function{
+                static int calls_count;
+                static value_and_key_type _(value_and_key_type key){
+                    ++calls_count;
+                    return key;
+                }
+            };
+            template< typename tag, typename value_and_key_type>
+            int call_counting_function<tag,value_and_key_type>::calls_count = 0;
+
+
+        }
+        TEST_CASE_WITH_FIXTURE(test_cache_returns_only_values_from_value_function,empty_fixture){
+            struct dummy_function{static int _(int /*key*/){return 0xDEADBEEF;}};
+            typedef get_lru_cache_type::apply<int,int>::type cache_type;
+            size_t number_of_lru_history_items = 8;
+            int dummy_key=1;
+            cache_type cache((&dummy_function::_),(number_of_lru_history_items));
+            ASSERT(dummy_function::_(dummy_key)==cache[dummy_key].value(),"cache operator() must return only values obtained from value_function ");
+        }
+
+        TEST_CASE_WITH_FIXTURE(test_value_function_called_only_on_cache_miss,empty_fixture){
+            typedef helpers::tag<__LINE__> tag;
+            typedef helpers::call_counting_function<tag,int> function;
+            typedef get_lru_cache_type::apply<int,int>::type cache_type;
+            size_t number_of_lru_history_items = 8;
+            cache_type cache((&function::_),(number_of_lru_history_items));
+
+            int dummy_key=0;
+            cache[dummy_key];
+            cache[dummy_key];
+            ASSERT(function::calls_count==1,"value function should be called only on a cache miss");
+        }
+        }
+        namespace helpers{
+            using ::helpers::object_instanses_counting_serial_type;
+        }
+        namespace helpers{
+            template<typename value_type>
+            struct clonning_function:NoAssign{
+                value_type& m_ref_original;
+                clonning_function(value_type& ref_original):m_ref_original(ref_original){}
+                template<typename key_type>
+                value_type operator()(key_type)const{ return m_ref_original;}
+            };
+        }
+        struct instance_counting_fixture{
+            static const size_t number_of_lru_history_items = 8;
+
+            typedef helpers::clonning_function<helpers::object_instanses_counting_serial_type> cloner_type;
+            typedef get_lru_cache_type::apply<size_t,helpers::object_instanses_counting_serial_type,cloner_type>::type cache_type;
+            helpers::object_instanses_counting_serial_type source;
+            cloner_type cloner;
+            cache_type cache;
+
+            instance_counting_fixture():cloner((source)),cache(cloner,number_of_lru_history_items){}
+        };
+
+        TEST_CASE_WITH_FIXTURE(test_cache_stores_unused_objects,instance_counting_fixture){
+            for (size_t i=0;i<number_of_lru_history_items;++i){
+                cache[i];
+            }
+            ASSERT(source.instances_count()> 1,"cache should store some unused objects ");
+        }
+
+        TEST_CASE_WITH_FIXTURE(test_cache_stores_no_more_then_X_number_of_unused_objects,instance_counting_fixture){
+            for (size_t i=0;i<number_of_lru_history_items+1;++i){
+                cache[i];
+            }
+            ASSERT(source.instances_count()== number_of_lru_history_items+1,"cache should respect number of stored unused objects to number passed in constructor");
+        }
+
+        namespace helpers{
+            template< typename key_type, typename value_type>
+            struct map_searcher:NoAssign{
+                typedef std::map<key_type,value_type> map_type;
+                map_type & m_map_ref;
+                map_searcher(map_type & map_ref): m_map_ref(map_ref) {}
+                value_type& operator()(key_type k){
+                    typename map_type::iterator it =m_map_ref.find(k);
+                    if (it==m_map_ref.end()){
+                        it = m_map_ref.insert(it,std::make_pair(k,value_type()));
+                    }
+                    return it->second;
+                }
+            };
+        }
+
+        struct filled_instance_counting_fixture_with_external_map{
+            static const size_t number_of_lru_history_items = 8;
+
+            typedef helpers::map_searcher<size_t,helpers::object_instanses_counting_serial_type> map_searcher_type;
+            typedef map_searcher_type::map_type objects_map_type;
+            typedef get_lru_cache_type::apply<size_t,helpers::object_instanses_counting_serial_type,map_searcher_type>::type cache_type;
+            map_searcher_type::map_type objects_map;
+            cache_type cache;
+            filled_instance_counting_fixture_with_external_map():cache(map_searcher_type(objects_map),number_of_lru_history_items){}
+            bool is_evicted(size_t k){
+                objects_map_type::iterator it =objects_map.find(k);
+                ASSERT(it!=objects_map.end(),"no value for key - error in test logic ?");
+                return it->second.instances_count()==1;
+            }
+            void fill_up_cache(size_t lower_bound, size_t upper_bound){
+                for (size_t i=lower_bound;i<upper_bound;++i){
+                    cache[i];
+                }
+            }
+        };
+
+        TEST_CASE_WITH_FIXTURE(test_cache_should_evict_unused_objects_lru_order,filled_instance_counting_fixture_with_external_map){
+            ASSERT(number_of_lru_history_items > 2,"incorrect test setup");
+            fill_up_cache(0,number_of_lru_history_items);
+            //heat up first element
+            cache[0];
+            //cause eviction
+            cache[number_of_lru_history_items];
+            ASSERT(is_evicted(1) && !is_evicted(0),"cache should evict items in lru order");
+        }
+
+        TEST_CASE_WITH_FIXTURE(test_live_handler_object_prevents_item_from_eviction,filled_instance_counting_fixture_with_external_map){
+            cache_type::handle h = cache[0];
+            //cause eviction
+            fill_up_cache(1,number_of_lru_history_items+2);
+            ASSERT(is_evicted(1) && !is_evicted(0),"cache should not evict items in use");
+        }
+        TEST_CASE_WITH_FIXTURE(test_live_handler_object_is_ref_counted,filled_instance_counting_fixture_with_external_map){
+            cache_type::handle h = cache[0];
+            {
+                cache_type::handle h = cache[0];
+            }
+            //cause eviction
+            fill_up_cache(1,number_of_lru_history_items+2);
+            ASSERT(is_evicted(1) && !is_evicted(0),"cache should not evict items in use");
+        }
+    }
+}
+
+
+namespace concurency_tests{
+    namespace helpers{
+        using namespace ::helpers;
+    }
+    namespace helpers{
+        //key_type must be convertible to array index
+        template< typename key_type, typename value_type, size_t array_size>
+        struct array_searcher:NoAssign{
+            typedef value_type array_type[array_size];
+            array_type const& m_array_ref;
+            array_searcher(array_type const& array_ref): m_array_ref(array_ref) {}
+            const value_type& operator()(key_type k)const{
+                size_t index = k;
+                ASSERT(k < array_size,"incorrect test setup");
+                return m_array_ref[index];
+            }
+        };
+    }
+
+    struct filled_instance_counting_fixture_with_external_array{
+        static const size_t number_of_lru_history_items = 8;
+        static const size_t array_size = 16*number_of_lru_history_items;
+
+        typedef helpers::array_searcher<size_t,helpers::object_instanses_counting_concurent_type,array_size> array_searcher_type;
+        typedef array_searcher_type::array_type objects_array_type;
+        typedef get_lru_cache_type::apply<size_t,helpers::object_instanses_counting_concurent_type,array_searcher_type>::type cache_type;
+        array_searcher_type::array_type objects_array;
+        cache_type cache;
+        filled_instance_counting_fixture_with_external_array():cache(array_searcher_type(objects_array),number_of_lru_history_items){}
+        bool is_evicted(size_t k)const{
+            return array_searcher_type(objects_array)(k).instances_count()==1;
+        }
+        void fill_up_cache(size_t lower_bound, size_t upper_bound){
+            for (size_t i=lower_bound;i<upper_bound;++i){
+                cache[i];
+            }
+        }
+        size_t number_of_non_evicted_from_cache()const{
+            size_t result=0;
+            for (size_t i=0; i<array_size; ++i){
+                if (!this->is_evicted(i)){
+                    ++result;
+                }
+            }
+            return result;
+        }
+    };
+
+
+    //TODO: make this more reproducible
+    //TODO: split this test case in two parts
+    TEST_CASE_WITH_FIXTURE(correctness_of_braces_and_hanlde_destructor,filled_instance_counting_fixture_with_external_array){
+        typedef correctness_of_braces_and_hanlde_destructor self_type;
+        struct _{static void use_cache(self_type& tc){
+            for (size_t i=0;i<array_size;++i){
+                cache_type::handle h=tc.cache[i];
+                helpers::prevent_optimizng_out(h.value());
+            }
+
+        }};
+        static const size_t repeat_number = 2;
+        static const size_t number_of_threads = 8 * tbb::task_scheduler_init::default_num_threads(); //have 8x over subscription
+        static const size_t repeats_per_thread = 4;
+
+        for (size_t i=0; i < repeat_number; i++){
+            NativeParallelFor(number_of_threads,helpers::native_for_concurrent_op_repeated<self_type>(*this,&_::use_cache,repeats_per_thread));
+            fill_up_cache(0,array_size);
+            ASSERT(number_of_non_evicted_from_cache()==number_of_lru_history_items,"thread safety is broken for cache ");
+        }
+    }
+}
diff --git a/src/test/test_concurrent_monitor.cpp b/src/test/test_concurrent_monitor.cpp
index 3e6ec13..bb481fb 100644
--- a/src/test/test_concurrent_monitor.cpp
+++ b/src/test/test_concurrent_monitor.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -58,9 +58,9 @@ public:
         void Initialize() { mutex = NULL; }
     public:
         ScopedLock() {Initialize();}
-        ScopedLock( QueuingMutex& m ) { Initialize(); Acquire(m); }
+        ScopedLock( QueuingMutex& m, size_t test_mode ) { Initialize(); Acquire(m,test_mode); }
         ~ScopedLock() { if( mutex ) Release(); }
-        void Acquire( QueuingMutex& m );
+        void Acquire( QueuingMutex& m, size_t test_mode );
         void Release();
         void SleepPerhaps();
 
@@ -79,13 +79,25 @@ private:
 };
 
 struct PredicateEq {
-    void* p;
-    PredicateEq( void* p_ ) : p(p_) {}
-    bool operator() ( void* v ) const {return p==v;}
+    uintptr_t p;
+    PredicateEq( uintptr_t p_ ) : p(p_) {}
+    bool operator() ( uintptr_t v ) const {return p==v;}
+};
+
+struct QueuingMutex_Context {
+    const QueuingMutex::ScopedLock* lck;
+    QueuingMutex_Context( QueuingMutex::ScopedLock* l_ ) : lck(l_) {}
+    uintptr_t operator()() { return uintptr_t(lck); }
+};
+
+struct QueuingMutex_Until : NoAssign {
+    uintptr_t& flag;
+    QueuingMutex_Until( uintptr_t& f_ ) : flag(f_) {}
+    bool operator()() { return flag!=0ul; }
 };
 
 //! A method to acquire QueuingMutex lock
-void QueuingMutex::ScopedLock::Acquire( QueuingMutex& m )
+void QueuingMutex::ScopedLock::Acquire( QueuingMutex& m, size_t test_mode )
 {
     // Must set all fields before the fetch_and_store, because once the
     // fetch_and_store executes, *this becomes accessible to other threads.
@@ -106,7 +118,20 @@ void QueuingMutex::ScopedLock::Acquire( QueuingMutex& m )
             if( going!=0ul ) break;
             __TBB_Yield();
         }
-        SleepPerhaps();
+        int x = int( test_mode%3 );
+        switch( x ) {
+        case 0:
+            mutex->waitq.wait( QueuingMutex_Until(going), QueuingMutex_Context(this) );
+            break;
+#if __TBB_LAMBDAS_PRESENT
+        case 1:
+            mutex->waitq.wait( [&](){ return going!=0ul; }, [=]() { return (uintptr_t)this; } );
+            break;
+#endif
+        default:
+            SleepPerhaps();
+            break;
+        }
     }
 
     // Acquire critical section indirectly from previous owner or directly from predecessor.
@@ -125,7 +150,7 @@ void QueuingMutex::ScopedLock::Release( )
         spin_wait_while_eq( next, (ScopedLock*)0 );
     }
     __TBB_store_with_release(next->going, 1);
-    mutex->waitq.notify( PredicateEq(next) );
+    mutex->waitq.notify( PredicateEq(uintptr_t(next)) );
 done:
     Initialize();
 }
@@ -135,12 +160,12 @@ void QueuingMutex::ScopedLock::SleepPerhaps()
 {
     bool slept = false;
     internal::concurrent_monitor& mq = mutex->waitq;
-    mq.prepare_wait( thr_ctx, this );
+    mq.prepare_wait( thr_ctx, uintptr_t(this) );
     while( going==0ul ) {
         if( (slept=mq.commit_wait( thr_ctx ))==true && going!=0ul )
             break;
         slept = false;
-        mq.prepare_wait( thr_ctx, this );
+        mq.prepare_wait( thr_ctx, uintptr_t(this) );
     }
     if( !slept )
         mq.cancel_wait( thr_ctx );
@@ -157,9 +182,9 @@ public:
         void Initialize() { mutex = NULL; }
     public:
         ScopedLock() {Initialize();}
-        ScopedLock( SpinMutex& m ) { Initialize(); Acquire(m); }
+        ScopedLock( SpinMutex& m, size_t test_mode ) { Initialize(); Acquire(m,test_mode); }
         ~ScopedLock() { if( mutex ) Release(); }
-        void Acquire( SpinMutex& m );
+        void Acquire( SpinMutex& m, size_t test_mode );
         void Release();
         void SleepPerhaps();
 
@@ -169,19 +194,45 @@ public:
     };
 
     friend class ScopedLock;
+    friend struct SpinMutex_Until;
 private:
     tbb::atomic<unsigned> flag;
     bool toggle;
     internal::concurrent_monitor waitq;
 };
 
+struct SpinMutex_Context {
+    const SpinMutex::ScopedLock* lck;
+    SpinMutex_Context( SpinMutex::ScopedLock* l_ ) : lck(l_) {}
+    uintptr_t operator()() { return uintptr_t(lck); }
+};
+
+struct SpinMutex_Until {
+    const SpinMutex* mtx;
+    SpinMutex_Until( SpinMutex* m_ ) : mtx(m_) {}
+    bool operator()() { return mtx->flag==0; }
+};
+
 //! A method to acquire SpinMutex lock
-void SpinMutex::ScopedLock::Acquire( SpinMutex& m )
+void SpinMutex::ScopedLock::Acquire( SpinMutex& m, size_t test_mode )
 {
     mutex = &m;
 retry:
     if( m.flag.compare_and_swap( 1, 0 )!=0 ) {
-        SleepPerhaps();
+        int x = int( test_mode%3 );
+        switch( x ) {
+        case 0:
+            mutex->waitq.wait( SpinMutex_Until(mutex), SpinMutex_Context(this) );
+            break;
+#if __TBB_LAMBDAS_PRESENT
+        case 1:
+            mutex->waitq.wait( [&](){ return mutex->flag==0; }, [=]() { return (uintptr_t)this; } );
+            break;
+#endif
+        default:
+            SleepPerhaps();
+            break;
+        }
         goto retry;
     }
 }
@@ -203,11 +254,11 @@ void SpinMutex::ScopedLock::SleepPerhaps()
 {
     bool slept = false;
     internal::concurrent_monitor& mq = mutex->waitq;
-    mq.prepare_wait( thr_ctx, this );
+    mq.prepare_wait( thr_ctx, uintptr_t(this) );
     while( mutex->flag ) {
         if( (slept=mq.commit_wait( thr_ctx ))==true )
             break;
-        mq.prepare_wait( thr_ctx, this );
+        mq.prepare_wait( thr_ctx, uintptr_t(this) );
     }
     if( !slept )
         mq.cancel_wait( thr_ctx );
@@ -228,7 +279,7 @@ struct AddOne: NoAssign {
     /** Increments counter once for each iteration in the iteration space. */
     void operator()( tbb::blocked_range<size_t>& range ) const {
         for( size_t i=range.begin(); i!=range.end(); ++i ) {
-            typename C::mutex_type::ScopedLock lock(counter.mutex);
+            typename C::mutex_type::ScopedLock lock(counter.mutex, i);
             counter.value = counter.value+1;
             if( D>0 )
                 for( int j=0; j<D; ++j ) __TBB_Yield();
@@ -249,10 +300,68 @@ void Test( int p ) {
         REPORT("ERROR : counter.value=%ld (instead of %ld)\n",counter.value,n);
 }
 
+#if TBB_USE_EXCEPTIONS
+#define NTHRS_USED_IN_DESTRUCTOR_TEST 8
+
+atomic<size_t> n_sleepers;
+
+#if defined(_MSC_VER) && defined(_Wp64)
+    // Workaround for overzealous compiler warnings in /Wp64 mode
+    #pragma warning (disable: 4244 4267)
+#endif
+
+struct AllButOneSleep : NoAssign {
+    internal::concurrent_monitor*& mon;
+    static const size_t VLN = 1024*1024;
+    void operator()( int i ) const {
+        internal::concurrent_monitor::thread_context thr_ctx;
+
+        if( i==0 ) {
+            size_t n_expected_sleepers = NTHRS_USED_IN_DESTRUCTOR_TEST-1;
+            while( n_sleepers<n_expected_sleepers )
+                __TBB_Yield();
+            while( n_sleepers.compare_and_swap( VLN+NTHRS_USED_IN_DESTRUCTOR_TEST, n_expected_sleepers )!=n_expected_sleepers )
+                __TBB_Yield();
+
+            for( int j=0; j<100; ++j )
+                Harness::Sleep( 1 );
+            delete mon;
+            mon = NULL;
+        } else {
+            mon->prepare_wait( thr_ctx, uintptr_t(this) );
+            while( n_sleepers<VLN ) {
+                try {
+                    ++n_sleepers;
+                    mon->commit_wait( thr_ctx );
+                    if( --n_sleepers>VLN ) 
+                        break;
+                } catch( tbb::user_abort& ) {
+                    // can no longer access 'mon'
+                    break;
+                }
+                mon->prepare_wait( thr_ctx, uintptr_t(this) );
+            }
+        }
+    }
+    AllButOneSleep( internal::concurrent_monitor*& m_ ) : mon(m_) {}
+};
+#endif /* TBB_USE_EXCEPTIONS */
+
+void TestDestructor() {
+#if TBB_USE_EXCEPTIONS
+    tbb::task_scheduler_init init(NTHRS_USED_IN_DESTRUCTOR_TEST);
+    internal::concurrent_monitor* my_mon = new internal::concurrent_monitor;
+    REMARK( "testing the destructor\n" );
+    n_sleepers = 0;
+    NativeParallelFor(NTHRS_USED_IN_DESTRUCTOR_TEST,AllButOneSleep(my_mon));
+    ASSERT( my_mon==NULL, "" );
+#endif /* TBB_USE_EXCEPTIONS */
+}
+
 int TestMain () {
     for( int p=MinThread; p<=MaxThread; ++p ) {
         REMARK( "testing with %d workers\n", static_cast<int>(p) );
-        // test the predicated notify 
+        // test the predicated notify
         Test<QueuingMutex,100000,0>( p );
         Test<QueuingMutex,1000,10000>( p );
         // test the notify_all method
@@ -260,5 +369,6 @@ int TestMain () {
         Test<SpinMutex,1000,10000>( p );
         REMARK( "calling destructor for task_scheduler_init\n" );
     }
+    TestDestructor();
     return Harness::Done;
 }
diff --git a/src/test/test_concurrent_priority_queue.cpp b/src/test/test_concurrent_priority_queue.cpp
index b932b08..8e0334f 100644
--- a/src/test/test_concurrent_priority_queue.cpp
+++ b/src/test/test_concurrent_priority_queue.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_concurrent_queue.cpp b/src/test/test_concurrent_queue.cpp
index b4a96f5..146d743 100644
--- a/src/test/test_concurrent_queue.cpp
+++ b/src/test/test_concurrent_queue.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,12 +26,24 @@
     the GNU General Public License.
 */
 
+#define NOMINMAX
+#include "test_concurrent_queue.h"
 #include "tbb/concurrent_queue.h"
-#include "tbb/atomic.h"
 #include "tbb/tick_count.h"
 #include "harness.h"
 #include "harness_allocator.h"
 
+#if _MSC_VER==1500 && !__INTEL_COMPILER
+    // VS2008/VC9 seems to have an issue; limits pull in math.h
+    #pragma warning( push )
+    #pragma warning( disable: 4985 )
+#endif
+#include <limits>
+#if _MSC_VER==1500 && !__INTEL_COMPILER
+    #pragma warning( pop )
+#endif
+
+
 static tbb::atomic<long> FooConstructed;
 static tbb::atomic<long> FooDestroyed;
 
@@ -68,6 +80,9 @@ public:
     }
     bool is_const() {return false;}
     bool is_const() const {return true;}
+    static void clear_counters() { FooConstructed = 0; FooDestroyed = 0; }
+    static long get_n_constructed() { return FooConstructed; }
+    static long get_n_destroyed() { return FooDestroyed; }
 };
 
 // problem size
@@ -137,15 +152,14 @@ const int M = 10000;
 #if TBB_DEPRECATED
 #define CALL_BLOCKING_POP(q,v) (q)->pop(v)
 #define CALL_TRY_POP(q,v,i) (((i)&0x2)?q->try_pop(v):q->pop_if_present(v))
-#define SIZE() size()
 #else
 #define CALL_BLOCKING_POP(q,v) while( !(q)->try_pop(v) ) __TBB_Yield()
 #define CALL_TRY_POP(q,v,i) q->try_pop(v)
-#define SIZE() unsafe_size()
 #endif
 
+template<typename CQ,typename T>
 struct Body: NoAssign {
-    tbb::concurrent_queue<Foo>* queue;
+    CQ* queue;
     const int nthread;
     Body( int nthread_ ) : nthread(nthread_) {}
     void operator()( int thread_id ) const {
@@ -156,7 +170,7 @@ struct Body: NoAssign {
 
         long sum = 0;
         for( long j=0; j<M; ++j ) {
-            Foo f;
+            T f;
             f.thread_id = 0xDEAD;
             f.serial = 0xDEAD;
             bool prepopped = false;
@@ -164,7 +178,7 @@ struct Body: NoAssign {
                 prepopped = CALL_TRY_POP(queue,f,j);
                 ++pop_kind[prepopped];
             }
-            Foo g;
+            T g;
             g.thread_id = thread_id;
             g.serial = j+1;
             queue->push( g );
@@ -183,31 +197,64 @@ struct Body: NoAssign {
     }
 };
 
+#if !TBB_DEPRECATED
+// Define wrapper classes to test tbb::concurrent_queue<T>
+template<typename T, typename A = tbb::cache_aligned_allocator<T> >
+class ConcQWithSizeWrapper : public tbb::concurrent_queue<T> {
+public:
+    ConcQWithSizeWrapper() {}
+    template<typename InputIterator>
+    ConcQWithSizeWrapper( InputIterator begin, InputIterator end, const A& a = A()) : tbb::concurrent_queue<T>(begin,end,a) {}
+    size_t size() const { return this->unsafe_size(); }
+};
+
+template<typename T>
+class ConcQPushPopWrapper : public tbb::concurrent_queue<T> {
+public:
+    ConcQPushPopWrapper() : my_capacity( size_t(-1)/(sizeof(void*)+sizeof(T)) ) {}
+    size_t size() const { return this->unsafe_size(); }
+    void   set_capacity( const ptrdiff_t n ) { my_capacity = n; }
+    bool   try_push( const T& source ) { return this->push( source ); }
+    bool   try_pop( T& dest ) { return this->tbb::concurrent_queue<T>::try_pop( dest ); }
+    size_t my_capacity;
+};
+
+template<typename T>
+class ConcQWithCapacity : public tbb::concurrent_queue<T> {
+public:
+    ConcQWithCapacity() : my_capacity( size_t(-1)/(sizeof(void*)+sizeof(T)) ) {}
+    size_t size() const { return this->unsafe_size(); }
+    size_t capacity() const { return my_capacity; }
+    void   set_capacity( const int n ) { my_capacity = n; }
+    bool   try_push( const T& source ) { this->push( source ); return (size_t)source.serial<my_capacity; }
+    //bool   push_if_not_full( const T& source ) { return try_push(source); }
+    bool   try_pop( T& dest ) { this->tbb::concurrent_queue<T>::try_pop( dest ); return (size_t)dest.serial<my_capacity; }
+    //void   pop( T& dest ) { this->try_pop( dest ); }
+    size_t my_capacity;
+};
+#endif /* !TBB_DEPRECATED */
+
+template<typename CQ, typename T>
 void TestPushPop( size_t prefill, ptrdiff_t capacity, int nthread ) {
     ASSERT( nthread>0, "nthread must be positive" );
-#if TBB_DEPRECATED
     ptrdiff_t signed_prefill = ptrdiff_t(prefill);
     if( signed_prefill+1>=capacity )
         return;
-#endif
     bool success = false;
     for( int k=0; k<3; ++k )
         PopKind[k] = 0;
     for( int trial=0; !success; ++trial ) {
-        FooConstructed = 0;
-        FooDestroyed = 0;
-        Body body(nthread);
-        tbb::concurrent_queue<Foo> queue;
-#if TBB_DEPRECATED
+        T::clear_counters();
+        Body<CQ,T> body(nthread);
+        CQ queue;
         queue.set_capacity( capacity );
-#endif
         body.queue = &queue;
         for( size_t i=0; i<prefill; ++i ) {
-            Foo f;
+            T f;
             f.thread_id = nthread;
             f.serial = 1+int(i);
             queue.push(f);
-            ASSERT( unsigned(queue.SIZE())==i+1, NULL );
+            ASSERT( unsigned(queue.size())==i+1, NULL );
             ASSERT( !queue.empty(), NULL );
         }
         tbb::tick_count t0 = tbb::tick_count::now();
@@ -221,17 +268,17 @@ void TestPushPop( size_t prefill, ptrdiff_t capacity, int nthread ) {
         int expected = int(nthread*((M-1)*M/2) + ((prefill-1)*prefill)/2);
         for( int i=int(prefill); --i>=0; ) {
             ASSERT( !queue.empty(), NULL );
-            Foo f;
+            T f;
             bool result = queue.try_pop(f);
             ASSERT( result, NULL );
-            ASSERT( int(queue.SIZE())==i, NULL );
+            ASSERT( int(queue.size())==i, NULL );
             sum += f.serial-1;
         }
         ASSERT( queue.empty(), NULL );
-        ASSERT( queue.SIZE()==0, NULL );
+        ASSERT( queue.size()==0, NULL );
         if( sum!=expected )
             REPORT("sum=%d expected=%d\n",sum,expected);
-        ASSERT( FooConstructed==FooDestroyed, NULL );
+        ASSERT( T::get_n_constructed()==T::get_n_destroyed(), NULL );
         // TODO: checks by counting allocators
 
         success = true;
@@ -257,7 +304,7 @@ void TestPushPop( size_t prefill, ptrdiff_t capacity, int nthread ) {
                                nthread, long(PopKind[k]), k==0?"failed":"succeeded", max_trial, min_requirement);
                         else
                             REPORT("Warning: the number of %s pop_if_present operations is less than expected for %d threads. Investigate if it happens repeatedly.\n",
-                               k==0?"failed":"succeeded", nthread ); 
+                               k==0?"failed":"succeeded", nthread );
 
                     } else {
                         success = false;
@@ -325,6 +372,7 @@ public:
     }
     friend bool operator==(const BarIterator& bia, const BarIterator& bib) ;
     friend bool operator!=(const BarIterator& bia, const BarIterator& bib) ;
+    template<typename CQ, typename T, typename TIter, typename CQ_EX, typename T_EX>
     friend void TestConstructors ();
 } ;
 
@@ -364,8 +412,8 @@ public:
     BarEx( const BarEx& a_bar ) : state(LIVE) {
         ASSERT( a_bar.state==LIVE, NULL );
         my_id = a_bar.my_id;
-        if( mode==PREPARATION ) 
-            if( !( ++count % 100 ) ) 
+        if( mode==PREPARATION )
+            if( !( ++count % 100 ) )
                 throw Bar_exception();
         my_tilda_id = a_bar.my_tilda_id;
     }
@@ -412,43 +460,44 @@ bool operator==(const BarEx& bar1, const BarEx& bar2) {
 #define CALL_END(q,i)   q.unsafe_end()
 #endif /* TBB_DEPRECATED */
 
+template<typename CQ, typename T, typename TIter, typename CQ_EX, typename T_EX>
 void TestConstructors ()
 {
-    tbb::concurrent_queue<Bar> src_queue;
-    tbb::concurrent_queue<Bar>::const_iterator dqb;
-    tbb::concurrent_queue<Bar>::const_iterator dqe;
-    tbb::concurrent_queue<Bar>::const_iterator iter;
+    CQ src_queue;
+    typename CQ::const_iterator dqb;
+    typename CQ::const_iterator dqe;
+    typename CQ::const_iterator iter;
 
     for( size_t size=0; size<1001; ++size ) {
         for( size_t i=0; i<size; ++i )
-            src_queue.push(Bar(i+(i^size)));
-        tbb::concurrent_queue<Bar>::const_iterator sqb( CALL_BEGIN(src_queue,size) );
-        tbb::concurrent_queue<Bar>::const_iterator sqe( CALL_END(src_queue,size));
+            src_queue.push(T(i+(i^size)));
+        typename CQ::const_iterator sqb( CALL_BEGIN(src_queue,size) );
+        typename CQ::const_iterator sqe( CALL_END(src_queue,size));
 
-        tbb::concurrent_queue<Bar> dst_queue(sqb, sqe);
+        CQ dst_queue(sqb, sqe);
 
-        ASSERT(src_queue.SIZE()==dst_queue.SIZE(), "different size");
+        ASSERT(src_queue.size()==dst_queue.size(), "different size");
 
         src_queue.clear();
     }
 
-    Bar bar_array[1001];
+    T bar_array[1001];
     for( size_t size=0; size<1001; ++size ) {
         for( size_t i=0; i<size; ++i )
-            bar_array[i] = Bar(i+(i^size));
+            bar_array[i] = T(i+(i^size));
 
-        const BarIterator sab(bar_array+0);
-        const BarIterator sae(bar_array+size);
+        const TIter sab(bar_array+0);
+        const TIter sae(bar_array+size);
 
-        tbb::concurrent_queue<Bar> dst_queue2(sab, sae);
+        CQ dst_queue2(sab, sae);
 
-        ASSERT( size==unsigned(dst_queue2.SIZE()), NULL );
-        ASSERT( sab==BarIterator(bar_array+0), NULL );
-        ASSERT( sae==BarIterator(bar_array+size), NULL );
+        ASSERT( size==unsigned(dst_queue2.size()), NULL );
+        ASSERT( sab==TIter(bar_array+0), NULL );
+        ASSERT( sae==TIter(bar_array+size), NULL );
 
         dqb = CALL_BEGIN(dst_queue2,size);
         dqe = CALL_END(dst_queue2,size);
-        BarIterator v_iter(sab);
+        TIter v_iter(sab);
         for( ; dqb != dqe; ++dqb, ++v_iter )
             ASSERT( *dqb == *v_iter, "unexpected element" );
         ASSERT( v_iter==sae, "different size?" );
@@ -456,20 +505,20 @@ void TestConstructors ()
 
     src_queue.clear();
 
-    tbb::concurrent_queue<Bar> dst_queue3( src_queue );
-    ASSERT( src_queue.SIZE()==dst_queue3.SIZE(), NULL );
-    ASSERT( 0==dst_queue3.SIZE(), NULL );
+    CQ dst_queue3( src_queue );
+    ASSERT( src_queue.size()==dst_queue3.size(), NULL );
+    ASSERT( 0==dst_queue3.size(), NULL );
 
     int k=0;
     for( size_t i=0; i<1001; ++i ) {
-        Bar tmp_bar;
-        src_queue.push(Bar(++k));
-        src_queue.push(Bar(++k));
+        T tmp_bar;
+        src_queue.push(T(++k));
+        src_queue.push(T(++k));
         src_queue.try_pop(tmp_bar);
 
-        tbb::concurrent_queue<Bar> dst_queue4( src_queue );
+        CQ dst_queue4( src_queue );
 
-        ASSERT( src_queue.SIZE()==dst_queue4.SIZE(), NULL );
+        ASSERT( src_queue.size()==dst_queue4.size(), NULL );
 
         dqb = CALL_BEGIN(dst_queue4,i);
         dqe = CALL_END(dst_queue4,i);
@@ -481,9 +530,9 @@ void TestConstructors ()
         ASSERT( iter==CALL_END(src_queue,i), "different size?" );
     }
 
-    tbb::concurrent_queue<Bar> dst_queue5( src_queue );
+    CQ dst_queue5( src_queue );
 
-    ASSERT( src_queue.SIZE()==dst_queue5.SIZE(), NULL );
+    ASSERT( src_queue.size()==dst_queue5.size(), NULL );
     dqb = dst_queue5.unsafe_begin();
     dqe = dst_queue5.unsafe_end();
     iter = src_queue.unsafe_begin();
@@ -491,17 +540,17 @@ void TestConstructors ()
         ASSERT( *dqb == *iter, "unexpected element" );
 
     for( size_t i=0; i<100; ++i) {
-        Bar tmp_bar;
-        src_queue.push(Bar(i+1000));
-        src_queue.push(Bar(i+1000));
+        T tmp_bar;
+        src_queue.push(T(i+1000));
+        src_queue.push(T(i+1000));
         src_queue.try_pop(tmp_bar);
 
-        dst_queue5.push(Bar(i+1000));
-        dst_queue5.push(Bar(i+1000));
+        dst_queue5.push(T(i+1000));
+        dst_queue5.push(T(i+1000));
         dst_queue5.try_pop(tmp_bar);
     }
 
-    ASSERT( src_queue.SIZE()==dst_queue5.SIZE(), NULL );
+    ASSERT( src_queue.size()==dst_queue5.size(), NULL );
     dqb = dst_queue5.unsafe_begin();
     dqe = dst_queue5.unsafe_end();
     iter = src_queue.unsafe_begin();
@@ -513,39 +562,36 @@ void TestConstructors ()
     REPORT("Known issue: part of the constructor test is skipped.\n");
 #elif TBB_USE_EXCEPTIONS
     k = 0;
-#if TBB_DEPRECATED==0
-    unsigned
-#endif
-    int n_elements=0;
-    tbb::concurrent_queue<BarEx> src_queue_ex;
+    typename CQ_EX::size_type n_elements=0;
+    CQ_EX src_queue_ex;
     for( size_t size=0; size<1001; ++size ) {
-        BarEx tmp_bar_ex;
-        int n_successful_pushes=0;
-        BarEx::set_mode( BarEx::PREPARATION );
+        T_EX tmp_bar_ex;
+        typename CQ_EX::size_type n_successful_pushes=0;
+        T_EX::set_mode( T_EX::PREPARATION );
         try {
-            src_queue_ex.push(BarEx(k+(k^size)));
+            src_queue_ex.push(T_EX(k+(k^size)));
             ++n_successful_pushes;
         } catch (...) {
         }
         ++k;
         try {
-            src_queue_ex.push(BarEx(k+(k^size)));
+            src_queue_ex.push(T_EX(k+(k^size)));
             ++n_successful_pushes;
         } catch (...) {
         }
         ++k;
         src_queue_ex.try_pop(tmp_bar_ex);
         n_elements += (n_successful_pushes - 1);
-        ASSERT( src_queue_ex.SIZE()==n_elements, NULL);
+        ASSERT( src_queue_ex.size()==n_elements, NULL);
 
-        BarEx::set_mode( BarEx::COPY_CONSTRUCT );
-        tbb::concurrent_queue<BarEx> dst_queue_ex( src_queue_ex );
+        T_EX::set_mode( T_EX::COPY_CONSTRUCT );
+        CQ_EX dst_queue_ex( src_queue_ex );
 
-        ASSERT( src_queue_ex.SIZE()==dst_queue_ex.SIZE(), NULL );
+        ASSERT( src_queue_ex.size()==dst_queue_ex.size(), NULL );
 
-        tbb::concurrent_queue<BarEx>::const_iterator dqb_ex  = CALL_BEGIN(dst_queue_ex, size);
-        tbb::concurrent_queue<BarEx>::const_iterator dqe_ex  = CALL_END(dst_queue_ex, size);
-        tbb::concurrent_queue<BarEx>::const_iterator iter_ex = CALL_BEGIN(src_queue_ex, size);
+        typename CQ_EX::const_iterator dqb_ex  = CALL_BEGIN(dst_queue_ex, size);
+        typename CQ_EX::const_iterator dqe_ex  = CALL_END(dst_queue_ex, size);
+        typename CQ_EX::const_iterator iter_ex = CALL_BEGIN(src_queue_ex, size);
 
         for( ; dqb_ex != dqe_ex; ++dqb_ex, ++iter_ex )
             ASSERT( *dqb_ex == *iter_ex, "unexpected element" );
@@ -607,9 +653,10 @@ void TestIteratorTraits() {
 }
 
 //! Test the iterators for concurrent_queue
+template<typename CQ>
 void TestIterator() {
-    tbb::concurrent_queue<Foo> queue;
-    const tbb::concurrent_queue<Foo>& const_queue = queue;
+    CQ queue;
+    const CQ& 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 );
@@ -619,59 +666,66 @@ void TestIterator() {
         f.serial = j+1;
         queue.push(f);
     }
-    TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( const_queue.unsafe_begin() );
-    TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( queue.unsafe_begin() );
-    TestIteratorAssignment<tbb::concurrent_queue<Foo>::iterator>( queue.unsafe_begin() );
-    TestIteratorTraits<tbb::concurrent_queue<Foo>::const_iterator, const Foo>();
-    TestIteratorTraits<tbb::concurrent_queue<Foo>::iterator, Foo>();
+    TestIteratorAssignment<typename CQ::const_iterator>( const_queue.unsafe_begin() );
+    TestIteratorAssignment<typename CQ::const_iterator>( queue.unsafe_begin() );
+    TestIteratorAssignment<typename CQ::iterator>( queue.unsafe_begin() );
+    TestIteratorTraits<typename CQ::const_iterator, const Foo>();
+    TestIteratorTraits<typename CQ::iterator, Foo>();
 }
 
+template<typename CQ>
 void TestConcurrentQueueType() {
-    AssertSameType( tbb::concurrent_queue<Foo>::value_type(), Foo() );
+    AssertSameType( typename CQ::value_type(), Foo() );
     Foo f;
     const Foo g;
-    tbb::concurrent_queue<Foo>::reference r = f;
+    typename CQ::reference r = f;
     ASSERT( &r==&f, NULL );
     ASSERT( !r.is_const(), NULL );
-    tbb::concurrent_queue<Foo>::const_reference cr = g;
+    typename CQ::const_reference cr = g;
     ASSERT( &cr==&g, NULL );
     ASSERT( cr.is_const(), NULL );
 }
 
-template<typename T>
+template<typename CQ, typename T>
 void TestEmptyQueue() {
-    const tbb::concurrent_queue<T> queue;
-    ASSERT( queue.SIZE()==0, NULL );
-#if TBB_DEPRECATED
+    const CQ queue;
+    ASSERT( queue.size()==0, NULL );
     ASSERT( queue.capacity()>0, NULL );
     ASSERT( size_t(queue.capacity())>=size_t(-1)/(sizeof(void*)+sizeof(T)), NULL );
-#endif
 }
 
+#ifdef CALL_TRY_POP
+#undef CALL_TRY_POP
+#endif
 #if TBB_DEPRECATED
 #define CALL_TRY_PUSH(q,f,i) (((i)&0x1)?(q).push_if_not_full(f):(q).try_push(f))
+#define CALL_TRY_POP(q,f) (q).pop_if_present(f)
+#else
+#define CALL_TRY_PUSH(q,f,i) (q).try_push(f)
+#define CALL_TRY_POP(q,f) (q).try_pop(f)
+#endif
+
+template<typename CQ,typename T>
 void TestFullQueue() {
     for( int n=0; n<10; ++n ) {
-        FooConstructed = 0;
-        FooDestroyed = 0;
-        tbb::concurrent_queue<Foo> queue;
+        T::clear_counters();
+        CQ queue;
         queue.set_capacity(n);
         for( int i=0; i<=n; ++i ) {
-            Foo f;
+            T f;
             f.serial = i;
-            bool result = CALL_TRY_PUSH(queue, f, i );
+            bool result = CALL_TRY_PUSH( queue, f, i );
             ASSERT( result==(i<n), NULL );
         }
         for( int i=0; i<=n; ++i ) {
-            Foo f;
-            bool result = queue.pop_if_present( f );
+            T f;
+            bool result = CALL_TRY_POP( queue, f );
             ASSERT( result==(i<n), NULL );
             ASSERT( !result || f.serial==i, NULL );
         }
-        ASSERT( FooConstructed==FooDestroyed, NULL );
+        ASSERT( T::get_n_constructed()==T::get_n_destroyed(), NULL );
     }
 }
-#endif /* if TBB_DEPRECATED */
 
 #if TBB_DEPRECATED
 #define CALL_PUSH_IF_NOT_FULL(q,v,i) (((i)&0x1)?q.push_if_not_full(v):(q.push(v), true))
@@ -679,41 +733,40 @@ void TestFullQueue() {
 #define CALL_PUSH_IF_NOT_FULL(q,v,i) (q.push(v), true)
 #endif
 
+template<typename CQ>
 void TestClear() {
     FooConstructed = 0;
     FooDestroyed = 0;
     const unsigned int n=5;
-        
-    tbb::concurrent_queue<Foo> queue;
-#if TBB_DEPRECATED
+
+    CQ queue;
     const int q_capacity=10;
     queue.set_capacity(q_capacity);
-#endif
     for( size_t i=0; i<n; ++i ) {
         Foo f;
         f.serial = int(i);
         bool result = CALL_PUSH_IF_NOT_FULL(queue, f, i);
         ASSERT( result, NULL );
     }
-    ASSERT( unsigned(queue.SIZE())==n, NULL );
+    ASSERT( unsigned(queue.size())==n, NULL );
     queue.clear();
-    ASSERT( queue.SIZE()==0, NULL );
+    ASSERT( queue.size()==0, NULL );
     for( size_t i=0; i<n; ++i ) {
         Foo f;
         f.serial = int(i);
         bool result = CALL_PUSH_IF_NOT_FULL(queue, f, i);
         ASSERT( result, NULL );
     }
-    ASSERT( unsigned(queue.SIZE())==n, NULL );
+    ASSERT( unsigned(queue.size())==n, NULL );
     queue.clear();
-    ASSERT( queue.SIZE()==0, NULL );
+    ASSERT( queue.size()==0, NULL );
     for( size_t i=0; i<n; ++i ) {
         Foo f;
         f.serial = int(i);
         bool result = CALL_PUSH_IF_NOT_FULL(queue, f, i);
         ASSERT( result, NULL );
     }
-    ASSERT( unsigned(queue.SIZE())==n, NULL );
+    ASSERT( unsigned(queue.size())==n, NULL );
 }
 
 #if TBB_DEPRECATED
@@ -750,34 +803,32 @@ void TestNegativeQueue( int nthread ) {
     tbb::concurrent_queue<T> queue;
     NativeParallelFor( nthread, TestNegativeQueueBody<T>(queue,nthread) );
 }
-#endif /* if TBB_DEPRECATED */
+#endif /* TBB_DEPRECATED */
 
 #if TBB_USE_EXCEPTIONS
-void TestExceptions() {
-    typedef static_counting_allocator<std::allocator<FooEx>, size_t> allocator_t;
-    typedef static_counting_allocator<std::allocator<char>, size_t> allocator_char_t;
-    typedef tbb::concurrent_queue<FooEx, allocator_t> concur_queue_t;
-
+template<typename CQ,typename A1,typename A2,typename T>
+void TestExceptionBody() {
     enum methods {
         m_push = 0,
         m_pop
-    };  
+    };
 
     REMARK("Testing exception safety\n");
+    MaxFooCount = 5;
     // verify 'clear()' on exception; queue's destructor calls its clear()
-    // Do test on queues of two different types at the same time to 
+    // Do test on queues of two different types at the same time to
     // catch problem with incorrect sharing between templates.
     {
-        concur_queue_t queue0;
-        tbb::concurrent_queue<int,allocator_t> queue1;
+        CQ queue0;
+        tbb::concurrent_queue<int,A1> queue1;
         for( int i=0; i<2; ++i ) {
             bool caught = false;
             try {
-                allocator_char_t::init_counters();
-                allocator_char_t::set_limits(N/2);
+                A2::init_counters();
+                A2::set_limits(N/2);
                 for( int k=0; k<N; k++ ) {
                     if( i==0 )
-                        queue0.push( FooEx() );
+                        queue0.push( T() );
                     else
                         queue1.push( k );
                 }
@@ -793,42 +844,42 @@ void TestExceptions() {
         int n_pushed=0, n_popped=0;
         for(int t = 0; t <= 1; t++)// exception type -- 0 : from allocator(), 1 : from Foo's constructor
         {
-            concur_queue_t queue_test;
+            CQ queue_test;
             for( int m=m_push; m<=m_pop; m++ ) {
                 // concurrent_queue internally rebinds the allocator to one with 'char'
-                allocator_char_t::init_counters();
+                A2::init_counters();
 
                 if(t) MaxFooCount = MaxFooCount + 400;
-                else allocator_char_t::set_limits(N/2);
+                else A2::set_limits(N/2);
 
                 try {
                     switch(m) {
                     case m_push:
                             for( int k=0; k<N; k++ ) {
-                                queue_test.push( FooEx() );
+                                queue_test.push( T() );
                                 n_pushed++;
                             }
                             break;
                     case m_pop:
                             n_popped=0;
                             for( int k=0; k<n_pushed; k++ ) {
-                                FooEx elt;
+                                T elt;
                                 queue_test.try_pop( elt );
                                 n_popped++;
                             }
                             n_pushed = 0;
-                            allocator_char_t::set_limits(); 
+                            A2::set_limits(); 
                             break;
                     }
                     if( !t && m==m_push ) ASSERT(false, "should throw an exception");
                 } catch ( Foo_exception & ) {
                     switch(m) {
                     case m_push: {
-                                ASSERT( ptrdiff_t(queue_test.SIZE())==n_pushed, "incorrect queue size" );
+                                ASSERT( ptrdiff_t(queue_test.size())==n_pushed, "incorrect queue size" );
                                 long tc = MaxFooCount;
                                 MaxFooCount = 0;
                                 for( int k=0; k<(int)tc; k++ ) {
-                                    queue_test.push( FooEx() );
+                                    queue_test.push( T() );
                                     n_pushed++;
                                 }
                                 MaxFooCount = tc;
@@ -839,22 +890,22 @@ void TestExceptions() {
                             n_pushed -= (n_popped+1); // including one that threw an exception
                             ASSERT( n_pushed>=0, "n_pushed cannot be less than 0" );
                             for( int k=0; k<1000; k++ ) {
-                                queue_test.push( FooEx() );
+                                queue_test.push( T() );
                                 n_pushed++;
                             }
                             ASSERT( !queue_test.empty(), "queue must not be empty" );
-                            ASSERT( ptrdiff_t(queue_test.SIZE())==n_pushed, "queue size must be equal to n pushed" );
+                            ASSERT( ptrdiff_t(queue_test.size())==n_pushed, "queue size must be equal to n pushed" );
                             for( int k=0; k<n_pushed; k++ ) {
-                                FooEx elt;
+                                T elt;
                                 queue_test.try_pop( elt );
                             }
                             ASSERT( queue_test.empty(), "queue must be empty" );
-                            ASSERT( queue_test.SIZE()==0, "queue must be empty" );
+                            ASSERT( queue_test.size()==0, "queue must be empty" );
                             break;
                     }
                 } catch ( std::bad_alloc & ) {
-                    allocator_char_t::set_limits(); // disable exception from allocator
-                    size_t size = queue_test.SIZE();
+                    A2::set_limits(); // disable exception from allocator
+                    size_t size = queue_test.size();
                     switch(m) {
                     case m_push:
                             ASSERT( size>0, "incorrect queue size");
@@ -873,11 +924,26 @@ void TestExceptions() {
 }
 #endif /* TBB_USE_EXCEPTIONS */
 
-template<typename T>
+void TestExceptions() {
+#if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
+    REPORT("Known issue: exception safety test is skipped.\n");
+#elif TBB_USE_EXCEPTIONS
+    typedef static_counting_allocator<std::allocator<FooEx>, size_t> allocator_t;
+    typedef static_counting_allocator<std::allocator<char>, size_t> allocator_char_t;
+#if !TBB_DEPRECATED
+    TestExceptionBody<ConcQWithSizeWrapper<FooEx, allocator_t>,allocator_t,allocator_char_t,FooEx>();
+    TestExceptionBody<tbb::concurrent_bounded_queue<FooEx, allocator_t>,allocator_t,allocator_char_t,FooEx>();
+#else
+    TestExceptionBody<tbb::concurrent_queue<FooEx, allocator_t>,allocator_t,allocator_char_t,FooEx>();
+#endif
+#endif /* TBB_USE_EXCEPTIONS */
+}
+
+template<typename CQ, typename T>
 struct TestQueueElements: NoAssign {
-    tbb::concurrent_queue<T>& queue;
+    CQ& queue;
     const int nthread;
-    TestQueueElements( tbb::concurrent_queue<T>& q, int n ) : queue(q), nthread(n) {}
+    TestQueueElements( CQ& q, int n ) : queue(q), nthread(n) {}
     void operator()( int k ) const {
         for( int i=0; i<1000; ++i ) {
             if( (i&0x1)==0 ) {
@@ -885,7 +951,7 @@ struct TestQueueElements: NoAssign {
                 queue.push( T(k) );
             } else {
                 // Pop item from queue
-                T item;
+                T item = 0;
                 queue.try_pop(item);
                 ASSERT( item<=T(nthread), NULL );
             }
@@ -894,13 +960,13 @@ struct TestQueueElements: NoAssign {
 };
 
 //! Test concurrent queue with primitive data type
-template<typename T>
+template<typename CQ, typename T>
 void TestPrimitiveTypes( int nthread, T exemplar )
 {
-    tbb::concurrent_queue<T> queue;
+    CQ queue;
     for( int i=0; i<100; ++i )
         queue.push( exemplar );
-    NativeParallelFor( nthread, TestQueueElements<T>(queue,nthread) );
+    NativeParallelFor( nthread, TestQueueElements<CQ,T>(queue,nthread) );
 }
 
 #include "harness_m128.h"
@@ -939,49 +1005,372 @@ void TestVectorTypes() {
 }
 #endif /* HAVE_m128 || HAVE_m256 */
 
-int TestMain () {
-    TestEmptyQueue<char>();
-    TestEmptyQueue<Foo>();
-#if TBB_DEPRECATED
-    TestFullQueue();
+void TestEmptiness()
+{
+    REMARK(" Test Emptiness\n");
+#if !TBB_DEPRECATED
+    TestEmptyQueue<ConcQWithCapacity<char>, char>();
+    TestEmptyQueue<ConcQWithCapacity<Foo>, Foo>();
+    TestEmptyQueue<tbb::concurrent_bounded_queue<char>, char>();
+    TestEmptyQueue<tbb::concurrent_bounded_queue<Foo>, Foo>();
+#else
+    TestEmptyQueue<tbb::concurrent_queue<char>, char>();
+    TestEmptyQueue<tbb::concurrent_queue<Foo>, Foo>();
+#endif
+}
+
+void TestFullness()
+{
+    REMARK(" Test Fullness\n");
+#if !TBB_DEPRECATED
+    TestFullQueue<ConcQWithCapacity<Foo>,Foo>();
+    TestFullQueue<tbb::concurrent_bounded_queue<Foo>,Foo>();
+#else
+    TestFullQueue<tbb::concurrent_queue<Foo>,Foo>();
+#endif
+}
+
+void TestClearWorks() 
+{
+    REMARK(" Test concurrent_queue::clear() works\n");
+#if !TBB_DEPRECATED
+    TestClear<ConcQWithCapacity<Foo> >();
+    TestClear<tbb::concurrent_bounded_queue<Foo> >();
+#else
+    TestClear<tbb::concurrent_queue<Foo> >();
 #endif
-    TestClear();
-    TestConcurrentQueueType();
-    TestIterator();
-    TestConstructors();
-
-    TestPrimitiveTypes( MaxThread, (char)1 );
-    TestPrimitiveTypes( MaxThread, (int)-12 );
-    TestPrimitiveTypes( MaxThread, (float)-1.2f );
-    TestPrimitiveTypes( MaxThread, (double)-4.3 );
+}
+
+void TestQueueTypeDeclaration()
+{
+    REMARK(" Test concurrent_queue's types work\n");
+#if !TBB_DEPRECATED
+    TestConcurrentQueueType<tbb::concurrent_queue<Foo> >();
+    TestConcurrentQueueType<tbb::concurrent_bounded_queue<Foo> >();
+#else
+    TestConcurrentQueueType<tbb::concurrent_queue<Foo> >();
+#endif
+}
+
+void TestQueueIteratorWorks()
+{
+    REMARK(" Test concurrent_queue's iterators work\n");
+#if !TBB_DEPRECATED
+    TestIterator<tbb::concurrent_queue<Foo> >();
+    TestIterator<tbb::concurrent_bounded_queue<Foo> >();
+#else
+    TestIterator<tbb::concurrent_queue<Foo> >();
+#endif
+}
+
+#if TBB_USE_EXCEPTIONS
+#define BAR_EX BarEx
+#else
+#define BAR_EX Empty  /* passed as template arg but should not be used */
+#endif
+class Empty;
+
+void TestQueueConstructors() 
+{
+    REMARK(" Test concurrent_queue's constructors work\n");
+#if !TBB_DEPRECATED
+    TestConstructors<ConcQWithSizeWrapper<Bar>,Bar,BarIterator,ConcQWithSizeWrapper<BAR_EX>,BAR_EX>();
+    TestConstructors<tbb::concurrent_bounded_queue<Bar>,Bar,BarIterator,tbb::concurrent_bounded_queue<BAR_EX>,BAR_EX>();
+#else
+    TestConstructors<tbb::concurrent_queue<Bar>,Bar,BarIterator,tbb::concurrent_queue<BAR_EX>,BAR_EX>();
+#endif
+}
+
+void TestQueueWorksWithPrimitiveTypes()
+{
+    REMARK(" Test concurrent_queue works with primitive types\n");
+#if !TBB_DEPRECATED
+    TestPrimitiveTypes<tbb::concurrent_queue<char>, char>( MaxThread, (char)1 );
+    TestPrimitiveTypes<tbb::concurrent_queue<int>, int>( MaxThread, (int)-12 );
+    TestPrimitiveTypes<tbb::concurrent_queue<float>, float>( MaxThread, (float)-1.2f );
+    TestPrimitiveTypes<tbb::concurrent_queue<double>, double>( MaxThread, (double)-4.3 );
+    TestPrimitiveTypes<tbb::concurrent_bounded_queue<char>, char>( MaxThread, (char)1 );
+    TestPrimitiveTypes<tbb::concurrent_bounded_queue<int>, int>( MaxThread, (int)-12 );
+    TestPrimitiveTypes<tbb::concurrent_bounded_queue<float>, float>( MaxThread, (float)-1.2f );
+    TestPrimitiveTypes<tbb::concurrent_bounded_queue<double>, double>( MaxThread, (double)-4.3 );
+#else
+    TestPrimitiveTypes<tbb::concurrent_queue<char>, char>( MaxThread, (char)1 );
+    TestPrimitiveTypes<tbb::concurrent_queue<int>, int>( MaxThread, (int)-12 );
+    TestPrimitiveTypes<tbb::concurrent_queue<float>, float>( MaxThread, (float)-1.2f );
+    TestPrimitiveTypes<tbb::concurrent_queue<double>, double>( MaxThread, (double)-4.3 );
+#endif
+}
+
+void TestQueueWorksWithSSE()
+{
+    REMARK(" Test concurrent_queue works with SSE data\n");
 #if HAVE_m128
+#if !TBB_DEPRECATED
     TestVectorTypes<ClassWithSSE, tbb::concurrent_queue<ClassWithSSE> >();
     TestVectorTypes<ClassWithSSE, tbb::concurrent_bounded_queue<ClassWithSSE> >();
+#else
+    TestVectorTypes<ClassWithSSE, tbb::concurrent_queue<ClassWithSSE> >();
 #endif
+#endif /* HAVE_m128 */
 #if HAVE_m256
     if( have_AVX() ) {
+#if !TBB_DEPRECATED
         TestVectorTypes<ClassWithAVX, tbb::concurrent_queue<ClassWithAVX> >();
         TestVectorTypes<ClassWithAVX, tbb::concurrent_bounded_queue<ClassWithAVX> >();
-    }
+#else
+        TestVectorTypes<ClassWithAVX, tbb::concurrent_queue<ClassWithAVX> >();
 #endif
+    }
+#endif /* HAVE_m256 */
+}
 
-    // Test concurrent operations
+void TestConcurrentPushPop()
+{
+    REMARK(" Test concurrent_queue's concurrent push and pop\n");
     for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+        REMARK(" Testing with %d thread(s)\n", nthread );
 #if TBB_DEPRECATED
         TestNegativeQueue<Foo>(nthread);
-#endif
         for( size_t prefill=0; prefill<64; prefill+=(1+prefill/3) ) {
-            TestPushPop(prefill,ptrdiff_t(-1),nthread);
-            TestPushPop(prefill,ptrdiff_t(1),nthread);
-            TestPushPop(prefill,ptrdiff_t(2),nthread);
-            TestPushPop(prefill,ptrdiff_t(10),nthread);
-            TestPushPop(prefill,ptrdiff_t(100),nthread);
+            TestPushPop<tbb::concurrent_queue<Foo>,Foo>(prefill,ptrdiff_t(-1),nthread);
+            TestPushPop<tbb::concurrent_queue<Foo>,Foo>(prefill,ptrdiff_t(1),nthread);
+            TestPushPop<tbb::concurrent_queue<Foo>,Foo>(prefill,ptrdiff_t(2),nthread);
+            TestPushPop<tbb::concurrent_queue<Foo>,Foo>(prefill,ptrdiff_t(10),nthread);
+            TestPushPop<tbb::concurrent_queue<Foo>,Foo>(prefill,ptrdiff_t(100),nthread);
         }
+#else
+        for( size_t prefill=0; prefill<64; prefill+=(1+prefill/3) ) {
+            TestPushPop<ConcQPushPopWrapper<Foo>,Foo>(prefill,ptrdiff_t(-1),nthread);
+            TestPushPop<ConcQPushPopWrapper<Foo>,Foo>(prefill,ptrdiff_t(1),nthread);
+            TestPushPop<ConcQPushPopWrapper<Foo>,Foo>(prefill,ptrdiff_t(2),nthread);
+            TestPushPop<ConcQPushPopWrapper<Foo>,Foo>(prefill,ptrdiff_t(10),nthread);
+            TestPushPop<ConcQPushPopWrapper<Foo>,Foo>(prefill,ptrdiff_t(100),nthread);
+        }
+        for( size_t prefill=0; prefill<64; prefill+=(1+prefill/3) ) {
+            TestPushPop<tbb::concurrent_bounded_queue<Foo>,Foo>(prefill,ptrdiff_t(-1),nthread);
+            TestPushPop<tbb::concurrent_bounded_queue<Foo>,Foo>(prefill,ptrdiff_t(1),nthread);
+            TestPushPop<tbb::concurrent_bounded_queue<Foo>,Foo>(prefill,ptrdiff_t(2),nthread);
+            TestPushPop<tbb::concurrent_bounded_queue<Foo>,Foo>(prefill,ptrdiff_t(10),nthread);
+            TestPushPop<tbb::concurrent_bounded_queue<Foo>,Foo>(prefill,ptrdiff_t(100),nthread);
+        }
+#endif /* !TBB_DEPRECATED */
     }
-#if __TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
-    REPORT("Known issue: exception safety test is skipped.\n");
-#elif TBB_USE_EXCEPTIONS
-    TestExceptions();
+}
+
+#if TBB_USE_EXCEPTIONS
+tbb::atomic<size_t> num_pushed;
+tbb::atomic<size_t> num_popped;
+tbb::atomic<size_t> failed_pushes;
+tbb::atomic<size_t> failed_pops;
+
+class SimplePushBody {
+    tbb::concurrent_bounded_queue<int>* q;
+    int max;
+public:
+    SimplePushBody(tbb::concurrent_bounded_queue<int>* _q, int hi_thr) : q(_q), max(hi_thr) {}
+    void operator()(int thread_id) const {
+        if (thread_id == max) {
+            Harness::Sleep(50);
+            q->abort();
+            return;
+        }
+        try {
+            q->push(42);
+            ++num_pushed;
+        } catch ( tbb::user_abort& ) {
+            ++failed_pushes;
+        }
+    }
+};
+
+class SimplePopBody {
+    tbb::concurrent_bounded_queue<int>* q;
+    int max;
+public:
+    SimplePopBody(tbb::concurrent_bounded_queue<int>* _q, int hi_thr) : q(_q), max(hi_thr) {}
+    void operator()(int thread_id) const {
+        int e;
+        if (thread_id == max) {
+            Harness::Sleep(50);
+            q->abort();
+            return;
+        }
+        try {
+            q->pop(e);
+            ++num_popped;
+        } catch ( tbb::user_abort& ) {
+            ++failed_pops;
+        }
+    }
+};
 #endif /* TBB_USE_EXCEPTIONS */
+
+void TestAbort() {
+#if TBB_USE_EXCEPTIONS
+    for (int nthreads=MinThread; nthreads<=MaxThread; ++nthreads) {
+        REMARK("Testing Abort on %d thread(s).\n", nthreads);
+
+        REMARK("...testing pushing to zero-sized queue\n");
+        tbb::concurrent_bounded_queue<int> iq1;
+        iq1.set_capacity(0);
+        for (int i=0; i<10; ++i) {
+            num_pushed = num_popped = failed_pushes = failed_pops = 0;
+            SimplePushBody my_push_body1(&iq1, nthreads);
+            NativeParallelFor( nthreads+1, my_push_body1 );
+            ASSERT(num_pushed == 0, "no elements should have been pushed to zero-sized queue");
+            ASSERT((int)failed_pushes == nthreads, "All threads should have failed to push an element to zero-sized queue");
+        }
+        
+        REMARK("...testing pushing to small-sized queue\n");
+        tbb::concurrent_bounded_queue<int> iq2;
+        iq2.set_capacity(2);
+        for (int i=0; i<10; ++i) {
+            num_pushed = num_popped = failed_pushes = failed_pops = 0;
+            SimplePushBody my_push_body2(&iq2, nthreads);
+            NativeParallelFor( nthreads+1, my_push_body2 );
+            ASSERT(num_pushed <= 2, "at most 2 elements should have been pushed to queue of size 2");
+            if (nthreads >= 2) 
+                ASSERT((int)failed_pushes == nthreads-2, "nthreads-2 threads should have failed to push an element to queue of size 2");
+            int e;
+            while (iq2.try_pop(e)) ;
+        }
+        
+        REMARK("...testing popping from small-sized queue\n");
+        tbb::concurrent_bounded_queue<int> iq3;
+        iq3.set_capacity(2);
+        for (int i=0; i<10; ++i) {
+            num_pushed = num_popped = failed_pushes = failed_pops = 0;
+            iq3.push(42);
+            iq3.push(42);
+            SimplePopBody my_pop_body(&iq3, nthreads);
+            NativeParallelFor( nthreads+1, my_pop_body);
+            ASSERT(num_popped <= 2, "at most 2 elements should have been popped from queue of size 2");
+            if (nthreads >= 2)
+                ASSERT((int)failed_pops == nthreads-2, "nthreads-2 threads should have failed to pop an element from queue of size 2");
+            else {
+                int e;
+                iq3.pop(e);
+            }
+        }
+
+        REMARK("...testing pushing and popping from small-sized queue\n");
+        tbb::concurrent_bounded_queue<int> iq4;
+        int cap = nthreads/2;
+        if (!cap) cap=1;
+        iq4.set_capacity(cap);
+        for (int i=0; i<10; ++i) {
+            num_pushed = num_popped = failed_pushes = failed_pops = 0;
+            SimplePushBody my_push_body2(&iq4, nthreads);
+            NativeParallelFor( nthreads+1, my_push_body2 );
+            ASSERT((int)num_pushed <= cap, "at most cap elements should have been pushed to queue of size cap");
+            if (nthreads >= cap) 
+                ASSERT((int)failed_pushes == nthreads-cap, "nthreads-cap threads should have failed to push an element to queue of size cap");
+            SimplePopBody my_pop_body(&iq4, nthreads);
+            NativeParallelFor( nthreads+1, my_pop_body);
+            ASSERT((int)num_popped <= cap, "at most cap elements should have been popped from queue of size cap");
+            if (nthreads >= cap)
+                ASSERT((int)failed_pops == nthreads-cap, "nthreads-cap threads should have failed to pop an element from queue of size cap");
+            else {
+                int e;
+                while (iq4.try_pop(e)) ;
+            }
+        }
+    }
+#endif
+}
+
+
+template <typename Q>
+class FloggerBody : NoAssign {
+    Q *q;
+public:
+    FloggerBody(Q *q_) : q(q_) {}  
+    void operator()(const int threadID) const {
+        typedef typename Q::value_type value_type;
+        value_type elem = value_type(threadID);
+        for (size_t i=0; i<275; ++i) {
+            q->push(elem);
+            (void) q->try_pop(elem);
+        }
+    }
+};
+
+template <typename HackedQRep, typename Q>
+void TestFloggerHelp(HackedQRep* hack_rep, Q* q, size_t items_per_page) {
+    size_t nq = HackedQRep::n_queue;
+    size_t hack_val = std::numeric_limits<std::size_t>::max() & ~( nq * items_per_page - 1 );
+    hack_rep->head_counter = hack_val;
+    hack_rep->tail_counter = hack_val;
+    size_t k = hack_rep->tail_counter & -(ptrdiff_t)nq;
+
+    for (size_t i=0; i<nq; ++i) {
+        hack_rep->array[i].head_counter = k;
+        hack_rep->array[i].tail_counter = k;
+    }
+    NativeParallelFor(MaxThread, FloggerBody<Q>(q));
+    ASSERT(q->empty(), "FAILED flogger/empty test.");
+    delete q;
+}
+
+template <typename T>
+void TestFlogger(T /*max*/) {
+    { // test strict_ppl::concurrent_queue or deprecated::concurrent_queue
+        tbb::concurrent_queue<T>* q = new tbb::concurrent_queue<T>;
+#if !TBB_DEPRECATED
+        REMARK("Wraparound on strict_ppl::concurrent_queue...");
+        hacked_concurrent_queue_rep* hack_rep = ((hacked_concurrent_queue<T>*)(void*)q)->my_rep;
+        TestFloggerHelp(hack_rep, q, hack_rep->items_per_page);
+        REMARK(" works.\n");
+#else
+        REMARK("Wraparound on deprecated::concurrent_queue...");
+        hacked_bounded_concurrent_queue* hack_q = (hacked_bounded_concurrent_queue*)(void*)q;
+        hacked_bounded_concurrent_queue_rep* hack_rep = hack_q->my_rep;
+        TestFloggerHelp(hack_rep, q, hack_q->items_per_page);
+        REMARK(" works.\n");
+#endif
+    }
+    { // test tbb::concurrent_bounded_queue
+        tbb::concurrent_bounded_queue<T>* q = new tbb::concurrent_bounded_queue<T>;
+        REMARK("Wraparound on tbb::concurrent_bounded_queue...");
+        hacked_bounded_concurrent_queue* hack_q = (hacked_bounded_concurrent_queue*)(void*)q;
+        hacked_bounded_concurrent_queue_rep* hack_rep = hack_q->my_rep;
+        TestFloggerHelp(hack_rep, q, hack_q->items_per_page);
+        REMARK(" works.\n");
+    }
+}
+
+void TestWraparound() {
+    REMARK("Testing Wraparound...\n");
+    TestFlogger(std::numeric_limits<int>::max());
+    TestFlogger(std::numeric_limits<unsigned char>::max());
+    REMARK("Done Testing Wraparound.\n");
+}
+
+int TestMain () {
+    TestEmptiness();
+
+    TestFullness();
+
+    TestClearWorks();
+
+    TestQueueTypeDeclaration();
+
+    TestQueueIteratorWorks();
+
+    TestQueueConstructors();
+
+    TestQueueWorksWithPrimitiveTypes();
+
+    TestQueueWorksWithSSE();
+
+    // Test concurrent operations
+    TestConcurrentPushPop();
+
+    TestExceptions();
+
+    TestAbort();
+
+    TestWraparound();
+
     return Harness::Done;
 }
diff --git a/src/test/test_concurrent_queue.h b/src/test/test_concurrent_queue.h
new file mode 100644
index 0000000..706a9c3
--- /dev/null
+++ b/src/test/test_concurrent_queue.h
@@ -0,0 +1,98 @@
+/*
+    Copyright 2005-2012 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 "tbb/atomic.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/tbb_machine.h"
+
+#include "tbb/concurrent_monitor.h"
+
+struct hacked_micro_queue {
+    tbb::atomic<uintptr_t> head_page;
+    tbb::atomic<size_t> head_counter;
+
+    tbb::atomic<uintptr_t> tail_page;
+    tbb::atomic<size_t> tail_counter;
+
+    tbb::spin_mutex page_mutex;
+ };
+
+// hacks for strict_ppl::concurrent_queue
+struct hacked_concurrent_queue_rep {
+    static const size_t phi = 3;
+    static const size_t n_queue = 8;
+
+    tbb::atomic<size_t> head_counter;
+    char pad1[tbb::internal::NFS_MaxLineSize-sizeof(tbb::atomic<size_t>)];
+    tbb::atomic<size_t> tail_counter;
+    char pad2[tbb::internal::NFS_MaxLineSize-sizeof(tbb::atomic<size_t>)];
+
+    size_t items_per_page;
+    size_t item_size;
+    tbb::atomic<size_t> n_invalid_entries;
+    char pad3[tbb::internal::NFS_MaxLineSize-sizeof(size_t)-sizeof(size_t)-sizeof(tbb::atomic<size_t>)];
+
+    hacked_micro_queue array[n_queue];
+};
+
+struct hacked_concurrent_queue_page_allocator {
+    size_t foo;
+};
+
+template <typename T>
+struct hacked_concurrent_queue : public hacked_concurrent_queue_page_allocator {
+    hacked_concurrent_queue_rep* my_rep;
+    typename tbb::cache_aligned_allocator<T>::template rebind<char>::other my_allocator;
+};
+
+// hacks for concurrent_bounded_queue and deprecated::concurrent_queue
+struct hacked_bounded_concurrent_queue_rep {
+    static const size_t phi = 3;
+    static const size_t n_queue = 8;
+
+    tbb::atomic<size_t> head_counter;
+    char cmon_items_avail[ sizeof(tbb::internal::concurrent_monitor) ];
+    tbb::atomic<size_t> n_invalid_entries;
+    char pad1[tbb::internal::NFS_MaxLineSize-((sizeof(tbb::atomic<size_t>)+sizeof(tbb::internal::concurrent_monitor)+sizeof(tbb::atomic<size_t>))&(tbb::internal::NFS_MaxLineSize-1))];
+
+    tbb::atomic<size_t> tail_counter;
+    char cmon_slots_avail[ sizeof(tbb::internal::concurrent_monitor) ];
+    char pad2[tbb::internal::NFS_MaxLineSize-((sizeof(tbb::atomic<size_t>)+sizeof(tbb::internal::concurrent_monitor))&(tbb::internal::NFS_MaxLineSize-1))];
+    hacked_micro_queue array[n_queue];
+
+    static const ptrdiff_t infinite_capacity = ptrdiff_t(~size_t(0)/2);
+};
+
+struct hacked_bounded_concurrent_queue  {
+    size_t foo;
+    hacked_bounded_concurrent_queue_rep* my_rep;
+    ptrdiff_t my_capacity;
+    size_t items_per_page;
+    size_t item_size;
+};
diff --git a/src/test/test_concurrent_unordered.cpp b/src/test/test_concurrent_unordered.cpp
index c6be930..aafa630 100644
--- a/src/test/test_concurrent_unordered.cpp
+++ b/src/test/test_concurrent_unordered.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_concurrent_vector.cpp b/src/test/test_concurrent_vector.cpp
index 37cec5a..e21d7a1 100644
--- a/src/test/test_concurrent_vector.cpp
+++ b/src/test/test_concurrent_vector.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -118,7 +118,7 @@ public:
         my_bar = x.my_bar;
         ASSERT( x.is_valid_or_zero(), "bad source for assignment" );
         ASSERT( is_valid(), NULL );
-    } 
+    }
     bool operator==(const Foo &f) const { return my_bar == f.my_bar; }
     bool operator<(const Foo &f) const { return my_bar < f.my_bar; }
 };
@@ -175,7 +175,7 @@ void TestResizeAndCopy() {
             ASSERT( count+new_size==FooCount, NULL );
             for( int j=0; j<new_size; ++j ) {
                 int expected = j<old_size ? j : 33;
-                if( v[j].bar()!=expected ) 
+                if( v[j].bar()!=expected )
                     REPORT("ERROR on line %d for old_size=%ld new_size=%ld v[%ld].bar()=%d != %d\n",__LINE__,long(old_size),long(new_size),long(j),v[j].bar(), expected);
             }
             ASSERT( v.size()==size_t(new_size), NULL );
@@ -205,7 +205,7 @@ void TestCapacity() {
     allocator_t::init_counters();
     for( size_t old_size=0; old_size<=11000; old_size=(old_size<5 ? old_size+1 : 3*old_size) ) {
         for( size_t new_size=0; new_size<=11000; new_size=(new_size<5 ? new_size+1 : 3*new_size) ) {
-            long count = FooCount; 
+            long count = FooCount;
             {
                 vector_t v; v.reserve(old_size);
                 ASSERT( v.capacity()>=old_size, NULL );
@@ -234,7 +234,7 @@ void TestCapacity() {
             }
             ASSERT( FooCount==count, NULL );
         }
-    } 
+    }
     ASSERT( allocator_t::items_allocated == allocator_t::items_freed, NULL);
     ASSERT( allocator_t::allocations == allocator_t::frees, NULL);
 }
@@ -304,9 +304,9 @@ void TestRangeAssignment( Range2 r2 ) {
 
 template<typename Iterator, typename T>
 void TestIteratorTraits() {
-    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) ); 
-    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) ); 
-    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) ); 
+    AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) );
+    AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) );
+    AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) );
     AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::random_access_iterator_tag*>(0) );
     T x;
     typename Iterator::reference xr = x;
@@ -326,7 +326,7 @@ void CheckConstIterator( const Vector& u, int i, const Iterator& cp ) {
     ASSERT( u.begin()[i].bar()==i, NULL );
 }
 
-template<typename Iterator1, typename Iterator2, typename V> 
+template<typename Iterator1, typename Iterator2, typename V>
 void CheckIteratorComparison( V& u ) {
     V u2 = u;
     Iterator1 i = u.begin();
@@ -359,7 +359,7 @@ void TestSequentialFor() {
     V v(N);
     ASSERT(v.grow_by(0) == v.grow_by(0, FooWithAssign()), NULL);
 
-    // Check iterator 
+    // Check iterator
     tbb::tick_count t0 = tbb::tick_count::now();
     typename V::iterator p = v.begin();
     ASSERT( !(*p).is_const(), NULL );
@@ -374,7 +374,7 @@ void TestSequentialFor() {
         ASSERT( -delta<=0, "difference type not signed?" );
     }
     tbb::tick_count t1 = tbb::tick_count::now();
-    
+
     // Check const_iterator going forwards
     const V& u = v;
     typename V::const_iterator cp = u.begin();
@@ -418,19 +418,19 @@ void TestSequentialFor() {
         if( 0<=k+delta && size_t(k+delta)<u.size() ) {
             V::const_iterator &cpr = (cp += delta);
             ASSERT( &cpr == &cp, "+= not returning a reference?");
-            k += delta; 
-        } 
+            k += delta;
+        }
         delta = i*7 % u.size();
         if( 0<=k-delta && size_t(k-delta)<u.size() ) {
-            if( i&1 ) { 
+            if( i&1 ) {
                 V::const_iterator &cpr = (cp -= delta);
                 ASSERT( &cpr == &cp, "-= not returning a reference?");
             } else
                 cp = cp - delta;        // Test operator-
-            k -= delta; 
-        } 
+            k -= delta;
+        }
     }
-    
+
     for( int i=0; size_t(i)<u.size(); i=(i<50?i+1:i*3) )
         for( int j=-i; size_t(i+j)<u.size(); j=(j<50?j+1:j*5) ) {
             ASSERT( (u.begin()+i)[j].bar()==i+j, NULL );
@@ -457,7 +457,7 @@ void TestSequentialFor() {
     TestRangeAssignment<typename V::range_type>( v.range() );
     // doesn't compile as expected: TestRangeAssignment<typename V::range_type>( u.range() );
 
-    // Check reverse_iterator 
+    // Check reverse_iterator
     typename V::reverse_iterator rp = v.rbegin();
     for( size_t i=v.size(); i>0; --i, ++rp ) {
         typename V::reference pref = *rp;
@@ -465,8 +465,8 @@ void TestSequentialFor() {
         ASSERT( rp!=v.rend(), NULL );
     }
     ASSERT( rp==v.rend(), NULL );
-    
-    // Check const_reverse_iterator 
+
+    // Check const_reverse_iterator
     typename V::const_reverse_iterator crp = u.rbegin();
     ASSERT( crp == v.crbegin(), NULL );
     ASSERT( *crp == v.back(), NULL);
@@ -504,9 +504,6 @@ void TestSequentialFor() {
 
 static const size_t Modulus = 7;
 
-typedef static_counting_allocator<debug_allocator<Foo> > MyAllocator;
-typedef tbb::concurrent_vector<Foo, MyAllocator> MyVector;
-
 template<typename MyVector>
 class GrowToAtLeast: NoAssign {
     MyVector& my_vector;
@@ -566,7 +563,7 @@ public:
         {
             if( i&1 ) {
 #if TBB_DEPRECATED
-                typename MyVector::reference element = my_vector[my_vector.grow_by(1)]; 
+                typename MyVector::reference element = my_vector[my_vector.grow_by(1)];
                 element.bar() = i;
 #else
                 my_vector.grow_by(1)->bar() = i;
@@ -596,6 +593,10 @@ public:
 
 //! Test concurrent invocations of method concurrent_vector::grow_by
 void TestConcurrentGrowBy( int nthread ) {
+
+    typedef static_counting_allocator<debug_allocator<Foo> > MyAllocator;
+    typedef tbb::concurrent_vector<Foo, MyAllocator> MyVector;
+
     MyAllocator::init_counters();
     {
         int m = 100000; MyAllocator a;
@@ -726,7 +727,7 @@ static tbb::concurrent_vector<Number> Primes;
 class FindPrimes {
     bool is_prime( Number val ) const {
         int limit, factor = 3;
-        if( val<5u ) 
+        if( val<5u )
             return val==2;
         else {
             limit = long(sqrtf(float(val))+0.5f);
@@ -737,7 +738,7 @@ class FindPrimes {
     }
 public:
     void operator()( const tbb::blocked_range<Number>& r ) const {
-        for( Number i=r.begin(); i!=r.end(); ++i ) { 
+        for( Number i=r.begin(); i!=r.end(); ++i ) {
             if( i%2 && is_prime(i) ) {
 #if TBB_DEPRECATED
                 Primes[Primes.grow_by(1)] = i;
@@ -763,10 +764,10 @@ void TestFindPrimes() {
     // Time fully subscribed run.
     double t2 = TimeFindPrimes( tbb::task_scheduler_init::automatic );
 
-    // Time parallel run that is very likely oversubscribed.  
+    // Time parallel run that is very likely oversubscribed.
 #if _XBOX
     double t128 = TimeFindPrimes(32);  //XBOX360 can't handle too many threads
-#else    
+#else
     double t128 = TimeFindPrimes(128);
 #endif
     REMARK("TestFindPrimes: t2==%g t128=%g k=%g\n", t2, t128, t128/t2);
@@ -777,7 +778,7 @@ void TestFindPrimes() {
     // and the generalization to fix the issue is not worth the trouble.
     if( t128 > 1.3*t2 ) {
         REPORT("Warning: grow_by is pathetically slow: t2==%g t128=%g k=%g\n", t2, t128, t128/t2);
-    } 
+    }
 }
 
 //------------------------------------------------------------------------
@@ -831,7 +832,7 @@ void TestExceptions() {
                 case ctor_size: {
                         vector_t sized(N);
                     } break; // auto destruction after exception is checked by ~Foo
-                // Do not test assignment constructor due to reusing of same methods as below 
+                // Do not test assignment constructor due to reusing of same methods as below
                 case assign_nt: {
                         victim.assign(N, FooWithAssign());
                     } break;
@@ -972,7 +973,7 @@ void TestVectorTypes() {
         // VC8 does not properly align a temporary value; to work around, use explicit variable
         ClassWithVectorType foo(i);
         v.push_back(foo);
-        for( int j=0; i<i; ++j ) {
+        for( int j=0; j<i; ++j ) {
             ClassWithVectorType bar(j);
             ASSERT( v[j]==bar, NULL );
         }
diff --git a/src/test/test_condition_variable.h b/src/test/test_condition_variable.h
index f403a02..febd771 100644
--- a/src/test/test_condition_variable.h
+++ b/src/test/test_condition_variable.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -43,7 +43,7 @@ template<typename M>
 struct Counter {
     typedef M mutex_type;
     M mutex;
-    volatile long value; 
+    volatile long value;
     void flog_once_lock_guard( size_t mode );
     void flog_once_unique_lock( size_t mode );
 };
@@ -189,7 +189,7 @@ void TestLocks( const char* name, int nthread ) {
     Counter<M> counter;
     counter.value = 0;
     Order = 0;
-    // use the macro because of a seeming gcc 4.6 bug
+    // use the macro because of a gcc 4.6 bug
 #define TEST_SIZE 100000
     NativeParallelFor( nthread, WorkForLocks<Counter<M>, TEST_SIZE>(counter) );
 
@@ -246,7 +246,7 @@ struct WorkForCondVarCtor: NoAssign {
 static condition_variable* test_cv;
 static tbb::atomic<int> n_waiters;
 
-// Test if the destructor works 
+// Test if the destructor works
 template<typename M>
 struct WorkForCondVarDtor: NoAssign {
     int nthread;
@@ -319,7 +319,7 @@ struct WorkForCondVarTimedWait: NoAssign {
 
         // test if a thread times out with wait_for()
         for( int i=1; i<10; ++i ) {
-            tbb::tick_count::interval_t intv((double)i*0.0001 /*seconds*/);
+            tbb::tick_count::interval_t intv((double)i*0.0999 /*seconds*/);
             ul.lock();
             cv_status st = no_timeout;
             __TBB_TRY {
@@ -378,7 +378,7 @@ struct WorkForCondVarTimedWait: NoAssign {
             // sleeper
             tbb::tick_count::interval_t intv((double)2.0 /*seconds*/);
             ul.lock();
-            ++n_waiters; // raise flag 1/(nthread-1) 
+            ++n_waiters; // raise flag 1/(nthread-1)
             t1 = tbb::tick_count::now();
             cv_status st = test_cv.wait_for( ul, intv ); // gate 2
             t2 = tbb::tick_count::now();
@@ -397,7 +397,7 @@ struct WorkForCondVarTimedWait: NoAssign {
             ++n_done; // open gate 3
 
             while( n_waiters<(nthread-1) ) __TBB_Yield(); // wait until all other threads block on cv.
-            for( int i=0; i<2*short_delay; ++i ) __TBB_Yield();  // give some time to waiters so that all of them in the waitq 
+            for( int i=0; i<2*short_delay; ++i ) __TBB_Yield();  // give some time to waiters so that all of them in the waitq
             ul.lock();
             false_to_true = true;
             test_cv.notify_all(); // open gate 4
@@ -455,7 +455,7 @@ struct WorkForCondVarWaitAndNotifyOne: NoAssign {
                     ul.unlock();
                     __TBB_Yield();
                 }
-    
+
                 // give waiters time to go to sleep.
                 for( int m=0; m<short_delay; ++m )
                     __TBB_Yield();
@@ -471,7 +471,7 @@ struct WorkForCondVarWaitAndNotifyOne: NoAssign {
                 // each waiter should go to sleep at least once
                 unsigned nw = ++n_waiters;
                 for( ;; ) {
-                    // update to max_waitq_length 
+                    // update to max_waitq_length
                     if( nw>max_waitq_length ) max_waitq_length = nw;
                     ++n_visit_to_waitq;
                     test_cv.wait( ul );
@@ -509,7 +509,7 @@ struct WorkForCondVarWaitPredAndNotifyAll: NoAssign {
     condition_variable& test_cv;
     M& my_mtx;
     int multiple;
-    WorkForCondVarWaitPredAndNotifyAll( int n_, condition_variable& cv_, M& mtx_, int m_ ) : 
+    WorkForCondVarWaitPredAndNotifyAll( int n_, condition_variable& cv_, M& mtx_, int m_ ) :
         nthread(n_), test_cv(cv_), my_mtx(mtx_), multiple(m_) {}
     void operator()( int tid ) const {
         if( tid&1 ) {
@@ -517,7 +517,7 @@ struct WorkForCondVarWaitPredAndNotifyAll: NoAssign {
                 unique_lock<M> ul( my_mtx, defer_lock );
                 // exercise wait part
                 int my_ticket = ++ticket_for_sleep; // grab my ticket
-                if( my_ticket>max_ticket ) 
+                if( my_ticket>max_ticket )
                     break;
 
                 ul.lock();
@@ -551,7 +551,7 @@ struct WorkForCondVarWaitPredAndNotifyAll: NoAssign {
                     ul.unlock();
                     __TBB_Yield();
                 }
-    
+
                 // give waiters time to go to sleep.
                 for( int m=0; m<long_delay*multiple; ++m )
                     __TBB_Yield();
@@ -633,7 +633,7 @@ void TestConditionVariable( const char* name, int nthread )
         NativeParallelFor( nthread, WorkForCondVarWaitPredAndNotifyAll<M>( nthread, cv4, mtx4, delay_multiple ) );
         if( max_waitq_length<unsigned(nthread/2) )
             ++delay_multiple;
-    } while( n_visit_to_waitq<=0 || max_waitq_length<unsigned(nthread/2) ); 
+    } while( n_visit_to_waitq<=0 || max_waitq_length<unsigned(nthread/2) );
 }
 
 #if TBB_USE_EXCEPTIONS
diff --git a/src/test/test_continue_node.cpp b/src/test/test_continue_node.cpp
index 1e381df..f7f219c 100644
--- a/src/test/test_continue_node.cpp
+++ b/src/test/test_continue_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -35,9 +35,9 @@ tbb::spin_mutex global_mutex;
 
 #define N 1000
 #define MAX_NODES 4
-#define C 8 
+#define C 8
 
-struct empty_no_assign : private NoAssign { 
+struct empty_no_assign : private NoAssign {
    empty_no_assign() {}
    empty_no_assign( int ) {}
    operator int() { return 0; }
@@ -65,7 +65,7 @@ void run_continue_nodes( int p, tbb::flow::graph& g, tbb::flow::continue_node< O
         n.register_predecessor( *reinterpret_cast< tbb::flow::sender< tbb::flow::continue_msg > * >(&n) );
     }
 
-    for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) { 
+    for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
         harness_counting_receiver<OutputType> *receivers = new harness_counting_receiver<OutputType>[num_receivers];
         harness_graph_executor<tbb::flow::continue_msg, OutputType>::execute_count = 0;
 
@@ -74,11 +74,11 @@ void run_continue_nodes( int p, tbb::flow::graph& g, tbb::flow::continue_node< O
         }
 
         NativeParallelFor( p, parallel_puts<tbb::flow::continue_msg>(n) );
-        g.wait_for_all(); 
+        g.wait_for_all();
 
         // 2) the nodes will receive puts from multiple predecessors simultaneously,
         size_t ec = harness_graph_executor<tbb::flow::continue_msg, OutputType>::execute_count;
-        ASSERT( (int)ec == p, NULL ); 
+        ASSERT( (int)ec == p, NULL );
         for (size_t r = 0; r < num_receivers; ++r ) {
             size_t c = receivers[r].my_count;
             // 3) the nodes will send to multiple successors.
@@ -93,6 +93,7 @@ void continue_nodes( Body body ) {
         tbb::flow::graph g;
         tbb::flow::continue_node< OutputType > exe_node( g, body );
         run_continue_nodes( p, g, exe_node);
+        exe_node.try_put(tbb::flow::continue_msg());
         tbb::flow::continue_node< OutputType > exe_node_copy( exe_node );
         run_continue_nodes( p, g, exe_node_copy);
     }
@@ -111,7 +112,7 @@ struct inc_functor {
     OutputType operator()( tbb::flow::continue_msg ) {
        ++global_execute_count;
        ++local_execute_count;
-       return OutputType(); 
+       return OutputType();
     }
 
 };
@@ -124,13 +125,13 @@ void continue_nodes_with_copy( ) {
         inc_functor<OutputType> cf;
         cf.local_execute_count = Offset;
         global_execute_count = Offset;
-      
+
         tbb::flow::continue_node< OutputType > exe_node( g, cf );
         for (size_t i = 0; i < N; ++i) {
            exe_node.register_predecessor( *reinterpret_cast< tbb::flow::sender< tbb::flow::continue_msg > * >(&exe_node) );
         }
 
-        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) { 
+        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
             harness_counting_receiver<OutputType> *receivers = new harness_counting_receiver<OutputType>[num_receivers];
 
             for (size_t r = 0; r < num_receivers; ++r ) {
@@ -138,7 +139,7 @@ void continue_nodes_with_copy( ) {
             }
 
             NativeParallelFor( p, parallel_puts<tbb::flow::continue_msg>(exe_node) );
-            g.wait_for_all(); 
+            g.wait_for_all();
 
             // 2) the nodes will receive puts from multiple predecessors simultaneously,
             for (size_t r = 0; r < num_receivers; ++r ) {
@@ -153,7 +154,7 @@ void continue_nodes_with_copy( ) {
         const size_t expected_count = p*MAX_NODES + Offset;
         size_t global_count = global_execute_count;
         size_t inc_count = body_copy.local_execute_count;
-        ASSERT( global_count == expected_count && global_count == inc_count, NULL ); 
+        ASSERT( global_count == expected_count && global_count == inc_count, NULL );
 
     }
 }
@@ -177,7 +178,7 @@ void test_concurrency(int num_threads) {
     run_continue_nodes<empty_no_assign>();
 }
 
-int TestMain() { 
+int TestMain() {
     if( MinThread<1 ) {
         REPORT("number of threads must be positive\n");
         exit(1);
diff --git a/src/test/test_critical_section.cpp b/src/test/test_critical_section.cpp
index fe77718..59a85b6 100644
--- a/src/test/test_critical_section.cpp
+++ b/src/test/test_critical_section.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_eh_algorithms.cpp b/src/test/test_eh_algorithms.cpp
index adc2ffa..9d5f66b 100644
--- a/src/test/test_eh_algorithms.cpp
+++ b/src/test/test_eh_algorithms.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -45,10 +45,10 @@
 
 #define FLAT_RANGE  100000
 #define FLAT_GRAIN  100
-#define NESTING_RANGE  100
-#define NESTING_GRAIN  10
-#define NESTED_RANGE  (FLAT_RANGE / NESTING_RANGE)
-#define NESTED_GRAIN  (FLAT_GRAIN / NESTING_GRAIN)
+#define OUTER_RANGE  100
+#define OUTER_GRAIN  10
+#define INNER_RANGE  (FLAT_RANGE / OUTER_RANGE)
+#define INNER_GRAIN  (FLAT_GRAIN / OUTER_GRAIN)
 
 tbb::atomic<intptr_t> g_FedTasksCount; // number of tasks added by parallel_do feeder
 
@@ -75,12 +75,12 @@ inline intptr_t NumSubranges ( intptr_t length, intptr_t grain ) {
 }
 
 template<class Body>
-intptr_t TestNumSubrangesCalculation ( intptr_t length, intptr_t grain, intptr_t nested_length, intptr_t nested_grain ) {
+intptr_t TestNumSubrangesCalculation ( intptr_t length, intptr_t grain, intptr_t inner_length, intptr_t inner_grain ) {
     ResetGlobals();
     g_ThrowException = false;
-    intptr_t nestingCalls = NumSubranges(length, grain),
-             nestedCalls = NumSubranges(nested_length, nested_grain),
-             maxExecuted = nestingCalls * (nestedCalls + 1);
+    intptr_t outerCalls = NumSubranges(length, grain),
+             innerCalls = NumSubranges(inner_length, inner_grain),
+             maxExecuted = outerCalls * (innerCalls + 1);
     tbb::parallel_for( range_type(0, length, grain), Body() );
     ASSERT (g_CurExecuted == maxExecuted, "Wrong estimation of bodies invocation count");
     return maxExecuted;
@@ -123,7 +123,8 @@ public:
 //! Test parallel_for and parallel_reduce for a given partitioner.
 /** The Body need only be suitable for a parallel_for. */
 template<typename ParForBody, typename Partitioner>
-void TestParallelLoopAux( Partitioner& partitioner ) {
+void TestParallelLoopAux() {
+    Partitioner partitioner;
     for( int i=0; i<2; ++i ) {
         ResetGlobals();
         TRY();
@@ -134,7 +135,7 @@ void TestParallelLoopAux( Partitioner& partitioner ) {
                 tbb::parallel_reduce( range_type(0, FLAT_RANGE, FLAT_GRAIN), rb, partitioner );
             }
         CATCH_AND_ASSERT();
-        ASSERT (exceptionCaught, "No exception thrown from the nesting parallel_for");
+        ASSERT (exceptionCaught, "No exception thrown from the outer parallel_for");
         ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
         ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
         if ( !g_SolitaryException )
@@ -147,19 +148,23 @@ void TestParallelLoopAux( Partitioner& partitioner ) {
 template<typename Body>
 void TestParallelLoop() {
     // The simple and auto partitioners should be const, but not the affinity partitioner.
-    const tbb::simple_partitioner p0;
-    TestParallelLoopAux<Body>( p0 );
-    const tbb::auto_partitioner p1;
-    TestParallelLoopAux<Body>( p1 );
+    TestParallelLoopAux<Body, const tbb::simple_partitioner  >();
+    TestParallelLoopAux<Body, const tbb::auto_partitioner    >();
+#define __TBB_TEMPORARILY_DISABLED 1
+#if !__TBB_TEMPORARILY_DISABLED
+    // TODO: Improve the test so that it tolerates delayed start of tasks with affinity_partitioner
+    TestParallelLoopAux<Body, /***/ tbb::affinity_partitioner>();
+#endif
+#undef __TBB_TEMPORARILY_DISABLED
 }
 
 class SimpleParForBody: NoAssign {
 public:
     void operator()( const range_type& r ) const {
         Harness::ConcurrencyTracker ct;
-        volatile long x;
+        volatile long x = 0;
         for( count_type i = r.begin(); i != r.end(); ++i )
-            x = 0;
+            x += 0;
         ++g_CurExecuted;
         WaitUntilConcurrencyPeaks();
         ThrowTestException(1);
@@ -170,48 +175,48 @@ void Test1() {
     TestParallelLoop<SimpleParForBody>();
 } // void Test1 ()
 
-class NestingParForBody: NoAssign {
+class OuterParForBody: NoAssign {
 public:
     void operator()( const range_type& ) const {
         Harness::ConcurrencyTracker ct;
         ++g_CurExecuted;
-        tbb::parallel_for( tbb::blocked_range<size_t>(0, NESTED_RANGE, NESTED_GRAIN), SimpleParForBody() );
+        tbb::parallel_for( tbb::blocked_range<size_t>(0, INNER_RANGE, INNER_GRAIN), SimpleParForBody() );
     }
 };
 
-//! Uses parallel_for body containing a nested parallel_for with the default context not wrapped by a try-block.
-/** Nested algorithms are spawned inside the new bound context by default. Since
-    exceptions thrown from the nested parallel_for are not handled by the caller
-    (nesting parallel_for body) in this test, they will cancel all the sibling nested
+//! Uses parallel_for body containing an inner parallel_for with the default context not wrapped by a try-block.
+/** Inner algorithms are spawned inside the new bound context by default. Since
+    exceptions thrown from the inner parallel_for are not handled by the caller
+    (outer parallel_for body) in this test, they will cancel all the sibling inner
     algorithms. **/
 void Test2 () {
-    TestParallelLoop<NestingParForBody>();
+    TestParallelLoop<OuterParForBody>();
 } // void Test2 ()
 
-class NestingParForBodyWithIsolatedCtx {
+class OuterParForBodyWithIsolatedCtx {
 public:
     void operator()( const range_type& ) const {
         tbb::task_group_context ctx(tbb::task_group_context::isolated);
         ++g_CurExecuted;
-        tbb::parallel_for( tbb::blocked_range<size_t>(0, NESTED_RANGE, NESTED_GRAIN), SimpleParForBody(), tbb::simple_partitioner(), ctx );
+        tbb::parallel_for( tbb::blocked_range<size_t>(0, INNER_RANGE, INNER_GRAIN), SimpleParForBody(), tbb::simple_partitioner(), ctx );
     }
 };
 
-//! Uses parallel_for body invoking a nested parallel_for with an isolated context without a try-block.
-/** Even though exceptions thrown from the nested parallel_for are not handled
-    by the caller in this test, they will not affect sibling nested algorithms
+//! Uses parallel_for body invoking an inner parallel_for with an isolated context without a try-block.
+/** Even though exceptions thrown from the inner parallel_for are not handled
+    by the caller in this test, they will not affect sibling inner algorithms
     already running because of the isolated contexts. However because the first
     exception cancels the root parallel_for only the first g_NumThreads subranges
-    will be processed (which launch nested parallel_fors) **/
+    will be processed (which launch inner parallel_fors) **/
 void Test3 () {
     ResetGlobals();
-    typedef NestingParForBodyWithIsolatedCtx body_type;
-    intptr_t  nestedCalls = NumSubranges(NESTED_RANGE, NESTED_GRAIN),
-            minExecuted = (g_NumThreads - 1) * nestedCalls;
+    typedef OuterParForBodyWithIsolatedCtx body_type;
+    intptr_t  innerCalls = NumSubranges(INNER_RANGE, INNER_GRAIN),
+            minExecuted = (g_NumThreads - 1) * innerCalls;
     TRY();
-        tbb::parallel_for( range_type(0, NESTING_RANGE, NESTING_GRAIN), body_type() );
+        tbb::parallel_for( range_type(0, OUTER_RANGE, OUTER_GRAIN), body_type() );
     CATCH_AND_ASSERT();
-    ASSERT (exceptionCaught, "No exception thrown from the nesting parallel_for");
+    ASSERT (exceptionCaught, "No exception thrown from the outer parallel_for");
     if ( g_SolitaryException ) {
         ASSERT (g_CurExecuted > minExecuted, "Too few tasks survived exception");
         ASSERT (g_CurExecuted <= minExecuted + (g_ExecutedAtCatch + g_NumThreads), "Too many tasks survived exception");
@@ -221,42 +226,42 @@ void Test3 () {
         ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
 } // void Test3 ()
 
-class NestingParForExceptionSafeBody {
+class OuterParForExceptionSafeBody {
 public:
     void operator()( const range_type& ) const {
         tbb::task_group_context ctx(tbb::task_group_context::isolated);
         TRY();
-            tbb::parallel_for( tbb::blocked_range<size_t>(0, NESTED_RANGE, NESTED_GRAIN), SimpleParForBody(), tbb::simple_partitioner(), ctx );
-        CATCH();
+            tbb::parallel_for( tbb::blocked_range<size_t>(0, INNER_RANGE, INNER_GRAIN), SimpleParForBody(), tbb::simple_partitioner(), ctx );
+        CATCH();  // this macro sets g_ExceptionCaught
     }
 };
 
-//! Uses parallel_for body invoking a nested parallel_for (with default bound context) inside a try-block.
-/** Since exception(s) thrown from the nested parallel_for are handled by the caller
+//! Uses parallel_for body invoking an inner parallel_for (with default bound context) inside a try-block.
+/** Since exception(s) thrown from the inner parallel_for are handled by the caller
     in this test, they do not affect neither other tasks of the the root parallel_for
-    nor sibling nested algorithms. **/
+    nor sibling inner algorithms. **/
 void Test4 () {
     ResetGlobals( true, true );
-    intptr_t  nestedCalls = NumSubranges(NESTED_RANGE, NESTED_GRAIN),
-            nestingCalls = NumSubranges(NESTING_RANGE, NESTING_GRAIN),
-            maxExecuted = nestingCalls * nestedCalls;
+    intptr_t  innerCalls = NumSubranges(INNER_RANGE, INNER_GRAIN),
+            outerCalls = NumSubranges(OUTER_RANGE, OUTER_GRAIN),
+            maxExecuted = outerCalls * innerCalls;
     TRY();
-        tbb::parallel_for( range_type(0, NESTING_RANGE, NESTING_GRAIN), NestingParForExceptionSafeBody() );
+        tbb::parallel_for( range_type(0, OUTER_RANGE, OUTER_GRAIN), OuterParForExceptionSafeBody() );
     CATCH();
-    ASSERT (!exceptionCaught, "All exceptions must have been handled in the parallel_for body");
+    ASSERT(!exceptionCaught, "All exceptions must have been handled in the parallel_for body");
     intptr_t  minExecuted = 0;
     if ( g_SolitaryException ) {
-        minExecuted = maxExecuted - nestedCalls;
+        minExecuted = maxExecuted - innerCalls;
         ASSERT (g_Exceptions == 1, "No exception registered");
         ASSERT (g_CurExecuted >= minExecuted, "Too few tasks executed");
         ASSERT (g_CurExecuted <= minExecuted + g_NumThreads, "Too many tasks survived exception");
     }
     else {
         minExecuted = g_Exceptions;
-        ASSERT (g_Exceptions > 1 && g_Exceptions <= nestingCalls, "Unexpected actual number of exceptions");
+        ASSERT (g_Exceptions > 1 && g_Exceptions <= outerCalls, "Unexpected actual number of exceptions");
         ASSERT (g_CurExecuted >= minExecuted, "Too many executed tasks reported");
         ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived multiple exceptions");
-        ASSERT (g_CurExecuted <= nestingCalls * (1 + g_NumThreads), "Too many tasks survived exception");
+        ASSERT (g_CurExecuted <= outerCalls * (1 + g_NumThreads), "Too many tasks survived exception");
     }
 } // void Test4 ()
 
@@ -327,14 +332,18 @@ void TestCancelation2 () {
 // Regression test based on the contribution by the author of the following forum post:
 // http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/30254959.aspx
 
-#define LOOP_COUNT 16
-#define MAX_NESTING 3
-#define REDUCE_RANGE 1024
-#define REDUCE_GRAIN 256
-
 class Worker {
+    static const int max_nesting = 3;
+    static const int reduce_range = 1024;
+    static const int reduce_grain = 256;
 public:
-    void DoWork (int & result, int nest);
+    int DoWork (int level);
+    int Validate (int start_level) {
+        int expected = 1; // identity for multiplication
+        for(int i=start_level+1; i<max_nesting; ++i)
+             expected *= reduce_range;
+        return expected;
+    }
 };
 
 class RecursiveParReduceBodyWithSharedWorker {
@@ -347,17 +356,15 @@ public:
         , m_NestingLevel(src.m_NestingLevel)
         , m_Result(0)
     {}
-    RecursiveParReduceBodyWithSharedWorker ( Worker *w, int nesting )
+    RecursiveParReduceBodyWithSharedWorker ( Worker *w, int outer )
         : m_SharedWorker(w)
-        , m_NestingLevel(nesting)
+        , m_NestingLevel(outer)
         , m_Result(0)
     {}
 
     void operator() ( const tbb::blocked_range<size_t>& r ) {
         for (size_t i = r.begin (); i != r.end (); ++i) {
-            int subtotal = 0;
-            m_SharedWorker->DoWork (subtotal, m_NestingLevel);
-            m_Result += subtotal;
+            m_Result += m_SharedWorker->DoWork (m_NestingLevel);
         }
     }
     void join (const RecursiveParReduceBodyWithSharedWorker & x) {
@@ -366,23 +373,23 @@ public:
     int result () { return m_Result; }
 };
 
-void Worker::DoWork ( int& result, int nest ) {
-    ++nest;
-    if ( nest < MAX_NESTING ) {
-        RecursiveParReduceBodyWithSharedWorker rt (this, nest);
-        tbb::parallel_reduce (tbb::blocked_range<size_t>(0, REDUCE_RANGE, REDUCE_GRAIN), rt);
-        result = rt.result ();
+int Worker::DoWork ( int level ) {
+    ++level;
+    if ( level < max_nesting ) {
+        RecursiveParReduceBodyWithSharedWorker rt (this, level);
+        tbb::parallel_reduce (tbb::blocked_range<size_t>(0, reduce_range, reduce_grain), rt);
+        return rt.result();
     }
     else
-        ++result;
+        return 1;
 }
 
 //! Regression test for hanging that occurred with the first version of cancellation propagation
 void TestCancelation3 () {
     Worker w;
-    int result = 0;
-    w.DoWork (result, 0);
-    ASSERT ( result == 1048576, "Wrong calculation result");
+    int result   = w.DoWork (0);
+    int expected = w.Validate(0);
+    ASSERT ( result == expected, "Wrong calculation result");
 }
 
 void RunParForAndReduceTests () {
@@ -407,8 +414,8 @@ void RunParForAndReduceTests () {
 
 #define ITER_RANGE          1000
 #define ITEMS_TO_FEED       50
-#define NESTED_ITER_RANGE   100
-#define NESTING_ITER_RANGE  50
+#define INNER_ITER_RANGE   100
+#define OUTER_ITER_RANGE  50
 
 #define PREPARE_RANGE(Iterator, rangeSize)  \
     size_t test_vector[rangeSize + 1]; \
@@ -418,8 +425,8 @@ void RunParForAndReduceTests () {
     Iterator end(&test_vector[rangeSize])
 
 void Feed ( tbb::parallel_do_feeder<size_t> &feeder, size_t val ) {
-    if (g_FedTasksCount < ITEMS_TO_FEED) { 
-        ++g_FedTasksCount; 
+    if (g_FedTasksCount < ITEMS_TO_FEED) {
+        ++g_FedTasksCount;
         feeder.add(val);
     }
 }
@@ -465,37 +472,37 @@ void Test1_parallel_do () {
 } // void Test1_parallel_do ()
 
 template <class Iterator>
-class NestingParDoBody {
+class OuterParDoBody {
 public:
     void operator()( size_t& /*value*/ ) const {
         ++g_CurExecuted;
-        PREPARE_RANGE(Iterator, NESTED_ITER_RANGE);
+        PREPARE_RANGE(Iterator, INNER_ITER_RANGE);
         tbb::parallel_do<Iterator, SimpleParDoBody>(begin, end, SimpleParDoBody());
     }
 };
 
 template <class Iterator>
-class NestingParDoBodyWithFeeder : NestingParDoBody<Iterator> {
+class OuterParDoBodyWithFeeder : OuterParDoBody<Iterator> {
 public:
     void operator()( size_t& value, tbb::parallel_do_feeder<size_t>& feeder ) const {
         Feed(feeder, 0);
-        NestingParDoBody<Iterator>::operator()(value);
+        OuterParDoBody<Iterator>::operator()(value);
     }
 };
 
-//! Uses parallel_do body containing a nested parallel_do with the default context not wrapped by a try-block.
-/** Nested algorithms are spawned inside the new bound context by default. Since
-    exceptions thrown from the nested parallel_do are not handled by the caller
-    (nesting parallel_do body) in this test, they will cancel all the sibling nested
+//! Uses parallel_do body containing an inner parallel_do with the default context not wrapped by a try-block.
+/** Inner algorithms are spawned inside the new bound context by default. Since
+    exceptions thrown from the inner parallel_do are not handled by the caller
+    (outer parallel_do body) in this test, they will cancel all the sibling inner
     algorithms. **/
-template <class Iterator, class nesting_body>
+template <class Iterator, class outer_body>
 void Test2_parallel_do () {
     ResetGlobals();
     PREPARE_RANGE(Iterator, ITER_RANGE);
     TRY();
-        tbb::parallel_do<Iterator, nesting_body >(begin, end, nesting_body() );
+        tbb::parallel_do<Iterator, outer_body >(begin, end, outer_body() );
     CATCH_AND_ASSERT();
-    ASSERT (exceptionCaught, "No exception thrown from the nesting parallel_for");
+    ASSERT (exceptionCaught, "No exception thrown from the outer parallel_for");
     //if ( g_SolitaryException )
         ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
     ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
@@ -503,42 +510,42 @@ void Test2_parallel_do () {
         ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
 } // void Test2_parallel_do ()
 
-template <class Iterator> 
-class NestingParDoBodyWithIsolatedCtx {
+template <class Iterator>
+class OuterParDoBodyWithIsolatedCtx {
 public:
     void operator()( size_t& /*value*/ ) const {
         tbb::task_group_context ctx(tbb::task_group_context::isolated);
         ++g_CurExecuted;
-        PREPARE_RANGE(Iterator, NESTED_ITER_RANGE);
+        PREPARE_RANGE(Iterator, INNER_ITER_RANGE);
         tbb::parallel_do<Iterator, SimpleParDoBody>(begin, end, SimpleParDoBody(), ctx);
     }
 };
 
-template <class Iterator> 
-class NestingParDoBodyWithIsolatedCtxWithFeeder : NestingParDoBodyWithIsolatedCtx<Iterator> {
+template <class Iterator>
+class OuterParDoBodyWithIsolatedCtxWithFeeder : OuterParDoBodyWithIsolatedCtx<Iterator> {
 public:
     void operator()( size_t& value, tbb::parallel_do_feeder<size_t> &feeder ) const {
         Feed(feeder, 0);
-        NestingParDoBodyWithIsolatedCtx<Iterator>::operator()(value);
+        OuterParDoBodyWithIsolatedCtx<Iterator>::operator()(value);
     }
 };
 
-//! Uses parallel_do body invoking a nested parallel_do with an isolated context without a try-block.
-/** Even though exceptions thrown from the nested parallel_do are not handled
-    by the caller in this test, they will not affect sibling nested algorithms
+//! Uses parallel_do body invoking an inner parallel_do with an isolated context without a try-block.
+/** Even though exceptions thrown from the inner parallel_do are not handled
+    by the caller in this test, they will not affect sibling inner algorithms
     already running because of the isolated contexts. However because the first
-    exception cancels the root parallel_do only the first g_NumThreads subranges
-    will be processed (which launch nested parallel_dos) **/
-template <class Iterator, class nesting_body>
+    exception cancels the root parallel_do, only the first g_NumThreads subranges
+    will be processed (which launch inner parallel_dos) **/
+template <class Iterator, class outer_body>
 void Test3_parallel_do () {
     ResetGlobals();
-    PREPARE_RANGE(Iterator, NESTING_ITER_RANGE);
-    intptr_t nestedCalls = NESTED_ITER_RANGE,
-             minExecuted = (g_NumThreads - 1) * nestedCalls;
+    PREPARE_RANGE(Iterator, OUTER_ITER_RANGE);
+    intptr_t innerCalls = INNER_ITER_RANGE,
+             minExecuted = (g_NumThreads - 1) * innerCalls;
     TRY();
-        tbb::parallel_do<Iterator, nesting_body >(begin, end, nesting_body());
+        tbb::parallel_do<Iterator, outer_body >(begin, end, outer_body());
     CATCH_AND_ASSERT();
-    ASSERT (exceptionCaught, "No exception thrown from the nesting parallel_for");
+    ASSERT (exceptionCaught, "No exception thrown from the outer parallel_for");
     if ( g_SolitaryException ) {
         ASSERT (g_CurExecuted > minExecuted, "Too few tasks survived exception");
         ASSERT (g_CurExecuted <= minExecuted + (g_ExecutedAtCatch + g_NumThreads), "Too many tasks survived exception");
@@ -549,11 +556,11 @@ void Test3_parallel_do () {
 } // void Test3_parallel_do ()
 
 template <class Iterator>
-class NestingParDoWithEhBody {
+class OuterParDoWithEhBody {
 public:
     void operator()( size_t& /*value*/ ) const {
         tbb::task_group_context ctx(tbb::task_group_context::isolated);
-        PREPARE_RANGE(Iterator, NESTED_ITER_RANGE);
+        PREPARE_RANGE(Iterator, INNER_ITER_RANGE);
         TRY();
             tbb::parallel_do<Iterator, SimpleParDoBody>(begin, end, SimpleParDoBody(), ctx);
         CATCH();
@@ -561,42 +568,42 @@ public:
 };
 
 template <class Iterator>
-class NestingParDoWithEhBodyWithFeeder : NoAssign, NestingParDoWithEhBody<Iterator> {
+class OuterParDoWithEhBodyWithFeeder : NoAssign, OuterParDoWithEhBody<Iterator> {
 public:
     void operator()( size_t &value, tbb::parallel_do_feeder<size_t> &feeder ) const {
         Feed(feeder, 0);
-        NestingParDoWithEhBody<Iterator>::operator()(value);
+        OuterParDoWithEhBody<Iterator>::operator()(value);
     }
 };
 
-//! Uses parallel_for body invoking a nested parallel_for (with default bound context) inside a try-block.
-/** Since exception(s) thrown from the nested parallel_for are handled by the caller
+//! Uses parallel_for body invoking an inner parallel_for (with default bound context) inside a try-block.
+/** Since exception(s) thrown from the inner parallel_for are handled by the caller
     in this test, they do not affect neither other tasks of the the root parallel_for
-    nor sibling nested algorithms. **/
-template <class Iterator, class nesting_body_with_eh>
+    nor sibling inner algorithms. **/
+template <class Iterator, class outer_body_with_eh>
 void Test4_parallel_do () {
     ResetGlobals( true, true );
-    PREPARE_RANGE(Iterator, NESTING_ITER_RANGE);
+    PREPARE_RANGE(Iterator, OUTER_ITER_RANGE);
     TRY();
-        tbb::parallel_do<Iterator, nesting_body_with_eh>(begin, end, nesting_body_with_eh());
+        tbb::parallel_do<Iterator, outer_body_with_eh>(begin, end, outer_body_with_eh());
     CATCH();
     ASSERT (!exceptionCaught, "All exceptions must have been handled in the parallel_do body");
-    intptr_t nestedCalls = NESTED_ITER_RANGE,
-             nestingCalls = NESTING_ITER_RANGE + g_FedTasksCount,
-             maxExecuted = nestingCalls * nestedCalls,
+    intptr_t innerCalls = INNER_ITER_RANGE,
+             outerCalls = OUTER_ITER_RANGE + g_FedTasksCount,
+             maxExecuted = outerCalls * innerCalls,
              minExecuted = 0;
     if ( g_SolitaryException ) {
-        minExecuted = maxExecuted - nestedCalls;
+        minExecuted = maxExecuted - innerCalls;
         ASSERT (g_Exceptions == 1, "No exception registered");
         ASSERT (g_CurExecuted >= minExecuted, "Too few tasks executed");
         ASSERT (g_CurExecuted <= minExecuted + g_NumThreads, "Too many tasks survived exception");
     }
     else {
         minExecuted = g_Exceptions;
-        ASSERT (g_Exceptions > 1 && g_Exceptions <= nestingCalls, "Unexpected actual number of exceptions");
+        ASSERT (g_Exceptions > 1 && g_Exceptions <= outerCalls, "Unexpected actual number of exceptions");
         ASSERT (g_CurExecuted >= minExecuted, "Too many executed tasks reported");
-        ASSERT (g_CurExecuted < g_ExecutedAtCatch + g_NumThreads + nestingCalls, "Too many tasks survived multiple exceptions");
-        ASSERT (g_CurExecuted <= nestingCalls * (1 + g_NumThreads), "Too many tasks survived exception");
+        ASSERT (g_CurExecuted < g_ExecutedAtCatch + g_NumThreads + outerCalls, "Too many tasks survived multiple exceptions");
+        ASSERT (g_CurExecuted <= outerCalls * (1 + g_NumThreads), "Too many tasks survived exception");
     }
 } // void Test4_parallel_do ()
 
@@ -647,7 +654,7 @@ class ParDoWorkerTask : public tbb::task {
     tbb::task_group_context &my_ctx;
 
     tbb::task* execute () {
-        PREPARE_RANGE(Iterator, NESTED_ITER_RANGE);
+        PREPARE_RANGE(Iterator, INNER_ITER_RANGE);
         tbb::parallel_do<Iterator, B>( begin, end, B(), my_ctx );
         return NULL;
     }
@@ -720,9 +727,9 @@ void RunParDoTests() {
     g_Master = Harness::CurrentTid();
 #if TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN
     RunWithSimpleBody(Test1_parallel_do, SimpleParDoBody);
-    RunWithTemplatedBody(Test2_parallel_do, NestingParDoBody);
-    RunWithTemplatedBody(Test3_parallel_do, NestingParDoBodyWithIsolatedCtx);
-    RunWithTemplatedBody(Test4_parallel_do, NestingParDoWithEhBody);
+    RunWithTemplatedBody(Test2_parallel_do, OuterParDoBody);
+    RunWithTemplatedBody(Test3_parallel_do, OuterParDoBodyWithIsolatedCtx);
+    RunWithTemplatedBody(Test4_parallel_do, OuterParDoWithEhBody);
     Test5_parallel_do<Harness::ForwardIterator<size_t> >();
     Test5_parallel_do<Harness::RandomIterator<size_t> >();
 #endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */
@@ -801,7 +808,7 @@ public:
 void Test0_pipeline () {
     ResetGlobals();
     // Run test when serial filter is the first non-input filter
-    InputFilter inputFilter;
+    InputFilter inputFilter;  //Emits NUM_ITEMS items
     NoThrowFilter filter1(NoThrowFilter::addition, 99, false);
     NoThrowFilter filter2(NoThrowFilter::subtraction, 90, true);
     NoThrowFilter filter3(NoThrowFilter::multiplication, 5, false);
@@ -849,7 +856,7 @@ struct FilterSet {
     {}
 }; // struct FilterSet
 
-FilterSet serial_parallel( tbb::filter::serial, tbb::filter::parallel, false, true );
+FilterSet serial_parallel( tbb::filter::serial, tbb::filter::parallel, /*throw1*/false, /*throw2*/true );
 
 template<typename InFilter, typename Filter>
 class CustomPipeline : protected tbb::pipeline {
@@ -892,9 +899,9 @@ void Test1_pipeline ( const FilterSet& filters ) {
 } // void Test1_pipeline ()
 
 // Filter with nesting
-class NestingFilter : public tbb::filter {
+class OuterFilter : public tbb::filter {
 public:
-    NestingFilter (tbb::filter::mode _mode, bool ) : filter (_mode) {}
+    OuterFilter (tbb::filter::mode _mode, bool ) : filter (_mode) {}
 
     void* operator()(void* item) {
         ++g_CurExecuted;
@@ -902,54 +909,56 @@ public:
         testPipeline.run();
         return item;
     }
-}; // class NestingFilter
+}; // class OuterFilter
 
-//! Uses pipeline containing a nested pipeline with the default context not wrapped by a try-block.
-/** Nested algorithms are spawned inside the new bound context by default. Since
-    exceptions thrown from the nested pipeline are not handled by the caller
-    (nesting pipeline body) in this test, they will cancel all the sibling nested
+//! Uses pipeline containing an inner pipeline with the default context not wrapped by a try-block.
+/** Inner algorithms are spawned inside the new bound context by default. Since
+    exceptions thrown from the inner pipeline are not handled by the caller
+    (outer pipeline body) in this test, they will cancel all the sibling inner
     algorithms. **/
 void Test2_pipeline ( const FilterSet& filters ) {
     ResetGlobals();
-    CustomPipeline<InputFilter, NestingFilter> testPipeline(filters);
+    CustomPipeline<InputFilter, OuterFilter> testPipeline(filters);
     TRY();
         testPipeline.run();
     CATCH_AND_ASSERT();
-    ASSERT (exceptionCaught, "No exception thrown from the nesting pipeline");
+    ASSERT (exceptionCaught, "No exception thrown from the outer pipeline");
     ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
     ASSERT (g_Exceptions == 1, "No try_blocks in any body expected in this test");
     if ( !g_SolitaryException )
         ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
 } // void Test2_pipeline ()
 
-class NestingFilterWithIsolatedCtx : public tbb::filter {
+//! creates isolated inner pipeline and runs it.
+class OuterFilterWithIsolatedCtx : public tbb::filter {
 public:
-    NestingFilterWithIsolatedCtx(tbb::filter::mode m, bool ) : filter(m) {}
+    OuterFilterWithIsolatedCtx(tbb::filter::mode m, bool ) : filter(m) {}
 
     void* operator()(void* item) {
         ++g_CurExecuted;
         tbb::task_group_context ctx(tbb::task_group_context::isolated);
+        // create inner pipeline with serial input, parallel output filter, second filter throws
         SimplePipeline testPipeline(serial_parallel);
         testPipeline.run(ctx);
         return item;
     }
-}; // class NestingFilterWithIsolatedCtx
+}; // class OuterFilterWithIsolatedCtx
 
-//! Uses pipeline invoking a nested pipeline with an isolated context without a try-block.
-/** Even though exceptions thrown from the nested pipeline are not handled
-    by the caller in this test, they will not affect sibling nested algorithms
+//! Uses pipeline invoking an inner pipeline with an isolated context without a try-block.
+/** Even though exceptions thrown from the inner pipeline are not handled
+    by the caller in this test, they will not affect sibling inner algorithms
     already running because of the isolated contexts. However because the first
     exception cancels the root parallel_do only the first g_NumThreads subranges
-    will be processed (which launch nested pipelines) **/
+    will be processed (which launch inner pipelines) **/
 void Test3_pipeline ( const FilterSet& filters ) {
     ResetGlobals();
-    intptr_t nestedCalls = 100,
-             minExecuted = (g_NumThreads - 1) * nestedCalls;
-    CustomPipeline<InputFilter, NestingFilterWithIsolatedCtx> testPipeline(filters);
+    intptr_t innerCalls = NUM_ITEMS,
+             minExecuted = (g_NumThreads - 1) * innerCalls;
+    CustomPipeline<InputFilter, OuterFilterWithIsolatedCtx> testPipeline(filters);
     TRY();
         testPipeline.run();
     CATCH_AND_ASSERT();
-    ASSERT (exceptionCaught, "No exception thrown from the nesting parallel_for");
+    ASSERT (exceptionCaught, "No exception thrown from the outer parallel_for");
     if ( g_SolitaryException ) {
         ASSERT (g_CurExecuted > minExecuted, "Too few tasks survived exception");
         ASSERT (g_CurExecuted <= minExecuted + (g_ExecutedAtCatch + g_NumThreads), "Too many tasks survived exception");
@@ -959,9 +968,9 @@ void Test3_pipeline ( const FilterSet& filters ) {
         ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived exception");
 } // void Test3_pipeline ()
 
-class NestingFilterWithEhBody : public tbb::filter {
+class OuterFilterWithEhBody : public tbb::filter {
 public:
-    NestingFilterWithEhBody(tbb::filter::mode m, bool ) : filter(m) {}
+    OuterFilterWithEhBody(tbb::filter::mode m, bool ) : filter(m) {}
 
     void* operator()(void* item) {
         tbb::task_group_context ctx(tbb::task_group_context::isolated);
@@ -971,12 +980,12 @@ public:
         CATCH();
         return item;
     }
-}; // class NestingFilterWithEhBody
+}; // class OuterFilterWithEhBody
 
-//! Uses pipeline body invoking a nested pipeline (with default bound context) inside a try-block.
-/** Since exception(s) thrown from the nested pipeline are handled by the caller
-    in this test, they do not affect neither other tasks of the the root pipeline
-    nor sibling nested algorithms. **/
+//! Uses pipeline body invoking an inner pipeline (with default bound context) inside a try-block.
+/** Since exception(s) thrown from the inner pipeline are handled by the caller
+    in this test, they do not affect other tasks of the the root pipeline
+    nor sibling inner algorithms. **/
 void Test4_pipeline ( const FilterSet& filters ) {
 #if __GNUC__ && !__INTEL_COMPILER
     if ( strncmp(__VERSION__, "4.1.0", 5) == 0 ) {
@@ -985,23 +994,23 @@ void Test4_pipeline ( const FilterSet& filters ) {
     }
 #endif
     ResetGlobals( true, true );
-    intptr_t nestedCalls = NUM_ITEMS + 1,
-             nestingCalls = 2 * (NUM_ITEMS + 1),
-             maxExecuted = nestingCalls * nestedCalls;
-    CustomPipeline<InputFilter, NestingFilterWithEhBody> testPipeline(filters);
+    intptr_t innerCalls = NUM_ITEMS + 1,
+             outerCalls = 2 * (NUM_ITEMS + 1),
+             maxExecuted = outerCalls * innerCalls;  // the number of invocations of the inner pipelines
+    CustomPipeline<InputFilter, OuterFilterWithEhBody> testPipeline(filters);
     TRY();
         testPipeline.run();
     CATCH_AND_ASSERT();
     ASSERT (!exceptionCaught, "All exceptions must have been handled in the parallel_do body");
     intptr_t  minExecuted = 0;
     if ( g_SolitaryException ) {
-        minExecuted = maxExecuted - nestedCalls;
+        minExecuted = maxExecuted - innerCalls;  // one throwing inner pipeline
         ASSERT (g_Exceptions != 0, "No exception registered");
         ASSERT (g_CurExecuted <= minExecuted + g_NumThreads, "Too many tasks survived exception");
     }
     else {
         minExecuted = g_Exceptions;
-        ASSERT (g_Exceptions > 1 && g_Exceptions <= nestingCalls, "Unexpected actual number of exceptions");
+        ASSERT (g_Exceptions > 1 && g_Exceptions <= outerCalls, "Unexpected actual number of exceptions");
         ASSERT (g_CurExecuted >= minExecuted, "Too many executed tasks reported");
         ASSERT (g_CurExecuted <= g_ExecutedAtCatch + g_NumThreads, "Too many tasks survived multiple exceptions");
     }
@@ -1019,7 +1028,7 @@ class FinalizationBaseFilter : public tbb::filter {
 public:
     FinalizationBaseFilter ( tbb::filter::mode m ) : filter(m) {}
 
-    // Deletes buffers if exception occured
+    // Deletes buffers if exception occurred
     virtual void finalize( void* item ) {
         size_t* m_Item = (size_t*)item;
         delete[] m_Item;
@@ -1118,7 +1127,7 @@ public:
     }
 }; // class FilterToCancel
 
-template <class Filter_to_cancel> 
+template <class Filter_to_cancel>
 class PipelineLauncherTask : public tbb::task {
     tbb::task_group_context &my_ctx;
 public:
diff --git a/src/test/test_eh_flow_graph.cpp b/src/test/test_eh_flow_graph.cpp
new file mode 100644
index 0000000..7055319
--- /dev/null
+++ b/src/test/test_eh_flow_graph.cpp
@@ -0,0 +1,113 @@
+/*
+    Copyright 2005-2012 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 "harness.h"
+
+#if TBB_USE_EXCEPTIONS
+#include "tbb/flow_graph.h"
+#include "tbb/task_scheduler_init.h"
+#include <iostream>
+#include <vector>
+#include "harness_assert.h"
+
+tbb::atomic<unsigned> nExceptions;
+
+class Foo {
+private:
+    // std::vector<int>& m_vec;
+    std::vector<int>* m_vec;
+public:
+    Foo(std::vector<int>& vec) : m_vec(&vec) { }
+    void operator() (tbb::flow::continue_msg) const {
+        ++nExceptions;
+        m_vec->at(m_vec->size()); // Will throw out_of_range exception
+        ASSERT(false, "Exception not thrown by invalid access");
+    }
+};
+
+// test from user ahelwer: http://software.intel.com/en-us/forums/showthread.php?t=103786 
+// exception thrown in graph node, not caught in wait_for_all()
+void
+test_flow_graph_exception0() {
+    // Initializes body
+    std::vector<int> vec;
+    vec.push_back(0);
+    Foo f(vec);
+    nExceptions = 0;
+
+    // Construct graph and nodes
+    tbb::flow::graph g;
+    tbb::flow::broadcast_node<tbb::flow::continue_msg> start(g);
+    tbb::flow::continue_node<tbb::flow::continue_msg> fooNode(g, f); 
+
+    // Construct edge
+    tbb::flow::make_edge(start, fooNode);
+
+    // Execute graph
+    ASSERT(!g.exception_thrown(), "exception_thrown flag already set");
+    ASSERT(!g.is_cancelled(), "canceled flag already set");
+    try {
+        start.try_put(tbb::flow::continue_msg());
+        g.wait_for_all();
+        ASSERT(false, "Exception not thrown");
+    }
+    catch(std::out_of_range& ex) {
+        REMARK("Exception: %s\n", ex.what());
+    }
+    catch(...) {
+        REMARK("Unknown exception caught\n");
+    }
+    ASSERT(g.exception_thrown(), "Exception not intercepted");
+    // if exception set, cancellation also set.
+    ASSERT(g.is_cancelled(), "Exception cancellation not signaled");
+    // in case we got an exception
+    try {
+        g.wait_for_all();  // context still signalled canceled, my_exception still set.
+    }
+    catch(...) {
+        ASSERT(false, "Second exception thrown but no task executing");
+    }
+    ASSERT(!g.exception_thrown(), "exception_thrown flag not reset");
+    ASSERT(!g.is_cancelled(), "canceled flag not reset");
+}
+#endif // TBB_USE_EXCEPTIONS
+
+#if TBB_USE_EXCEPTIONS
+int TestMain() {
+    for(int nThread=MinThread; nThread<= MaxThread; ++nThread) {
+        tbb::task_scheduler_init init(nThread); 
+        test_flow_graph_exception0();
+    }
+    return Harness::Done;
+}
+#else  // !TBB_USE_EXCEPTION
+int TestMain() {
+    return Harness::Skipped;
+}
+#endif
+
diff --git a/src/test/test_eh_tasks.cpp b/src/test/test_eh_tasks.cpp
index abd0d5d..0a6be12 100644
--- a/src/test/test_eh_tasks.cpp
+++ b/src/test/test_eh_tasks.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -718,8 +718,8 @@ public:
             tbb::internal::context_list_node_t &node = s_Contexts[i]->my_node;
             ASSERT( !node.my_next && !node.my_prev, "Destroyed context was written to during context chain update" );
         }
-        delete s_Contexts;
-        delete s_Buffer;
+        delete []s_Contexts;
+        delete []s_Buffer;
     }
 
     void operator() ( int id ) const {
diff --git a/src/test/test_enumerable_thread_specific.cpp b/src/test/test_enumerable_thread_specific.cpp
index 0d24e24..6ae5a00 100644
--- a/src/test/test_enumerable_thread_specific.cpp
+++ b/src/test/test_enumerable_thread_specific.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_fast_random.cpp b/src/test/test_fast_random.cpp
index 6d53c7f..6b7d023 100644
--- a/src/test/test_fast_random.cpp
+++ b/src/test/test_fast_random.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,8 +39,6 @@
 
 #undef HARNESS_USE_PROXY
 #include "harness.h"
-#undef __TBB_DYNAMIC_LOAD_ENABLED
-#include "harness_tbb_independence.h"
 
 int TestMain () {
     return Harness::Skipped;
diff --git a/src/test/test_flow_graph.cpp b/src/test/test_flow_graph.cpp
index 882b5db..1dd44c0 100644
--- a/src/test/test_flow_graph.cpp
+++ b/src/test/test_flow_graph.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -27,6 +27,7 @@
 */
 
 #include "harness_graph.h"
+#include "harness_barrier.h"
 #include "tbb/task_scheduler_init.h"
 
 const int T = 4;
@@ -125,6 +126,94 @@ static void test_run() {
     }
 }
 
+// Encapsulate object we want to store in vector (because contained type must have
+// copy constructor and assignment operator
+class my_int_buffer {
+    tbb::flow::buffer_node<int> *b;
+    tbb::flow::graph& my_graph;
+public:
+    my_int_buffer(tbb::flow::graph &g) : my_graph(g) { b = new tbb::flow::buffer_node<int>(my_graph); }
+    my_int_buffer(const my_int_buffer& other) : my_graph(other.my_graph) {
+        b = new tbb::flow::buffer_node<int>(my_graph);
+    }
+    ~my_int_buffer() { delete b; }
+    my_int_buffer& operator=(const my_int_buffer& /*other*/) {
+        return *this;
+    }
+};
+
+// test the graph iterator, delete nodes from graph, test again
+void test_iterator() {
+   tbb::flow::graph g;
+   my_int_buffer a_buffer(g);
+   my_int_buffer b_buffer(g);
+   my_int_buffer c_buffer(g);
+   my_int_buffer *d_buffer = new my_int_buffer(g);
+   my_int_buffer e_buffer(g);
+   std::vector< my_int_buffer > my_buffer_vector(10, c_buffer);
+
+   int count = 0;
+   for (tbb::flow::graph::iterator it = g.begin(); it != g.end(); ++it) {
+       count++;
+   }
+   ASSERT(count==15, "error in iterator count");
+
+   delete d_buffer;
+
+   count = 0;
+   for (tbb::flow::graph::iterator it = g.begin(); it != g.end(); ++it) {
+       count++;
+   }
+   ASSERT(count==14, "error in iterator count");
+
+   my_buffer_vector.clear();
+
+   count = 0;
+   for (tbb::flow::graph::iterator it = g.begin(); it != g.end(); ++it) {
+       count++;
+   }
+   ASSERT(count==4, "error in iterator count");
+}
+
+class AddRemoveBody : NoAssign {
+    tbb::flow::graph& g;
+    int nThreads;
+    Harness::SpinBarrier &barrier;
+public:
+    AddRemoveBody(int nthr, Harness::SpinBarrier &barrier_, tbb::flow::graph& _g) : 
+        g(_g), nThreads(nthr), barrier(barrier_) 
+    {}
+    void operator()(const int /*threadID*/) const {
+        my_int_buffer b(g);
+        {
+            std::vector<my_int_buffer> my_buffer_vector(100, b);
+            barrier.wait();  // wait until all nodes are created
+            // now test that the proper number of nodes were created
+            int count = 0;
+            for (tbb::flow::graph::iterator it = g.begin(); it != g.end(); ++it) {
+                count++;
+            }
+            ASSERT(count==101*nThreads, "error in iterator count");
+            barrier.wait();  // wait until all threads are done counting
+        } // all nodes but for the initial node on this thread are deleted
+        barrier.wait(); // wait until all threads have deleted all nodes in their vectors
+        // now test that all the nodes were deleted except for the initial node
+        int count = 0;
+        for (tbb::flow::graph::iterator it = g.begin(); it != g.end(); ++it) {
+            count++;
+        }
+        ASSERT(count==nThreads, "error in iterator count"); 
+        barrier.wait();  // wait until all threads are done counting
+    } // initial node gets deleted
+};
+
+void test_parallel(int nThreads) {
+    tbb::flow::graph g;
+    Harness::SpinBarrier barrier(nThreads);
+    AddRemoveBody body(nThreads, barrier, g);
+    NativeParallelFor(nThreads, body);
+}
+
 int TestMain() { 
     current_executors = 0;
     if( MinThread<1 ) {
@@ -135,6 +224,8 @@ int TestMain() {
        tbb::task_scheduler_init init(p);
        test_wait_count();
        test_run();
+       test_iterator();
+       test_parallel(p);
    }
    return Harness::Done;
 }
diff --git a/src/test/test_fp.cpp b/src/test/test_fp.cpp
index 7ce48a5..ca230a6 100644
--- a/src/test/test_fp.cpp
+++ b/src/test/test_fp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_function_node.cpp b/src/test/test_function_node.cpp
index aa9483a..33f29e1 100644
--- a/src/test/test_function_node.cpp
+++ b/src/test/test_function_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -396,7 +396,7 @@ void test_function_node_with_continue_msg_as_input() {
     // If this function terminates, then this test is successful
     tbb::flow::graph g;
 
-    tbb::flow::broadcast_node<tbb::flow::continue_msg> Start;
+    tbb::flow::broadcast_node<tbb::flow::continue_msg> Start(g);
 
     tbb::flow::function_node<tbb::flow::continue_msg, int, tbb::flow::rejecting> FN1( g, tbb::flow::serial, continue_msg_to_int(42));
     tbb::flow::function_node<tbb::flow::continue_msg, int, tbb::flow::rejecting> FN2( g, tbb::flow::serial, continue_msg_to_int(43));
diff --git a/src/test/test_halt.cpp b/src/test/test_halt.cpp
index be5b37e..69fabf5 100644
--- a/src/test/test_halt.cpp
+++ b/src/test/test_halt.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_handle_perror.cpp b/src/test/test_handle_perror.cpp
index 90f6663..6f86fa5 100644
--- a/src/test/test_handle_perror.cpp
+++ b/src/test/test_handle_perror.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_hw_concurrency.cpp b/src/test/test_hw_concurrency.cpp
index fc0a7e2..4e971b9 100644
--- a/src/test/test_hw_concurrency.cpp
+++ b/src/test/test_hw_concurrency.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -47,6 +47,13 @@
 
 #include "tbb/task_scheduler_init.h"
 #include "tbb/tbb_thread.h"
+#include "tbb/enumerable_thread_specific.h"
+
+// The declaration of a global ETS object is needed to check that
+// it does not initialize the task scheduler, and in particular
+// does not set the default thread number. TODO: add other objects
+// that should not initialize the scheduler.
+tbb::enumerable_thread_specific<std::size_t> ets;
 
 int TestMain () {
 #if _WIN32||_WIN64 || __linux__ || __FreeBSD_version >= 701000
@@ -64,7 +71,11 @@ int TestMain () {
 #if __linux__
     int maxProcs = get_nprocs();
     typedef cpu_set_t mask_t;
+#if __TBB_MAIN_THREAD_AFFINITY_BROKEN
+    #define setaffinity(mask) sched_setaffinity(0 /*get the mask of the calling thread*/, sizeof(mask_t), &mask)
+#else
     #define setaffinity(mask) sched_setaffinity(getpid(), sizeof(mask_t), &mask)
+#endif
 #else /* __FreeBSD__ */
     int maxProcs = sysconf(_SC_NPROCESSORS_ONLN);
     typedef cpuset_t mask_t;
diff --git a/src/test/test_inits_loop.cpp b/src/test/test_inits_loop.cpp
index 7f765da..c5a46c9 100644
--- a/src/test/test_inits_loop.cpp
+++ b/src/test/test_inits_loop.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_intrusive_list.cpp b/src/test/test_intrusive_list.cpp
index cc3c8b9..8c48fc5 100644
--- a/src/test/test_intrusive_list.cpp
+++ b/src/test/test_intrusive_list.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_ittnotify.cpp b/src/test/test_ittnotify.cpp
index 17362d0..79f4ae8 100644
--- a/src/test/test_ittnotify.cpp
+++ b/src/test/test_ittnotify.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_join_node.cpp b/src/test/test_join_node.cpp
index 5255a6c..8d1c7e2 100644
--- a/src/test/test_join_node.cpp
+++ b/src/test/test_join_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,17 +26,31 @@
     the GNU General Public License.
 */
 
+#if _MSC_VER
+// Name length is limited to avoid "decorated name length exceeded, name was truncated" warning.
+#define _VARIADIC_MAX 8
+#endif
+
 #include "harness.h"
+
+#if !__SUNPRO_CC
+
 #include "tbb/flow_graph.h"
 #include "tbb/task_scheduler_init.h"
 
-#if !__SUNPRO_CC
+// the tuple-based tests with more inputs take a long time to compile.  If changes
+// are made to the tuple implementation or any switch that controls it, the test
+// should be compiled with COMPREHENSIVE_TEST == 1 to ensure all tuple sizes are tested.
+#ifndef COMPREHENSIVE_TEST
+#define COMPREHENSIVE_TEST 0
+#endif
 
 //
 // Tests
 //
 
 const int Count = 150;
+const int Recirc_count = 1000;  // number of tuples to be generated
 const int MaxPorts = 10;
 const int MaxNSources = 5; // max # of source_nodes to register for each join_node input in parallel test
 bool outputCheck[MaxPorts][Count];  // for checking output
@@ -92,6 +106,34 @@ public:
     static const char* name() { return  "short"; }
 };
 
+// for recirculating tags, input is tuple<index,continue_msg>
+// output is index*my_mult cast to the right type
+template<typename TT>
+class recirc_func_body {
+    TT my_mult;
+public:
+    typedef std::tuple<int, tbb::flow::continue_msg> input_type;
+    recirc_func_body(TT multiplier ) : my_mult(multiplier) {}
+    recirc_func_body(const recirc_func_body &other) : my_mult(other.my_mult) { }
+    void operator=( const recirc_func_body &other) { my_mult = other.my_mult; }
+    TT operator()(const input_type &v) {
+        return TT(std::get<0>(v)) * my_mult;
+    }
+};
+
+static int input_count;  // source_nodes are serial
+static tbb::atomic<int> output_count;
+
+// emit input_count continue_msg
+class recirc_source_node_body {
+public:
+    bool operator()(tbb::flow::continue_msg &v ) {
+        --input_count;
+        v = tbb::flow::continue_msg();
+        return 0 <= input_count; 
+    }
+};
+
 // T must be arithmetic, and shouldn't wrap around for reasonable sizes of Count (which is now 150, and maxPorts is 10,
 // so the max number generated right now is 1500 or so.)  Source will generate a series of TT with value
 // (init_val + (i-1)*addend) * my_mult, where i is the i-th invocation of the body.  We are attaching addend
@@ -216,7 +258,7 @@ public:
     }
     static void destroy(JType *p) { delete p; }
 };
-
+#if __TBB_VARIADIC_MAX >= 6
 template<typename JType>
 class makeJoin<6,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -240,7 +282,9 @@ public:
     }
     static void destroy(JType *p) { delete p; }
 };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 7
 template<typename JType>
 class makeJoin<7,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -266,7 +310,9 @@ public:
     }
     static void destroy(JType *p) { delete p; }
 };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 8
 template<typename JType>
 class makeJoin<8,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -294,7 +340,9 @@ public:
     }
     static void destroy(JType *p) { delete p; }
 };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 9
 template<typename JType>
 class makeJoin<9,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -324,7 +372,9 @@ public:
     }
     static void destroy(JType *p) { delete p; }
 };
+#endif
 
+#if __TBB_VARIADIC_MAX >= 10
 template<typename JType>
 class makeJoin<10,JType,tbb::flow::tag_matching> {
     typedef typename JType::output_type TType;
@@ -356,6 +406,7 @@ public:
     }
     static void destroy(JType *p) { delete p; }
 };
+#endif
 
 // holder for source_node pointers for eventual deletion
 
@@ -365,11 +416,13 @@ template<int ELEM, typename JNT>
 class source_node_helper {
 public:
     typedef JNT join_node_type;
+    typedef tbb::flow::join_node<std::tuple<int, tbb::flow::continue_msg>, tbb::flow::reserving> input_join_type;
     typedef typename join_node_type::output_type TT;
     typedef typename std::tuple_element<ELEM-1,TT>::type IT;
     typedef typename tbb::flow::source_node<IT> my_source_node_type;
-    static void print_remark() {
-        source_node_helper<ELEM-1,JNT>::print_remark();
+    typedef typename tbb::flow::function_node<std::tuple<int,tbb::flow::continue_msg>, IT> my_recirc_function_type;
+    static void print_remark(const char * str) {
+        source_node_helper<ELEM-1,JNT>::print_remark(str);
         REMARK(", %s", name_of<IT>::name());
     }
     static void add_source_nodes(join_node_type &my_join, tbb::flow::graph &g, int nInputs) {
@@ -381,6 +434,20 @@ public:
         // add the next source_node
         source_node_helper<ELEM-1, JNT>::add_source_nodes(my_join, g, nInputs);
     }
+
+    static void add_recirc_func_nodes(join_node_type &my_join, input_join_type &my_input, tbb::flow::graph &g) {
+        my_recirc_function_type *new_node = new my_recirc_function_type(g, tbb::flow::unlimited, recirc_func_body<IT>((IT)(ELEM+1)));
+        tbb::flow::make_edge(*new_node, tbb::flow::input_port<ELEM-1>(my_join));
+        tbb::flow::make_edge(my_input, *new_node);
+        all_source_nodes[ELEM-1][0] = (void *)new_node;
+        source_node_helper<ELEM-1, JNT>::add_recirc_func_nodes(my_join, my_input, g);
+    }
+
+    static void only_check_value(const int i, const TT &v) {
+        ASSERT( std::get<ELEM-1>(v) == (IT)(i*(ELEM+1)), NULL);
+        source_node_helper<ELEM-1,JNT>::only_check_value(i, v);
+    }
+
     static void check_value(int i, TT &v, bool is_serial) {
         // the fetched value will match only if there is only one source_node.
         ASSERT(!is_serial || std::get<ELEM-1>(v) == (IT)(i*(ELEM+1)), NULL);
@@ -400,17 +467,27 @@ public:
         }
         source_node_helper<ELEM-1, JNT>::remove_source_nodes(my_join, nInputs);
     }
+
+    static void remove_recirc_func_nodes(join_node_type& my_join, input_join_type &my_input) {
+        my_recirc_function_type *fn = reinterpret_cast<my_recirc_function_type *>(all_source_nodes[ELEM-1][0]);
+        tbb::flow::remove_edge( *fn, tbb::flow::input_port<ELEM-1>(my_join) );
+        tbb::flow::remove_edge( my_input, *fn);
+        delete fn;
+        source_node_helper<ELEM-1, JNT>::remove_recirc_func_nodes(my_join,my_input);
+    }
 };
 
 template<typename JNT>
 class source_node_helper<1, JNT> {
     typedef JNT join_node_type;
+    typedef tbb::flow::join_node<std::tuple<int, tbb::flow::continue_msg>, tbb::flow::reserving> input_join_type;
     typedef typename join_node_type::output_type TT;
     typedef typename std::tuple_element<0,TT>::type IT;
     typedef typename tbb::flow::source_node<IT> my_source_node_type;
+    typedef typename tbb::flow::function_node<std::tuple<int,tbb::flow::continue_msg>, IT> my_recirc_function_type;
 public:
-    static void print_remark() {
-        REMARK("Parallel test of join_node< %s", name_of<IT>::name());
+    static void print_remark(const char * str) {
+        REMARK("%s< %s", str, name_of<IT>::name());
     }
     static void add_source_nodes(join_node_type &my_join, tbb::flow::graph &g, int nInputs) {
         for(int i=0; i < nInputs; ++i) {
@@ -419,6 +496,18 @@ public:
             all_source_nodes[0][i] = (void *)new_node;
         }
     }
+
+    static void add_recirc_func_nodes(join_node_type &my_join, input_join_type &my_input, tbb::flow::graph &g) {
+        my_recirc_function_type *new_node = new my_recirc_function_type(g, tbb::flow::unlimited, recirc_func_body<IT>((IT)(2)));
+        tbb::flow::make_edge(*new_node, tbb::flow::input_port<0>(my_join));
+        tbb::flow::make_edge(my_input, *new_node);
+        all_source_nodes[0][0] = (void *)new_node;
+    }
+
+    static void only_check_value(const int i, const TT &v) {
+        ASSERT( std::get<0>(v) == (IT)(i*2), NULL);
+    }
+
     static void check_value(int i, TT &v, bool is_serial) {
         ASSERT(!is_serial || std::get<0>(v) == (IT)(i*(2)), NULL);
         int ival = (int)std::get<0>(v);
@@ -434,6 +523,97 @@ public:
             delete dp;
         }
     }
+
+    static void remove_recirc_func_nodes(join_node_type& my_join, input_join_type &my_input) {
+        my_recirc_function_type *fn = reinterpret_cast<my_recirc_function_type *>(all_source_nodes[0][0]);
+        tbb::flow::remove_edge( *fn, tbb::flow::input_port<0>(my_join) );
+        tbb::flow::remove_edge( my_input, *fn);
+        delete fn;
+    }
+};
+
+// get the tag from the output tuple and emit it.
+// the first tuple component is tag * 2 cast to the type
+template<typename OutputTupleType>
+class recirc_output_func_body {
+public:
+    // we only need this to use source_node_helper
+    typedef typename tbb::flow::join_node<OutputTupleType, tbb::flow::tag_matching> join_node_type;
+    static const int N = std::tuple_size<OutputTupleType>::value;
+    int operator()(const OutputTupleType &v) {
+        int out = int(std::get<0>(v)) / 2;
+        source_node_helper<N,join_node_type>::only_check_value(out,v);
+        ++output_count;
+        return out;
+    }
+};
+
+template<typename JType>
+class tag_recirculation_test {
+public:
+    typedef typename JType::output_type TType;
+    typedef typename std::tuple<int, tbb::flow::continue_msg> input_tuple_type;
+    typedef tbb::flow::join_node<input_tuple_type,tbb::flow::reserving> input_join_type;
+    static const int N = std::tuple_size<TType>::value;
+    static void test() {
+        source_node_helper<N,JType>::print_remark("Recirculation test of tag-matching join");
+        REMARK(" >\n");
+        for(int maxTag = 1; maxTag <10; maxTag *= 3) {
+            for(int i=0; i < N; ++i) all_source_nodes[i][0] = NULL;
+
+            tbb::flow::graph g;
+            // this is the tag-matching join we're testing
+            JType * my_join = makeJoin<N,JType, tbb::flow::tag_matching>::create(g);
+            // source_node for continue messages
+            tbb::flow::source_node<tbb::flow::continue_msg> snode(g, recirc_source_node_body(), false);
+            // reserving join that matches recirculating tags with continue messages.
+            input_join_type * my_input_join = makeJoin<2,input_join_type,tbb::flow::reserving>::create(g);
+            // tbb::flow::make_edge(snode, tbb::flow::input_port<1>(*my_input_join));
+            tbb::flow::make_edge(snode, std::get<1>(my_input_join->input_ports()));
+            // queue to hold the tags
+            tbb::flow::queue_node<int> tag_queue(g);
+            tbb::flow::make_edge(tag_queue, tbb::flow::input_port<0>(*my_input_join));
+            // add all the function_nodes that are inputs to the tag-matching join
+            source_node_helper<N,JType>::add_recirc_func_nodes(*my_join, *my_input_join, g);
+            // add the function_node that accepts the output of the join and emits the int tag it was based on
+            tbb::flow::function_node<TType, int> recreate_tag(g, tbb::flow::unlimited, recirc_output_func_body<TType>());
+            tbb::flow::make_edge(*my_join, recreate_tag);
+            // now the recirculating part (output back to the queue)
+            tbb::flow::make_edge(recreate_tag, tag_queue);
+
+            // put the tags into the queue
+            for(int t = 1; t <= maxTag; ++t) tag_queue.try_put(t);
+
+            input_count = Recirc_count;
+            output_count = 0;
+
+            // start up the source node to get things going
+            snode.activate();
+
+            // wait for everything to stop
+            g.wait_for_all();
+
+            ASSERT(output_count == Recirc_count, "not all instances were received");
+
+            int j;
+            // grab the tags from the queue, record them
+            std::vector<bool> out_tally(maxTag, false);
+            for(int i = 0; i < maxTag; ++i) {
+                ASSERT(tag_queue.try_get(j), "not enough tags in queue");
+                ASSERT(!out_tally.at(j-1), "duplicate tag from queue");
+                out_tally[j-1] = true;
+            }
+            ASSERT(!tag_queue.try_get(j), "Extra tags in recirculation queue");
+
+            // deconstruct graph
+            source_node_helper<N, JType>::remove_recirc_func_nodes(*my_join, *my_input_join);
+            tbb::flow::remove_edge(*my_join, recreate_tag);
+            makeJoin<N,JType,tbb::flow::tag_matching>::destroy(my_join);
+            tbb::flow::remove_edge(tag_queue, tbb::flow::input_port<0>(*my_input_join));
+            tbb::flow::remove_edge(snode, tbb::flow::input_port<1>(*my_input_join));
+            makeJoin<2,input_join_type,tbb::flow::reserving>::destroy(my_input_join);
+        }
+    }
 };
 
 template<typename JType, tbb::flow::graph_buffer_policy JP>
@@ -444,7 +624,7 @@ public:
     static const tbb::flow::graph_buffer_policy jp = JP;
     static void test() {
         TType v;
-        source_node_helper<SIZE,JType>::print_remark();
+        source_node_helper<SIZE,JType>::print_remark("Parallel test of join_node");
         REMARK(" >\n");
         for(int i=0; i < MaxPorts; ++i) {
             for(int j=0; j < MaxNSources; ++j) {
@@ -506,7 +686,7 @@ public:
     static void add_queue_nodes(tbb::flow::graph &g, JType &my_join) {
         serial_queue_helper<ELEM-1,JType>::add_queue_nodes(g, my_join);
         my_queue_node_type *new_node = new my_queue_node_type(g);
-        tbb::flow::make_edge( *new_node, std::get<ELEM-1>(my_join.inputs()) );
+        tbb::flow::make_edge( *new_node, std::get<ELEM-1>(my_join.input_ports()) );
         all_source_nodes[ELEM-1][0] = (void *)new_node;
     }
     static void fill_one_queue(int maxVal) {
@@ -529,7 +709,7 @@ public:
     }
     static void remove_queue_nodes(JType &my_join) {
         my_queue_node_type *vptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[ELEM-1][0]);
-        tbb::flow::remove_edge( *vptr, std::get<ELEM-1>(my_join.inputs()) );
+        tbb::flow::remove_edge( *vptr, std::get<ELEM-1>(my_join.input_ports()) );
         serial_queue_helper<ELEM-1, JType>::remove_queue_nodes(my_join);
         delete vptr;
     }
@@ -564,7 +744,7 @@ public:
     }
     static void remove_queue_nodes(JType &my_join) {
         my_queue_node_type *vptr = reinterpret_cast<my_queue_node_type *>(all_source_nodes[0][0]);
-        tbb::flow::remove_edge( *vptr, std::get<0>(my_join.inputs()) );
+        tbb::flow::remove_edge( *vptr, std::get<0>(my_join.input_ports()) );
         delete vptr;
     }
 };
@@ -683,6 +863,15 @@ public:
     }
 };
 
+template<typename JType>
+class generate_recirc_test {
+public:
+    typedef tbb::flow::join_node<JType, tbb::flow::tag_matching> join_node_type;
+    static void do_test() {
+        tag_recirculation_test<join_node_type>::test();
+    }
+};
+
 template<tbb::flow::graph_buffer_policy JP>
 void test_input_port_policies();
 
@@ -723,8 +912,8 @@ void test_input_port_policies<tbb::flow::reserving>() {
     tbb::flow::make_edge( jn, oq0 );
     tbb::flow::make_edge( jn, oq1 );
     // attach iq0, iq1 to jn
-    tbb::flow::make_edge( iq0, std::get<0>(jn.inputs()) );
-    tbb::flow::make_edge( iq1, std::get<1>(jn.inputs()) );
+    tbb::flow::make_edge( iq0, std::get<0>(jn.input_ports()) );
+    tbb::flow::make_edge( iq1, std::get<1>(jn.input_ports()) );
     for(int loop = 0; loop < 3; ++loop) {
         // place one item in iq0
         ASSERT(iq0.try_put(1), "Error putting to iq1");
@@ -806,8 +995,8 @@ void test_input_port_policies<tbb::flow::queueing>() {
     tbb::flow::make_edge( jn, oq0 );
     tbb::flow::make_edge( jn, oq1 );
     // attach iq0, iq1 to jn
-    tbb::flow::make_edge( iq0, std::get<0>(jn.inputs()) );
-    tbb::flow::make_edge( iq1, std::get<1>(jn.inputs()) );
+    tbb::flow::make_edge( iq0, std::get<0>(jn.input_ports()) );
+    tbb::flow::make_edge( iq1, std::get<1>(jn.input_ports()) );
     for(int loop = 0; loop < 3; ++loop) {
         // place one item in iq0
         ASSERT(iq0.try_put(1), "Error putting to iq1");
@@ -978,48 +1167,81 @@ int TestMain() {
        REMARK("reserving\n");
        generate_test<serial_test, std::tuple<float, double>, tbb::flow::reserving >::do_test();
        generate_test<serial_test, std::tuple<float, double, int, long>, tbb::flow::reserving >::do_test();
+#if __TBB_VARIADIC_MAX >= 6
        generate_test<serial_test, std::tuple<double, double, int, long, int, short>, tbb::flow::reserving >::do_test();
+#endif
 #if COMPREHENSIVE_TEST
+#if __TBB_VARIADIC_MAX >= 8
        generate_test<serial_test, std::tuple<float, double, double, double, float, int, float, long>, tbb::flow::reserving >::do_test();
+#endif
+#if __TBB_VARIADIC_MAX >= 10
        generate_test<serial_test, std::tuple<float, double, int, double, double, float, long, int, float, long>, tbb::flow::reserving >::do_test();
 #endif
+#endif
        generate_test<parallel_test, std::tuple<float, double>, tbb::flow::reserving >::do_test();
        generate_test<parallel_test, std::tuple<float, int, long>, tbb::flow::reserving >::do_test();
        generate_test<parallel_test, std::tuple<double, double, int, int, short>, tbb::flow::reserving >::do_test();
 #if COMPREHENSIVE_TEST
+#if __TBB_VARIADIC_MAX >= 7
        generate_test<parallel_test, std::tuple<float, int, double, float, long, float, long>, tbb::flow::reserving >::do_test();
+#endif
+#if __TBB_VARIADIC_MAX >= 9
        generate_test<parallel_test, std::tuple<float, double, int, double, double, long, int, float, long>, tbb::flow::reserving >::do_test();
 #endif
+#endif
        REMARK("queueing\n");
        generate_test<serial_test, std::tuple<float, double>, tbb::flow::queueing >::do_test();
        generate_test<serial_test, std::tuple<float, double, int, long>, tbb::flow::queueing >::do_test();
+#if __TBB_VARIADIC_MAX >= 6
        generate_test<serial_test, std::tuple<double, double, int, long, int, short>, tbb::flow::queueing >::do_test();
+#endif
 #if COMPREHENSIVE_TEST
+#if __TBB_VARIADIC_MAX >= 8
        generate_test<serial_test, std::tuple<float, double, double, double, float, int, float, long>, tbb::flow::queueing >::do_test();
+#endif
+#if __TBB_VARIADIC_MAX >= 10
        generate_test<serial_test, std::tuple<float, double, int, double, double, float, long, int, float, long>, tbb::flow::queueing >::do_test();
 #endif
+#endif
        generate_test<parallel_test, std::tuple<float, double>, tbb::flow::queueing >::do_test();
        generate_test<parallel_test, std::tuple<float, int, long>, tbb::flow::queueing >::do_test();
        generate_test<parallel_test, std::tuple<double, double, int, int, short>, tbb::flow::queueing >::do_test();
 #if COMPREHENSIVE_TEST
+#if __TBB_VARIADIC_MAX >= 7
        generate_test<parallel_test, std::tuple<float, int, double, float, long, float, long>, tbb::flow::queueing >::do_test();
+#endif
+#if __TBB_VARIADIC_MAX >= 9
        generate_test<parallel_test, std::tuple<float, double, int, double, double, long, int, float, long>, tbb::flow::queueing >::do_test();
 #endif
+#endif
        REMARK("tag_matching\n");
        generate_test<serial_test, std::tuple<float, double>, tbb::flow::tag_matching >::do_test();
        generate_test<serial_test, std::tuple<float, double, int, long>, tbb::flow::tag_matching >::do_test();
+#if __TBB_VARIADIC_MAX >= 6
        generate_test<serial_test, std::tuple<double, double, int, long, int, short>, tbb::flow::tag_matching >::do_test();
+#endif
 #if COMPREHENSIVE_TEST
+#if __TBB_VARIADIC_MAX >= 8
        generate_test<serial_test, std::tuple<float, double, double, double, float, int, float, long>, tbb::flow::tag_matching >::do_test();
+#endif
+#if __TBB_VARIADIC_MAX >= 10
        generate_test<serial_test, std::tuple<float, double, int, double, double, float, long, int, float, long>, tbb::flow::tag_matching >::do_test();
 #endif
+#endif
        generate_test<parallel_test, std::tuple<float, double>, tbb::flow::tag_matching >::do_test();
        generate_test<parallel_test, std::tuple<float, int, long>, tbb::flow::tag_matching >::do_test();
        generate_test<parallel_test, std::tuple<double, double, int, int, short>, tbb::flow::tag_matching >::do_test();
 #if COMPREHENSIVE_TEST
+#if __TBB_VARIADIC_MAX >= 7
        generate_test<parallel_test, std::tuple<float, int, double, float, long, float, long>, tbb::flow::tag_matching >::do_test();
+#endif
+#if __TBB_VARIADIC_MAX >= 9
        generate_test<parallel_test, std::tuple<float, double, int, double, double, long, int, float, long>, tbb::flow::tag_matching >::do_test();
 #endif
+#endif
+
+       generate_recirc_test<std::tuple<float,double> >::do_test();
+       generate_recirc_test<std::tuple<double, double, int, int, short> >::do_test();
    }
    return Harness::Done;
 }
diff --git a/src/test/test_lambda.cpp b/src/test/test_lambda.cpp
index 0a7fb8c..90d95cb 100644
--- a/src/test/test_lambda.cpp
+++ b/src/test/test_lambda.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -81,6 +81,7 @@ int TestMain () {
     const int N = 1000;
     const int Grainsize = N/1000;
     int a[N];
+    int max_sum;
     ASSERT( MinThread>=1, "Error: Number of threads must be positive.\n");
 
     for(int p=MinThread; p<=MaxThread; ++p) {
@@ -197,10 +198,13 @@ int TestMain () {
                              if (mmr.second < a[i]) mmr.second = a[i];
                          }
                      });
-        minmax_c.combine_each([](std::pair<int,int> x) {
-                                  int sum;
-                                  sum = x.first + x.second;
+        max_sum = 0;
+        minmax_c.combine_each([&max_sum](std::pair<int,int> x) {
+                                  int tsum = x.first + x.second;
+                                  if( tsum>max_sum ) max_sum = tsum;
                               });
+        ASSERT( (N-1)<=max_sum && max_sum<=a[0]+N-1, "combinable::combine_each /w lambda failed." );
+
         std::pair<int,int> minmax_result_c;
         minmax_result_c =
             minmax_c.combine([](std::pair<int,int> x, std::pair<int,int> y) {
@@ -215,6 +219,7 @@ int TestMain () {
         REMARK("Testing enumerable_thread_specific... ");
         enumerable_thread_specific< std::pair<int,int> > minmax_ets([&]() { return std::make_pair(a[0], a[0]); } );
 
+        max_sum = 0;
         parallel_for(blocked_range<int>(0,N),
                      [&] (const blocked_range<int> &r) {
                          std::pair<int,int>& mmr = minmax_ets.local();
@@ -223,10 +228,12 @@ int TestMain () {
                              if (mmr.second < a[i]) mmr.second = a[i];
                          }
                      });
-        minmax_ets.combine_each([](std::pair<int,int> x) {
-                                    int sum;
-                                    sum = x.first + x.second;
+        minmax_ets.combine_each([&max_sum](std::pair<int,int> x) {
+                                  int tsum = x.first + x.second;
+                                  if( tsum>max_sum ) max_sum = tsum;
                                 });
+        ASSERT( (N-1)<=max_sum && max_sum<=a[0]+N-1, "enumerable_thread_specific::combine_each /w lambda failed." );
+
         std::pair<int,int> minmax_result_ets;
         minmax_result_ets =
             minmax_ets.combine([](std::pair<int,int> x, std::pair<int,int> y) {
diff --git a/src/test/test_limiter_node.cpp b/src/test/test_limiter_node.cpp
index 513deb7..3f34b6e 100644
--- a/src/test/test_limiter_node.cpp
+++ b/src/test/test_limiter_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_malloc_atexit.cpp b/src/test/test_malloc_atexit.cpp
index e422438..0baa32a 100644
--- a/src/test/test_malloc_atexit.cpp
+++ b/src/test/test_malloc_atexit.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_malloc_compliance.cpp b/src/test/test_malloc_compliance.cpp
index 2e74ebf..d2272f9 100644
--- a/src/test/test_malloc_compliance.cpp
+++ b/src/test/test_malloc_compliance.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,10 +26,10 @@
     the GNU General Public License.
 */
 
-const unsigned MByte = 1048576; //1MB
+const unsigned MByte = 1024*1024;
 bool __tbb_test_errno = false;
 
-/* _WIN32_WINNT should be defined at the very beginning, 
+/* _WIN32_WINNT should be defined at the very beginning,
    because other headers might include <windows.h>
 */
 
@@ -61,7 +61,7 @@ void limitMem( size_t limit )
             exit(1);
         }
     }
-    if (0 == SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, 
+    if (0 == SetInformationJobObject(hJob, JobObjectExtendedLimitInformation,
                                      &jobInfo, sizeof(jobInfo))) {
         REPORT("Can't set limits: %ld\n", GetLastError());
         exit(1);
@@ -87,7 +87,7 @@ void limitMem( size_t limit )
         exit(1);
     }
 }
-#endif 
+#endif
 
 #define ASSERT_ERRNO(cond, msg)  ASSERT( !__tbb_test_errno || (cond), msg )
 #define CHECK_ERRNO(cond) (__tbb_test_errno && (cond))
@@ -96,7 +96,6 @@ void limitMem( size_t limit )
 #include <errno.h>
 #define __TBB_NO_IMPLICIT_LINKAGE 1
 #include "tbb/scalable_allocator.h"
-#include "tbb/tbb_machine.h"
 
 #define HARNESS_CUSTOM_MAIN 1
 #include "harness.h"
@@ -181,7 +180,7 @@ struct MemStruct
     UINT Size;
 
     MemStruct() : Pointer(NULL), Size(0) {}
-    MemStruct(void* Pointer, UINT Size) : Pointer(Pointer), Size(Size) {}
+    MemStruct(void* ptr, UINT sz) : Pointer(ptr), Size(sz) {}
 };
 
 class CMemTest: NoAssign
@@ -192,8 +191,8 @@ class CMemTest: NoAssign
     static bool firstTime;
 
 public:
-    CMemTest(Harness::SpinBarrier *limitBarrier, bool isVerbose=false) :
-        CountErrors(0), limitBarrier(limitBarrier)
+    CMemTest(Harness::SpinBarrier *barrier, bool isVerbose=false) :
+        CountErrors(0), limitBarrier(barrier)
         {
             srand((UINT)time(NULL));
             FullLog=isVerbose;
@@ -204,7 +203,7 @@ public:
     void UniquePointer(); // unique pointer - check with padding
     void AddrArifm(); // unique pointer - check with pointer arithmetic
     bool ShouldReportError();
-    void Free_NULL(); // 
+    void Free_NULL(); //
     void Zerofilling(); // check if arrays are zero-filled
     void TestAlignedParameters();
     void RunAllTests(int total_threads);
@@ -214,7 +213,7 @@ public:
 class Limit {
     size_t limit;
 public:
-    Limit(size_t limit) : limit(limit) {}
+    Limit(size_t a_limit) : limit(a_limit) {}
     void operator() () const {
         limitMem(limit);
     }
@@ -229,7 +228,7 @@ struct RoundRobin: NoAssign {
 
     RoundRobin( long p, Harness::SpinBarrier *limitBarrier, bool verbose ) :
         number_of_threads(p), test(limitBarrier, verbose) {}
-    void operator()( int /*id*/ ) const 
+    void operator()( int /*id*/ ) const
         {
             test.RunAllTests(number_of_threads);
         }
@@ -253,7 +252,7 @@ static void setSystemAllocs()
     Raligned_realloc=0;
     Taligned_free=0;
     Rposix_memalign=0;
-#else 
+#else
     Raligned_malloc=0;
     Raligned_realloc=0;
     Taligned_free=0;
@@ -270,7 +269,7 @@ void ReallocParam()
 
     bufs[0] = Trealloc(NULL, 30*MByte);
     ASSERT(bufs[0], "Can't get memory to start the test.");
-  
+
     for (i=1; i<ITERS; i++)
     {
         bufs[i] = Trealloc(NULL, 30*MByte);
@@ -278,14 +277,14 @@ void ReallocParam()
             break;
     }
     ASSERT(i<ITERS, "Limits should be decreased for the test to work.");
-  
+
     Trealloc(bufs[0], 0);
-    /* There is a race for the free space between different threads at 
+    /* There is a race for the free space between different threads at
        this point. So, have to run the test sequentially.
     */
     bufs[0] = Trealloc(NULL, 30*MByte);
     ASSERT(bufs[0], NULL);
-  
+
     for (int j=0; j<i; j++)
         Trealloc(bufs[j], 0);
 }
@@ -316,13 +315,13 @@ int main(int argc, char* argv[]) {
 
     ParseCommandLine( argC, argV );
 #if __linux__
-    /* According to man pthreads 
+    /* According to man pthreads
        "NPTL threads do not share resource limits (fixed in kernel 2.6.10)".
        Use per-threads limits for affected systems.
      */
     if ( LinuxKernelVersion() < 2*1000000 + 6*1000 + 10)
         perProcessLimits = false;
-#endif    
+#endif
     //-------------------------------------
 #if __APPLE__
     /* Skip due to lack of memory limit enforcing under Mac OS X. */
@@ -331,13 +330,13 @@ int main(int argc, char* argv[]) {
     ReallocParam();
     limitMem(0);
 #endif
-    
-//for linux and dynamic runtime errno is used to check allocator fuctions
+
+//for linux and dynamic runtime errno is used to check allocator functions
 //check if library compiled with /MD(d) and we can use errno
-#if _MSC_VER 
+#if _MSC_VER
 #if defined(_MT) && defined(_DLL) //check errno if test itself compiled with /MD(d) only
     char*  version_info_block = NULL;
-    int version_info_block_size; 
+    int version_info_block_size;
     LPVOID comments_block = NULL;
     UINT comments_block_size;
 #ifdef _DEBUG
@@ -346,7 +345,7 @@ int main(int argc, char* argv[]) {
 #define __TBBMALLOCDLL "tbbmalloc.dll"
 #endif //_DEBUG
     version_info_block_size = GetFileVersionInfoSize( __TBBMALLOCDLL, (LPDWORD)&version_info_block_size );
-    if( 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 )
@@ -366,7 +365,7 @@ int main(int argc, char* argv[]) {
         NativeParallelFor( p, RoundRobin(p, barrier, Verbose) );
         delete barrier;
     }
-    if( !error_occurred ) 
+    if( !error_occurred )
         REPORT("done\n");
     return 0;
 }
@@ -592,8 +591,7 @@ void CMemTest::Zerofilling()
 void myMemset(void *ptr, int c, size_t n)
 {
 #if  __linux__ &&  __i386__
-// memset in Fedora 13 is not always correclty set memory to
-// required values.
+// memset in Fedora 13 not always correctly sets memory to required values.
     char *p = (char*)ptr;
     for (size_t i=0; i<n; i++)
         p[i] = c;
@@ -602,7 +600,7 @@ void myMemset(void *ptr, int c, size_t n)
 #endif
 }
 
-// This test requires 200 MB per thread, i.e. for standart 1:4 run
+// This test requires 200 MB per thread, i.e. for standard 1:4 run
 // more then 800 MB of RAM is required.
 void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
 {
@@ -625,7 +623,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
     */
     PointerList.reserve(200*total_threads*MByte/MinSize);
 
-    /* There is a bug in the specific verion of GLIBC (2.5-12) shipped
+    /* There is a bug in the specific version of GLIBC (2.5-12) shipped
        with RHEL5 that leads to erroneous working of the test
        on Intel64 and IPF systems when setrlimit-related part is enabled.
        Switching to GLIBC 2.5-18 from RHEL5.1 resolved the issue.
@@ -709,7 +707,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
         {
             Size=rand()%(MaxSize-MinSize)+MinSize;
             errno = ENOMEM+j+1;
-            tmp=Tcalloc(COUNT_ELEM_CALLOC,Size);  
+            tmp=Tcalloc(COUNT_ELEM_CALLOC,Size);
             if (tmp == NULL)
             {
                 CountNULL++;
@@ -729,7 +727,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
                 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);
-                }      
+                }
                 PointerList.push_back(MemStruct(tmp, Size));
             }
         }
@@ -755,7 +753,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize, int total_threads)
                     if (errno != 0 && !known_issue) {
                         CountErrors++;
                         if (ShouldReportError()) REPORT("valid pointer returned, error: errno not kept\n");
-                    }      
+                    }
                     PointerList[i].Size *= 2;
                 }
                 else if (tmp != PointerList[i].Pointer && tmp != NULL) // another place
@@ -930,13 +928,13 @@ void CMemTest::TestAlignedParameters()
                 ret = Tposix_memalign(NULL, bad_align, 100);
                 ASSERT(EINVAL==ret, NULL);
             }
-    
+
         memptr = &ret;
         ret = Tposix_memalign(&memptr, 5*sizeof(void*), 100);
         ASSERT(memptr == &ret,
-               "memptr should not be changed after unsuccesful call");
+               "memptr should not be changed after unsuccessful call");
         ASSERT(EINVAL==ret, NULL);
-    
+
         // alignment is power of 2, but not a multiple of sizeof(void *),
         // we expect that sizeof(void*) > 2
         ret = Tposix_memalign(NULL, 2, 100);
@@ -950,7 +948,7 @@ void CMemTest::TestAlignedParameters()
                 ASSERT(NULL==memptr, NULL);
                 ASSERT_ERRNO(EINVAL==errno, NULL);
             }
-    
+
         // size is zero
         memptr = Taligned_malloc(0, 16);
         ASSERT(NULL==memptr, "size is zero, so must return NULL");
@@ -960,7 +958,7 @@ void CMemTest::TestAlignedParameters()
         // NULL pointer is OK to free
         errno = 0;
         Taligned_free(NULL);
-        /* As there is no return value for free, strictly speaking we can't 
+        /* As there is no return value for free, strictly speaking we can't
            check errno here. But checked implementations obey the assertion.
         */
         ASSERT_ERRNO(0==errno, NULL);
@@ -1002,7 +1000,9 @@ void CMemTest::RunAllTests(int total_threads)
 #else
     UniquePointer();
     AddrArifm();
+#if !__TBB_MIC_NATIVE
     NULLReturn(1*MByte,100*MByte,total_threads);
 #endif
-    if (FullLog) REPORT("All tests ended\nclearing memory...");
+#endif
+    if (FullLog) REPORT("Tests for %d threads ended\n", total_threads);
 }
diff --git a/src/test/test_malloc_init_shutdown.cpp b/src/test/test_malloc_init_shutdown.cpp
index bab0fc4..a3cda97 100644
--- a/src/test/test_malloc_init_shutdown.cpp
+++ b/src/test/test_malloc_init_shutdown.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -38,7 +38,7 @@ tbb::atomic<int> FinishedTasks;
 const int MaxTasks = 16;
 
 /*--------------------------------------------------------------------*/
-// The regression test against a bug triggered when malloc initialization 
+// The regression test against a bug triggered when malloc initialization
 // and thread shutdown were called simultaneously, in which case
 // Windows dynamic loader lock and allocator initialization/termination lock
 // were taken in different order.
@@ -68,7 +68,7 @@ void Test1 () {
         new(t) TestTask1(i%2==0, tf);
         t->start();
     }
-    
+
     Harness::Sleep(1000); // wait a second :)
     ASSERT( FinishedTasks==NTasks, "Some threads appear to deadlock" );
 
@@ -83,14 +83,14 @@ void Test1 () {
 // The regression test against a bug when cross-thread deallocation
 // caused livelock at thread shutdown.
 
-void* ptr = NULL;
+void* gPtr = NULL;
 
 class TestFunc2a {
     Harness::SpinBarrier* my_barr;
 public:
     TestFunc2a (Harness::SpinBarrier& barr) : my_barr(&barr) {}
     void operator() (int) const {
-        ptr = scalable_malloc(8);
+        gPtr = scalable_malloc(8);
         my_barr->wait();
         ++FinishedTasks;
     }
@@ -104,8 +104,8 @@ class TestFunc2b: NoAssign {
 public:
     TestFunc2b (Harness::SpinBarrier& barr, TestTask2a& t) : my_barr(&barr), my_ward(t) {}
     void operator() (int) const {
-        tbb::internal::spin_wait_while_eq(ptr, (void*)NULL);
-        scalable_free(ptr);
+        tbb::internal::spin_wait_while_eq(gPtr, (void*)NULL);
+        scalable_free(gPtr);
         my_barr->wait();
         my_ward.wait_to_finish();
         ++FinishedTasks;
@@ -124,8 +124,52 @@ void Test2() {
     t2b.wait_to_finish(); // t2a is monitored by t2b
 }
 
+#if _WIN32||_WIN64
+
+void TestKeyDtor() {}
+
+#else
+
+void *currSmall, *prevSmall, *currLarge, *prevLarge;
+
+extern "C" void threadDtor(void*) {
+    // First, release memory that was allocated before;
+    // it will not re-initialize the thread-local data if already deleted
+    prevSmall = currSmall;
+    scalable_free(currSmall);
+    prevLarge = currLarge;
+    scalable_free(currLarge);
+    // Then, allocate more memory.
+    // It will re-initialize the allocator data in the thread.
+    scalable_free(scalable_malloc(8));
+}
+
+struct TestThread: NoAssign {
+    TestThread(int ) {}
+
+    void operator()( int /*id*/ ) const {
+        pthread_key_t key;
+
+        currSmall = scalable_malloc(8);
+        ASSERT(!prevSmall || currSmall==prevSmall, "Possible memory leak");
+        currLarge = scalable_malloc(32*1024);
+        ASSERT(!prevLarge || currLarge==prevLarge, "Possible memory leak");
+        pthread_key_create( &key, &threadDtor );
+        pthread_setspecific(key, (const void*)42);
+    }
+};
+
+// test releasing memory from pthread key destructor
+void TestKeyDtor() {
+    for (int i=0; i<4; i++)
+        NativeParallelFor( 1, TestThread(1) );
+}
+
+#endif // _WIN32||_WIN64
+
 int TestMain () {
     Test1(); // requires malloc initialization so should be first
     Test2();
+    TestKeyDtor();
     return Harness::Done;
 }
diff --git a/src/test/test_malloc_lib_unload.cpp b/src/test/test_malloc_lib_unload.cpp
index 30d92b9..40c2ec5 100644
--- a/src/test/test_malloc_lib_unload.cpp
+++ b/src/test/test_malloc_lib_unload.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -122,15 +122,11 @@ extern "C" size_t safer_scalable_msize (void *, size_t (*)(void*))
 #else  // _USRDLL
 
 #include <cstdlib>
-#if _WIN32 || _WIN64
-#include "tbb/machine/windows_api.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"
+#include "harness_dynamic_libs.h"
 
 #if TBB_USE_DEBUG
 #define SUFFIX1 "_debug"
@@ -160,14 +156,6 @@ extern "C" size_t safer_scalable_msize (void *, size_t (*)(void*))
 #define MALLOCLIB_NAME1 PREFIX "tbbmalloc" SUFFIX1 EXT
 #define MALLOCLIB_NAME2 PREFIX "tbbmalloc" SUFFIX2 EXT
 
-#if _WIN32 || _WIN64
-#define LIBRARY_HANDLE HMODULE
-#define LOAD_LIBRARY(name) LoadLibrary((name))
-#else
-#define LIBRARY_HANDLE void*
-#define LOAD_LIBRARY(name) dlopen((name), RTLD_NOW|RTLD_GLOBAL)
-#endif
-
 extern "C" {
 #if _WIN32||_WIN64
 extern __declspec(dllimport)
@@ -177,35 +165,25 @@ void *scalable_malloc(size_t);
 
 struct Run {
     void operator()( int /*id*/ ) const {
+        using namespace Harness;
+
         void* (*malloc_ptr)(std::size_t);
         void (*free_ptr)(void*);
-        
+
         void* (*aligned_malloc_ptr)(size_t size, size_t alignment);
         void  (*aligned_free_ptr)(void*);
 
         const char* actual_name;
-        LIBRARY_HANDLE lib = LOAD_LIBRARY(actual_name = MALLOCLIB_NAME1);
-        if (!lib)      lib = LOAD_LIBRARY(actual_name = MALLOCLIB_NAME2);
+        LIBRARY_HANDLE lib = OpenLibrary(actual_name = MALLOCLIB_NAME1);
+        if (!lib)      lib = OpenLibrary(actual_name = MALLOCLIB_NAME2);
         if (!lib) {
             REPORT("Can't load " MALLOCLIB_NAME1 " or " MALLOCLIB_NAME2 "\n");
             exit(1);
         }
-#if _WIN32 || _WIN64
-        // casts at both sides are to soothe MinGW compiler
-        (void *&)malloc_ptr = (void*)GetProcAddress(lib, "scalable_malloc");
-        (void *&)free_ptr = (void*)GetProcAddress(lib, "scalable_free");
-        (void *&)aligned_malloc_ptr = (void*)GetProcAddress(lib, "scalable_aligned_malloc");
-        (void *&)aligned_free_ptr = (void*)GetProcAddress(lib, "scalable_aligned_free");
-#else
-        (void *&)malloc_ptr = dlsym(lib, "scalable_malloc");
-        (void *&)free_ptr = dlsym(lib, "scalable_free");
-        (void *&)aligned_malloc_ptr = dlsym(lib, "scalable_aligned_malloc");
-        (void *&)aligned_free_ptr = dlsym(lib, "scalable_aligned_free");
-#endif
-        if (!malloc_ptr || !free_ptr)  {
-            REPORT("Can't find scalable_(malloc|free) in %s \n", actual_name);
-            exit(1);
-        }
+        (FunctionAddress&)malloc_ptr = GetAddress(lib, "scalable_malloc");
+        (FunctionAddress&)free_ptr = GetAddress(lib, "scalable_free");
+        (FunctionAddress&)aligned_malloc_ptr = GetAddress(lib, "scalable_aligned_malloc");
+        (FunctionAddress&)aligned_free_ptr = GetAddress(lib, "scalable_aligned_free");
 
         for (size_t sz = 1024; sz <= 10*1024 ; sz*=10) {
             void *p1 = aligned_malloc_ptr(sz, 16);
@@ -217,14 +195,11 @@ struct Run {
         memset(p, 1, 100);
         free_ptr(p);
 
+        CloseLibrary(lib);
 #if _WIN32 || _WIN64
-        BOOL ret = FreeLibrary(lib);
-        ASSERT(ret, "FreeLibrary must be successful");
         ASSERT(GetModuleHandle(actual_name),  
                "allocator library must not be unloaded");
 #else
-        int ret = dlclose(lib);
-        ASSERT(ret == 0, "dlclose must be successful");
         ASSERT(dlsym(RTLD_DEFAULT, "scalable_malloc"),  
                "allocator library must not be unloaded");
 #endif
diff --git a/src/test/test_malloc_overload.cpp b/src/test/test_malloc_overload.cpp
index 684d27c..3509b69 100644
--- a/src/test/test_malloc_overload.cpp
+++ b/src/test/test_malloc_overload.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_malloc_pools.cpp b/src/test/test_malloc_pools.cpp
index bd2be42..7fc3b6a 100644
--- a/src/test/test_malloc_pools.cpp
+++ b/src/test/test_malloc_pools.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -37,7 +37,7 @@ static inline T alignUp  (T arg, uintptr_t alignment) {
     return T(((uintptr_t)arg+(alignment-1)) & ~(alignment-1));
 }
 
-struct PoolSpace {
+struct PoolSpace: NoCopy {
     size_t pos;
     int    regions;
     size_t bufSize;
@@ -45,9 +45,9 @@ struct PoolSpace {
 
     static const size_t BUF_SIZE = 8*1024*1024;
 
-    PoolSpace(size_t bufSize = BUF_SIZE) :
+    PoolSpace(size_t bufSz = BUF_SIZE) :
         pos(0), regions(0),
-        bufSize(bufSize), space(new char[bufSize]) {
+        bufSize(bufSz), space(new char[bufSize]) {
         memset(space, 0, bufSize);
     }
     ~PoolSpace() {
@@ -93,12 +93,10 @@ static int putMallocMem(intptr_t /*pool_id*/, void *ptr, size_t bytes)
 
 void TestPoolReset()
 {
-    rml::MemPoolPolicy pol;
-    pol.pAlloc = getMallocMem;
-    pol.pFree = putMallocMem;
-    pol.granularity = 8;
+    rml::MemPoolPolicy pol(getMallocMem, putMallocMem);
+    rml::MemoryPool *pool;
 
-    rml::MemoryPool *pool = pool_create(0, &pol);
+    pool_create_v1(0, &pol, &pool);
     for (int i=0; i<100; i++) {
         ASSERT(pool_malloc(pool, 8), NULL);
         ASSERT(pool_malloc(pool, 50*1024), NULL);
@@ -171,13 +169,10 @@ void               **SharedPoolRun::crossThread,
 // single pool shared by different threads
 void TestSharedPool()
 {
-    rml::MemPoolPolicy pol;
-    pol.pAlloc = getMallocMem;
-    pol.pFree = putMallocMem;
-    pol.granularity = 8;
-
-    rml::MemoryPool *pool = pool_create(0, &pol);
+    rml::MemPoolPolicy pol(getMallocMem, putMallocMem);
+    rml::MemoryPool *pool;
 
+    pool_create_v1(0, &pol, &pool);
     void **crossThread = new void*[MaxThread * SharedPoolRun::OBJ_CNT];
     void **afterTerm = new void*[MaxThread * SharedPoolRun::OBJ_CNT];
 
@@ -241,14 +236,10 @@ public:
     }
     CrossThreadRun() {}
     void operator()( int id ) const {
-        rml::MemPoolPolicy pol;
-
-        pol.pAlloc = CrossThreadGetMem;
-        pol.pFree = CrossThreadPutMem;
-        pol.granularity = 8;
-        pool[id] = pool_create(id, &pol);
+        rml::MemPoolPolicy pol(CrossThreadGetMem, CrossThreadPutMem);
         const int objLen = 10*id;
 
+        pool_create_v1(id, &pol, &pool[id]);
         obj[id] = (char*)pool_malloc(pool[id], objLen);
         ASSERT(obj[id], NULL);
         memset(obj[id], id, objLen);
@@ -300,11 +291,10 @@ void TestTooSmallBuffer()
 {
     poolSpace = new PoolSpace(8*1024);
 
-    rml::MemPoolPolicy pol;
-    pol.pAlloc = CrossThreadGetMem;
-    pol.pFree = CrossThreadPutMem;
-    pol.granularity = 8;
-    pool_destroy( pool_create(0, &pol) );
+    rml::MemPoolPolicy pol(CrossThreadGetMem, CrossThreadPutMem);
+    rml::MemoryPool *pool;
+    pool_create_v1(0, &pol, &pool);
+    pool_destroy(pool);
     ASSERT(!poolSpace[0].regions, "No leaks.");
 
     delete poolSpace;
@@ -326,13 +316,11 @@ static void *fixedBufGetMem(intptr_t /*pool_id*/, size_t &bytes)
 void TestFixedBufferPool()
 {
     void *ptrs[7];
-    rml::MemPoolPolicy pol;
-
-    pol.pAlloc = fixedBufGetMem;
-    pol.pFree = NULL;
-    pol.granularity = 8;
-    rml::MemoryPool *pool = pool_create(0, &pol);
+    rml::MemPoolPolicy pol(fixedBufGetMem, NULL, 0, /*fixedSizePool=*/true,
+                           /*keepMemTillDestroy=*/false);
+    rml::MemoryPool *pool;
 
+    pool_create_v1(0, &pol, &pool);
     void *largeObj = pool_malloc(pool, 7*1024*1024);
     ASSERT(largeObj, NULL);
     pool_free(pool, largeObj);
@@ -368,14 +356,14 @@ static int putGranMem(intptr_t /*pool_id*/, void *ptr, size_t bytes)
 
 static void TestPoolGranularity()
 {
-    rml::MemPoolPolicy pol;
+    rml::MemPoolPolicy pol(getGranMem, putGranMem);
     const size_t grans[] = {4*1024, 2*1024*1024, 6*1024*1024, 10*1024*1024};
 
-    pol.pAlloc = getGranMem;
-    pol.pFree = putGranMem;
     for (unsigned i=0; i<sizeof(grans)/sizeof(grans[0]); i++) {
         pol.granularity = currGranularity = grans[i];
-        rml::MemoryPool *pool = pool_create(0, &pol);
+        rml::MemoryPool *pool;
+
+        pool_create_v1(0, &pol, &pool);
         for (int sz=500*1024; sz<16*1024*1024; sz+=101*1024) {
             void *p = pool_malloc(pool, sz);
             ASSERT(p, "Can't allocate memory in pool.");
@@ -385,6 +373,110 @@ static void TestPoolGranularity()
     }
 }
 
+static size_t putMemCalls, getMemCalls;
+
+static void *getMemPolicy(intptr_t /*pool_id*/, size_t &bytes)
+{
+    getMemCalls++;
+    return malloc(bytes);
+}
+
+static int putMemPolicy(intptr_t /*pool_id*/, void *ptr, size_t /*bytes*/)
+{
+    putMemCalls++;
+    free(ptr);
+    return 0;
+}
+
+static void TestPoolKeepTillDestroy()
+{
+    const int ITERS = 50*1024;
+    void *ptrs[2*ITERS+1];
+    rml::MemPoolPolicy pol(getMemPolicy, putMemPolicy);
+    rml::MemoryPool *pool;
+
+    // 1st create default pool that returns memory back to callback,
+    // then use keepMemTillDestroy policy
+    for (int keep=0; keep<2; keep++) {
+        getMemCalls = putMemCalls = 0;
+        if (keep)
+            pol.keepAllMemory = 1;
+        pool_create_v1(0, &pol, &pool);
+        for (int i=0; i<2*ITERS; i+=2) {
+            ptrs[i] = pool_malloc(pool, 7*1024);
+            ptrs[i+1] = pool_malloc(pool, 10*1024);
+        }
+        ptrs[2*ITERS] = pool_malloc(pool, 8*1024*1024);
+        ASSERT(!putMemCalls, NULL);
+        for (int i=0; i<2*ITERS; i++)
+            pool_free(pool, ptrs[i]);
+        pool_free(pool, ptrs[2*ITERS]);
+        size_t totalPutMemCalls = putMemCalls;
+        if (keep)
+            ASSERT(!putMemCalls, NULL);
+        else {
+            ASSERT(putMemCalls, NULL);
+            putMemCalls = 0;
+        }
+        size_t currGetCalls = getMemCalls;
+        pool_malloc(pool, 8*1024*1024);
+        if (keep)
+            ASSERT(currGetCalls == getMemCalls, "Must not lead to new getMem call");
+        pool_reset(pool);
+        ASSERT(!putMemCalls, "Pool is not releasing memory during reset.");
+        pool_destroy(pool);
+        ASSERT(putMemCalls, NULL);
+        totalPutMemCalls += putMemCalls;
+        ASSERT(getMemCalls == totalPutMemCalls, "Memory leak detected.");
+    }
+
+}
+
+static bool memEqual(char *buf, size_t size, int val)
+{
+    bool memEq = true;
+    for (size_t k=0; k<size; k++)
+        if (buf[k] != val)
+             memEq = false;
+    return memEq;
+}
+
+static void TestEntries()
+{
+    const int SZ = 4;
+    const int ALGN = 4;
+    size_t size[SZ] = {8, 8000, 9000, 100*1024};
+    size_t algn[ALGN] = {8, 64, 4*1024, 8*1024*1024};
+
+    rml::MemPoolPolicy pol(getGranMem, putGranMem);
+    currGranularity = 1; // not check granularity in the test
+    rml::MemoryPool *pool;
+
+    pool_create_v1(0, &pol, &pool);
+    for (int i=0; i<SZ; i++)
+        for (int j=0; j<ALGN; j++) {
+            char *p = (char*)pool_aligned_malloc(pool, size[i], algn[j]);
+            ASSERT(p && 0==((uintptr_t)p & (algn[j]-1)), NULL);
+            memset(p, j, size[i]);
+
+            size_t curr_algn = algn[rand() % ALGN];
+            size_t curr_sz = size[rand() % SZ];
+            char *p1 = (char*)pool_aligned_realloc(pool, p, curr_sz, curr_algn);
+            ASSERT(p1 && 0==((uintptr_t)p1 & (curr_algn-1)), NULL);
+            ASSERT(memEqual(p1, min(size[i], curr_sz), j), NULL);
+
+            memset(p1, j+1, curr_sz);
+            size_t curr_sz1 = size[rand() % SZ];
+            char *p2 = (char*)pool_realloc(pool, p1, curr_sz1);
+            ASSERT(p2, NULL);
+            ASSERT(memEqual(p2, min(curr_sz1, curr_sz), j+1), NULL);
+
+            pool_free(pool, p2);
+        }
+
+    pool_destroy(pool);
+}
+
 int TestMain () {
     TestTooSmallBuffer();
     TestPoolReset();
@@ -392,6 +484,8 @@ int TestMain () {
     TestCrossThreadPools();
     TestFixedBufferPool();
     TestPoolGranularity();
+    TestPoolKeepTillDestroy();
+    TestEntries();
 
     return Harness::Done;
 }
diff --git a/src/test/test_malloc_pure_c.c b/src/test/test_malloc_pure_c.c
index 5f81d6d..4c40eb9 100644
--- a/src/test/test_malloc_pure_c.c
+++ b/src/test/test_malloc_pure_c.c
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 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 72d4d8f..4671bd4 100644
--- a/src/test/test_malloc_regression.cpp
+++ b/src/test/test_malloc_regression.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_malloc_used_by_lib.cpp b/src/test/test_malloc_used_by_lib.cpp
new file mode 100644
index 0000000..f53a7f2
--- /dev/null
+++ b/src/test/test_malloc_used_by_lib.cpp
@@ -0,0 +1,173 @@
+/*
+    Copyright 2005-2012 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.
+*/
+
+#if _USRDLL
+
+#include <stdlib.h>
+#include "tbb/scalable_allocator.h"
+#if __TBB_SOURCE_DIRECTLY_INCLUDED
+#include "../tbbmalloc/tbbmalloc_internal_api.h"
+#endif
+
+#define HARNESS_CUSTOM_MAIN 1
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+#include "harness_assert.h"
+
+#if _WIN32||_WIN64
+extern "C" {
+    extern __declspec(dllexport) void callDll();
+}
+#endif
+
+extern "C" void callDll()
+{
+    static const int NUM = 20;
+    void *ptrs[NUM];
+
+    for (int i=0; i<NUM; i++) {
+        ptrs[i] = scalable_malloc(i*1024);
+        ASSERT(ptrs[i], NULL);
+    }
+    for (int i=0; i<NUM; i++)
+        scalable_free(ptrs[i]);
+#if __TBB_SOURCE_DIRECTLY_INCLUDED && (_WIN32||_WIN64)
+    __TBB_mallocThreadShutdownNotification();
+#endif
+}
+
+#if __TBB_SOURCE_DIRECTLY_INCLUDED
+
+struct RegisterProcessShutdownNotification {
+    ~RegisterProcessShutdownNotification() {
+        __TBB_mallocProcessShutdownNotification();
+    }
+};
+
+static RegisterProcessShutdownNotification reg;
+
+#endif
+
+#else // _USRDLL
+
+#define __TBB_NO_IMPLICIT_LINKAGE 1
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+#include "harness_memory.h"
+#include "harness_tbb_independence.h"
+#include "harness_barrier.h"
+#include "harness_dynamic_libs.h"
+
+class UseDll {
+    Harness::FunctionAddress run;
+public:
+    UseDll(Harness::FunctionAddress runPtr) : run(runPtr) { }
+    void operator()( int /*id*/ ) const {
+        (*run)();
+    }
+};
+
+void LoadThreadsUnload()
+{
+    Harness::LIBRARY_HANDLE lib =
+        Harness::OpenLibrary(TEST_LIBRARY_NAME("test_malloc_used_by_lib"));
+    ASSERT(lib, "Can't load " TEST_LIBRARY_NAME("test_malloc_used_by_lib"));
+    NativeParallelFor( 4, UseDll( Harness::GetAddress(lib, "callDll") ) );
+    Harness::CloseLibrary(lib);
+}
+
+struct UnloadCallback {
+    Harness::LIBRARY_HANDLE lib;
+
+    void operator() () const {
+        Harness::CloseLibrary(lib);
+    }
+};
+
+struct RunWithLoad : NoAssign {
+    static Harness::SpinBarrier startBarr, endBarr;
+    static UnloadCallback unloadCallback;
+    static Harness::FunctionAddress runPtr;
+
+    void operator()(int id) const {
+        if (!id) {
+            Harness::LIBRARY_HANDLE lib =
+                Harness::OpenLibrary(TEST_LIBRARY_NAME("test_malloc_used_by_lib"));
+            ASSERT(lib, "Can't load "TEST_LIBRARY_NAME("test_malloc_used_by_lib"));
+            runPtr = Harness::GetAddress(lib, "callDll");
+            unloadCallback.lib = lib;
+        }
+        startBarr.wait();
+        (*runPtr)();
+        endBarr.wait(unloadCallback);
+    }
+};
+
+Harness::SpinBarrier RunWithLoad::startBarr, RunWithLoad::endBarr;
+UnloadCallback RunWithLoad::unloadCallback;
+Harness::FunctionAddress RunWithLoad::runPtr;
+
+void ThreadsLoadUnload()
+{
+    const int threads = 4;
+
+    RunWithLoad::startBarr.initialize(threads);
+    RunWithLoad::endBarr.initialize(threads);
+    NativeParallelFor(threads, RunWithLoad());
+}
+
+int TestMain () {
+    const int ITERS = 20;
+    int i;
+    std::ptrdiff_t memory_leak = 0;
+
+    GetMemoryUsage();
+
+    for (int run = 0; run<2; run++) {
+        // expect that memory consumption stabilized after several runs
+        for (i=0; i<ITERS; i++) {
+            std::size_t memory_in_use = GetMemoryUsage();
+            if (run)
+                LoadThreadsUnload();
+            else
+                ThreadsLoadUnload();
+            memory_leak = GetMemoryUsage() - memory_in_use;
+            if (memory_leak == 0)  // possibly too strong?
+                break;
+        }
+        if(i==ITERS) {
+            // 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;
+}
+
+#endif // _USRDLL
diff --git a/src/test/test_malloc_whitebox.cpp b/src/test/test_malloc_whitebox.cpp
index 5f807ac..95f9936 100644
--- a/src/test/test_malloc_whitebox.cpp
+++ b/src/test/test_malloc_whitebox.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,14 @@
     the GNU General Public License.
 */
 
+/* to prevent loading dynamic TBBmalloc at startup, that is not needed
+   for the whitebox test */
+#define __TBB_SOURCE_DIRECTLY_INCLUDED 1
+
+// According to C99 standard INTPTR_MIN defined for C++
+// iff __STDC_LIMIT_MACROS pre-defined
+#define __STDC_LIMIT_MACROS 1
+
 #include "harness.h"
 #include "harness_barrier.h"
 
@@ -53,8 +61,8 @@ class AllocInfo {
     int size;
 public:
     AllocInfo() : p(NULL), val(0), size(0) {}
-    explicit AllocInfo(int size) : p((int*)scalable_malloc(size*sizeof(int))),
-                                   val(rand()), size(size) {
+    explicit AllocInfo(int sz) : p((int*)scalable_malloc(sz*sizeof(int))),
+                                   val(rand()), size(sz) {
         ASSERT(p, NULL);
         for (int k=0; k<size; k++)
             p[k] = val;
@@ -68,12 +76,18 @@ public:
     }
 };
 
-class TestLargeObjCache: NoAssign {
+class SimpleBarrier: NoAssign {
+protected:
     static Harness::SpinBarrier barrier;
 public:
-    static int largeMemSizes[LARGE_MEM_SIZES_NUM];
-
     static void initBarrier(unsigned thrds) { barrier.initialize(thrds); }
+};
+
+Harness::SpinBarrier SimpleBarrier::barrier;
+
+class TestLargeObjCache: public SimpleBarrier {
+public:
+    static int largeMemSizes[LARGE_MEM_SIZES_NUM];
 
     TestLargeObjCache( ) {}
 
@@ -117,13 +131,11 @@ public:
     }
 };
 
-Harness::SpinBarrier TestLargeObjCache::barrier;
 int TestLargeObjCache::largeMemSizes[LARGE_MEM_SIZES_NUM];
 
 #if MALLOC_CHECK_RECURSION
 
-class TestStartupAlloc: NoAssign {
-    static Harness::SpinBarrier init_barrier;
+class TestStartupAlloc: public SimpleBarrier {
     struct TestBlock {
         void *ptr;
         size_t sz;
@@ -131,11 +143,10 @@ class TestStartupAlloc: NoAssign {
     static const int ITERS = 100;
 public:
     TestStartupAlloc() {}
-    static void initBarrier(unsigned thrds) { init_barrier.initialize(thrds); }
     void operator()(int) const {
         TestBlock blocks1[ITERS], blocks2[ITERS];
 
-        init_barrier.wait();
+        barrier.wait();
 
         for (int i=0; i<ITERS; i++) {
             blocks1[i].sz = rand() % minLargeObjectSize;
@@ -165,8 +176,6 @@ public:
     }
 };
 
-Harness::SpinBarrier TestStartupAlloc::init_barrier;
-
 #endif /* MALLOC_CHECK_RECURSION */
 
 class BackRefWork: NoAssign {
@@ -206,9 +215,10 @@ public:
             scalable_free(objs[i]);
 
 #ifdef USE_WINTHREAD
-        // under Windows DllMain used to call mallocThreadShutdownNotification,
-        // as we don't use it have to call the callback manually
-        mallocThreadShutdownNotification(NULL);
+        // Under Windows DllMain is used for mallocThreadShutdownNotification
+        // calling. As DllMain is not used during whitebox testing,
+        // we have to call the callback manually.
+        __TBB_mallocThreadShutdownNotification();
 #endif
     }
 };
@@ -226,6 +236,48 @@ static void cleanObjectCache()
     defaultMemPool->extMemPool.hardCachesCleanup();
 }
 
+class TestInvalidBackrefs: public SimpleBarrier {
+    static const int BACKREF_GROWTH_ITERS = 200*1024;
+
+    static tbb::atomic<bool> backrefGrowthDone;
+    static void *ptrs[BACKREF_GROWTH_ITERS];
+public:
+    TestInvalidBackrefs() {}
+    void operator()(int id) const {
+
+        if (!id) {
+            backrefGrowthDone = false;
+            barrier.wait();
+
+            for (int i=0; i<BACKREF_GROWTH_ITERS; i++)
+                ptrs[i] = scalable_malloc(minLargeObjectSize);
+            backrefGrowthDone = true;
+            for (int i=0; i<BACKREF_GROWTH_ITERS; i++)
+                scalable_free(ptrs[i]);
+        } else {
+            void *p2 = scalable_malloc(minLargeObjectSize-1);
+            char *p1 = (char*)scalable_malloc(minLargeObjectSize-1);
+            LargeObjectHdr *hdr =
+                (LargeObjectHdr*)(p1+minLargeObjectSize-1 - sizeof(LargeObjectHdr));
+            hdr->backRefIdx.master = 7;
+            hdr->backRefIdx.largeObj = 1;
+            hdr->backRefIdx.offset = 2000;
+
+            barrier.wait();
+
+            while (!backrefGrowthDone) {
+                scalable_free(p2);
+                p2 = scalable_malloc(minLargeObjectSize-1);
+            }
+            scalable_free(p1);
+            scalable_free(p2);
+        }
+    }
+};
+
+tbb::atomic<bool> TestInvalidBackrefs::backrefGrowthDone;
+void *TestInvalidBackrefs::ptrs[BACKREF_GROWTH_ITERS];
+
 void TestBackRef() {
     size_t beforeNumBackRef, afterNumBackRef;
 
@@ -248,6 +300,14 @@ void TestBackRef() {
     NativeParallelFor( 1, FreeBlockPoolHit() );
     afterNumBackRef = allocatedBackRefCount();
     ASSERT(beforeNumBackRef==afterNumBackRef, "backreference leak detected");
+
+    // This is a regression test against race condition between backreference
+    // extension and checking invalid BackRefIdx.
+    // While detecting is object large or small, scalable_free 1st check for
+    // large objects, so there is a chance to prepend small object with
+    // seems valid BackRefIdx for large objects, and thus trigger the bug.
+    TestInvalidBackrefs::initBarrier(MaxThread);
+    NativeParallelFor( MaxThread, TestInvalidBackrefs() );
 }
 
 void *getMem(intptr_t /*pool_id*/, size_t &bytes)
@@ -297,26 +357,27 @@ int putMallocMem(intptr_t /*pool_id*/, void *ptr, size_t bytes)
 }
 
 void TestPools() {
-    rml::MemPoolPolicy pol;
+    rml::MemPoolPolicy pol(getMem, putMem);
     size_t beforeNumBackRef, afterNumBackRef;
 
-    pol.pAlloc = getMem;
-    pol.pFree = putMem;
-    pol.granularity = 8;
-    rml::MemoryPool *pool1 = pool_create(0, &pol);
-    rml::MemoryPool *pool2 = pool_create(0, &pol);
+    rml::MemoryPool *pool1;
+    rml::MemoryPool *pool2;
+    pool_create_v1(0, &pol, &pool1);
+    pool_create_v1(0, &pol, &pool2);
     pool_destroy(pool1);
     pool_destroy(pool2);
 
     cleanObjectCache();
     beforeNumBackRef = allocatedBackRefCount();
-    rml::MemoryPool *fixedPool = pool_create(0, &pol);
+    rml::MemoryPool *fixedPool;
 
+    pool_create_v1(0, &pol, &fixedPool);
     pol.pAlloc = getMallocMem;
     pol.pFree = putMallocMem;
     pol.granularity = 8;
-    rml::MemoryPool *mallocPool = pool_create(0, &pol);
+    rml::MemoryPool *mallocPool;
 
+    pool_create_v1(0, &pol, &mallocPool);
 /* check that large object cache (LOC) returns correct size for cached objects
    passBackendSz Byte objects are cached in LOC, but bypassed the backend, so
    memory requested directly from allocation callback.
@@ -342,12 +403,16 @@ void TestPools() {
     }
 
     void *smallObj =  pool_malloc(fixedPool, 10);
+    ASSERT(smallObj, "Memory was not allocated");
     memset(smallObj, 1, 10);
     void *ptr = pool_malloc(fixedPool, 1024);
+    ASSERT(ptr, "Memory was not allocated");
     memset(ptr, 1, 1024);
     void *largeObj = pool_malloc(fixedPool, minLargeObjectSize);
+    ASSERT(largeObj, "Memory was not allocated");
     memset(largeObj, 1, minLargeObjectSize);
     ptr = pool_malloc(fixedPool, minLargeObjectSize);
+    ASSERT(ptr, "Memory was not allocated");
     memset(ptr, minLargeObjectSize, minLargeObjectSize);
     pool_malloc(fixedPool, 10*minLargeObjectSize); // no leak for unsuccesful allocations
     pool_free(fixedPool, smallObj);
@@ -356,6 +421,7 @@ void TestPools() {
     // provoke large object cache cleanup and hope no leaks occurs
     for (size_t sz=minLargeObjectSize; sz<1*1024*1024; sz+=largeBlockCacheStep) {
         ptr = pool_malloc(mallocPool, sz);
+        ASSERT(ptr, "Memory was not allocated");
         memset(ptr, sz, sz);
         pool_free(mallocPool, ptr);
     }
@@ -376,12 +442,14 @@ void TestObjectRecognition() {
     ASSERT(getObjectSize(falseObjectSize)!=falseObjectSize, "Error in test: bad choice for false object size");
 
     void* mem = scalable_malloc(2*blockSize);
+    ASSERT(mem, "Memory was not allocated");
     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 + headersSize);
+    ASSERT(bufferLOH, "Memory was not allocated");
     LargeObjectHdr* falseLO = 
         (LargeObjectHdr*)alignUp((uintptr_t)bufferLOH + headersSize, blockSize);
     LargeObjectHdr* headerLO = (LargeObjectHdr*)falseLO-1;
@@ -437,25 +505,24 @@ void TestObjectRecognition() {
     scalable_free(bufferLOH);
 }
 
-class TestBackendWork: NoAssign {
+class TestBackendWork: public SimpleBarrier {
     struct TestBlock {
         intptr_t   data;
         BackRefIdx idx;
     };
     static const int ITERS = 100;
 
-    Harness::SpinBarrier *barrier;
     rml::internal::Backend *backend;
 public:
-    TestBackendWork(rml::internal::Backend *backend, Harness::SpinBarrier *barrier) : 
-        backend(backend), barrier(barrier) {}
+    TestBackendWork(rml::internal::Backend *bknd) : backend(bknd) {}
     void operator()(int) const {
-        barrier->wait();
+        barrier.wait();
         
         for (int i=0; i<ITERS; i++) {
-            BlockI *block16K = backend->get16KBlock(1, /*startup=*/false);
-            LargeMemoryBlock *lmb = backend->getLargeBlock(16*1024, /*startup=*/false);
-            backend->put16KBlock(block16K, /*startup=*/false);
+            BlockI *block16K = backend->get16KBlock(1);
+            ASSERT(block16K, "Memory was not allocated");
+            LargeMemoryBlock *lmb = backend->getLargeBlock(16*1024);
+            backend->put16KBlock(block16K);
             backend->putLargeBlock(lmb);
         }
     }
@@ -463,28 +530,51 @@ public:
 
 void TestBackend()
 {
-    rml::MemPoolPolicy pol;
-    Harness::SpinBarrier barrier;
-
-    pol.pAlloc = getMallocMem;
-    pol.pFree = putMallocMem;
-    pol.granularity = 8;
-    rml::MemoryPool *mPool = pool_create(0, &pol);
+    rml::MemPoolPolicy pol(getMallocMem, putMallocMem);
+    rml::MemoryPool *mPool;
+    pool_create_v1(0, &pol, &mPool);
     rml::internal::ExtMemoryPool *ePool = 
         &((rml::internal::MemoryPool*)mPool)->extMemPool;
     rml::internal::Backend *backend = &ePool->backend;
 
     for( int p=MaxThread; p>=MinThread; --p ) {
-        barrier.initialize(p);
-        NativeParallelFor( p, TestBackendWork(backend, &barrier) );
+        TestBackendWork::initBarrier(p);
+        NativeParallelFor( p, TestBackendWork(backend) );
     }
 
-    BlockI *block = backend->get16KBlock(1, /*startup=*/false);
-    backend->put16KBlock(block, /*startup=*/false);
+    BlockI *block = backend->get16KBlock(1);
+    ASSERT(block, "Memory was not allocated");
+    backend->put16KBlock(block);
 
     pool_destroy(mPool);
 }
 
+void TestBitMask()
+{
+    BitMask<256> mask;
+
+    mask.reset();
+    mask.set(10, 1);
+    mask.set(5, 1);
+    mask.set(1, 1);
+    ASSERT(mask.getMinTrue(2) == 5, NULL);
+
+    mask.reset();
+    mask.set(0, 1);
+    mask.set(64, 1);
+    mask.set(63, 1);
+    mask.set(200, 1);
+    mask.set(255, 1);
+    ASSERT(mask.getMinTrue(0) == 0, NULL);
+    ASSERT(mask.getMinTrue(1) == 63, NULL);
+    ASSERT(mask.getMinTrue(63) == 63, NULL);
+    ASSERT(mask.getMinTrue(64) == 64, NULL);
+    ASSERT(mask.getMinTrue(101) == 200, NULL);
+    ASSERT(mask.getMinTrue(201) == 255, NULL);
+    mask.set(255, 0);
+    ASSERT(mask.getMinTrue(201) == -1, NULL);
+}
+
 int TestMain () {
     // backreference requires that initialization was done
     if(!isMallocInitialized()) doInitialization();
@@ -511,5 +601,6 @@ int TestMain () {
     }
 
     TestObjectRecognition();
+    TestBitMask();
     return Harness::Done;
 }
diff --git a/src/test/test_model_plugin.cpp b/src/test/test_model_plugin.cpp
index e81c7bd..39facd8 100644
--- a/src/test/test_model_plugin.cpp
+++ b/src/test/test_model_plugin.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,19 @@
     the GNU General Public License.
 */
 
+#include "tbb/tbb_config.h"
+
+#if __TBB_DEFINE_MIC
+
+#ifndef _USRDLL
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+int TestMain() {
+    return Harness::Skipped;
+}
+#endif
+
+#else /* !__MIC__ */
 
 #if _WIN32 || _WIN64
 #include "tbb/machine/windows_api.h"
@@ -36,8 +49,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-#include "tbb/tbb_config.h"
-
 #if !TBB_USE_EXCEPTIONS && _MSC_VER
     // Suppress "C++ exception handler used, but unwind semantics are not enabled" warning in STL headers
     #pragma warning (push)
@@ -115,6 +126,7 @@ void plugin_call(int maxthread)
 
 #define HARNESS_NO_ASSERT 1
 #include "harness.h"
+#include "harness_dynamic_libs.h"
 
 extern "C" void plugin_call(int);
 
@@ -170,6 +182,12 @@ int use_lot_of_tls() {
 
 typedef void (*PLUGIN_CALL)(int);
 
+#if __linux__
+    #define RML_LIBRARY_NAME(base) TEST_LIBRARY_NAME(base) ".1"
+#else
+    #define RML_LIBRARY_NAME(base) TEST_LIBRARY_NAME(base)
+#endif
+
 int TestMain () {
 #if !RML_USE_WCRM
     PLUGIN_CALL my_plugin_call;
@@ -177,8 +195,8 @@ int TestMain () {
     int tls_key_count = use_lot_of_tls();
     REMARK("%d thread local objects allocated in advance\n", tls_key_count);
 
+    Harness::LIBRARY_HANDLE hLib;
 #if _WIN32 || _WIN64
-    HMODULE hLib;
     hLib = LoadLibrary("irml.dll");
     if ( !hLib )
         hLib = LoadLibrary("irml_debug.dll");
@@ -186,18 +204,7 @@ int TestMain () {
         return Harness::Skipped; // No shared RML, skip the test
     FreeLibrary(hLib);
 #else /* !WIN */
-#if __APPLE__
-    #define LIBRARY_NAME(base) base".dylib"
-#else
-    #define LIBRARY_NAME(base) base".so"
-#endif
-    void* hLib;
 #if __TBB_ARENA_PER_MASTER
-#if __linux__
-    #define RML_LIBRARY_NAME(base) LIBRARY_NAME(base) ".1"
-#else
-    #define RML_LIBRARY_NAME(base) LIBRARY_NAME(base)
-#endif
     hLib = dlopen(RML_LIBRARY_NAME("libirml"), RTLD_LAZY);
     if ( !hLib )
         hLib = dlopen(RML_LIBRARY_NAME("libirml_debug"), RTLD_LAZY);
@@ -208,47 +215,33 @@ int TestMain () {
 #endif /* OS */
     for( int i=1; i<100; ++i ) {  
         REMARK("Iteration %d, loading plugin library...\n", i);
-#if _WIN32 || _WIN64
-        hLib = LoadLibrary("test_model_plugin_dll.dll");
+        hLib = Harness::OpenLibrary(TEST_LIBRARY_NAME("test_model_plugin_dll"));
         if ( !hLib ) {
 #if !__TBB_NO_IMPLICIT_LINKAGE
+#if _WIN32 || _WIN64
             report_error_in("LoadLibrary");
-            return -1;
 #else
-            return Harness::Skipped;
-#endif
-        }
-        my_plugin_call = (PLUGIN_CALL) GetProcAddress(hLib, "plugin_call");
-        if (my_plugin_call==NULL) {
-            report_error_in("GetProcAddress");
-            return -1;
-        }
-#else /* !WIN */
-        hLib = dlopen( LIBRARY_NAME("test_model_plugin_dll"), RTLD_LAZY );
-        if ( !hLib ) {
-#if !__TBB_NO_IMPLICIT_LINKAGE
             report_error_in("dlopen");
+#endif
             return -1;
 #else
             return Harness::Skipped;
 #endif
         }
-        my_plugin_call = PLUGIN_CALL (dlsym(hLib, "plugin_call"));
+        my_plugin_call = (PLUGIN_CALL)Harness::GetAddress(hLib, "plugin_call");
         if (my_plugin_call==NULL) {
+#if _WIN32 || _WIN64
+            report_error_in("GetProcAddress");
+#else
             report_error_in("dlsym");
+#endif
             return -1;
         }
-#endif /* !WIN */
-
         REMARK("Calling plugin method...\n");
         my_plugin_call(MaxThread);
 
         REMARK("Unloading plugin library...\n");
-#if _WIN32 || _WIN64
-        FreeLibrary(hLib);
-#else
-        dlclose(hLib);
-#endif
+        Harness::CloseLibrary(hLib);
     } // end for(1,100)
 
     return Harness::Done;
@@ -258,3 +251,4 @@ int TestMain () {
 }
 
 #endif//_USRDLL
+#endif//__MIC__
diff --git a/src/test/test_multifunction_node.cpp b/src/test/test_multifunction_node.cpp
new file mode 100644
index 0000000..9e2935d
--- /dev/null
+++ b/src/test/test_multifunction_node.cpp
@@ -0,0 +1,470 @@
+/*
+    Copyright 2005-2012 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 "harness_graph.h"
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/spin_mutex.h"
+
+#if !__SUNPRO_CC
+
+tbb::spin_mutex global_mutex;
+
+#define N 100
+#define MAX_NODES 4
+
+//! Performs test on function nodes with limited concurrency and buffering
+/** Theses tests check:
+    1) that the number of executing copies never exceed the concurreny limit
+    2) that the node never rejects
+    3) that no items are lost
+    and 4) all of this happens even if there are multiple predecessors and successors
+*/
+
+template< typename InputType >
+struct parallel_put_until_limit : private NoAssign {
+
+    harness_counting_sender<InputType> *my_senders;
+
+    parallel_put_until_limit( harness_counting_sender<InputType> *senders ) : my_senders(senders) {}
+
+    void operator()( int i ) const  {
+        if ( my_senders ) {
+            my_senders[i].try_put_until_limit();
+        }
+    }
+
+};
+     
+//! exercise buffered multifunction_node.  
+template< typename InputType, typename OutputTuple, typename Body >
+void buffered_levels( size_t concurrency, Body body ) {
+    typedef typename std::tuple_element<0,OutputTuple>::type OutputType;
+    // Do for lc = 1 to concurrency level
+    for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
+        tbb::flow::graph g;
+
+        // Set the execute_counter back to zero in the harness
+        harness_graph_multifunction_executor<InputType, OutputTuple,tbb::spin_mutex>::execute_count = 0;
+        // Set the max allowed executors to lc.  There is a check in the functor to make sure this is never exceeded.
+        harness_graph_multifunction_executor<InputType, OutputTuple,tbb::spin_mutex>::max_executors = lc;
+
+        // Create the function_node with the appropriate concurreny level, and use default buffering
+        tbb::flow::multifunction_node< InputType, OutputTuple > exe_node( g, lc, body );
+   
+        //Create a vector of identical exe_nodes
+        std::vector< tbb::flow::multifunction_node< InputType, OutputTuple > > exe_vec(2, exe_node);
+
+        // exercise each of the copied nodes
+        for (size_t node_idx=0; node_idx<exe_vec.size(); ++node_idx) {
+            for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
+                // Create num_receivers counting receivers and connect the exe_vec[node_idx] to them.
+                harness_mapped_receiver<OutputType> *receivers = new harness_mapped_receiver<OutputType>[num_receivers];
+                for (size_t r = 0; r < num_receivers; ++r ) {
+                    tbb::flow::make_edge( tbb::flow::output_port<0>(exe_vec[node_idx]), receivers[r] );
+                }
+
+                // Do the test with varying numbers of senders
+                harness_counting_sender<InputType> *senders = NULL;
+                for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {
+                    // Create num_senders senders, set there message limit each to N, and connect them to the exe_vec[node_idx]
+                    senders = new harness_counting_sender<InputType>[num_senders];
+                    for (size_t s = 0; s < num_senders; ++s ) {
+                        senders[s].my_limit = N;
+                        tbb::flow::make_edge( senders[s], exe_vec[node_idx] );
+                    }
+
+                    // Initialize the receivers so they know how many senders and messages to check for
+                    for (size_t r = 0; r < num_receivers; ++r ) {
+                         receivers[r].initialize_map( N, num_senders ); 
+                    }
+
+                    // Do the test
+                    NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );
+                    g.wait_for_all();
+
+                    // cofirm that each sender was requested from N times 
+                    for (size_t s = 0; s < num_senders; ++s ) {
+                        size_t n = senders[s].my_received;
+                        ASSERT( n == N, NULL ); 
+                        ASSERT( senders[s].my_receiver == &exe_vec[node_idx], NULL );
+                    }
+                    // validate the receivers
+                    for (size_t r = 0; r < num_receivers; ++r ) {
+                        receivers[r].validate();
+                    }
+                    delete [] senders;
+                }
+                for (size_t r = 0; r < num_receivers; ++r ) {
+                    tbb::flow::remove_edge( tbb::flow::output_port<0>(exe_vec[node_idx]), receivers[r] );
+                }
+                ASSERT( exe_vec[node_idx].try_put( InputType() ) == true, NULL );
+                g.wait_for_all();
+                for (size_t r = 0; r < num_receivers; ++r ) {
+                    // since it's detached, nothing should have changed
+                    receivers[r].validate();
+                }
+                delete [] receivers;
+            }
+        } 
+    }
+}
+
+const size_t Offset = 123;
+tbb::atomic<size_t> global_execute_count;
+
+struct inc_functor {
+
+    tbb::atomic<size_t> local_execute_count;
+    inc_functor( ) { local_execute_count = 0; }
+    inc_functor( const inc_functor &f ) { local_execute_count = f.local_execute_count; }
+
+    template<typename output_ports_type>
+    void operator()( int i, output_ports_type &p ) {
+       ++global_execute_count;
+       ++local_execute_count;
+       (void)std::get<0>(p).try_put(i);
+    }
+
+};
+
+template< typename InputType, typename OutputTuple >
+void buffered_levels_with_copy( size_t concurrency ) {
+    typedef typename std::tuple_element<0,OutputTuple>::type OutputType;
+    // Do for lc = 1 to concurrency level
+    for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
+        tbb::flow::graph g;
+
+        inc_functor cf;
+        cf.local_execute_count = Offset;
+        global_execute_count = Offset;
+       
+        tbb::flow::multifunction_node< InputType, OutputTuple > exe_node( g, lc, cf );
+
+        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
+           harness_mapped_receiver<OutputType> *receivers = new harness_mapped_receiver<OutputType>[num_receivers];
+           for (size_t r = 0; r < num_receivers; ++r ) {
+               tbb::flow::make_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );
+            }
+
+            harness_counting_sender<InputType> *senders = NULL;
+            for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {
+                senders = new harness_counting_sender<InputType>[num_senders];
+                for (size_t s = 0; s < num_senders; ++s ) {
+                    senders[s].my_limit = N;
+                    tbb::flow::make_edge( senders[s], exe_node );
+                }
+
+                for (size_t r = 0; r < num_receivers; ++r ) {
+                    receivers[r].initialize_map( N, num_senders ); 
+                }
+
+                NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );
+                g.wait_for_all();
+
+                for (size_t s = 0; s < num_senders; ++s ) {
+                    size_t n = senders[s].my_received;
+                    ASSERT( n == N, NULL ); 
+                    ASSERT( senders[s].my_receiver == &exe_node, NULL );
+                }
+                for (size_t r = 0; r < num_receivers; ++r ) {
+                    receivers[r].validate();
+                }
+                delete [] senders;
+            }
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                tbb::flow::remove_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );
+            }
+            ASSERT( exe_node.try_put( InputType() ) == true, NULL );
+            g.wait_for_all();
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                receivers[r].validate();
+            }
+            delete [] receivers;
+        }
+
+        // validate that the local body matches the global execute_count and both are correct
+        inc_functor body_copy = tbb::flow::copy_body<inc_functor>( exe_node );
+        const size_t expected_count = N/2 * MAX_NODES * MAX_NODES * ( MAX_NODES + 1 ) + MAX_NODES + Offset; 
+        size_t global_count = global_execute_count;
+        size_t inc_count = body_copy.local_execute_count;
+        ASSERT( global_count == expected_count && global_count == inc_count, NULL ); 
+    }
+}
+
+template< typename InputType, typename OutputTuple >
+void run_buffered_levels( int c ) {
+    typedef typename tbb::flow::multifunction_node<InputType,OutputTuple>::output_ports_type output_ports_type;
+    harness_graph_multifunction_executor<InputType, OutputTuple, tbb::spin_mutex>::max_executors = c;
+    #if __TBB_LAMBDAS_PRESENT
+    buffered_levels<InputType,OutputTuple>( c, []( InputType i, output_ports_type &p ) { harness_graph_multifunction_executor<InputType, OutputTuple, tbb::spin_mutex>::func(i,p); } );
+    #endif
+    buffered_levels<InputType,OutputTuple>( c, &harness_graph_multifunction_executor<InputType, OutputTuple, tbb::spin_mutex>::func );
+    buffered_levels<InputType,OutputTuple>( c, typename harness_graph_multifunction_executor<InputType, OutputTuple, tbb::spin_mutex>::functor() );
+    buffered_levels_with_copy<InputType,OutputTuple>( c );
+}
+
+
+//! Performs test on executable nodes with limited concurrency
+/** Theses tests check:
+    1) that the nodes will accepts puts up to the concurrency limit,
+    2) the nodes do not exceed the concurrency limit even when run with more threads (this is checked in the harness_graph_executor), 
+    3) the nodes will receive puts from multiple successors simultaneously,
+    and 4) the nodes will send to multiple predecessors.
+    There is no checking of the contents of the messages for corruption.
+*/
+     
+template< typename InputType, typename OutputTuple, typename Body >
+void concurrency_levels( size_t concurrency, Body body ) {
+    typedef typename std::tuple_element<0,OutputTuple>::type OutputType;
+    for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
+        tbb::flow::graph g;
+        harness_graph_multifunction_executor<InputType, OutputTuple, tbb::spin_mutex>::execute_count = 0;
+
+        tbb::flow::multifunction_node< InputType, OutputTuple, tbb::flow::rejecting > exe_node( g, lc, body );
+
+        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
+
+            harness_counting_receiver<OutputType> *receivers = new harness_counting_receiver<OutputType>[num_receivers];
+
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                tbb::flow::make_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );
+            }
+
+            harness_counting_sender<InputType> *senders = NULL;
+    
+            for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {
+                {
+                    // lock m to prevent exe_node from finishing
+                    tbb::spin_mutex::scoped_lock l( harness_graph_multifunction_executor< InputType, OutputTuple, tbb::spin_mutex >::mutex );
+    
+                    // put to lc level, it will accept and then block at m
+                    for ( size_t c = 0 ; c < lc ; ++c ) {
+                        ASSERT( exe_node.try_put( InputType() ) == true, NULL );
+                    }
+                    // it only accepts to lc level
+                    ASSERT( exe_node.try_put( InputType() ) == false, NULL );
+    
+                    senders = new harness_counting_sender<InputType>[num_senders];
+                    for (size_t s = 0; s < num_senders; ++s ) {
+                       // register a sender
+                       senders[s].my_limit = N;
+                       exe_node.register_predecessor( senders[s] );
+                    }
+    
+                } // release lock at end of scope, setting the exe node free to continue
+                // wait for graph to settle down
+                g.wait_for_all();
+    
+                // confirm that each sender was requested from N times 
+                for (size_t s = 0; s < num_senders; ++s ) {
+                    size_t n = senders[s].my_received;
+                    ASSERT( n == N, NULL ); 
+                    ASSERT( senders[s].my_receiver == &exe_node, NULL );
+                }
+                // confirm that each receivers got N * num_senders + the initial lc puts
+                for (size_t r = 0; r < num_receivers; ++r ) {
+                    size_t n = receivers[r].my_count;
+                    ASSERT( n == num_senders*N+lc, NULL );
+                    receivers[r].my_count = 0;
+                }
+                delete [] senders;
+            }
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                tbb::flow::remove_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );
+            }
+            ASSERT( exe_node.try_put( InputType() ) == true, NULL );
+            g.wait_for_all();
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                ASSERT( int(receivers[r].my_count) == 0, NULL );
+            }
+            delete [] receivers;
+        }
+    }
+}
+
+template< typename InputType, typename OutputTuple >
+void run_concurrency_levels( int c ) {
+    harness_graph_multifunction_executor<InputType, OutputTuple, tbb::spin_mutex>::max_executors = c;
+    typedef typename tbb::flow::multifunction_node<InputType,OutputTuple>::output_ports_type output_ports_type;
+    #if __TBB_LAMBDAS_PRESENT
+    concurrency_levels<InputType,OutputTuple>( c, []( InputType i, output_ports_type &p ) { harness_graph_multifunction_executor<InputType, OutputTuple, tbb::spin_mutex>::func(i,p); } );
+    #endif
+    concurrency_levels<InputType,OutputTuple>( c, &harness_graph_multifunction_executor<InputType, OutputTuple, tbb::spin_mutex>::func );
+    concurrency_levels<InputType,OutputTuple>( c, typename harness_graph_multifunction_executor<InputType, OutputTuple, tbb::spin_mutex>::functor() );
+}
+
+
+struct empty_no_assign { 
+   empty_no_assign() {}
+   empty_no_assign( int ) {}
+   operator int() { return 0; }
+   operator int() const { return 0; }
+};
+
+template< typename InputType >
+struct parallel_puts : private NoAssign {
+
+    tbb::flow::receiver< InputType > * const my_exe_node;
+
+    parallel_puts( tbb::flow::receiver< InputType > &exe_node ) : my_exe_node(&exe_node) {}
+
+    void operator()( int ) const  {
+        for ( int i = 0; i < N; ++i ) {
+            // the nodes will accept all puts
+            ASSERT( my_exe_node->try_put( InputType() ) == true, NULL );
+        }
+    }
+
+};
+
+//! Performs test on executable nodes with unlimited concurrency
+/** These tests check:
+    1) that the nodes will accept all puts
+    2) the nodes will receive puts from multiple predecessors simultaneously,
+    and 3) the nodes will send to multiple successors.
+    There is no checking of the contents of the messages for corruption.
+*/
+
+template< typename InputType, typename OutputTuple, typename Body >
+void unlimited_concurrency( Body body ) {
+    typedef typename std::tuple_element<0,OutputTuple>::type OutputType;
+
+    for (int p = 1; p < 2*MaxThread; ++p) {
+        tbb::flow::graph g;
+        tbb::flow::multifunction_node< InputType, OutputTuple, tbb::flow::rejecting > exe_node( g, tbb::flow::unlimited, body );
+
+        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
+            harness_counting_receiver<OutputType> *receivers = new harness_counting_receiver<OutputType>[num_receivers];
+            harness_graph_multifunction_executor<InputType, OutputTuple>::execute_count = 0;
+
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                tbb::flow::make_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );
+            }
+
+            NativeParallelFor( p, parallel_puts<InputType>(exe_node) );
+            g.wait_for_all(); 
+
+            // 2) the nodes will receive puts from multiple predecessors simultaneously,
+            size_t ec = harness_graph_multifunction_executor<InputType, OutputTuple>::execute_count;
+            ASSERT( (int)ec == p*N, NULL ); 
+            for (size_t r = 0; r < num_receivers; ++r ) {
+                size_t c = receivers[r].my_count;
+                // 3) the nodes will send to multiple successors.
+                ASSERT( (int)c == p*N, NULL );
+            }
+        }
+    }
+}
+
+template< typename InputType, typename OutputTuple >
+void run_unlimited_concurrency() {
+    typedef typename tbb::flow::multifunction_node<InputType,OutputTuple>::output_ports_type output_ports_type;
+    harness_graph_multifunction_executor<InputType, OutputTuple>::max_executors = 0;
+    #if __TBB_LAMBDAS_PRESENT
+    unlimited_concurrency<InputType,OutputTuple>( []( InputType i, output_ports_type &p ) { harness_graph_multifunction_executor<InputType, OutputTuple>::func(i,p); } );
+    #endif
+    unlimited_concurrency<InputType,OutputTuple>( &harness_graph_multifunction_executor<InputType, OutputTuple>::func );
+    unlimited_concurrency<InputType,OutputTuple>( typename harness_graph_multifunction_executor<InputType, OutputTuple>::functor() );
+}
+
+template<typename InputType, typename OutputTuple>
+struct oddEvenBody {
+    typedef typename tbb::flow::multifunction_node<InputType,OutputTuple>::output_ports_type output_ports_type;
+    typedef typename std::tuple_element<0,OutputTuple>::type EvenType;
+    typedef typename std::tuple_element<1,OutputTuple>::type OddType;
+    void operator() (const InputType &i, output_ports_type &p) {
+        if((int)i % 2) {
+            (void)std::get<1>(p).try_put(OddType(i));
+        }
+        else {
+            (void)std::get<0>(p).try_put(EvenType(i));
+        }
+    }
+};
+
+template<typename InputType, typename OutputTuple >
+void run_multiport_test(int num_threads) {
+    typedef typename tbb::flow::multifunction_node<InputType, OutputTuple> mo_node_type;
+    typedef typename std::tuple_element<0,OutputTuple>::type EvenType;
+    typedef typename std::tuple_element<1,OutputTuple>::type OddType;
+    tbb::task_scheduler_init init(num_threads);
+    tbb::flow::graph g;
+    mo_node_type mo_node(g, tbb::flow::unlimited, oddEvenBody<InputType, OutputTuple>() );
+
+    tbb::flow::queue_node<EvenType> q0(g);
+    tbb::flow::queue_node<OddType> q1(g);
+
+    tbb::flow::make_edge(tbb::flow::output_port<0>(mo_node), q0);
+    tbb::flow::make_edge(tbb::flow::output_port<1>(mo_node), q1);
+
+    for(InputType i = 0; i < N; ++i) {
+        mo_node.try_put(i);
+    }
+
+    g.wait_for_all();
+    for(int i = 0; i < N/2; ++i) {
+        EvenType e;
+        OddType o;
+        ASSERT(q0.try_get(e) && (int)e % 2 == 0, NULL);
+        ASSERT(q1.try_get(o) && (int)o % 2 == 1, NULL);
+    }
+}
+
+//! Tests limited concurrency cases for nodes that accept data messages
+void test_concurrency(int num_threads) {
+    tbb::task_scheduler_init init(num_threads);
+    run_concurrency_levels<int,std::tuple<int> >(num_threads);
+    run_concurrency_levels<int,std::tuple<tbb::flow::continue_msg> >(num_threads);
+    run_buffered_levels<int, std::tuple<int> >(num_threads);
+    run_unlimited_concurrency<int, std::tuple<int> >();
+    run_unlimited_concurrency<int,std::tuple<empty_no_assign> >();
+    run_unlimited_concurrency<empty_no_assign,std::tuple<int> >();
+    run_unlimited_concurrency<empty_no_assign,std::tuple<empty_no_assign> >();
+    run_unlimited_concurrency<int,std::tuple<tbb::flow::continue_msg> >();
+    run_unlimited_concurrency<empty_no_assign,std::tuple<tbb::flow::continue_msg> >();
+    run_multiport_test<int, std::tuple<int, int> >(num_threads);
+    run_multiport_test<float, std::tuple<int, double> >(num_threads);
+}
+
+int TestMain() { 
+    current_executors = 0;
+    if( MinThread<1 ) {
+        REPORT("number of threads must be positive\n");
+        exit(1);
+    }
+    for( int p=MinThread; p<=MaxThread; ++p ) {
+       test_concurrency(p);
+   }
+   return Harness::Done;
+}
+#else  // __SUNPRO_CC
+int TestMain() { 
+   return Harness::Skipped;
+}
+#endif  // __SUNPRO_CC
diff --git a/src/test/test_multioutput_function_node.cpp b/src/test/test_multioutput_function_node.cpp
deleted file mode 100644
index 569cb83..0000000
--- a/src/test/test_multioutput_function_node.cpp
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
-
-    This file is part of Threading Building Blocks.
-
-    Threading Building Blocks is free software; you can redistribute it
-    and/or modify it under the terms of the GNU General Public License
-    version 2 as published by the Free Software Foundation.
-
-    Threading Building Blocks is distributed in the hope that it will be
-    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with Threading Building Blocks; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    As a special exception, you may use this file as part of a free software
-    library without restriction.  Specifically, if other files instantiate
-    templates or use macros or inline functions from this file, or you compile
-    this file and link it with other files to produce an executable, this
-    file does not by itself cause the resulting executable to be covered by
-    the GNU General Public License.  This exception does not however
-    invalidate any other reasons why the executable file might be covered by
-    the GNU General Public License.
-*/
-
-#define TBB_PREVIEW_GRAPH_NODES 1
-#include "harness_graph.h"
-
-#include "tbb/task_scheduler_init.h"
-#include "tbb/spin_mutex.h"
-
-#if !__SUNPRO_CC
-
-tbb::spin_mutex global_mutex;
-
-#define N 100
-#define MAX_NODES 4
-
-//! Performs test on function nodes with limited concurrency and buffering
-/** Theses tests check:
-    1) that the number of executing copies never exceed the concurreny limit
-    2) that the node never rejects
-    3) that no items are lost
-    and 4) all of this happens even if there are multiple predecessors and successors
-*/
-
-template< typename InputType >
-struct parallel_put_until_limit : private NoAssign {
-
-    harness_counting_sender<InputType> *my_senders;
-
-    parallel_put_until_limit( harness_counting_sender<InputType> *senders ) : my_senders(senders) {}
-
-    void operator()( int i ) const  {
-        if ( my_senders ) {
-            my_senders[i].try_put_until_limit();
-        }
-    }
-
-};
-     
-//! exercise buffered multioutput_function_node.  
-template< typename InputType, typename OutputTuple, typename Body >
-void buffered_levels( size_t concurrency, Body body ) {
-    typedef typename std::tuple_element<0,OutputTuple>::type OutputType;
-    // Do for lc = 1 to concurrency level
-    for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
-        tbb::flow::graph g;
-
-        // Set the execute_counter back to zero in the harness
-        harness_graph_multioutput_executor<InputType, OutputTuple,tbb::spin_mutex>::execute_count = 0;
-        // Set the max allowed executors to lc.  There is a check in the functor to make sure this is never exceeded.
-        harness_graph_multioutput_executor<InputType, OutputTuple,tbb::spin_mutex>::max_executors = lc;
-
-        // Create the function_node with the appropriate concurreny level, and use default buffering
-        tbb::flow::multioutput_function_node< InputType, OutputTuple > exe_node( g, lc, body );
-   
-        //Create a vector of identical exe_nodes
-        std::vector< tbb::flow::multioutput_function_node< InputType, OutputTuple > > exe_vec(2, exe_node);
-
-        // exercise each of the copied nodes
-        for (size_t node_idx=0; node_idx<exe_vec.size(); ++node_idx) {
-            for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
-                // Create num_receivers counting receivers and connect the exe_vec[node_idx] to them.
-                harness_mapped_receiver<OutputType> *receivers = new harness_mapped_receiver<OutputType>[num_receivers];
-                for (size_t r = 0; r < num_receivers; ++r ) {
-                    tbb::flow::make_edge( tbb::flow::output_port<0>(exe_vec[node_idx]), receivers[r] );
-                }
-
-                // Do the test with varying numbers of senders
-                harness_counting_sender<InputType> *senders = NULL;
-                for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {
-                    // Create num_senders senders, set there message limit each to N, and connect them to the exe_vec[node_idx]
-                    senders = new harness_counting_sender<InputType>[num_senders];
-                    for (size_t s = 0; s < num_senders; ++s ) {
-                        senders[s].my_limit = N;
-                        tbb::flow::make_edge( senders[s], exe_vec[node_idx] );
-                    }
-
-                    // Initialize the receivers so they know how many senders and messages to check for
-                    for (size_t r = 0; r < num_receivers; ++r ) {
-                         receivers[r].initialize_map( N, num_senders ); 
-                    }
-
-                    // Do the test
-                    NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );
-                    g.wait_for_all();
-
-                    // cofirm that each sender was requested from N times 
-                    for (size_t s = 0; s < num_senders; ++s ) {
-                        size_t n = senders[s].my_received;
-                        ASSERT( n == N, NULL ); 
-                        ASSERT( senders[s].my_receiver == &exe_vec[node_idx], NULL );
-                    }
-                    // validate the receivers
-                    for (size_t r = 0; r < num_receivers; ++r ) {
-                        receivers[r].validate();
-                    }
-                    delete [] senders;
-                }
-                for (size_t r = 0; r < num_receivers; ++r ) {
-                    tbb::flow::remove_edge( tbb::flow::output_port<0>(exe_vec[node_idx]), receivers[r] );
-                }
-                ASSERT( exe_vec[node_idx].try_put( InputType() ) == true, NULL );
-                g.wait_for_all();
-                for (size_t r = 0; r < num_receivers; ++r ) {
-                    // since it's detached, nothing should have changed
-                    receivers[r].validate();
-                }
-                delete [] receivers;
-            }
-        } 
-    }
-}
-
-const size_t Offset = 123;
-tbb::atomic<size_t> global_execute_count;
-
-struct inc_functor {
-
-    tbb::atomic<size_t> local_execute_count;
-    inc_functor( ) { local_execute_count = 0; }
-    inc_functor( const inc_functor &f ) { local_execute_count = f.local_execute_count; }
-
-    template<typename ports_type>
-    void operator()( int i, ports_type &p ) {
-       ++global_execute_count;
-       ++local_execute_count;
-       std::get<0>(p).put(i);
-    }
-
-};
-
-template< typename InputType, typename OutputTuple >
-void buffered_levels_with_copy( size_t concurrency ) {
-    typedef typename std::tuple_element<0,OutputTuple>::type OutputType;
-    // Do for lc = 1 to concurrency level
-    for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
-        tbb::flow::graph g;
-
-        inc_functor cf;
-        cf.local_execute_count = Offset;
-        global_execute_count = Offset;
-       
-        tbb::flow::multioutput_function_node< InputType, OutputTuple > exe_node( g, lc, cf );
-
-        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
-           harness_mapped_receiver<OutputType> *receivers = new harness_mapped_receiver<OutputType>[num_receivers];
-           for (size_t r = 0; r < num_receivers; ++r ) {
-               tbb::flow::make_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );
-            }
-
-            harness_counting_sender<InputType> *senders = NULL;
-            for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {
-                senders = new harness_counting_sender<InputType>[num_senders];
-                for (size_t s = 0; s < num_senders; ++s ) {
-                    senders[s].my_limit = N;
-                    tbb::flow::make_edge( senders[s], exe_node );
-                }
-
-                for (size_t r = 0; r < num_receivers; ++r ) {
-                    receivers[r].initialize_map( N, num_senders ); 
-                }
-
-                NativeParallelFor( (int)num_senders, parallel_put_until_limit<InputType>(senders) );
-                g.wait_for_all();
-
-                for (size_t s = 0; s < num_senders; ++s ) {
-                    size_t n = senders[s].my_received;
-                    ASSERT( n == N, NULL ); 
-                    ASSERT( senders[s].my_receiver == &exe_node, NULL );
-                }
-                for (size_t r = 0; r < num_receivers; ++r ) {
-                    receivers[r].validate();
-                }
-                delete [] senders;
-            }
-            for (size_t r = 0; r < num_receivers; ++r ) {
-                tbb::flow::remove_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );
-            }
-            ASSERT( exe_node.try_put( InputType() ) == true, NULL );
-            g.wait_for_all();
-            for (size_t r = 0; r < num_receivers; ++r ) {
-                receivers[r].validate();
-            }
-            delete [] receivers;
-        }
-
-        // validate that the local body matches the global execute_count and both are correct
-        inc_functor body_copy = tbb::flow::copy_body<inc_functor>( exe_node );
-        const size_t expected_count = N/2 * MAX_NODES * MAX_NODES * ( MAX_NODES + 1 ) + MAX_NODES + Offset; 
-        size_t global_count = global_execute_count;
-        size_t inc_count = body_copy.local_execute_count;
-        ASSERT( global_count == expected_count && global_count == inc_count, NULL ); 
-    }
-}
-
-template< typename InputType, typename OutputTuple >
-void run_buffered_levels( int c ) {
-    typedef typename tbb::flow::multioutput_function_node<InputType,OutputTuple>::ports_type ports_type;
-    harness_graph_multioutput_executor<InputType, OutputTuple, tbb::spin_mutex>::max_executors = c;
-    #if __TBB_LAMBDAS_PRESENT
-    buffered_levels<InputType,OutputTuple>( c, []( InputType i, ports_type &p ) { harness_graph_multioutput_executor<InputType, OutputTuple, tbb::spin_mutex>::func(i,p); } );
-    #endif
-    buffered_levels<InputType,OutputTuple>( c, &harness_graph_multioutput_executor<InputType, OutputTuple, tbb::spin_mutex>::func );
-    buffered_levels<InputType,OutputTuple>( c, typename harness_graph_multioutput_executor<InputType, OutputTuple, tbb::spin_mutex>::functor() );
-    buffered_levels_with_copy<InputType,OutputTuple>( c );
-}
-
-
-//! Performs test on executable nodes with limited concurrency
-/** Theses tests check:
-    1) that the nodes will accepts puts up to the concurrency limit,
-    2) the nodes do not exceed the concurrency limit even when run with more threads (this is checked in the harness_graph_executor), 
-    3) the nodes will receive puts from multiple successors simultaneously,
-    and 4) the nodes will send to multiple predecessors.
-    There is no checking of the contents of the messages for corruption.
-*/
-     
-template< typename InputType, typename OutputTuple, typename Body >
-void concurrency_levels( size_t concurrency, Body body ) {
-    typedef typename std::tuple_element<0,OutputTuple>::type OutputType;
-    for ( size_t lc = 1; lc <= concurrency; ++lc ) { 
-        tbb::flow::graph g;
-        harness_graph_multioutput_executor<InputType, OutputTuple, tbb::spin_mutex>::execute_count = 0;
-
-        tbb::flow::multioutput_function_node< InputType, OutputTuple, tbb::flow::rejecting > exe_node( g, lc, body );
-
-        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
-
-            harness_counting_receiver<OutputType> *receivers = new harness_counting_receiver<OutputType>[num_receivers];
-
-            for (size_t r = 0; r < num_receivers; ++r ) {
-                tbb::flow::make_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );
-            }
-
-            harness_counting_sender<InputType> *senders = NULL;
-    
-            for (size_t num_senders = 1; num_senders <= MAX_NODES; ++num_senders ) {
-                {
-                    // lock m to prevent exe_node from finishing
-                    tbb::spin_mutex::scoped_lock l( harness_graph_multioutput_executor< InputType, OutputTuple, tbb::spin_mutex >::mutex );
-    
-                    // put to lc level, it will accept and then block at m
-                    for ( size_t c = 0 ; c < lc ; ++c ) {
-                        ASSERT( exe_node.try_put( InputType() ) == true, NULL );
-                    }
-                    // it only accepts to lc level
-                    ASSERT( exe_node.try_put( InputType() ) == false, NULL );
-    
-                    senders = new harness_counting_sender<InputType>[num_senders];
-                    for (size_t s = 0; s < num_senders; ++s ) {
-                       // register a sender
-                       senders[s].my_limit = N;
-                       exe_node.register_predecessor( senders[s] );
-                    }
-    
-                } // release lock at end of scope, setting the exe node free to continue
-                // wait for graph to settle down
-                g.wait_for_all();
-    
-                // confirm that each sender was requested from N times 
-                for (size_t s = 0; s < num_senders; ++s ) {
-                    size_t n = senders[s].my_received;
-                    ASSERT( n == N, NULL ); 
-                    ASSERT( senders[s].my_receiver == &exe_node, NULL );
-                }
-                // confirm that each receivers got N * num_senders + the initial lc puts
-                for (size_t r = 0; r < num_receivers; ++r ) {
-                    size_t n = receivers[r].my_count;
-                    ASSERT( n == num_senders*N+lc, NULL );
-                    receivers[r].my_count = 0;
-                }
-                delete [] senders;
-            }
-            for (size_t r = 0; r < num_receivers; ++r ) {
-                tbb::flow::remove_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );
-            }
-            ASSERT( exe_node.try_put( InputType() ) == true, NULL );
-            g.wait_for_all();
-            for (size_t r = 0; r < num_receivers; ++r ) {
-                ASSERT( int(receivers[r].my_count) == 0, NULL );
-            }
-            delete [] receivers;
-        }
-    }
-}
-
-template< typename InputType, typename OutputTuple >
-void run_concurrency_levels( int c ) {
-    harness_graph_multioutput_executor<InputType, OutputTuple, tbb::spin_mutex>::max_executors = c;
-    typedef typename tbb::flow::multioutput_function_node<InputType,OutputTuple>::ports_type ports_type;
-    #if __TBB_LAMBDAS_PRESENT
-    concurrency_levels<InputType,OutputTuple>( c, []( InputType i, ports_type &p ) { harness_graph_multioutput_executor<InputType, OutputTuple, tbb::spin_mutex>::func(i,p); } );
-    #endif
-    concurrency_levels<InputType,OutputTuple>( c, &harness_graph_multioutput_executor<InputType, OutputTuple, tbb::spin_mutex>::func );
-    concurrency_levels<InputType,OutputTuple>( c, typename harness_graph_multioutput_executor<InputType, OutputTuple, tbb::spin_mutex>::functor() );
-}
-
-
-struct empty_no_assign { 
-   empty_no_assign() {}
-   empty_no_assign( int ) {}
-   operator int() { return 0; }
-   operator int() const { return 0; }
-};
-
-template< typename InputType >
-struct parallel_puts : private NoAssign {
-
-    tbb::flow::receiver< InputType > * const my_exe_node;
-
-    parallel_puts( tbb::flow::receiver< InputType > &exe_node ) : my_exe_node(&exe_node) {}
-
-    void operator()( int ) const  {
-        for ( int i = 0; i < N; ++i ) {
-            // the nodes will accept all puts
-            ASSERT( my_exe_node->try_put( InputType() ) == true, NULL );
-        }
-    }
-
-};
-
-//! Performs test on executable nodes with unlimited concurrency
-/** These tests check:
-    1) that the nodes will accept all puts
-    2) the nodes will receive puts from multiple predecessors simultaneously,
-    and 3) the nodes will send to multiple successors.
-    There is no checking of the contents of the messages for corruption.
-*/
-
-template< typename InputType, typename OutputTuple, typename Body >
-void unlimited_concurrency( Body body ) {
-    typedef typename std::tuple_element<0,OutputTuple>::type OutputType;
-
-    for (int p = 1; p < 2*MaxThread; ++p) {
-        tbb::flow::graph g;
-        tbb::flow::multioutput_function_node< InputType, OutputTuple, tbb::flow::rejecting > exe_node( g, tbb::flow::unlimited, body );
-
-        for (size_t num_receivers = 1; num_receivers <= MAX_NODES; ++num_receivers ) {
-            harness_counting_receiver<OutputType> *receivers = new harness_counting_receiver<OutputType>[num_receivers];
-            harness_graph_multioutput_executor<InputType, OutputTuple>::execute_count = 0;
-
-            for (size_t r = 0; r < num_receivers; ++r ) {
-                tbb::flow::make_edge( tbb::flow::output_port<0>(exe_node), receivers[r] );
-            }
-
-            NativeParallelFor( p, parallel_puts<InputType>(exe_node) );
-            g.wait_for_all(); 
-
-            // 2) the nodes will receive puts from multiple predecessors simultaneously,
-            size_t ec = harness_graph_multioutput_executor<InputType, OutputTuple>::execute_count;
-            ASSERT( (int)ec == p*N, NULL ); 
-            for (size_t r = 0; r < num_receivers; ++r ) {
-                size_t c = receivers[r].my_count;
-                // 3) the nodes will send to multiple successors.
-                ASSERT( (int)c == p*N, NULL );
-            }
-        }
-    }
-}
-
-template< typename InputType, typename OutputTuple >
-void run_unlimited_concurrency() {
-    typedef typename tbb::flow::multioutput_function_node<InputType,OutputTuple>::ports_type ports_type;
-    harness_graph_multioutput_executor<InputType, OutputTuple>::max_executors = 0;
-    #if __TBB_LAMBDAS_PRESENT
-    unlimited_concurrency<InputType,OutputTuple>( []( InputType i, ports_type &p ) { harness_graph_multioutput_executor<InputType, OutputTuple>::func(i,p); } );
-    #endif
-    unlimited_concurrency<InputType,OutputTuple>( &harness_graph_multioutput_executor<InputType, OutputTuple>::func );
-    unlimited_concurrency<InputType,OutputTuple>( typename harness_graph_multioutput_executor<InputType, OutputTuple>::functor() );
-}
-
-template<typename InputType, typename OutputTuple>
-struct oddEvenBody {
-    typedef typename tbb::flow::multioutput_function_node<InputType,OutputTuple>::ports_type ports_type;
-    typedef typename std::tuple_element<0,OutputTuple>::type EvenType;
-    typedef typename std::tuple_element<1,OutputTuple>::type OddType;
-    void operator() (const InputType &i, ports_type &p) {
-        if((int)i % 2) {
-            std::get<1>(p).put(OddType(i));
-        }
-        else {
-            std::get<0>(p).put(EvenType(i));
-        }
-    }
-};
-
-template<typename InputType, typename OutputTuple >
-void run_multiport_test(int num_threads) {
-    typedef typename tbb::flow::multioutput_function_node<InputType, OutputTuple> mo_node_type;
-    typedef typename std::tuple_element<0,OutputTuple>::type EvenType;
-    typedef typename std::tuple_element<1,OutputTuple>::type OddType;
-    tbb::task_scheduler_init init(num_threads);
-    tbb::flow::graph g;
-    mo_node_type mo_node(g, tbb::flow::unlimited, oddEvenBody<InputType, OutputTuple>() );
-
-    tbb::flow::queue_node<EvenType> q0(g);
-    tbb::flow::queue_node<OddType> q1(g);
-
-    tbb::flow::make_edge(tbb::flow::output_port<0>(mo_node), q0);
-    tbb::flow::make_edge(tbb::flow::output_port<1>(mo_node), q1);
-
-    for(InputType i = 0; i < N; ++i) {
-        mo_node.try_put(i);
-    }
-
-    g.wait_for_all();
-    for(int i = 0; i < N/2; ++i) {
-        EvenType e;
-        OddType o;
-        ASSERT(q0.try_get(e) && (int)e % 2 == 0, NULL);
-        ASSERT(q1.try_get(o) && (int)o % 2 == 1, NULL);
-    }
-}
-
-//! Tests limited concurrency cases for nodes that accept data messages
-void test_concurrency(int num_threads) {
-    tbb::task_scheduler_init init(num_threads);
-    run_concurrency_levels<int,std::tuple<int> >(num_threads);
-    run_concurrency_levels<int,std::tuple<tbb::flow::continue_msg> >(num_threads);
-    run_buffered_levels<int, std::tuple<int> >(num_threads);
-    run_unlimited_concurrency<int, std::tuple<int> >();
-    run_unlimited_concurrency<int,std::tuple<empty_no_assign> >();
-    run_unlimited_concurrency<empty_no_assign,std::tuple<int> >();
-    run_unlimited_concurrency<empty_no_assign,std::tuple<empty_no_assign> >();
-    run_unlimited_concurrency<int,std::tuple<tbb::flow::continue_msg> >();
-    run_unlimited_concurrency<empty_no_assign,std::tuple<tbb::flow::continue_msg> >();
-    run_multiport_test<int, std::tuple<int, int> >(num_threads);
-    run_multiport_test<float, std::tuple<int, double> >(num_threads);
-}
-
-int TestMain() { 
-    current_executors = 0;
-    if( MinThread<1 ) {
-        REPORT("number of threads must be positive\n");
-        exit(1);
-    }
-    for( int p=MinThread; p<=MaxThread; ++p ) {
-       test_concurrency(p);
-   }
-   return Harness::Done;
-}
-#else  // __SUNPRO_CC
-int TestMain() { 
-   return Harness::Skipped;
-}
-#endif  // __SUNPRO_CC
diff --git a/src/test/test_mutex.cpp b/src/test/test_mutex.cpp
index c18c685..cb3cc26 100644
--- a/src/test/test_mutex.cpp
+++ b/src/test/test_mutex.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -132,12 +132,12 @@ public:
 
         // Methods for reader-writer mutex
         // These methods can be instantiated only if M supports lock_read() and try_lock_read().
-        
+
         void acquire( mutex_type& m, bool is_writer ) {
             if( is_writer ) m.my_iso_mutex.lock();
             else m.my_iso_mutex.lock_read();
             my_mutex = &m;
-        } 
+        }
         bool try_acquire( mutex_type& m, bool is_writer ) {
             if( is_writer ? m.my_iso_mutex.try_lock() : m.my_iso_mutex.try_lock_read() ) {
                 my_mutex = &m;
@@ -148,20 +148,20 @@ public:
         }
         bool upgrade_to_writer() {
             my_mutex->my_iso_mutex.unlock();
-            my_mutex->my_iso_mutex.lock(); 
+            my_mutex->my_iso_mutex.lock();
             return false;
         }
         bool downgrade_to_reader() {
             my_mutex->my_iso_mutex.unlock();
-            my_mutex->my_iso_mutex.lock_read(); 
+            my_mutex->my_iso_mutex.lock_read();
             return false;
         }
         ~scoped_lock() {
-            if( my_mutex ) 
+            if( my_mutex )
                 release();
         }
-    };    
-  
+    };
+
     static const bool is_recursive_mutex = M::is_recursive_mutex;
     static const bool is_rw_mutex = M::is_rw_mutex;
 };
@@ -169,7 +169,7 @@ public:
 namespace tbb {
     namespace profiling {
         template<typename M>
-        void set_name( const TBB_MutexFromISO_Mutex<M>&, const char* ) {}  
+        void set_name( const TBB_MutexFromISO_Mutex<M>&, const char* ) {}
     }
 }
 
@@ -231,70 +231,58 @@ struct Invariant {
 template<typename I>
 struct TwiddleInvariant: NoAssign {
     I& invariant;
+    TwiddleInvariant( I& invariant_ ) : invariant(invariant_) {}
+
     /** Increments counter once for each iteration in the iteration space. */
     void operator()( tbb::blocked_range<size_t>& range ) const {
         for( size_t i=range.begin(); i!=range.end(); ++i ) {
             //! Every 8th access is a write access
-            bool write = (i%8)==7;
+            const bool write = (i%8)==7;
             bool okay = true;
             bool lock_kept = true;
             if( (i/8)&1 ) {
                 // Try implicit acquire and explicit release
                 typename I::mutex_type::scoped_lock lock(invariant.mutex,write);
-                if( write ) {
-                    long my_value = invariant.value[0];
-                    invariant.update();
-                    if( i%16==7 ) {
-                        lock_kept = lock.downgrade_to_reader();
-                        if( !lock_kept )
-                            my_value = invariant.value[0] - 1;
-                        okay = invariant.value_is(my_value+1);
-                    }
-                } else {
-                    okay = invariant.is_okay();
-                    if( i%8==3 ) {
-                        long my_value = invariant.value[0];
-                        lock_kept = lock.upgrade_to_writer();
-                        if( !lock_kept )
-                            my_value = invariant.value[0];
-                        invariant.update();
-                        okay = invariant.value_is(my_value+1);
-                    }
-                }
+                execute_aux(lock, i, write, /*ref*/okay, /*ref*/lock_kept);
                 lock.release();
             } else {
                 // Try explicit acquire and implicit release
                 typename I::mutex_type::scoped_lock lock;
                 lock.acquire(invariant.mutex,write);
-                if( write ) {
-                    long my_value = invariant.value[0];
-                    invariant.update();
-                    if( i%16==7 ) {
-                        lock_kept = lock.downgrade_to_reader();
-                        if( !lock_kept )
-                            my_value = invariant.value[0] - 1;
-                        okay = invariant.value_is(my_value+1);
-                    }
-                } else {
-                    okay = invariant.is_okay();
-                    if( i%8==3 ) {
-                        long my_value = invariant.value[0];
-                        lock_kept = lock.upgrade_to_writer();
-                        if( !lock_kept )
-                            my_value = invariant.value[0];
-                        invariant.update();
-                        okay = invariant.value_is(my_value+1);
-                    }
-                }
+                execute_aux(lock, i, write, /*ref*/okay, /*ref*/lock_kept);
             }
             if( !okay ) {
                 REPORT( "ERROR for %s at %ld: %s %s %s %s\n",invariant.mutex_name, long(i),
-                             write?"write,":"read,", write?(i%16==7?"downgrade,":""):(i%8==3?"upgrade,":""),
-                             lock_kept?"lock kept,":"lock not kept,", (i/8)&1?"imp/exp":"exp/imp" );
+                        write     ? "write,"                  : "read,",
+                        write     ? (i%16==7?"downgrade,":"") : (i%8==3?"upgrade,":""),
+                        lock_kept ? "lock kept,"              : "lock not kept,", // TODO: only if downgrade/upgrade
+                        (i/8)&1   ? "impl/expl"               : "expl/impl" );
+            }
+        }
+    }
+private:
+    void execute_aux(typename I::mutex_type::scoped_lock & lock, const size_t i, const bool write, bool & okay, bool & lock_kept) const {
+        if( write ) {
+            long my_value = invariant.value[0];
+            invariant.update();
+            if( i%16==7 ) {
+                lock_kept = lock.downgrade_to_reader();
+                if( !lock_kept )
+                    my_value = invariant.value[0] - 1;
+                okay = invariant.value_is(my_value+1);
+            }
+        } else {
+            okay = invariant.is_okay();
+            if( i%8==3 ) {
+                long my_value = invariant.value[0];
+                lock_kept = lock.upgrade_to_writer();
+                if( !lock_kept )
+                    my_value = invariant.value[0];
+                invariant.update();
+                okay = invariant.value_is(my_value+1);
             }
         }
     }
-    TwiddleInvariant( I& invariant_ ) : invariant(invariant_) {}
 };
 
 /** This test is generic so that we can test any other kinds of ReaderWriter locks we write later. */
@@ -376,7 +364,7 @@ void TestTryAcquire_OneThread( const char * mutex_name ) {
         lock1.release();
     else
         REPORT("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
-} 
+}
 
 #if _MSC_VER && !defined(__INTEL_COMPILER)
     #pragma warning( pop )
@@ -396,7 +384,7 @@ struct RecursiveAcquisition {
         bool first = (mask&1U<<i)==0;
         if( first ) {
             // first time to acquire lock
-            if( i<max_lock ) 
+            if( i<max_lock )
                 // out of order acquisition might lead to deadlock, so stop
                 return;
             max_lock = i;
@@ -409,10 +397,10 @@ struct RecursiveAcquisition {
             int a = RecurArray[i];
             ASSERT( (a==0)==first, "should be either a==0 if it is the first time to acquire the lock or a!=0 otherwise" );
             ++RecurArray[i];
-            if( x ) 
+            if( x )
                 Body( x/RecurN, max_lock, mask|1U<<i );
             --RecurArray[i];
-            ASSERT( a==RecurArray[i], "a is not equal to RecurArray[i]" );                        
+            ASSERT( a==RecurArray[i], "a is not equal to RecurArray[i]" );
 
             // release lock on location RecurArray[i] using explicit release; otherwise, use implicit one
             if( (i&2)!=0 ) r_lock.release();
@@ -424,11 +412,11 @@ struct RecursiveAcquisition {
             ASSERT( (a==0)==first, "should be either a==0 if it is the first time to acquire the lock or a!=0 otherwise" );
 
             ++RecurArray[i];
-            if( x ) 
+            if( x )
                 Body( x/RecurN, max_lock, mask|1U<<i );
             --RecurArray[i];
 
-            ASSERT( a==RecurArray[i], "a is not equal to RecurArray[i]" );                        
+            ASSERT( a==RecurArray[i], "a is not equal to RecurArray[i]" );
 
             // release lock on location RecurArray[i] using explicit release; otherwise, use implicit one
             if( (i&2)!=0 ) r_lock.release();
@@ -436,7 +424,7 @@ struct RecursiveAcquisition {
     }
 
     void operator()( const tbb::blocked_range<size_t> &r ) const
-    {   
+    {
         for( size_t x=r.begin(); x<r.end(); x++ ) {
             Body( x );
         }
@@ -531,7 +519,7 @@ void TestNullRWMutex( const char * name ) {
     tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10),NullUpgradeDowngrade<M>(m, name));
 }
 
-//! Test ISO C++0x compatibility portion of TBB mutex 
+//! Test ISO C++0x compatibility portion of TBB mutex
 template<typename M>
 void TestISO( const char * name ) {
     typedef TBB_MutexFromISO_Mutex<M> tbb_from_iso;
@@ -545,7 +533,7 @@ void TestTryAcquire_OneThreadISO( const char * name ) {
     TestTryAcquire_OneThread<tbb_from_iso>( name );
 }
 
-//! Test ISO-like C++0x compatibility portion of TBB reader-writer mutex 
+//! Test ISO-like C++0x compatibility portion of TBB reader-writer mutex
 template<typename M>
 void TestReaderWriterLockISO( const char * name ) {
     typedef TBB_MutexFromISO_Mutex<M> tbb_from_iso;
@@ -553,11 +541,11 @@ void TestReaderWriterLockISO( const char * name ) {
     TestTryAcquireReader_OneThread<tbb_from_iso>( name );
 }
 
-//! Test ISO C++0x compatibility portion of TBB recursive mutex 
+//! Test ISO C++0x compatibility portion of TBB recursive mutex
 template<typename M>
 void TestRecursiveMutexISO( const char * name ) {
     typedef TBB_MutexFromISO_Mutex<M> tbb_from_iso;
-    TestRecursiveMutex<tbb_from_iso>(name); 
+    TestRecursiveMutex<tbb_from_iso>(name);
 }
 
 #include "tbb/task_scheduler_init.h"
@@ -567,7 +555,7 @@ int TestMain () {
         tbb::task_scheduler_init init( p );
         REMARK( "testing with %d workers\n", static_cast<int>(p) );
 #if TBB_TEST_LOW_WORKLOAD
-        // The amount of work is decreased in this mode to bring the length 
+        // The amount of work is decreased in this mode to bring the length
         // of the runs under tools into the tolerable limits.
         const int n = 1;
 #else
@@ -590,29 +578,29 @@ int TestMain () {
 
             TestTryAcquire_OneThread<tbb::spin_mutex>("Spin Mutex");
             TestTryAcquire_OneThread<tbb::queuing_mutex>("Queuing Mutex");
-#if USE_PTHREAD 
+#if USE_PTHREAD
             // under ifdef because on Windows tbb::mutex is reenterable and the test will fail
             TestTryAcquire_OneThread<tbb::mutex>("Wrapper Mutex");
 #endif /* USE_PTHREAD */
             TestTryAcquire_OneThread<tbb::recursive_mutex>( "Recursive Mutex" );
             TestTryAcquire_OneThread<tbb::spin_rw_mutex>("Spin RW Mutex"); // only tests try_acquire for writers
             TestTryAcquire_OneThread<tbb::queuing_rw_mutex>("Queuing RW Mutex"); // only tests try_acquire for writers
-            TestTryAcquireReader_OneThread<tbb::spin_rw_mutex>("Spin RW Mutex"); 
-            TestTryAcquireReader_OneThread<tbb::queuing_rw_mutex>("Queuing RW Mutex"); 
+            TestTryAcquireReader_OneThread<tbb::spin_rw_mutex>("Spin RW Mutex");
+            TestTryAcquireReader_OneThread<tbb::queuing_rw_mutex>("Queuing RW Mutex");
 
             TestReaderWriterLock<tbb::queuing_rw_mutex>( "Queuing RW Mutex" );
             TestReaderWriterLock<tbb::spin_rw_mutex>( "Spin RW Mutex" );
 
             TestRecursiveMutex<tbb::recursive_mutex>( "Recursive Mutex" );
 
-            // Test ISO C++0x interface  
+            // Test ISO C++0x interface
             TestISO<tbb::spin_mutex>( "ISO Spin Mutex" );
             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 
+#if USE_PTHREAD
             // under ifdef because on Windows tbb::mutex is reenterable and the test will fail
             TestTryAcquire_OneThreadISO<tbb::mutex>( "ISO Mutex" );
 #endif /* USE_PTHREAD */
diff --git a/src/test/test_mutex_native_threads.cpp b/src/test/test_mutex_native_threads.cpp
index 3aff41f..c198383 100644
--- a/src/test/test_mutex_native_threads.cpp
+++ b/src/test/test_mutex_native_threads.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -182,7 +182,7 @@ void Test( const char * name, int nthread ) {
     Counter<M> counter;
     counter.value = 0;
     Order = 0;
-    // use the macro because of a seeming gcc 4.6 bug
+    // use the macro because of a gcc 4.6 bug
 #define TEST_SIZE 100000
     tbb::tick_count t0 = tbb::tick_count::now();
     NativeParallelFor( nthread, Work<Counter<M>, TEST_SIZE>(counter) );
@@ -201,7 +201,7 @@ void TestReaderWriter( const char * mutex_name, int nthread ) {
     REMARK("testing %s\n",mutex_name);
     Invariant<M,8> invariant(mutex_name);
     Order = 0;
-    // use the macro because of a seeming gcc 4.6 bug
+    // use the macro because of a gcc 4.6 bug
 #define TEST_SIZE 1000000
     tbb::tick_count t0 = tbb::tick_count::now();
     NativeParallelFor( nthread, Work<Invariant<M,8>, TEST_SIZE>(invariant) );
diff --git a/src/test/test_openmp.cpp b/src/test/test_openmp.cpp
index 6fccafc..531c1f3 100644
--- a/src/test/test_openmp.cpp
+++ b/src/test/test_openmp.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -127,10 +127,10 @@ class InnerBody: NoAssign {
 public:
     T sum;
     InnerBody( T /*c*/[], const T a[], const T b[], int i ) :
-        my_a(a), my_b(b), sum(0), i(i)
+        my_a(a), my_b(b), i(i), sum(0)
     {}
     InnerBody( InnerBody& x, split ) :
-        my_a(x.my_a), my_b(x.my_b), sum(0), i(x.i)
+        my_a(x.my_a), my_b(x.my_b), i(x.i), sum(0)
     { 
     }
     void join( InnerBody& x ) {sum += x.sum;}
@@ -170,7 +170,7 @@ class OuterBody: NoAssign {
 public:
     T sum;
     OuterBody( T c[], const T a[], int m_, const T b[], int n_ ) :
-        my_c(c), my_a(a), my_b(b), m(m_), n(n_)
+        my_a(a), my_b(b), my_c(c), m(m_), n(n_)
     {}
     void operator()( const blocked_range<int>& range ) const {
         for( int i=range.begin(); i!=range.end(); ++i ) {
diff --git a/src/test/test_or_node.cpp b/src/test/test_or_node.cpp
index c53313f..76406bb 100644
--- a/src/test/test_or_node.cpp
+++ b/src/test/test_or_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -243,7 +243,7 @@ public:
         }
         for(int nInputs = 1; nInputs <= MaxNSources; ++nInputs) {
             tbb::flow::graph g;
-            OType* my_or = makeOr<OType>::create();
+            OType* my_or = new OType(g); //makeOr<OType>::create(); 
             tbb::flow::queue_node<TType> outq1(g);
             tbb::flow::queue_node<TType> outq2(g);
 
@@ -397,7 +397,7 @@ public:
 static void test() {
     tbb::flow::graph g;
     static const int ELEMS = 3;
-    OType* my_or = makeOr<OType>::create();
+    OType* my_or = new OType(g); //makeOr<OType>::create(g);
 
     serial_queue_helper<SIZE, OType>::print_remark(); REMARK(" >\n");
 
diff --git a/src/test/test_overwrite_node.cpp b/src/test/test_overwrite_node.cpp
index ee38062..4227979 100644
--- a/src/test/test_overwrite_node.cpp
+++ b/src/test/test_overwrite_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -36,7 +36,8 @@
 
 template< typename R >
 void simple_read_write_tests() {
-    tbb::flow::overwrite_node<R> n;
+    tbb::flow::graph g;
+    tbb::flow::overwrite_node<R> n(g);
 
     for ( int t = 0; t < T; ++t ) {
         R v0(N+1);
@@ -100,7 +101,8 @@ public:
 
 template< typename R >
 void parallel_read_write_tests() {
-    tbb::flow::overwrite_node<R> n;
+    tbb::flow::graph g;
+    tbb::flow::overwrite_node<R> n(g);
     //Create a vector of identical nodes
     std::vector< tbb::flow::overwrite_node<R> > ow_vec(2, n);
 
diff --git a/src/test/test_parallel_do.cpp b/src/test/test_parallel_do.cpp
index 195a828..fa7c4bf 100644
--- a/src/test/test_parallel_do.cpp
+++ b/src/test/test_parallel_do.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_parallel_for.cpp b/src/test/test_parallel_for.cpp
index e39e4c1..9605408 100644
--- a/src/test/test_parallel_for.cpp
+++ b/src/test/test_parallel_for.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_parallel_for_each.cpp b/src/test/test_parallel_for_each.cpp
index 00742de..8cdb52e 100644
--- a/src/test/test_parallel_for_each.cpp
+++ b/src/test/test_parallel_for_each.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_parallel_invoke.cpp b/src/test/test_parallel_invoke.cpp
index 8f24c2e..12a3616 100644
--- a/src/test/test_parallel_invoke.cpp
+++ b/src/test/test_parallel_invoke.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_parallel_pipeline.cpp b/src/test/test_parallel_pipeline.cpp
index 26104b1..6713148 100644
--- a/src/test/test_parallel_pipeline.cpp
+++ b/src/test/test_parallel_pipeline.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,6 +39,9 @@ int filter_node_count = 0;
 #include "tbb/tbb_allocator.h"
 
 const unsigned n_tokens = 8;
+// we can conceivably have two buffers used in the middle filter for every token in flight, so
+// we must allocate two buffers for every token.  Unlikely, but possible.
+const unsigned n_buffers = 2*n_tokens;
 const unsigned max_counter = 16;
 static tbb::atomic<int> output_counter;
 static tbb::atomic<int> input_counter;
@@ -51,21 +54,23 @@ static tbb::atomic<int> second_pointer_specialized_calls;
 static int intbuffer[max_counter];  // store results for <int,int> parallel pipeline test
 static bool check_intbuffer;
 
-static void* buffers[n_tokens]; 
-static bool buf_available[n_tokens];
+static void* buffers[n_buffers]; 
+static bool buf_available[n_buffers];
 static tbb::atomic<size_t> nextBuffer;
 
 void *fetchNextBuffer() {
-    for(;;) {
+    for(size_t icnt = 0; icnt < n_buffers; ++icnt) {
         size_t indx = ++nextBuffer;
-        if(buf_available[indx%n_tokens]) {
-            buf_available[indx%n_tokens] = false;
-            return buffers[indx%n_tokens];
+        if(buf_available[indx%n_buffers]) {
+            buf_available[indx%n_buffers] = false;
+            return buffers[indx%n_buffers];
         }
     }
+    ASSERT(0, "Ran out of buffers");
+    return 0;
 }
 void freeBuffer(void *buf) {
-    for(size_t i=0; i < n_tokens;++i) {
+    for(size_t i=0; i < n_buffers;++i) {
         if(buffers[i] == buf) {
             buf_available[i] = true;
             return;
@@ -83,8 +88,9 @@ private:
     T *my_p;
 };
 
+template<class Counter>
 class check_type : Harness::NoAfterlife {
-    unsigned int id;
+    Counter id;
     bool am_ready;
 public:
     check_type( ) : id(0), am_ready(false) {
@@ -116,6 +122,37 @@ public:
     }
 };
 
+// methods for testing check_type< >, that return okay values for other types.
+template<typename T>
+bool middle_is_ready(T &/*p*/) { return false; }
+
+template<typename U>
+bool middle_is_ready(check_type<U> &p) { return p.is_ready(); }
+
+template<typename T>
+bool output_is_ready(T &/*p*/) { return true; }
+
+template<typename U>
+bool output_is_ready(check_type<U> &p) { return p.is_ready(); }
+
+template<typename T>
+int middle_my_id( T &/*p*/) { return 0; }
+
+template<typename U>
+int middle_my_id(check_type<U> &p) { return p.my_id(); }
+
+template<typename T>
+int output_my_id( T &/*p*/) { return 1; }
+
+template<typename U>
+int output_my_id(check_type<U> &p) { return p.my_id(); }
+
+template<typename T>
+void my_function(T &p) { p = 0; }
+
+template<typename U>
+void my_function(check_type<U> &p) { p.function(); }
+
 // Filters must be copy-constructible, and be const-qualifiable.
 template<typename U>
 class input_filter : Harness::NoAfterlife {
@@ -183,48 +220,17 @@ public:
     }
 };
 
-
-template<>
-class input_filter<check_type> : Harness::NoAfterlife {
-public:
-    check_type operator()( tbb::flow_control& control ) const {
-        AssertLive();
-        if( --input_counter < 0 ) {
-            control.stop();
-        }
-        else 
-            ++non_pointer_specialized_calls;
-        return check_type( );  // default constructed
-    }
-};
-
-template<>
-class input_filter<check_type*> : Harness::NoAfterlife {
-public:
-    check_type* operator()( tbb::flow_control& control ) const {
-        AssertLive();
-        int ival = --input_counter;
-        if( ival < 0 ) {
-            control.stop();
-            return NULL;
-        }
-        else 
-            ++pointer_specialized_calls;
-        if(ival == max_counter/2) {
-            return NULL;
-        }
-        check_type* myReturn = new(fetchNextBuffer()) check_type();
-        return myReturn;
-    }
-};
-
 template<typename T, typename U>
 class middle_filter : Harness::NoAfterlife {
 public:
-    U operator()(T /*my_storage*/) const {
+    U operator()(T t) const {
         AssertLive();
+        ASSERT(!middle_my_id(t), "bad id value");
+        ASSERT(!middle_is_ready(t), "Already ready" );
+        U out;
+        my_function(out);
         ++non_pointer_specialized_calls;
-        return U();
+        return out;
     }
 };
 
@@ -234,18 +240,27 @@ public:
     U operator()(T* my_storage) const {
         free_on_scope_exit<T> my_ptr(my_storage);  // free_on_scope_exit marks the buffer available
         AssertLive();
+        if(my_storage) {  // may have been passed in a NULL
+            ASSERT(!middle_my_id(*my_storage), "bad id value");
+            ASSERT(!middle_is_ready(*my_storage), "Already ready" );
+        }
         ++first_pointer_specialized_calls;
-        return U();
+        U out;
+        my_function(out);
+        return out;
     }
 };
 
 template<typename T, typename U>
 class middle_filter<T,U*> : Harness::NoAfterlife {
 public:
-    U* operator()(T /*my_storage*/) const {
+    U* operator()(T my_storage) const {
         AssertLive();
+        ASSERT(!middle_my_id(my_storage), "bad id value");
+        ASSERT(!middle_is_ready(my_storage), "Already ready" );
         // allocate new space from buffers
         U* my_return = new(fetchNextBuffer()) U();
+        my_function(*my_return);
         ++second_pointer_specialized_calls;
         return my_return;
     }
@@ -255,13 +270,19 @@ template<typename T, typename U>
 class middle_filter<T*,U*> : Harness::NoAfterlife {
 public:
     U* operator()(T* my_storage) const {
+        free_on_scope_exit<T> my_ptr(my_storage);  // free_on_scope_exit marks the buffer available
         AssertLive();
-        // just construct a U over the T
-        // we are using the same buffer
+        if(my_storage) {
+            ASSERT(!middle_my_id(*my_storage), "bad id value");
+            ASSERT(!middle_is_ready(*my_storage), "Already ready" );
+        }
+        // may have been passed a NULL
         ++pointer_specialized_calls;
         if(!my_storage) return NULL;
-        my_storage->~T();
-        U* my_return = new(my_storage) U();
+        ASSERT(!middle_my_id(*my_storage), "bad id value");
+        ASSERT(!middle_is_ready(*my_storage), "Already ready" );
+        U* my_return = new(fetchNextBuffer()) U();
+        my_function(*my_return);
         return my_return;
     }
 };
@@ -277,71 +298,14 @@ public:
     }
 };
 
-template<>
-class middle_filter<check_type, check_type> : Harness::NoAfterlife {
-public:
-    check_type& operator()( check_type &c) const {
-        AssertLive();
-        ASSERT(!c.my_id(), "bad id value");
-        ASSERT(!c.is_ready(), "Already ready" );
-        c.function();
-        ++non_pointer_specialized_calls;
-        return c;
-    }
-};
-
-template<>
-class middle_filter<check_type*, check_type> : Harness::NoAfterlife {
-public:
-    check_type operator()( check_type *c) const {
-        AssertLive();
-        ++first_pointer_specialized_calls;
-        if(!c) {
-            // create a check_type to use
-            c = new(fetchNextBuffer()) check_type();
-        }
-        free_on_scope_exit<check_type> ptr(c);
-        ASSERT(!c->my_id(), "bad id value");
-        ASSERT(!c->is_ready(), "Already ready" );
-        c->function();
-        return check_type(*c);
-    }
-};
-
-template<>
-class middle_filter<check_type, check_type*> : Harness::NoAfterlife {
-public:
-    check_type* operator()( check_type &c) const {
-        AssertLive();
-        ASSERT(!c.my_id(), "bad id value");
-        ASSERT(!c.is_ready(), "Already ready" );
-        c.function();
-        check_type* myReturn = new(fetchNextBuffer()) check_type(c);
-        ++second_pointer_specialized_calls;
-        return myReturn;
-    }
-};
-
-template<>
-class middle_filter<check_type*, check_type*> : Harness::NoAfterlife {
-public:
-    check_type* operator()( check_type *c) const {
-        AssertLive();
-        ++pointer_specialized_calls;
-        if(!c) return NULL;
-        ASSERT(!c->my_id(), "bad id value");
-        ASSERT(!c->is_ready(), "Already ready" );
-        c->function();
-        // return the same object, don't reallocate
-        return c;
-    }
-};
-
+// ---------------------------------
 template<typename T>
 class output_filter : Harness::NoAfterlife {
 public:
-    void operator()(T) const {
+    void operator()(T c) const {
         AssertLive();
+        ASSERT(output_my_id(c), "unset id value");
+        ASSERT(output_is_ready(c), "not yet ready");
         ++non_pointer_specialized_calls;
         output_counter++;
     }
@@ -366,32 +330,9 @@ public:
     void operator()(T* c) const {
         free_on_scope_exit<T> my_ptr(c);
         AssertLive();
-        output_counter++;
-        ++pointer_specialized_calls;
-    }
-};
-
-template<>
-class output_filter<check_type> : Harness::NoAfterlife {
-public:
-    void operator()(check_type &c) const {
-        AssertLive();
-        ASSERT(c.my_id(), "unset id value");
-        ASSERT(c.is_ready(), "not yet ready");
-        ++non_pointer_specialized_calls;
-        output_counter++;
-    }
-};
-
-template<>
-class output_filter<check_type*> : Harness::NoAfterlife {
-public:
-    void operator()(check_type *c) const {
-        free_on_scope_exit<check_type> my_ptr(c);
-        AssertLive();
         if(c) {
-            ASSERT(c->my_id(), "unset id value");
-            ASSERT(c->is_ready(), "not yet ready");
+            ASSERT(output_my_id(*c), "unset id value");
+            ASSERT(output_is_ready(*c), "not yet ready");
         }
         output_counter++;
         ++pointer_specialized_calls;
@@ -416,7 +357,7 @@ void resetCounters() {
     second_pointer_specialized_calls = 0;
     // we have to reset the buffer flags because our input filters return allocated space on end-of-input,
     // (on eof a default-constructed object is returned) and they do not pass through the filter further.
-    for(size_t i = 0; i < n_tokens; ++i)
+    for(size_t i = 0; i < n_buffers; ++i)
         buf_available[i] = true;
 }
 
@@ -700,7 +641,7 @@ void run_function(const char *l1, const char *l2) {
 
     // allocate the buffers for the filters
     unsigned max_size = (sizeof(type1) > sizeof(type2) ) ? sizeof(type1) : sizeof(type2);
-    for(unsigned i = 0; i < (unsigned)n_tokens; ++i) {
+    for(unsigned i = 0; i < (unsigned)n_buffers; ++i) {
         buffers[i] = malloc(max_size);
         buf_available[i] = true;
     }
@@ -727,7 +668,7 @@ void run_function(const char *l1, const char *l2) {
     }
     ASSERT(!filter_node_count, "filter_node objects leaked");
 
-    for(unsigned i = 0; i < (unsigned)n_tokens; ++i) {
+    for(unsigned i = 0; i < (unsigned)n_buffers; ++i) {
         free(buffers[i]);
     }
 }
@@ -735,12 +676,21 @@ void run_function(const char *l1, const char *l2) {
 #include "tbb/task_scheduler_init.h"
 
 int TestMain() {
+#if TBB_USE_DEBUG
+    // size and copyability.
+    REMARK("is_large_object<int>::value=%d\n", tbb::interface6::internal::is_large_object<int>::value);
+    REMARK("is_large_object<double>::value=%d\n", tbb::interface6::internal::is_large_object<double>::value);
+    REMARK("is_large_object<int *>::value=%d\n", tbb::interface6::internal::is_large_object<int *>::value);
+    REMARK("is_large_object<check_type<int> >::value=%d\n", tbb::interface6::internal::is_large_object<check_type<int> >::value);
+    REMARK("is_large_object<check_type<int>* >::value=%d\n", tbb::interface6::internal::is_large_object<check_type<int>* >::value);
+    REMARK("is_large_object<check_type<short> >::value=%d\n\n", tbb::interface6::internal::is_large_object<check_type<short> >::value);
+#endif
     // Test with varying number of threads.
     for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
         // Initialize TBB task scheduler
         REMARK("\nTesting with nthread=%d\n", nthread);
         tbb::task_scheduler_init init(nthread);
-        
+
         // Run test several times with different types
         run_function_spec();
         run_function<size_t,int>("size_t", "int");
@@ -749,14 +699,17 @@ int TestMain() {
         run_function<size_t,bool>("size_t", "bool");
         run_function<int,int>("int","int");
         check_type_counter = 0;
-        run_function<check_type,size_t>("check_type", "size_t");
-        ASSERT(!check_type_counter, "Error in check_type creation/destruction");
-        // check_type as the second type in the pipeline only works if check_type
-        // is also the first type.  The middle_filter specialization for <check_type, check_type>
-        // changes the state of the check_type items, and this is checked in the output_filter
-        // specialization.
-        run_function<check_type, check_type>("check_type", "check_type");
-        ASSERT(!check_type_counter, "Error in check_type creation/destruction");
+        run_function<check_type<unsigned int>,size_t>("check_type<unsigned int>", "size_t");
+        ASSERT(!check_type_counter, "Error in check_type<unsigned int> creation/destruction");
+        run_function<check_type<unsigned short>,size_t>("check_type<unsigned short>", "size_t");
+        ASSERT(!check_type_counter, "Error in check_type<unsigned short> creation/destruction");
+        run_function<check_type<unsigned int>, check_type<unsigned int> >("check_type<unsigned int>", "check_type<unsigned int>");
+        run_function<check_type<unsigned int>, check_type<unsigned short> >("check_type<unsigned int>", "check_type<unsigned short>");
+        ASSERT(!check_type_counter, "Error in check_type<unsigned int> creation/destruction");
+        run_function<check_type<unsigned short>, check_type<unsigned short> >("check_type<unsigned short>", "check_type<unsigned short>");
+        ASSERT(!check_type_counter, "Error in check_type<unsigned short> creation/destruction");
+        run_function<double, check_type<unsigned short> >("double", "check_type<unsigned short>");
+        ASSERT(!check_type_counter, "Error in check_type<unsigned short> creation/destruction");
     }
     return Harness::Done;
 }
diff --git a/src/test/test_parallel_reduce.cpp b/src/test/test_parallel_reduce.cpp
index 5ec3ba0..854d59f 100644
--- a/src/test/test_parallel_reduce.cpp
+++ b/src/test/test_parallel_reduce.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -248,7 +248,7 @@ void ParallelSum () {
     );
     ASSERT( r2 == R, NULL );
 #endif /* LAMBDAS */
-    delete array;
+    delete[] array;
 }
 
 const int N = 1000;
@@ -289,11 +289,11 @@ void TestDeterministicReduction () {
         ASSERT( body2.my_value == R, NULL );
 #if __TBB_LAMBDAS_PRESENT
         Type r = tbb::parallel_deterministic_reduce( range, Type(), 
-            [](const tbb::blocked_range<int>& r, Type value) -> Type {
+            [](const tbb::blocked_range<int>& br, Type value) -> Type {
                 Harness::ConcurrencyTracker ct;
-                for ( int i = r.begin(); i != r.end(); ++i ) {
+                for ( int ii = br.begin(); ii != br.end(); ++ii ) {
                     Op op;
-                    value = op(value, i);
+                    value = op(value, ii);
                 }
                 return value;
         },
diff --git a/src/test/test_parallel_scan.cpp b/src/test/test_parallel_scan.cpp
index 8d5daec..cd0d880 100644
--- a/src/test/test_parallel_scan.cpp
+++ b/src/test/test_parallel_scan.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_parallel_sort.cpp b/src/test/test_parallel_sort.cpp
index 886d8ac..709bb02 100644
--- a/src/test/test_parallel_sort.cpp
+++ b/src/test/test_parallel_sort.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_parallel_while.cpp b/src/test/test_parallel_while.cpp
index 2a31a4d..1fe5790 100644
--- a/src/test/test_parallel_while.cpp
+++ b/src/test/test_parallel_while.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_pipeline.cpp b/src/test/test_pipeline.cpp
index 01fb51d..974d490 100644
--- a/src/test/test_pipeline.cpp
+++ b/src/test/test_pipeline.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_pipeline_with_tbf.cpp b/src/test/test_pipeline_with_tbf.cpp
index 279b9fc..3e45cc3 100644
--- a/src/test/test_pipeline_with_tbf.cpp
+++ b/src/test/test_pipeline_with_tbf.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_priority_queue_node.cpp b/src/test/test_priority_queue_node.cpp
index 60f1833..999a965 100644
--- a/src/test/test_priority_queue_node.cpp
+++ b/src/test/test_priority_queue_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_queue_node.cpp b/src/test/test_queue_node.cpp
index 350bfb5..058232a 100644
--- a/src/test/test_queue_node.cpp
+++ b/src/test/test_queue_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -189,7 +189,7 @@ struct parallel_put_get : NoAssign {
 // Item can be reserved, released, consumed ( single serial receiver )
 //
 template< typename T >
-int test_reservation(int num_threads) {
+int test_reservation() {
     tbb::flow::graph g;
     T bogus_value(-1);
 
diff --git a/src/test/test_reader_writer_lock.cpp b/src/test/test_reader_writer_lock.cpp
index 6d682b6..bb5e002 100644
--- a/src/test/test_reader_writer_lock.cpp
+++ b/src/test/test_reader_writer_lock.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -91,7 +91,7 @@ struct StressRWLBody : NoAssign {
 #endif /* TBB_USE_EXCEPTIONS && !__TBB_THROW_ACROSS_MODULE_BOUNDARY_BROKEN */
             the_mutex.unlock();
             // test unscoped non-blocking write lock
-            if (the_mutex.try_lock()) { 
+            if (the_mutex.try_lock()) {
                 w_result += BusyWork(percentMax);
                 the_mutex.unlock();
             }
@@ -100,7 +100,7 @@ struct StressRWLBody : NoAssign {
             r_result += BusyWork(percentMax);
             the_mutex.unlock();
             // test unscoped non-blocking read lock
-            if(the_mutex.try_lock_read()) { 
+            if(the_mutex.try_lock_read()) {
                 r_result += BusyWork(percentMax);
                 the_mutex.unlock();
             }
@@ -113,7 +113,7 @@ struct StressRWLBody : NoAssign {
                 r_result += BusyWork(percentMax);
             }
         }
-        REMARK("%d reader %d writer iterations of busy work were completed.", r_result, w_result);
+        REMARK(" R%d/W%d", r_result, w_result); // reader/writer iterations of busy work completed
     }
 };
 
@@ -123,11 +123,8 @@ struct CorrectRWLScopedBody : NoAssign {
     CorrectRWLScopedBody(int nThread_) : nThread(nThread_) {}
 
     void operator()(const int /* threadID */ ) const {
-        bool is_reader;
-        
         for (int i=0; i<50; i++) {
-            if (i%5==0) is_reader = false; // 1 writer for every 5 readers
-            else is_reader = true;
+            const bool is_reader = i%5==0; // 1 writer for every 4 readers
 
             if (is_reader) {
                 tbb::reader_writer_lock::scoped_lock_read my_lock(the_mutex);
@@ -135,7 +132,7 @@ struct CorrectRWLScopedBody : NoAssign {
                 if (active_readers > 1) sim_readers = true;
                 ASSERT(active_writers==0, "Active writers in read-locked region.");
                 Harness::Sleep(10);
-                active_readers--; 
+                active_readers--;
             }
             else { // is writer
                 tbb::reader_writer_lock::scoped_lock my_lock(the_mutex);
@@ -155,11 +152,8 @@ struct CorrectRWLBody : NoAssign {
     CorrectRWLBody(int nThread_) : nThread(nThread_) {}
 
     void operator()(const int /* threadID */ ) const {
-        bool is_reader;
-        
         for (int i=0; i<50; i++) {
-            if (i%5==0) is_reader = false; // 1 writer for every 5 readers
-            else is_reader = true;
+            const bool is_reader = i%5==0; // 1 writer for every 4 readers
 
             if (is_reader) {
                 the_mutex.lock_read();
@@ -175,7 +169,7 @@ struct CorrectRWLBody : NoAssign {
             }
             Harness::Sleep(10);
             if (is_reader) {
-                active_readers--; 
+                active_readers--;
             }
             else { // is writer
                 active_writers--;
@@ -187,27 +181,28 @@ struct CorrectRWLBody : NoAssign {
 
 void TestReaderWriterLockOnNThreads(int nThreads) {
     // Stress-test all interfaces
-    for (int pc=0; pc<101; pc+=20) {
-        REMARK("\nTesting reader_writer_lock with %d threads, percent of MAX_WORK=%d", nThreads, pc);
+    for (int pc=0; pc<=100; pc+=20) {
+        REMARK("Testing with %d threads, percent of MAX_WORK=%d...", nThreads, pc);
         StressRWLBody myStressBody(nThreads, pc);
         NativeParallelFor(nThreads, myStressBody);
+        REMARK(" OK.\n");
     }
-    
-    // Test mutual exclusion in direct locking mode
+
+    REMARK("Testing with %d threads, direct/unscoped locking mode...", nThreads); // TODO: choose direct or unscoped?
     CorrectRWLBody myCorrectBody(nThreads);
     active_writers = active_readers = 0;
     sim_readers = false;
     NativeParallelFor(nThreads, myCorrectBody);
     ASSERT(sim_readers || nThreads<2, "There were no simultaneous readers.");
-    REMARK("Unscoped lock testing succeeded on %d threads.", nThreads);
+    REMARK(" OK.\n");
 
-    // Test mutual exclusionin scoped locking mode
+    REMARK("Testing with %d threads, scoped locking mode...", nThreads);
     CorrectRWLScopedBody myCorrectScopedBody(nThreads);
     active_writers = active_readers = 0;
     sim_readers = false;
     NativeParallelFor(nThreads, myCorrectScopedBody);
     ASSERT(sim_readers || nThreads<2, "There were no simultaneous readers.");
-    REMARK("Scoped lock testing succeeded on %d threads.", nThreads);
+    REMARK(" OK.\n");
 }
 
 void TestReaderWriterLock() {
diff --git a/src/test/test_runtime_loader.cpp b/src/test/test_runtime_loader.cpp
index 1c2b06b..8b1c61d 100644
--- a/src/test/test_runtime_loader.cpp
+++ b/src/test/test_runtime_loader.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_rwm_upgrade_downgrade.cpp b/src/test/test_rwm_upgrade_downgrade.cpp
index 14c31b5..4525fe1 100644
--- a/src/test/test_rwm_upgrade_downgrade.cpp
+++ b/src/test/test_rwm_upgrade_downgrade.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_semaphore.cpp b/src/test/test_semaphore.cpp
index d94be4f..5cb520b 100644
--- a/src/test/test_semaphore.cpp
+++ b/src/test/test_semaphore.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -39,7 +39,7 @@
 //   E. V()
 //
 
-#include "tbb/semaphore.h"
+#include "../tbb/semaphore.h"
 #include "tbb/atomic.h"
 #include "tbb/blocked_range.h"
 
@@ -124,8 +124,10 @@ void testSemaphore( int semInitCnt, int extraThreads ) {
     }
 }
 
-#include "tbb/semaphore.cpp"
-#include "tbb/dynamic_link.cpp"
+#include "../tbb/semaphore.cpp"
+#if _WIN32||_WIN64
+#include "../tbb/dynamic_link.cpp"
+#endif
 
 #define N_TIMES 1000
 
diff --git a/src/test/test_sequencer_node.cpp b/src/test/test_sequencer_node.cpp
index 2651157..8444d32 100644
--- a/src/test/test_sequencer_node.cpp
+++ b/src/test/test_sequencer_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_source_node.cpp b/src/test/test_source_node.cpp
index c0f0e3c..b9c0b1b 100644
--- a/src/test/test_source_node.cpp
+++ b/src/test/test_source_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_split_node.cpp b/src/test/test_split_node.cpp
index 6996ef9..e7853c6 100644
--- a/src/test/test_split_node.cpp
+++ b/src/test/test_split_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_std_thread.cpp b/src/test/test_std_thread.cpp
index 0af65f6..f8626c1 100644
--- a/src/test/test_std_thread.cpp
+++ b/src/test/test_std_thread.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_task.cpp b/src/test/test_task.cpp
index c951a6e..a3ee377 100644
--- a/src/test/test_task.cpp
+++ b/src/test/test_task.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -40,11 +40,11 @@ class UnboundedlyRecursiveOnUnboundedStealingTask : public tbb::task {
     typedef UnboundedlyRecursiveOnUnboundedStealingTask this_type;
 
     this_type *m_Parent;
-    const int m_Depth; 
+    const int m_Depth;
     volatile bool m_GoAhead;
 
     // Well, virtually unboundedly, for any practical purpose
-    static const int max_depth = 1000000; 
+    static const int max_depth = 1000000;
 
 public:
     UnboundedlyRecursiveOnUnboundedStealingTask( this_type *parent_ = NULL, int depth_ = max_depth )
@@ -55,12 +55,12 @@ public:
 
     /*override*/
     tbb::task* execute() {
-        // Using large padding array sppeds up reaching stealing limit
+        // Using large padding array speeds up reaching stealing limit
         const int paddingSize = 16 * 1024;
         volatile char padding[paddingSize];
         if( !m_Parent || (m_Depth > 0 &&  m_Parent->m_GoAhead) ) {
             if ( m_Parent ) {
-                // We are stolen, let our parent to start waiting for us
+                // We are stolen, let our parent start waiting for us
                 m_Parent->m_GoAhead = false;
             }
             tbb::task &t = *new( allocate_child() ) this_type(this, m_Depth - 1);
@@ -71,7 +71,7 @@ public:
                 ++padding[i % paddingSize];
                 __TBB_Yield();
             }
-            // If our child has not been stolen yet, then prohibit it siring ones 
+            // If our child has not been stolen yet, then prohibit it siring ones
             // of its own (when this thread executes it inside the next wait_for_all)
             m_GoAhead = false;
             wait_for_all();
@@ -84,7 +84,7 @@ tbb::atomic<int> Count;
 
 class RecursiveTask: public tbb::task {
     const int m_ChildCount;
-    const int m_Depth; 
+    const int m_Depth;
     //! Spawn tasks in list.  Exact method depends upon m_Depth&bit_mask.
     void SpawnList( tbb::task_list& list, int bit_mask ) {
         if( m_Depth&bit_mask ) {
@@ -126,10 +126,14 @@ static int Expected( int child_count, int depth ) {
 }
 
 void TestStealLimit( int nthread ) {
+#if __TBB_DEFINE_MIC
+    REMARK( "skipping steal limiting heuristics for %d threads\n", nthread );
+#else// !_TBB_DEFINE_MIC
     REMARK( "testing steal limiting heuristics for %d threads\n", nthread );
     tbb::task_scheduler_init init(nthread);
     tbb::task &t = *new( tbb::task::allocate_root() ) UnboundedlyRecursiveOnUnboundedStealingTask();
     tbb::task::spawn_root_and_wait(t);
+#endif// _TBB_DEFINE_MIC
 }
 
 //! Test task::spawn( task_list& )
@@ -152,13 +156,13 @@ void TestSpawnRootList( int nthread ) {
     for( int j=0; j<5; ++j )
         for( int k=0; k<10; ++k ) {
             Count = 0;
-            tbb::task_list list; 
+            tbb::task_list list;
             for( int i=0; i<k; ++i )
                 list.push_back( *new( tbb::task::allocate_root() ) RecursiveTask(j,4) );
             tbb::task::spawn_root_and_wait(list);
             int expected = k*Expected(j,4);
             ASSERT( Count==expected, NULL );
-        }    
+        }
 }
 
 //------------------------------------------------------------------------
@@ -180,18 +184,18 @@ void TestSafeContinuation( int nthread ) {
 tbb::atomic<int> TotalCount;
 
 struct AffinityTask: public tbb::task {
-    const affinity_id expected_affinity_id; 
+    const affinity_id expected_affinity_id;
     bool noted;
     /** Computing affinities is NOT supported by TBB, and may disappear in the future.
         It is done here for sake of unit testing. */
-    AffinityTask( int expected_affinity_id_ ) : 
-        expected_affinity_id(affinity_id(expected_affinity_id_)), 
-        noted(false) 
+    AffinityTask( int expected_affinity_id_ ) :
+        expected_affinity_id(affinity_id(expected_affinity_id_)),
+        noted(false)
     {
         set_affinity(expected_affinity_id);
-        ASSERT( 0u-expected_affinity_id>0u, "affinity_id not an unsigned integral type?" );  
+        ASSERT( 0u-expected_affinity_id>0u, "affinity_id not an unsigned integral type?" );
         ASSERT( affinity()==expected_affinity_id, NULL );
-    } 
+    }
     /*override*/ tbb::task* execute() {
         ++TotalCount;
         return NULL;
@@ -213,7 +217,7 @@ struct AffinityTask: public tbb::task {
 void TestAffinity( int nthread ) {
     TotalCount = 0;
     int n = tbb::task_scheduler_init::default_num_threads();
-    if( n>nthread ) 
+    if( n>nthread )
         n = nthread;
     tbb::task_scheduler_init init(n);
     tbb::empty_task* t = new( tbb::task::allocate_root() ) tbb::empty_task;
@@ -222,11 +226,11 @@ void TestAffinity( int nthread ) {
     // Set ref_count for n-1 children, plus 1 for the wait.
     t->set_ref_count(n);
     // Spawn n-1 affinitized children.
-    for( int i=1; i<n; ++i ) 
+    for( int i=1; i<n; ++i )
         tbb::task::spawn( *new(t->allocate_child()) AffinityTask(i) );
     if( n>1 ) {
         // Keep master from stealing
-        while( TotalCount!=n-1 ) 
+        while( TotalCount!=n-1 )
             __TBB_Yield();
     }
     // Wait for the children
@@ -254,16 +258,16 @@ struct NoteAffinityTask: public tbb::task {
     }
 };
 
-// This test checks one of the paths inside the scheduler by affinitizing the child task 
-// to non-existent thread so that it is proxied in the local task pool but not retrieved 
-// by another thread. 
+// This test checks one of the paths inside the scheduler by affinitizing the child task
+// to non-existent thread so that it is proxied in the local task pool but not retrieved
+// by another thread.
 // If no workers requested, the extra slot #2 is allocated for a worker thread to serve
 // "enqueued" tasks. In this test, it is used only for the affinity purpose.
 void TestNoteAffinityContext() {
     tbb::task_scheduler_init init(1);
     tbb::empty_task* t = new( tbb::task::allocate_root() ) tbb::empty_task;
     t->set_ref_count(2);
-    // This master in the absence of workers will have an affinity id of 1. 
+    // This master in the absence of workers will have an affinity id of 1.
     // So use another number to make the task get proxied.
     tbb::task::spawn( *new(t->allocate_child()) NoteAffinityTask(2) );
     t->wait_for_all();
@@ -287,7 +291,7 @@ struct ConstructionFailure {
     #pragma warning (disable: 4702)
 #endif
 
-//! Task that cannot be constructed.  
+//! Task that cannot be constructed.
 template<size_t N>
 struct UnconstructibleTask: public tbb::empty_task {
     char space[N];
@@ -347,14 +351,14 @@ void TestUnconstructibleTask() {
 
 //! Task with members of type T.
 /** The task recursively creates tasks. */
-template<typename T> 
+template<typename T>
 class TaskWithMember: public tbb::task {
     T x;
     T y;
     unsigned char count;
     /*override*/ tbb::task* execute() {
         x = y;
-        if( count>0 ) { 
+        if( count>0 ) {
             set_ref_count(2);
             tbb::task* t = new( allocate_child() ) TaskWithMember<T>(count-1);
             spawn_and_wait_for_all(*t);
@@ -369,7 +373,7 @@ public:
     #pragma warning (pop)
 #endif
 
-template<typename T> 
+template<typename T>
 void TestAlignmentOfOneClass() {
     typedef TaskWithMember<T> task_type;
     tbb::task* t = new( tbb::task::allocate_root() ) task_type(10);
@@ -410,7 +414,7 @@ struct RightFibTask: public tbb::task {
     task* execute() {
         *y = Fib(n-1);
         return 0;
-    } 
+    }
 };
 
 int Fib( int n ) {
@@ -418,7 +422,7 @@ int Fib( int n ) {
         return n;
     } else {
         // y actually does not need to be initialized.  It is initialized solely to suppress
-        // a gratuitous warning "potentially uninitialized local variable". 
+        // a gratuitous warning "potentially uninitialized local variable".
         int y=-1;
         tbb::task* root_task = new( tbb::task::allocate_root() ) tbb::empty_task;
         root_task->set_ref_count(2);
@@ -433,7 +437,7 @@ int Fib( int n ) {
 void TestLeftRecursion( int p ) {
     REMARK("testing non-spawned roots for %d threads\n",p);
     tbb::task_scheduler_init init(p);
-    int sum = 0; 
+    int sum = 0;
     for( int i=0; i<100; ++i )
         sum +=Fib(10);
     ASSERT( sum==5500, NULL );
@@ -449,9 +453,9 @@ class DagTask: public tbb::task {
     number_t sum_from_left, sum_from_above;
     void check_sum( number_t sum ) {
         number_t expected_sum = 1;
-        for( int k=i+1; k<=i+j; ++k ) 
+        for( int k=i+1; k<=i+j; ++k )
             expected_sum *= k;
-        for( int k=1; k<=j; ++k ) 
+        for( int k=1; k<=j; ++k )
             expected_sum /= k;
         ASSERT(sum==expected_sum, NULL);
     }
@@ -471,11 +475,11 @@ public:
         }
         if( DagTask* t = successor_to_below ) {
             t->sum_from_above = sum;
-            if( t->decrement_ref_count()==0 ) 
+            if( t->decrement_ref_count()==0 )
                 // Test using bypass to evaluate DAG
                 return t;
-        } 
-        return NULL;  
+        }
+        return NULL;
     }
     ~DagTask() {++destruction_count;}
     static tbb::atomic<int> execution_count;
@@ -492,10 +496,10 @@ void TestDag( int p ) {
     DagTask::destruction_count=0;
     const int n = 10;
     DagTask* a[n][n];
-    for( int i=0; i<n; ++i ) 
+    for( int i=0; i<n; ++i )
         for( int j=0; j<n; ++j )
             a[i][j] = new( tbb::task::allocate_root() ) DagTask(i,j);
-    for( int i=0; i<n; ++i ) 
+    for( int i=0; i<n; ++i )
         for( int j=0; j<n; ++j ) {
             a[i][j]->successor_to_below = i+1<n ? a[i+1][j] : NULL;
             a[i][j]->successor_to_right = j+1<n ? a[i][j+1] : NULL;
@@ -591,7 +595,7 @@ void TestUserThread( int p ) {
 }
 
 class TaskWithChildToSteal : public tbb::task {
-    const int m_Depth; 
+    const int m_Depth;
     volatile bool m_GoAhead;
 
 public:
diff --git a/src/test/test_task_assertions.cpp b/src/test/test_task_assertions.cpp
index a271682..7fb623e 100644
--- a/src/test/test_task_assertions.cpp
+++ b/src/test/test_task_assertions.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -32,8 +32,6 @@
 
 #undef HARNESS_USE_PROXY
 #include "harness.h"
-#undef __TBB_DYNAMIC_LOAD_ENABLED
-#include "harness_tbb_independence.h"
 
 int TestMain () {
     return Harness::Skipped;
diff --git a/src/test/test_task_auto_init.cpp b/src/test/test_task_auto_init.cpp
index 64e4635..13dbdd1 100644
--- a/src/test/test_task_auto_init.cpp
+++ b/src/test/test_task_auto_init.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -108,7 +108,7 @@ void TestWaitForAll () {
 typedef void (*TestFnPtr)();
 
 const TestFnPtr TestFuncsTable[] = {
-        TestTaskSelf, TestRootAllocation, TestChildAllocation, TestAdditionalChildAllocation, 
+        TestTaskSelf, TestRootAllocation, TestChildAllocation, TestAdditionalChildAllocation,
 #if __TBB_TASK_GROUP_CONTEXT
         TestTaskGroupContextCreation, TestRootAllocationWithContext,
 #endif /* __TBB_TASK_GROUP_CONTEXT */
@@ -117,7 +117,7 @@ const TestFnPtr TestFuncsTable[] = {
 const int NumTestFuncs = sizeof(TestFuncsTable) / sizeof(TestFnPtr);
 
 struct TestThreadBody : NoAssign, Harness::NoAfterlife {
-    // Each invocation of operator() happens in a fresh thread with zero-based ID 
+    // Each invocation of operator() happens in a fresh thread with zero-based ID
     // id, and checks a specific auto-initialization scenario.
     void operator() ( int id ) const {
         ASSERT( id >= 0 && id < NumTestFuncs, "Test diver: NativeParallelFor is used incorrectly" );
@@ -139,7 +139,7 @@ volatile bool FafStarted   = false,
               FafCanFinish = false,
               FafCompleted = false;
 
-//! This task is supposed to be executed during termination of an auto-initialized master thread 
+//! 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
@@ -177,9 +177,9 @@ struct DriverThreadBody : NoAssign, Harness::NoAfterlife {
             NativeParallelFor( NumTestFuncs, TestThreadBody() );
             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). 
+            // 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, generic_scheduler::cleanup_master() will assert.
             // The context for this task must be valid till the task completion.
 #if __TBB_TASK_GROUP_CONTEXT
diff --git a/src/test/test_task_enqueue.cpp b/src/test/test_task_enqueue.cpp
index 0e1a238..a0ff46e 100644
--- a/src/test/test_task_enqueue.cpp
+++ b/src/test/test_task_enqueue.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -181,81 +181,81 @@ static volatile bool CanStart;
 //! Custom user task interface
 class ITask {
 public: 
-	virtual ~ITask() {} 
-	virtual void Execute() = 0;
-	virtual void Release() { delete this; }
+    virtual ~ITask() {} 
+    virtual void Execute() = 0;
+    virtual void Release() { delete this; }
 };
 
 class TestTask : public ITask {
-	volatile bool *m_pDone;
+    volatile bool *m_pDone;
 public:
     TestTask ( volatile bool *pDone ) : m_pDone(pDone) {}
 
-	/* override */ void Execute() {
-		*m_pDone = true;
-	}
+    /* override */ void Execute() {
+        *m_pDone = true;
+    }
 };
 
 class CarrierTask : public tbb::task {
-	ITask* m_pTask;
+    ITask* m_pTask;
 public:
     CarrierTask(ITask* pTask) : m_pTask(pTask) {}
 
-	/*override*/ task* execute() {
-		m_pTask->Execute();
-		m_pTask->Release();
-		return NULL;
-	}
+    /*override*/ task* execute() {
+        m_pTask->Execute();
+        m_pTask->Release();
+        return NULL;
+    }
 };
 
 class SpawnerTask : public ITask {
-	ITask* m_taskToSpawn;
+    ITask* m_taskToSpawn;
 public:
-	SpawnerTask(ITask* job) : m_taskToSpawn(job) {}
+    SpawnerTask(ITask* job) : m_taskToSpawn(job) {}
 
-	void Execute() {
-		while ( !CanStart )
-		    __TBB_Yield();
-		tbb::task::enqueue( *new( tbb::task::allocate_root() ) CarrierTask(m_taskToSpawn) );
-	}
+    void Execute() {
+        while ( !CanStart )
+            __TBB_Yield();
+        tbb::task::enqueue( *new( tbb::task::allocate_root() ) CarrierTask(m_taskToSpawn) );
+    }
 };
 
 class EnqueuerBody {
 public:
     void operator() ( int id ) const {
-	    tbb::task_scheduler_init init(tbb::task_scheduler_init::default_num_threads() + 1);
+        tbb::task_scheduler_init init(tbb::task_scheduler_init::default_num_threads() + 1);
 
-	    SpawnerTask* pTask = new SpawnerTask( new TestTask(Finished + id) );
-	    tbb::task::enqueue( *new( tbb::task::allocate_root() ) CarrierTask(pTask) );
+        SpawnerTask* pTask = new SpawnerTask( new TestTask(Finished + id) );
+        tbb::task::enqueue( *new( tbb::task::allocate_root() ) CarrierTask(pTask) );
     }
 };
 
 //! Regression test for a bug that caused premature arena destruction
 void TestCascadedEnqueue () {
     REMARK("Testing cascaded enqueue\n");
-	tbb::task_scheduler_init init(tbb::task_scheduler_init::default_num_threads() + 1);
+    tbb::task_scheduler_init init(tbb::task_scheduler_init::default_num_threads() + 1);
 
     int minNumThreads = min(tbb::task_scheduler_init::default_num_threads(), MaxNumThreads) / 2;
-	int maxNumThreads = min(tbb::task_scheduler_init::default_num_threads() * 2, MaxNumThreads);
+    int maxNumThreads = min(tbb::task_scheduler_init::default_num_threads() * 2, MaxNumThreads);
 
-	for ( int numThreads = minNumThreads; numThreads <= maxNumThreads; ++numThreads ) {
-		for ( int i = 0; i < NumRepeats; ++i ) {
-			CanStart = false;
+    for ( int numThreads = minNumThreads; numThreads <= maxNumThreads; ++numThreads ) {
+        for ( int i = 0; i < NumRepeats; ++i ) {
+            CanStart = false;
             __TBB_Yield();
-			NativeParallelFor( numThreads, EnqueuerBody() );
-			CanStart = true;
+            NativeParallelFor( numThreads, EnqueuerBody() );
+            CanStart = true;
             int j = 0;
-			while ( j < numThreads ) {
+            while ( j < numThreads ) {
                 if ( Finished[j] )
                     ++j;
                 else
-    				__TBB_Yield();
-			}
+                    __TBB_Yield();
+            }
             for ( j = 0; j < numThreads; ++j )
                 Finished[j] = false;
             REMARK("%02d threads; Iteration %03d\r", numThreads, i);
-		}
-	}
+        }
+    }
     REMARK( "                                 \r" );
 }
 
@@ -270,11 +270,11 @@ public:
 class SharedRootBody {
     tbb::task *my_root;
 public:
-	SharedRootBody ( tbb::task *root ) : my_root(root) {}
+    SharedRootBody ( tbb::task *root ) : my_root(root) {}
 
-	void operator() ( int ) const {
-	    tbb::task::enqueue( *new( tbb::task::allocate_additional_child_of(*my_root) ) DummyTask );
-	}
+    void operator() ( int ) const {
+        tbb::task::enqueue( *new( tbb::task::allocate_additional_child_of(*my_root) ) DummyTask );
+    }
 };
 
 //! Test for enqueuing children of the same root from different master threads
diff --git a/src/test/test_task_group.cpp b/src/test/test_task_group.cpp
index 647feef..3896c67 100644
--- a/src/test/test_task_group.cpp
+++ b/src/test/test_task_group.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_task_leaks.cpp b/src/test/test_task_leaks.cpp
index 5a7c629..4aa4f30 100644
--- a/src/test/test_task_leaks.cpp
+++ b/src/test/test_task_leaks.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -44,8 +44,6 @@
 
 #undef HARNESS_USE_PROXY
 #include "harness.h"
-#undef __TBB_DYNAMIC_LOAD_ENABLED
-#include "harness_tbb_independence.h"
 
 int TestMain () {
     return Harness::Skipped;
@@ -100,7 +98,7 @@ class TaskGenerator: public tbb::task {
     const int my_child_count;
     int my_depth;
 public:
-    TaskGenerator(int child_count, int depth) : my_child_count(child_count), my_depth(depth) {
+    TaskGenerator(int child_count, int d) : my_child_count(child_count), my_depth(d) {
         ASSERT(my_child_count>1, "The TaskGenerator should produce at least two children");
     }
     /*override*/ tbb::task* execute() {
diff --git a/src/test/test_task_priority.cpp b/src/test/test_task_priority.cpp
index 9050ca2..6c98ea0 100644
--- a/src/test/test_task_priority.cpp
+++ b/src/test/test_task_priority.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -73,6 +73,13 @@ enum Options {
     FlogEncloser = Flog | 4
 };
 
+const char *PriorityName(tbb::priority_t p) {
+    if( p == tbb::priority_high ) return "high";
+    if( p == tbb::priority_normal ) return "normal";
+    if( p == tbb::priority_low ) return "low";
+    return "bad";
+}
+
 void PrepareGlobals ( int numMasters ) {
     ASSERT( !g_NumMasters && !g_LeavesExecuted, NULL );
     g_NumMasters = numMasters;
@@ -228,7 +235,7 @@ public:
                 tbb::task::enqueue( *new(tbb::task::allocate_root() ) tbb::empty_task, id == 0 ? Low : High );
                 Harness::Sleep(count);
 #if __TBB_ipf
-                // Increased sleep periods are required on systems with unfair hyperthreading (Itanium 2)
+                // Increased sleep periods are required on systems with unfair hyperthreading (Itanium(R) 2 processor)
                 count += 10;
 #endif
             }
@@ -392,9 +399,57 @@ void TestPriorityAssertions () {
 #endif /* TRY_BAD_EXPR_ENABLED && __TBB_TASK_PRIORITY */
 }
 
+#if __TBB_TASK_PRIORITY
+tbb::atomic<tbb::priority_t> g_order;
+tbb::atomic<bool> g_order_established;
+class OrderedTask : public tbb::task {
+    tbb::priority_t my_priority;
+public:
+    OrderedTask(tbb::priority_t p) : my_priority(p) {}
+    tbb::task* execute() {
+        tbb::priority_t prev = g_order.fetch_and_store(my_priority);
+        if( my_priority != prev) {
+            REMARK("prev:%s --> new:%s\n", PriorityName(prev), PriorityName(my_priority));
+            // TODO: improve the test for concurrent workers
+            if(!g_order_established) {
+                // initial transition path allowed low->[normal]->high
+                if(my_priority == tbb::priority_high)
+                    g_order_established = true;
+                else ASSERT(my_priority == tbb::priority_normal && prev == tbb::priority_low, NULL);
+            } else { //transition path allowed high->normal->low
+                if(prev == tbb::priority_high) ASSERT( my_priority == tbb::priority_normal, "previous priority is high - bad order");
+                else if(prev == tbb::priority_normal) ASSERT( my_priority == tbb::priority_low, "previous priority is normal - bad order");
+                else ASSERT(!g_order_established, "transition from low priority but not during initialization");
+            }
+        }
+        EmulateWork(0);
+        return NULL;
+    }
+    static void start(int i) {
+        tbb::priority_t p = i%3==0? tbb::priority_low : (i%3==1? tbb::priority_normal : tbb::priority_high );
+        OrderedTask &t = *new(tbb::task::allocate_root()) OrderedTask(p);
+        tbb::task::enqueue(t, p);
+    }
+};
+
+//Look for discussion of the issue at http://software.intel.com/en-us/forums/showthread.php?t=102159
+void TestEnqueueOrder () {
+    REMARK("Testing order of enqueued tasks\n");
+    tbb::task_scheduler_init init(1); // to simplify transition checks only one extra worker for enqueue
+    g_order = tbb::priority_low;
+    g_order_established = false;
+    for( int i = 0; i < 1000; i++)
+        OrderedTask::start(i);
+    while( g_order == tbb::priority_low ) __TBB_Yield();
+    while( g_order != tbb::priority_low ) __TBB_Yield();
+}
+#endif /* __TBB_TASK_PRIORITY */
+
 int TestMain () {
 #if !__TBB_TASK_PRIORITY
     REMARK( "Priorities disabled: Running as just yet another task scheduler test\n" );
+#else
+    TestEnqueueOrder();
 #endif /* __TBB_TASK_PRIORITY */
     TestPriorityAssertions();
     TestSimplePriorityOps(tbb::priority_low);
diff --git a/src/test/test_task_scheduler_init.cpp b/src/test/test_task_scheduler_init.cpp
index ff99ef6..57bf015 100644
--- a/src/test/test_task_scheduler_init.cpp
+++ b/src/test/test_task_scheduler_init.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_task_scheduler_observer.cpp b/src/test/test_task_scheduler_observer.cpp
index 3d8894c..16e2170 100644
--- a/src/test/test_task_scheduler_observer.cpp
+++ b/src/test/test_task_scheduler_observer.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_task_steal_limit.cpp b/src/test/test_task_steal_limit.cpp
new file mode 100644
index 0000000..5cb22c6
--- /dev/null
+++ b/src/test/test_task_steal_limit.cpp
@@ -0,0 +1,81 @@
+/*
+    Copyright 2005-2012 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 "tbb/task.h"
+#include "harness.h"
+#include "tbb/task_scheduler_init.h"
+
+using tbb::task;
+
+#if __TBB_ipf
+    const unsigned StackSize = 1024*1024*6;
+#else /*  */
+    const unsigned StackSize = 1024*1024*3;
+#endif
+
+// GCC and ICC on Linux store TLS data in the stack space. This test makes sure
+// that the stealing limiting heuristic used by the task scheduler does not
+// switch off stealing when a large amount of TLS data is reserved.
+#if _MSC_VER
+__declspec(thread) 
+#elif __linux__ || ((__MINGW32__ || __MINGW64__) && __TBB_GCC_VERSION >= 40500)
+__thread
+#endif
+    char map2[1024*1024*2];
+
+class TestTask : public task {
+public:
+    static volatile int completed;
+    task* execute() {
+        completed = 1;
+        return NULL;
+    };
+};
+
+volatile int TestTask::completed = 0;
+
+void TestStealingIsEnabled () {
+    tbb::task_scheduler_init init(2, StackSize);
+    task &r = *new( task::allocate_root() ) tbb::empty_task;
+    task &t = *new( r.allocate_child() ) TestTask;
+    r.set_ref_count(2);
+    r.spawn(t);
+    int count = 0;
+    while ( !TestTask::completed && ++count < 6 )
+        Harness::Sleep(1000);
+    ASSERT( TestTask::completed, "Stealing is disabled or the machine is heavily oversubscribed" );
+    r.wait_for_all();
+    task::destroy(r);
+}
+
+int TestMain () {
+    if ( tbb::task_scheduler_init::default_num_threads() == 1 )
+        return Harness::Skipped;
+    TestStealingIsEnabled();
+    return Harness::Done;
+}
diff --git a/src/test/test_tbb_condition_variable.cpp b/src/test/test_tbb_condition_variable.cpp
index 1818d11..b2e8a89 100644
--- a/src/test/test_tbb_condition_variable.cpp
+++ b/src/test/test_tbb_condition_variable.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -26,6 +26,15 @@
     the GNU General Public License.
 */
 
+#include "tbb/tbb_config.h"
+
+#if !TBB_IMPLEMENT_CPP0X
+#include "harness.h"
+
+int TestMain() {
+    return Harness::Skipped;
+}
+#else
 #include "test_condition_variable.h"
 
 int TestMain() {
@@ -33,3 +42,4 @@ int TestMain() {
     DoCondVarTest<tbb::mutex,tbb::recursive_mutex>();
     return Harness::Done;
 }
+#endif
diff --git a/src/test/test_tbb_header.cpp b/src/test/test_tbb_header.cpp
index 727610d..38794dd 100644
--- a/src/test/test_tbb_header.cpp
+++ b/src/test/test_tbb_header.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -34,6 +34,10 @@
 **/
 
 #include "tbb/tbb.h"
+#if _MSC_VER
+#pragma warning (disable : 4503)      // decorated name length exceeded, name was truncated
+#endif
+#include "tbb/flow_graph.h"
 
 static volatile size_t g_sink;
 
@@ -41,6 +45,9 @@ static volatile size_t g_sink;
 #define TestTypeDefinitionPresence2(TypeStart, TypeEnd) g_sink = sizeof(tbb::TypeStart,TypeEnd);
 #define TestFuncDefinitionPresence(Fn, Args, ReturnType) { ReturnType (*pfn)Args = &tbb::Fn; (void)pfn; }
 
+//! Utility template function to prevent "unused" warnings by various compilers.
+template<typename T> void squelch_unused_warning( const T& ) {}
+
 struct Body {
     void operator() () const {}
 };
@@ -116,7 +123,6 @@ void TestExceptionClassesExports () {
 }
 #endif /* !__TBB_TEST_SECONDARY */
 
-
 #if __TBB_TEST_SECONDARY
 /* This mode is used to produce a secondary object file that is linked with 
    the main one in order to detect "multiple definition" linker error.
@@ -138,6 +144,25 @@ int TestMain ()
     TestTypeDefinitionPresence( combinable<int> );
     TestTypeDefinitionPresence( concurrent_vector<int> );
     TestTypeDefinitionPresence( enumerable_thread_specific<int> );
+    TestTypeDefinitionPresence( flow::graph );
+    TestTypeDefinitionPresence( flow::source_node<int> );
+    TestTypeDefinitionPresence2( flow::function_node<int, int> );
+    typedef std::tuple<int, int> intpair;
+    TestTypeDefinitionPresence2( flow::multifunction_node<int, intpair> );
+    TestTypeDefinitionPresence( flow::split_node<intpair> );
+    TestTypeDefinitionPresence( flow::continue_node<int> );
+    TestTypeDefinitionPresence( flow::overwrite_node<int> );
+    TestTypeDefinitionPresence( flow::write_once_node<int> );
+    TestTypeDefinitionPresence( flow::broadcast_node<int> );
+    TestTypeDefinitionPresence( flow::buffer_node<int> );
+    TestTypeDefinitionPresence( flow::queue_node<int> );
+    TestTypeDefinitionPresence( flow::sequencer_node<int> );
+    TestTypeDefinitionPresence( flow::priority_queue_node<int> );
+    TestTypeDefinitionPresence( flow::limiter_node<int> );
+    typedef tbb::flow::interface6::internal::graph_policy_namespace::graph_buffer_policy join_policy;
+    const join_policy a = tbb::flow::interface6::internal::graph_policy_namespace::queueing;
+    TestTypeDefinitionPresence2( flow::join_node< intpair, a > );
+    squelch_unused_warning(a);
     TestTypeDefinitionPresence( mutex );
     TestTypeDefinitionPresence( null_mutex );
     TestTypeDefinitionPresence( null_rw_mutex );
diff --git a/src/test/test_tbb_thread.cpp b/src/test/test_tbb_thread.cpp
index 3f9b4fb..d5e6076 100644
--- a/src/test/test_tbb_thread.cpp
+++ b/src/test/test_tbb_thread.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_tbb_version.cpp b/src/test/test_tbb_version.cpp
index 4fabf3c..298f17d 100644
--- a/src/test/test_tbb_version.cpp
+++ b/src/test/test_tbb_version.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -61,7 +61,8 @@
 
 enum string_required {
     required,
-    not_required
+    optional,
+    optional_multiple
     };
 
 typedef std::pair <std::string, string_required> string_pair;
@@ -73,22 +74,38 @@ const char stdout_stream[] = "version_test.out";
 
 HARNESS_EXPORT
 int main(int argc, char *argv[] ) {
+    char psBuffer[512];
 /* We first introduced runtime version identification in 3014 */
-#if TBB_INTERFACE_VERSION>=3014 
+#if TBB_INTERFACE_VERSION>=3014
     // For now, just test that run-time TBB version matches the compile-time version,
     // since otherwise the subsequent test of "TBB: INTERFACE VERSION" string will fail anyway.
     // We need something more clever in future.
-    ASSERT(tbb::TBB_runtime_interface_version()==TBB_INTERFACE_VERSION,
-           "Running with the library of different version than the test was compiled against");
+    if ( tbb::TBB_runtime_interface_version()!=TBB_INTERFACE_VERSION ){
+        snprintf( psBuffer,
+                  512,
+                  "%s %s %d %s %d.",
+                  "Running with the library of different version than the test was compiled against.",
+                  "Expected",
+                  TBB_INTERFACE_VERSION,
+                  "- got",
+                  tbb::TBB_runtime_interface_version()
+                  );
+        ASSERT( tbb::TBB_runtime_interface_version()==TBB_INTERFACE_VERSION, psBuffer );
+    }
 #endif
+#if __TBB_MIC
+    // Skip the test in offload mode.
+    // Run the test in 'true' native mode (because 'system()' works in 'true' native mode).
+    (argc, argv);
+    REPORT("skip\n");
+#else //__TBB_MIC
 #if __TBB_MPI_INTEROP
     REPORT("skip\n");
 #else
     __TBB_TRY {
         FILE *stream_out;
-        FILE *stream_err;   
-        char psBuffer[512];
-        
+        FILE *stream_err;
+
         if(argc>1 && argv[1][0] == '@' ) {
             stream_err = freopen( stderr_stream, "w", stderr );
             if( stream_err == NULL ){
@@ -177,30 +194,32 @@ int main(int argc, char *argv[] ) {
             exit( 1 );
         }
         
-        int skip_line = 0;
-        
         while( !feof( stream_err ) ) {
             if( fgets( psBuffer, 512, stream_err ) != NULL ){
+                if (strstr( psBuffer, "TBBmalloc: " )) {
+                    // TBB allocator might or might not be here, ignore it
+                    continue;
+                }
+                bool match_found = false;
                 do{
                     if ( strings_iterator == strings_vector.end() ){
                         REPORT( "Error: version string dictionary ended prematurely.\n" );
                         REPORT( "No match for: \t%s", psBuffer );
                         exit( 1 );
                     }
-                    if ( strstr( psBuffer, strings_iterator->first.c_str() ) == NULL ){
+                    if ( strstr( psBuffer, strings_iterator->first.c_str() ) == NULL ){ // mismatch
                         if( strings_iterator->second == required ){
                             REPORT( "Error: version strings do not match.\n" );
                             REPORT( "Expected \"%s\" not found in:\n\t%s", strings_iterator->first.c_str(), psBuffer );
                             exit( 1 );
-                        }else{
-                            //Do we need to print in case there is no non-required string?
-                            skip_line = 1;
                         }
+                        ++strings_iterator;
                     }else{
-                           skip_line = 0;
+                        match_found = true;
+                        if( strings_iterator->second != optional_multiple )
+                            ++strings_iterator;
                     }
-                    if ( strings_iterator != strings_vector.end() ) strings_iterator ++;
-                }while( skip_line );
+                }while( !match_found );
             }
         }
         fclose( stream_err );
@@ -209,6 +228,7 @@ int main(int argc, char *argv[] ) {
     }
     REPORT("done\n");
 #endif //__TBB_MPI_INTEROP
+#endif //__TBB_MIC
     return 0;
 }
 
@@ -217,7 +237,7 @@ int main(int argc, char *argv[] ) {
 void initialize_strings_vector(std::vector <string_pair>* vector)
 {
     vector->push_back(string_pair("TBB: VERSION\t\t4.0", required));          // check TBB_VERSION
-    vector->push_back(string_pair("TBB: INTERFACE VERSION\t6000", required)); // check TBB_INTERFACE_VERSION
+    vector->push_back(string_pair("TBB: INTERFACE VERSION\t6005", 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));
@@ -229,15 +249,15 @@ void initialize_strings_vector(std::vector <string_pair>* vector)
 #elif __APPLE__
     vector->push_back(string_pair("TBB: BUILD_KERNEL", required));
     vector->push_back(string_pair("TBB: BUILD_GCC", required));
-    vector->push_back(string_pair("TBB: BUILD_COMPILER", not_required)); //if( getenv("COMPILER_VERSION") )
+    vector->push_back(string_pair("TBB: BUILD_COMPILER", optional)); //if( getenv("COMPILER_VERSION") )
 #elif __sun
     vector->push_back(string_pair("TBB: BUILD_KERNEL", required));
     vector->push_back(string_pair("TBB: BUILD_SUNCC", required));
-    vector->push_back(string_pair("TBB: BUILD_COMPILER", not_required)); //if( getenv("COMPILER_VERSION") )
+    vector->push_back(string_pair("TBB: BUILD_COMPILER", optional)); //if( getenv("COMPILER_VERSION") )
 #else //We use version_info_linux.sh for unsupported OSes
     vector->push_back(string_pair("TBB: BUILD_KERNEL", required));
     vector->push_back(string_pair("TBB: BUILD_GCC", required));
-    vector->push_back(string_pair("TBB: BUILD_COMPILER", not_required)); //if( getenv("COMPILER_VERSION") )
+    vector->push_back(string_pair("TBB: BUILD_COMPILER", optional)); //if( getenv("COMPILER_VERSION") )
     vector->push_back(string_pair("TBB: BUILD_GLIBC", required));
     vector->push_back(string_pair("TBB: BUILD_LD", required));
 #endif
@@ -249,11 +269,15 @@ void initialize_strings_vector(std::vector <string_pair>* vector)
     vector->push_back(string_pair("TBB: TBB_PREVIEW_BINARY", required));
 #endif
     vector->push_back(string_pair("TBB: DO_ITT_NOTIFY", required));
-    vector->push_back(string_pair("TBB: ITT", not_required)); //#ifdef DO_ITT_NOTIFY
+    vector->push_back(string_pair("TBB: ITT", optional)); //#ifdef DO_ITT_NOTIFY
     vector->push_back(string_pair("TBB: ALLOCATOR", required));
-    vector->push_back(string_pair("TBB: RML", not_required));
-    vector->push_back(string_pair("TBB: Intel(R) RML library built:", not_required));
-    vector->push_back(string_pair("TBB: Intel(R) RML library version:", not_required));
+#if _WIN32||_WIN64
+    vector->push_back(string_pair("TBB: Processor groups", required));
+    vector->push_back(string_pair("TBB: ----- Group", optional_multiple));
+#endif
+    vector->push_back(string_pair("TBB: RML", optional));
+    vector->push_back(string_pair("TBB: Intel(R) RML library built:", optional));
+    vector->push_back(string_pair("TBB: Intel(R) RML library version:", optional));
     vector->push_back(string_pair("TBB: Tools support", required));
     return;
 }
diff --git a/src/test/test_thread.h b/src/test/test_thread.h
index 58109b4..ef0ee61 100644
--- a/src/test/test_thread.h
+++ b/src/test/test_thread.h
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_tick_count.cpp b/src/test/test_tick_count.cpp
index 17f9813..4a07f89 100644
--- a/src/test/test_tick_count.cpp
+++ b/src/test/test_tick_count.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
diff --git a/src/test/test_tuple.cpp b/src/test/test_tuple.cpp
index 5708937..03d7fd1 100644
--- a/src/test/test_tuple.cpp
+++ b/src/test/test_tuple.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -82,7 +82,7 @@ void RunTests() {
     typedef tuple<int,int,int> int_tuple_type;
     typedef tuple<int,non_trivial,int> non_trivial_tuple_type;
     typedef tuple<double,std::string,char> stringy_tuple_type;
-    tuple_type1 tup1(42,3.14159,2.0f);
+    const tuple_type1 tup1(42,3.14159,2.0f);
     int_tuple_type int_tup(4, 5, 6);
     non_trivial_tuple_type nti;
     stringy_tuple_type stv;
diff --git a/src/test/test_write_once_node.cpp b/src/test/test_write_once_node.cpp
index f618560..86206e3 100644
--- a/src/test/test_write_once_node.cpp
+++ b/src/test/test_write_once_node.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 
@@ -36,7 +36,8 @@
 
 template< typename R >
 void simple_read_write_tests() {
-    tbb::flow::write_once_node<R> n;
+    tbb::flow::graph g;
+    tbb::flow::write_once_node<R> n(g);
 
     for ( int t = 0; t < T; ++t ) {
         R v0(0);
@@ -120,7 +121,8 @@ public:
 
 template< typename R >
 void parallel_read_write_tests() {
-    tbb::flow::write_once_node<R> n;
+    tbb::flow::graph g;
+    tbb::flow::write_once_node<R> n(g);
     //Create a vector of identical nodes
     std::vector< tbb::flow::write_once_node<R> > wo_vec(2, n);
 
diff --git a/src/test/test_yield.cpp b/src/test/test_yield.cpp
index d1273cf..65aee4b 100644
--- a/src/test/test_yield.cpp
+++ b/src/test/test_yield.cpp
@@ -1,5 +1,5 @@
 /*
-    Copyright 2005-2011 Intel Corporation.  All Rights Reserved.
+    Copyright 2005-2012 Intel Corporation.  All Rights Reserved.
 
     This file is part of Threading Building Blocks.
 

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